{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Ashwin Gopalsamy Library",
  "home_page_url": "https://ashwingopalsamy.in/library/",
  "feed_url": "https://ashwingopalsamy.in/library/feed.json",
  "description": "Books, watching, notes, and links",
  "icon": "https://ashwingopalsamy.in/icon-512.png",
  "favicon": "https://ashwingopalsamy.in/favicon.ico",
  "authors": [
    {
      "name": "Ashwin Gopalsamy",
      "url": "https://ashwingopalsamy.in/",
      "avatar": "https://ashwingopalsamy.in/portrait.webp"
    }
  ],
  "items": [
    {
      "id": "https://ashwingopalsamy.in/blog/emudhra-ca-key-compromise-go-developers/",
      "url": "https://ashwingopalsamy.in/blog/emudhra-ca-key-compromise-go-developers/",
      "title": "Lets talk about eMudhra Certificate Vulnerability",
      "content_text": "Eight eMudhra CA keys were guessable, one was just 4. Who's exposed, how an attack works, and what fintech and Go teams must do (CVE-2026-111943).",
      "date_published": "2026-10-21T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "date_modified": "2026-10-21T00:00:00.000Z",
      "content_html": "<p>A CA’s private key should be a random number up to 116 digits long. One of eMudhra’s was 4.</p>\n<ul>\n<li><strong>What happened:</strong> eMudhra, an Indian company that vouches for websites (a CA), made eight secret keys that anyone can guess in under a second.</li>\n<li><strong>Who is affected:</strong> people on an updated browser are safe. The risk is in old Go programs, servers with an old list of trusted CAs, and devices that never update.</li>\n<li><strong>What to do:</strong> if you ship Go, rebuild and redeploy with Go 1.27.3 or 1.26.10, which block the eight keys (CVE-2026-111943). Then update the CA list in your container images.</li>\n</ul>\n<h2 id=\"what-is-a-ca-and-why-should-you-care\">What is a CA, and why should you care?<a class=\"h-anchor\" href=\"#what-is-a-ca-and-why-should-you-care\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p><strong>What it is.</strong> A certificate authority (CA) is a notary for the internet. It checks that a website really belongs to, say, your bank, and then stamps a certificate for it. A certificate is a digital ID that a website shows your phone or computer.</p>\n<p><strong>Where it is used.</strong> Behind the padlock in every browser, inside UPI and net-banking apps, on the GST portal and in software updates. It also works between servers you never see: a payment gateway calling a bank API, a KYC check, or your own service calling a partner.</p>\n<p><strong>Who uses it.</strong> Browsers, phones, servers and any program that opens a secure HTTPS connection.</p>\n<p><strong>When.</strong> On every connection, in a fraction of a second, before any data moves.</p>\n<p><strong>How trust works.</strong> A root CA is kept locked away and offline. It signs an intermediate CA, the stamp that is used every day. The intermediate signs your bank’s certificate.</p>\n<p>Your phone or server keeps a list of root CAs it trusts. On Linux servers, that list comes from a package called <code>ca-certificates</code>.</p>\n<p>When you connect, your app follows the chain back to a root on that list. If every signature checks out, it trusts the site.</p>\n<p><strong>The secret key.</strong> Every stamp has a secret key (also called a private key), a very large number that only the CA should know. Whoever knows it can stamp a certificate for any website, and every app that trusts the chain will accept it. So the number must be random and impossible to guess.</p>\n<figure class=\"fig\" id=\"fig-trust-basic\" data-fig=\"trust-basic\"><p class=\"fig__title\">Your device trusts your bank because the chain ends at a root on its list.</p><div class=\"fig__art\" data-layouts style=\"container: fig / inline-size\"><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"wide\" viewBox=\"0 0 708 344\" role=\"img\" aria-labelledby=\"trust-basic-t trust-basic-d\" style=\"aspect-ratio: 708 / 344\"><title id=\"trust-basic-t\">Your device trusts your bank because the chain ends at a root on its list.</title><desc id=\"trust-basic-d\">A locked-away root CA signs the everyday stamp, which signs your bank’s certificate, and your device trusts it because that root is on its list.</desc><style>:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .f14{font-size:14px}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .w{font-weight:550}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .ink{fill:var(--ink,#151617)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .cell{fill:var(--wash,rgba(21,22,23,0.045))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .sk{stroke:var(--ink,#151617);stroke-width:1.5}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .dash{stroke-dasharray:2 2}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.axis,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.edge,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.bad,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.hl{fill:none}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .sp{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .b1,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .b5{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .a1,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .a2,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .cn{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .sp{opacity:0;transform:scale(.96)}}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .b6{opacity:0;transform:translateX(8px)}}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .b1{animation:trust-basic-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .a1{animation:trust-basic-fade var(--dur-tint,110ms) linear both;animation-delay:var(--dur-enter,240ms)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .sp{animation:trust-basic-grow var(--dur-spring-soft,189ms) var(--ease-spring-soft,linear(0, 0.027, 0.0936, 0.1824, 0.2812, 0.3814, 0.4774, 0.566, 0.6452, 0.7144, 0.7736, 0.8233, 0.8645, 0.8979, 0.9247, 0.9459, 0.9623, 0.9749, 0.9842, 0.9911, 1)) both;animation-delay:calc(var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .a2{animation:trust-basic-fade var(--dur-tint,110ms) linear both;animation-delay:calc(var(--dur-enter,240ms) + var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .b5{animation:trust-basic-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--dur-enter,240ms) + 2*var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .b6{animation:trust-basic-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(2*var(--dur-enter,240ms) + 2*var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .cn{animation:trust-basic-fade var(--dur-tint,110ms) linear both;animation-delay:calc(3*var(--dur-enter,240ms) + 2*var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}@keyframes trust-basic-rise{from{opacity:0;transform:translateY(4px)}}@keyframes trust-basic-fade{from{opacity:0}}@keyframes trust-basic-grow{from{opacity:0;transform:scale(.96)}}@keyframes trust-basic-slide{from{opacity:0;transform:translateX(8px)}}@media (prefers-reduced-motion:reduce){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) *{animation:none!important}}</style><g class=\"b1\" data-beat=\"1\"><rect x=\"16\" y=\"24\" width=\"432\" height=\"80\" rx=\"8\" class=\"cv edge node\" data-mark=\"root\"/><text x=\"40\" y=\"56\" class=\"s f14 w ink\">Root CA</text><text x=\"40\" y=\"84\" class=\"s f14 ghost\">Kept offline, locked away</text><rect x=\"404\" y=\"56\" width=\"24\" height=\"20\" rx=\"4\" class=\"edge\" fill=\"none\"/><path d=\"M408 56V52a8 8 0 0 1 16 0V56\" class=\"edge\"/></g><g class=\"a1\" data-beat=\"2\"><path d=\"M232 104V136\" class=\"edge\"/><path d=\"M229 132L232 136L235 132\" class=\"edge\"/></g><g class=\"sp\" data-beat=\"3\"><rect x=\"16\" y=\"136\" width=\"432\" height=\"80\" rx=\"8\" class=\"cv sk node\" data-mark=\"stamp\"/><text x=\"40\" y=\"168\" class=\"s f14 w ink\">Intermediate CA</text><text x=\"40\" y=\"196\" class=\"s f14 ghost\">The stamp, used every day</text></g><g class=\"a2\" data-beat=\"4\"><path d=\"M232 216V248\" class=\"edge\"/><path d=\"M229 244L232 248L235 244\" class=\"edge\"/></g><g class=\"b5\" data-beat=\"5\"><rect x=\"16\" y=\"248\" width=\"432\" height=\"80\" rx=\"8\" class=\"cv edge node\" data-mark=\"bank\"/><text x=\"40\" y=\"280\" class=\"s f14 w ink\">Your bank's certificate</text><text x=\"40\" y=\"308\" class=\"s f14 ghost\">What your app checks</text></g><g class=\"b6\" data-beat=\"6\"><rect x=\"496\" y=\"24\" width=\"196\" height=\"88\" rx=\"8\" class=\"cell edge node\" data-mark=\"list\"/><text x=\"516\" y=\"52\" class=\"s f14 ink\">Your phone or server</text><text x=\"516\" y=\"72\" class=\"s f14 ink\">keeps a list of roots</text><text x=\"516\" y=\"92\" class=\"s f14 ink\">it trusts</text></g><g class=\"cn\" data-beat=\"7\"><path d=\"M496 64H448\" class=\"edge dash\"/><path d=\"M452 61L448 64L452 67\" class=\"edge\"/></g></svg><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"compact\" viewBox=\"0 0 352 456\" role=\"img\" aria-labelledby=\"trust-basic-tc trust-basic-dc\" style=\"aspect-ratio: 352 / 456\"><title id=\"trust-basic-tc\">Your device trusts your bank because the chain ends at a root on its list.</title><desc id=\"trust-basic-dc\">A locked-away root CA signs the everyday stamp, which signs your bank’s certificate, and your device trusts it because that root is on its list.</desc><style>:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .f14{font-size:14px}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .w{font-weight:550}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .ink{fill:var(--ink,#151617)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .cell{fill:var(--wash,rgba(21,22,23,0.045))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .sk{stroke:var(--ink,#151617);stroke-width:1.5}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .dash{stroke-dasharray:2 2}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.axis,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.edge,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.bad,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) path.hl{fill:none}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) .sp{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .b1,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .b5{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .a1,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .a2,:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .cn{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .sp{opacity:0;transform:scale(.96)}}@media (prefers-reduced-motion:no-preference){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed]:not([data-play]) .b6{opacity:0;transform:translateX(8px)}}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .b1{animation:trust-basic-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .a1{animation:trust-basic-fade var(--dur-tint,110ms) linear both;animation-delay:var(--dur-enter,240ms)}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .sp{animation:trust-basic-grow var(--dur-spring-soft,189ms) var(--ease-spring-soft,linear(0, 0.027, 0.0936, 0.1824, 0.2812, 0.3814, 0.4774, 0.566, 0.6452, 0.7144, 0.7736, 0.8233, 0.8645, 0.8979, 0.9247, 0.9459, 0.9623, 0.9749, 0.9842, 0.9911, 1)) both;animation-delay:calc(var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .a2{animation:trust-basic-fade var(--dur-tint,110ms) linear both;animation-delay:calc(var(--dur-enter,240ms) + var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .b5{animation:trust-basic-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--dur-enter,240ms) + 2*var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .b6{animation:trust-basic-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(2*var(--dur-enter,240ms) + 2*var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"])[data-armed][data-play] .cn{animation:trust-basic-fade var(--dur-tint,110ms) linear both;animation-delay:calc(3*var(--dur-enter,240ms) + 2*var(--dur-tint,110ms) + var(--dur-spring-soft,189ms))}@keyframes trust-basic-rise{from{opacity:0;transform:translateY(4px)}}@keyframes trust-basic-fade{from{opacity:0}}@keyframes trust-basic-grow{from{opacity:0;transform:scale(.96)}}@keyframes trust-basic-slide{from{opacity:0;transform:translateX(8px)}}@media (prefers-reduced-motion:reduce){:is(#fig-trust-basic,[data-fig-clone=\"trust-basic\"]) *{animation:none!important}}</style><g class=\"b1\" data-beat=\"1\"><rect x=\"16\" y=\"16\" width=\"320\" height=\"80\" rx=\"8\" class=\"cv edge node\" data-mark=\"root\"/><text x=\"40\" y=\"48\" class=\"s f14 w ink\">Root CA</text><text x=\"40\" y=\"76\" class=\"s f14 ghost\">Kept offline, locked away</text><rect x=\"292\" y=\"40\" width=\"24\" height=\"20\" rx=\"4\" class=\"edge\" fill=\"none\"/><path d=\"M296 40V36a8 8 0 0 1 16 0V40\" class=\"edge\"/></g><g class=\"a1\" data-beat=\"2\"><path d=\"M176 96V128\" class=\"edge\"/><path d=\"M173 124L176 128L179 124\" class=\"edge\"/></g><g class=\"sp\" data-beat=\"3\"><rect x=\"16\" y=\"128\" width=\"320\" height=\"80\" rx=\"8\" class=\"cv sk node\" data-mark=\"stamp\"/><text x=\"40\" y=\"160\" class=\"s f14 w ink\">Intermediate CA</text><text x=\"40\" y=\"188\" class=\"s f14 ghost\">The stamp, used every day</text></g><g class=\"a2\" data-beat=\"4\"><path d=\"M176 208V240\" class=\"edge\"/><path d=\"M173 236L176 240L179 236\" class=\"edge\"/></g><g class=\"b5\" data-beat=\"5\"><rect x=\"16\" y=\"240\" width=\"320\" height=\"80\" rx=\"8\" class=\"cv edge node\" data-mark=\"bank\"/><text x=\"40\" y=\"272\" class=\"s f14 w ink\">Your bank's certificate</text><text x=\"40\" y=\"300\" class=\"s f14 ghost\">What your app checks</text></g><g class=\"b6\" data-beat=\"6\"><rect x=\"16\" y=\"368\" width=\"320\" height=\"72\" rx=\"8\" class=\"cell edge node\" data-mark=\"list\"/><text x=\"40\" y=\"396\" class=\"s f14 ink\">Your phone or server keeps a list</text><text x=\"40\" y=\"416\" class=\"s f14 ink\">of roots it trusts</text></g><g class=\"cn\" data-beat=\"7\"><path d=\"M336 404H344V56H336\" class=\"edge dash\"/><path d=\"M340 53L336 56L340 59\" class=\"edge\"/></g></svg></div><figcaption class=\"fig__cap\">Each CA signs the one below it, and your device checks the chain against its own list of roots.</figcaption></figure>\n\n<h2 id=\"what-went-wrong-at-emudhra\">What went wrong at eMudhra?<a class=\"h-anchor\" href=\"#what-went-wrong-at-emudhra\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>eMudhra is a CA based in Bengaluru and listed on the NSE and BSE. Its root CAs are called emSign, and Firefox has trusted them since 2019.</p>\n<p>In April 2025, eMudhra made eight new intermediate CAs, so eight new stamps. Six sign website certificates and two sign software.</p>\n<p>Each secret key should have been a random number up to 116 digits long. All eight were between 1 and 255. One was 4.</p>\n<p>That made them easy to find. The public half of each key is printed in its certificate, which anyone can download.</p>\n<p>You try 1, 2, 3 and so on. For each guess, you work out its public half and compare it with the one in the certificate. It takes at most 255 tries, which is under a second on a laptop.</p>\n<p>Guessing a properly random key, even at a trillion tries a second, would take far longer than the age of the universe.</p>\n<figure class=\"fig\" id=\"fig-d4-keyspace\" data-fig=\"d4-keyspace\"><p class=\"fig__title\">Every key eMudhra used fits in this small square.</p><div class=\"fig__art\" data-layouts style=\"container: fig / inline-size\"><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"wide\" viewBox=\"0 0 708 496\" role=\"img\" aria-labelledby=\"d4-keyspace-t d4-keyspace-d\" style=\"aspect-ratio: 708 / 496\"><title id=\"d4-keyspace-t\">Every key eMudhra used fits in this small square.</title><desc id=\"d4-keyspace-d\">Every possible key from 0 to 255 fits in a small grid, and trying 1, 2, 3 and 4 finds eMudhra’s key 4 on the fourth guess.</desc><style>:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .f14{font-size:14px}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .w{font-weight:550}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .mid{text-anchor:middle}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .ink{fill:var(--ink,#151617)}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .cell{fill:var(--wash,rgba(21,22,23,0.045))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .key{fill:var(--acc-violet,#7844f0)}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .tr{fill:var(--edge-strong,rgba(21,22,23,0.2))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .axis{stroke:var(--edge-strong,rgba(21,22,23,0.2));stroke-width:.5}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .hl{stroke:var(--ink,#151617);stroke-opacity:.45;stroke-width:.5}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .cur{fill:none;stroke:var(--ink,#151617);stroke-width:1.5}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.axis,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.edge,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.bad,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.hl{fill:none}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) rect[data-d]{transition:fill var(--dur-tint,110ms) linear,stroke var(--dur-tint,110ms) linear}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"1\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"2\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"3\"]{fill:var(--edge-strong,rgba(21,22,23,0.2))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"4\"]{stroke:var(--ink,#151617);stroke-width:1}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .pop,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .cur{transform-box:fill-box;transform-origin:center}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .walk{transform:translateX(60px)}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .r{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .lab,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .lg,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .cl,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .sc,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .cur{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .pop{opacity:0;transform:scale(.5)}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"1\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"2\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"3\"]{fill:var(--wash,rgba(21,22,23,0.045))}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"4\"]{stroke:transparent}}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .r{animation:d4-keyspace-row var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--i)*var(--dur-stagger,16ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .lab{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .lg{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(16*var(--dur-stagger,16ms) + var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .pop{animation:d4-keyspace-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(16*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--i,0)*var(--dur-stagger,16ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .walk{animation:d4-keyspace-walk calc(3*var(--dur-enter,240ms)) steps(3,jump-end) both;animation-delay:calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .cur{animation:d4-keyspace-fade var(--dur-tint,110ms) linear both,d4-keyspace-pulse var(--dur-spring-snap,247ms) var(--ease-spring-snap,linear(0, 0.0565, 0.1858, 0.3432, 0.5003, 0.6409, 0.7577, 0.849, 0.9164, 0.9632, 0.9936, 1.0114, 1.0204, 1.0234, 1.0227, 1.0199, 1.0163, 1.0126, 1.0092, 1.0063, 1)) both;animation-delay:calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)),calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"1\"]{animation:d4-keyspace-tried var(--dur-tint,110ms) linear both;animation-delay:calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 1*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"2\"]{animation:d4-keyspace-tried var(--dur-tint,110ms) linear both;animation-delay:calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 2*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"3\"]{animation:d4-keyspace-tried var(--dur-tint,110ms) linear both;animation-delay:calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"4\"]{animation:d4-keyspace-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both,d4-keyspace-match var(--dur-tint,110ms) linear both;animation-delay:calc(16*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--i,0)*var(--dur-stagger,16ms)),calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .cl{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms)) + var(--dur-spring-snap,247ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .sc{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms)) + var(--dur-spring-snap,247ms) + var(--dur-enter,240ms))}@keyframes d4-keyspace-row{from{opacity:0;transform:translateY(4px)}}@keyframes d4-keyspace-fade{from{opacity:0}}@keyframes d4-keyspace-pop{from{opacity:0;transform:scale(.5)}}@keyframes d4-keyspace-walk{from{transform:translateX(0)}to{transform:translateX(60px)}}@keyframes d4-keyspace-pulse{from{transform:scale(1.25)}}@keyframes d4-keyspace-tried{from{fill:var(--wash,rgba(21,22,23,0.045))}}@keyframes d4-keyspace-match{from{stroke:transparent}}@media (prefers-reduced-motion:reduce){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) *{animation:none!important}}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) rect[data-state=\"tried\"]{fill:var(--edge-strong,rgba(21,22,23,0.2))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) rect[data-state=\"match\"]{stroke:var(--ink,#151617);stroke-width:1}</style><defs><pattern id=\"d4-keyspace-hatch\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\"><path d=\"M0 0V4\" class=\"hl\"/></pattern></defs><g class=\"lab\" data-beat=\"1\"><text x=\"24\" y=\"72\" class=\"m f14 ghost mid\">0</text><text x=\"324\" y=\"420\" class=\"m f14 ghost mid\">255</text></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 0\"><rect x=\"16\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" class=\"axis\" fill=\"url(#d4-keyspace-hatch)\" data-d=\"0\" data-mark=\"zero\"/><rect x=\"36\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"1\"/><rect x=\"56\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"2\"/><rect x=\"76\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"3\"/><rect x=\"96\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 0\" data-d=\"4\" data-mark=\"ov-tls-g3c\"/><rect x=\"116\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"5\"/><rect x=\"136\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"6\"/><rect x=\"156\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"7\"/><rect x=\"176\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"8\"/><rect x=\"196\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"9\"/><rect x=\"216\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"10\"/><rect x=\"236\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"11\"/><rect x=\"256\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"12\"/><rect x=\"276\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"13\"/><rect x=\"296\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"14\"/><rect x=\"316\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"15\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 1\"><rect x=\"16\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"16\"/><rect x=\"36\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"17\"/><rect x=\"56\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"18\"/><rect x=\"76\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"19\"/><rect x=\"96\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"20\"/><rect x=\"116\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"21\"/><rect x=\"136\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"22\"/><rect x=\"156\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"23\"/><rect x=\"176\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"24\"/><rect x=\"196\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"25\"/><rect x=\"216\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"26\"/><rect x=\"236\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"27\"/><rect x=\"256\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"28\"/><rect x=\"276\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"29\"/><rect x=\"296\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"30\"/><rect x=\"316\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"31\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 2\"><rect x=\"16\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"32\"/><rect x=\"36\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"33\"/><rect x=\"56\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"34\"/><rect x=\"76\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"35\"/><rect x=\"96\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"36\"/><rect x=\"116\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"37\"/><rect x=\"136\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"38\"/><rect x=\"156\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"39\"/><rect x=\"176\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"40\"/><rect x=\"196\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"41\"/><rect x=\"216\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"42\"/><rect x=\"236\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"43\"/><rect x=\"256\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"44\"/><rect x=\"276\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"45\"/><rect x=\"296\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"46\"/><rect x=\"316\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"47\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 3\"><rect x=\"16\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"48\"/><rect x=\"36\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"49\"/><rect x=\"56\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"50\"/><rect x=\"76\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"51\"/><rect x=\"96\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"52\"/><rect x=\"116\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"53\"/><rect x=\"136\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"54\"/><rect x=\"156\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"55\"/><rect x=\"176\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 1\" data-d=\"56\" data-mark=\"ev-tls-g3c\"/><rect x=\"196\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"57\"/><rect x=\"216\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"58\"/><rect x=\"236\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"59\"/><rect x=\"256\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"60\"/><rect x=\"276\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"61\"/><rect x=\"296\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"62\"/><rect x=\"316\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"63\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 4\"><rect x=\"16\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"64\"/><rect x=\"36\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"65\"/><rect x=\"56\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 2\" data-d=\"66\" data-mark=\"ov-cs-g3b\"/><rect x=\"76\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"67\"/><rect x=\"96\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"68\"/><rect x=\"116\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"69\"/><rect x=\"136\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"70\"/><rect x=\"156\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"71\"/><rect x=\"176\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"72\"/><rect x=\"196\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"73\"/><rect x=\"216\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"74\"/><rect x=\"236\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"75\"/><rect x=\"256\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"76\"/><rect x=\"276\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"77\"/><rect x=\"296\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"78\"/><rect x=\"316\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"79\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 5\"><rect x=\"16\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"80\"/><rect x=\"36\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"81\"/><rect x=\"56\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"82\"/><rect x=\"76\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"83\"/><rect x=\"96\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"84\"/><rect x=\"116\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"85\"/><rect x=\"136\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"86\"/><rect x=\"156\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"87\"/><rect x=\"176\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"88\"/><rect x=\"196\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"89\"/><rect x=\"216\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"90\"/><rect x=\"236\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"91\"/><rect x=\"256\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"92\"/><rect x=\"276\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"93\"/><rect x=\"296\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"94\"/><rect x=\"316\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"95\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 6\"><rect x=\"16\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"96\"/><rect x=\"36\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"97\"/><rect x=\"56\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"98\"/><rect x=\"76\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"99\"/><rect x=\"96\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"100\"/><rect x=\"116\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"101\"/><rect x=\"136\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"102\"/><rect x=\"156\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"103\"/><rect x=\"176\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"104\"/><rect x=\"196\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"105\"/><rect x=\"216\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"106\"/><rect x=\"236\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"107\"/><rect x=\"256\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"108\"/><rect x=\"276\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"109\"/><rect x=\"296\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"110\"/><rect x=\"316\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"111\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 7\"><rect x=\"16\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"112\"/><rect x=\"36\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"113\"/><rect x=\"56\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"114\"/><rect x=\"76\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 3\" data-d=\"115\" data-mark=\"ev-tls-g3b\"/><rect x=\"96\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"116\"/><rect x=\"116\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"117\"/><rect x=\"136\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"118\"/><rect x=\"156\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"119\"/><rect x=\"176\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"120\"/><rect x=\"196\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"121\"/><rect x=\"216\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"122\"/><rect x=\"236\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"123\"/><rect x=\"256\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"124\"/><rect x=\"276\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"125\"/><rect x=\"296\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"126\"/><rect x=\"316\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"127\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 8\"><rect x=\"16\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"128\"/><rect x=\"36\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"129\"/><rect x=\"56\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"130\"/><rect x=\"76\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"131\"/><rect x=\"96\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"132\"/><rect x=\"116\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"133\"/><rect x=\"136\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"134\"/><rect x=\"156\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"135\"/><rect x=\"176\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"136\"/><rect x=\"196\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"137\"/><rect x=\"216\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"138\"/><rect x=\"236\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"139\"/><rect x=\"256\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"140\"/><rect x=\"276\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"141\"/><rect x=\"296\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"142\"/><rect x=\"316\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"143\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 9\"><rect x=\"16\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"144\"/><rect x=\"36\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"145\"/><rect x=\"56\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"146\"/><rect x=\"76\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"147\"/><rect x=\"96\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"148\"/><rect x=\"116\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"149\"/><rect x=\"136\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"150\"/><rect x=\"156\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"151\"/><rect x=\"176\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"152\"/><rect x=\"196\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"153\"/><rect x=\"216\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"154\"/><rect x=\"236\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 4\" data-d=\"155\" data-mark=\"ov-tls-g3b\"/><rect x=\"256\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 5\" data-d=\"156\" data-mark=\"dv-tls-g3b\"/><rect x=\"276\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"157\"/><rect x=\"296\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"158\"/><rect x=\"316\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"159\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 10\"><rect x=\"16\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"160\"/><rect x=\"36\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"161\"/><rect x=\"56\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"162\"/><rect x=\"76\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"163\"/><rect x=\"96\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"164\"/><rect x=\"116\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"165\"/><rect x=\"136\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"166\"/><rect x=\"156\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"167\"/><rect x=\"176\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"168\"/><rect x=\"196\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"169\"/><rect x=\"216\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"170\"/><rect x=\"236\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"171\"/><rect x=\"256\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"172\"/><rect x=\"276\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"173\"/><rect x=\"296\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"174\"/><rect x=\"316\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"175\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 11\"><rect x=\"16\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"176\"/><rect x=\"36\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"177\"/><rect x=\"56\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"178\"/><rect x=\"76\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"179\"/><rect x=\"96\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"180\"/><rect x=\"116\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"181\"/><rect x=\"136\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"182\"/><rect x=\"156\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"183\"/><rect x=\"176\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"184\"/><rect x=\"196\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"185\"/><rect x=\"216\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"186\"/><rect x=\"236\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"187\"/><rect x=\"256\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"188\"/><rect x=\"276\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"189\"/><rect x=\"296\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"190\"/><rect x=\"316\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"191\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 12\"><rect x=\"16\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"192\"/><rect x=\"36\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"193\"/><rect x=\"56\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"194\"/><rect x=\"76\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"195\"/><rect x=\"96\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"196\"/><rect x=\"116\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"197\"/><rect x=\"136\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"198\"/><rect x=\"156\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"199\"/><rect x=\"176\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"200\"/><rect x=\"196\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"201\"/><rect x=\"216\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"202\"/><rect x=\"236\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"203\"/><rect x=\"256\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"204\"/><rect x=\"276\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"205\"/><rect x=\"296\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"206\"/><rect x=\"316\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"207\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 13\"><rect x=\"16\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"208\"/><rect x=\"36\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"209\"/><rect x=\"56\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"210\"/><rect x=\"76\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"211\"/><rect x=\"96\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"212\"/><rect x=\"116\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"213\"/><rect x=\"136\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"214\"/><rect x=\"156\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"215\"/><rect x=\"176\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"216\"/><rect x=\"196\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"217\"/><rect x=\"216\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"218\"/><rect x=\"236\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"219\"/><rect x=\"256\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"220\"/><rect x=\"276\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"221\"/><rect x=\"296\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"222\"/><rect x=\"316\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"223\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 14\"><rect x=\"16\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"224\"/><rect x=\"36\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"225\"/><rect x=\"56\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"226\"/><rect x=\"76\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"227\"/><rect x=\"96\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"228\"/><rect x=\"116\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"229\"/><rect x=\"136\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 6\" data-d=\"230\" data-mark=\"dv-tls-g3c\"/><rect x=\"156\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"231\"/><rect x=\"176\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"232\"/><rect x=\"196\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"233\"/><rect x=\"216\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"234\"/><rect x=\"236\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"235\"/><rect x=\"256\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"236\"/><rect x=\"276\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 7\" data-d=\"237\" data-mark=\"ov-cs-g3c\"/><rect x=\"296\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"238\"/><rect x=\"316\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"239\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 15\"><rect x=\"16\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"240\"/><rect x=\"36\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"241\"/><rect x=\"56\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"242\"/><rect x=\"76\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"243\"/><rect x=\"96\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"244\"/><rect x=\"116\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"245\"/><rect x=\"136\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"246\"/><rect x=\"156\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"247\"/><rect x=\"176\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"248\"/><rect x=\"196\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"249\"/><rect x=\"216\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"250\"/><rect x=\"236\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"251\"/><rect x=\"256\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"252\"/><rect x=\"276\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"253\"/><rect x=\"296\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"254\"/><rect x=\"316\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"255\"/></g><g class=\"walk\" data-mark=\"cursor\"><rect x=\"32\" y=\"76\" width=\"24\" height=\"24\" rx=\"4\" class=\"cur\"/></g><g class=\"lg\" data-beat=\"2\"><rect x=\"372\" y=\"84\" width=\"16\" height=\"16\" rx=\"2\" class=\"key\"/><text x=\"396\" y=\"96\" class=\"s f14 ink\">eMudhra's eight keys</text><rect x=\"372\" y=\"116\" width=\"16\" height=\"16\" rx=\"2\" class=\"tr\"/><text x=\"396\" y=\"128\" class=\"s f14 ink\">Tried and wrong</text><rect x=\"372\" y=\"148\" width=\"16\" height=\"16\" rx=\"2\" class=\"axis\" fill=\"url(#d4-keyspace-hatch)\"/><text x=\"396\" y=\"160\" class=\"s f14 ghost\">0 is not a valid key</text></g><g class=\"cl\" data-mark=\"found\" data-beat=\"5\"><path d=\"M104 76V44H116\" class=\"edge\"/><text x=\"120\" y=\"48\"><tspan class=\"s f14 ink\">Found on guess </tspan><tspan class=\"m f14 w key\">4</tspan></text></g><g class=\"sc\" data-mark=\"scale\" data-beat=\"6\"><text x=\"16\" y=\"468\"><tspan class=\"s f14 ink\">A random key: a </tspan><tspan class=\"m f14 ink\">116</tspan><tspan class=\"s f14 ink\">-digit number. eMudhra's: </tspan><tspan class=\"m f14 w key\">4</tspan><tspan class=\"s f14 ink\">.</tspan></text></g></svg><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"compact\" viewBox=\"0 0 352 612\" role=\"img\" aria-labelledby=\"d4-keyspace-tc d4-keyspace-dc\" style=\"aspect-ratio: 352 / 612\"><title id=\"d4-keyspace-tc\">Every key eMudhra used fits in this small square.</title><desc id=\"d4-keyspace-dc\">Every possible key from 0 to 255 fits in a small grid, and trying 1, 2, 3 and 4 finds eMudhra’s key 4 on the fourth guess.</desc><style>:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .f14{font-size:14px}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .w{font-weight:550}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .mid{text-anchor:middle}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .ink{fill:var(--ink,#151617)}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .cell{fill:var(--wash,rgba(21,22,23,0.045))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .key{fill:var(--acc-violet,#7844f0)}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .tr{fill:var(--edge-strong,rgba(21,22,23,0.2))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .axis{stroke:var(--edge-strong,rgba(21,22,23,0.2));stroke-width:.5}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .hl{stroke:var(--ink,#151617);stroke-opacity:.45;stroke-width:.5}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .cur{fill:none;stroke:var(--ink,#151617);stroke-width:1.5}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.axis,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.edge,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.bad,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) path.hl{fill:none}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) rect[data-d]{transition:fill var(--dur-tint,110ms) linear,stroke var(--dur-tint,110ms) linear}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"1\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"2\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"3\"]{fill:var(--edge-strong,rgba(21,22,23,0.2))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]):not([data-live]) rect[data-d=\"4\"]{stroke:var(--ink,#151617);stroke-width:1}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .pop,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .cur{transform-box:fill-box;transform-origin:center}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) .walk{transform:translateX(60px)}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .r{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .lab,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .lg,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .cl,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .sc,:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .cur{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]) .pop{opacity:0;transform:scale(.5)}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"1\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"2\"],:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"3\"]{fill:var(--wash,rgba(21,22,23,0.045))}}@media (prefers-reduced-motion:no-preference){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed]:not([data-play]):not([data-live]) rect[data-d=\"4\"]{stroke:transparent}}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .r{animation:d4-keyspace-row var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--i)*var(--dur-stagger,16ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .lab{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .lg{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(16*var(--dur-stagger,16ms) + var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play] .pop{animation:d4-keyspace-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(16*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--i,0)*var(--dur-stagger,16ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .walk{animation:d4-keyspace-walk calc(3*var(--dur-enter,240ms)) steps(3,jump-end) both;animation-delay:calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .cur{animation:d4-keyspace-fade var(--dur-tint,110ms) linear both,d4-keyspace-pulse var(--dur-spring-snap,247ms) var(--ease-spring-snap,linear(0, 0.0565, 0.1858, 0.3432, 0.5003, 0.6409, 0.7577, 0.849, 0.9164, 0.9632, 0.9936, 1.0114, 1.0204, 1.0234, 1.0227, 1.0199, 1.0163, 1.0126, 1.0092, 1.0063, 1)) both;animation-delay:calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)),calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"1\"]{animation:d4-keyspace-tried var(--dur-tint,110ms) linear both;animation-delay:calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 1*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"2\"]{animation:d4-keyspace-tried var(--dur-tint,110ms) linear both;animation-delay:calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 2*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"3\"]{animation:d4-keyspace-tried var(--dur-tint,110ms) linear both;animation-delay:calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) rect[data-d=\"4\"]{animation:d4-keyspace-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both,d4-keyspace-match var(--dur-tint,110ms) linear both;animation-delay:calc(16*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--i,0)*var(--dur-stagger,16ms)),calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .cl{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms)) + var(--dur-spring-snap,247ms))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"])[data-armed][data-play]:not([data-live]) .sc{animation:d4-keyspace-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(calc(24*var(--dur-stagger,16ms) + var(--dur-enter,240ms) + var(--dur-spring-pop,313ms)) + 3*var(--dur-enter,240ms)) + var(--dur-spring-snap,247ms) + var(--dur-enter,240ms))}@keyframes d4-keyspace-row{from{opacity:0;transform:translateY(4px)}}@keyframes d4-keyspace-fade{from{opacity:0}}@keyframes d4-keyspace-pop{from{opacity:0;transform:scale(.5)}}@keyframes d4-keyspace-walk{from{transform:translateX(0)}to{transform:translateX(60px)}}@keyframes d4-keyspace-pulse{from{transform:scale(1.25)}}@keyframes d4-keyspace-tried{from{fill:var(--wash,rgba(21,22,23,0.045))}}@keyframes d4-keyspace-match{from{stroke:transparent}}@media (prefers-reduced-motion:reduce){:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) *{animation:none!important}}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) rect[data-state=\"tried\"]{fill:var(--edge-strong,rgba(21,22,23,0.2))}:is(#fig-d4-keyspace,[data-fig-clone=\"d4-keyspace\"]) rect[data-state=\"match\"]{stroke:var(--ink,#151617);stroke-width:1}</style><defs><pattern id=\"d4-keyspace-hatch-c\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\"><path d=\"M0 0V4\" class=\"hl\"/></pattern></defs><g class=\"lab\" data-beat=\"1\"><text x=\"24\" y=\"72\" class=\"m f14 ghost mid\">0</text><text x=\"324\" y=\"420\" class=\"m f14 ghost mid\">255</text></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 0\"><rect x=\"16\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" class=\"axis\" fill=\"url(#d4-keyspace-hatch-c)\" data-d=\"0\" data-mark=\"zero\"/><rect x=\"36\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"1\"/><rect x=\"56\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"2\"/><rect x=\"76\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"3\"/><rect x=\"96\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 0\" data-d=\"4\" data-mark=\"ov-tls-g3c\"/><rect x=\"116\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"5\"/><rect x=\"136\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"6\"/><rect x=\"156\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"7\"/><rect x=\"176\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"8\"/><rect x=\"196\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"9\"/><rect x=\"216\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"10\"/><rect x=\"236\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"11\"/><rect x=\"256\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"12\"/><rect x=\"276\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"13\"/><rect x=\"296\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"14\"/><rect x=\"316\" y=\"80\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"15\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 1\"><rect x=\"16\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"16\"/><rect x=\"36\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"17\"/><rect x=\"56\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"18\"/><rect x=\"76\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"19\"/><rect x=\"96\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"20\"/><rect x=\"116\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"21\"/><rect x=\"136\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"22\"/><rect x=\"156\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"23\"/><rect x=\"176\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"24\"/><rect x=\"196\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"25\"/><rect x=\"216\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"26\"/><rect x=\"236\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"27\"/><rect x=\"256\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"28\"/><rect x=\"276\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"29\"/><rect x=\"296\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"30\"/><rect x=\"316\" y=\"100\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"31\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 2\"><rect x=\"16\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"32\"/><rect x=\"36\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"33\"/><rect x=\"56\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"34\"/><rect x=\"76\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"35\"/><rect x=\"96\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"36\"/><rect x=\"116\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"37\"/><rect x=\"136\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"38\"/><rect x=\"156\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"39\"/><rect x=\"176\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"40\"/><rect x=\"196\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"41\"/><rect x=\"216\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"42\"/><rect x=\"236\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"43\"/><rect x=\"256\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"44\"/><rect x=\"276\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"45\"/><rect x=\"296\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"46\"/><rect x=\"316\" y=\"120\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"47\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 3\"><rect x=\"16\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"48\"/><rect x=\"36\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"49\"/><rect x=\"56\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"50\"/><rect x=\"76\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"51\"/><rect x=\"96\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"52\"/><rect x=\"116\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"53\"/><rect x=\"136\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"54\"/><rect x=\"156\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"55\"/><rect x=\"176\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 1\" data-d=\"56\" data-mark=\"ev-tls-g3c\"/><rect x=\"196\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"57\"/><rect x=\"216\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"58\"/><rect x=\"236\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"59\"/><rect x=\"256\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"60\"/><rect x=\"276\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"61\"/><rect x=\"296\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"62\"/><rect x=\"316\" y=\"140\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"63\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 4\"><rect x=\"16\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"64\"/><rect x=\"36\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"65\"/><rect x=\"56\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 2\" data-d=\"66\" data-mark=\"ov-cs-g3b\"/><rect x=\"76\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"67\"/><rect x=\"96\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"68\"/><rect x=\"116\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"69\"/><rect x=\"136\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"70\"/><rect x=\"156\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"71\"/><rect x=\"176\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"72\"/><rect x=\"196\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"73\"/><rect x=\"216\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"74\"/><rect x=\"236\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"75\"/><rect x=\"256\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"76\"/><rect x=\"276\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"77\"/><rect x=\"296\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"78\"/><rect x=\"316\" y=\"160\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"79\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 5\"><rect x=\"16\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"80\"/><rect x=\"36\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"81\"/><rect x=\"56\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"82\"/><rect x=\"76\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"83\"/><rect x=\"96\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"84\"/><rect x=\"116\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"85\"/><rect x=\"136\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"86\"/><rect x=\"156\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"87\"/><rect x=\"176\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"88\"/><rect x=\"196\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"89\"/><rect x=\"216\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"90\"/><rect x=\"236\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"91\"/><rect x=\"256\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"92\"/><rect x=\"276\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"93\"/><rect x=\"296\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"94\"/><rect x=\"316\" y=\"180\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"95\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 6\"><rect x=\"16\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"96\"/><rect x=\"36\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"97\"/><rect x=\"56\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"98\"/><rect x=\"76\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"99\"/><rect x=\"96\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"100\"/><rect x=\"116\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"101\"/><rect x=\"136\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"102\"/><rect x=\"156\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"103\"/><rect x=\"176\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"104\"/><rect x=\"196\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"105\"/><rect x=\"216\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"106\"/><rect x=\"236\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"107\"/><rect x=\"256\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"108\"/><rect x=\"276\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"109\"/><rect x=\"296\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"110\"/><rect x=\"316\" y=\"200\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"111\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 7\"><rect x=\"16\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"112\"/><rect x=\"36\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"113\"/><rect x=\"56\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"114\"/><rect x=\"76\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 3\" data-d=\"115\" data-mark=\"ev-tls-g3b\"/><rect x=\"96\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"116\"/><rect x=\"116\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"117\"/><rect x=\"136\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"118\"/><rect x=\"156\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"119\"/><rect x=\"176\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"120\"/><rect x=\"196\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"121\"/><rect x=\"216\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"122\"/><rect x=\"236\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"123\"/><rect x=\"256\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"124\"/><rect x=\"276\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"125\"/><rect x=\"296\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"126\"/><rect x=\"316\" y=\"220\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"127\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 8\"><rect x=\"16\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"128\"/><rect x=\"36\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"129\"/><rect x=\"56\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"130\"/><rect x=\"76\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"131\"/><rect x=\"96\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"132\"/><rect x=\"116\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"133\"/><rect x=\"136\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"134\"/><rect x=\"156\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"135\"/><rect x=\"176\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"136\"/><rect x=\"196\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"137\"/><rect x=\"216\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"138\"/><rect x=\"236\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"139\"/><rect x=\"256\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"140\"/><rect x=\"276\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"141\"/><rect x=\"296\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"142\"/><rect x=\"316\" y=\"240\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"143\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 9\"><rect x=\"16\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"144\"/><rect x=\"36\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"145\"/><rect x=\"56\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"146\"/><rect x=\"76\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"147\"/><rect x=\"96\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"148\"/><rect x=\"116\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"149\"/><rect x=\"136\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"150\"/><rect x=\"156\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"151\"/><rect x=\"176\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"152\"/><rect x=\"196\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"153\"/><rect x=\"216\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"154\"/><rect x=\"236\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 4\" data-d=\"155\" data-mark=\"ov-tls-g3b\"/><rect x=\"256\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 5\" data-d=\"156\" data-mark=\"dv-tls-g3b\"/><rect x=\"276\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"157\"/><rect x=\"296\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"158\"/><rect x=\"316\" y=\"260\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"159\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 10\"><rect x=\"16\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"160\"/><rect x=\"36\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"161\"/><rect x=\"56\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"162\"/><rect x=\"76\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"163\"/><rect x=\"96\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"164\"/><rect x=\"116\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"165\"/><rect x=\"136\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"166\"/><rect x=\"156\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"167\"/><rect x=\"176\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"168\"/><rect x=\"196\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"169\"/><rect x=\"216\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"170\"/><rect x=\"236\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"171\"/><rect x=\"256\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"172\"/><rect x=\"276\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"173\"/><rect x=\"296\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"174\"/><rect x=\"316\" y=\"280\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"175\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 11\"><rect x=\"16\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"176\"/><rect x=\"36\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"177\"/><rect x=\"56\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"178\"/><rect x=\"76\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"179\"/><rect x=\"96\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"180\"/><rect x=\"116\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"181\"/><rect x=\"136\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"182\"/><rect x=\"156\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"183\"/><rect x=\"176\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"184\"/><rect x=\"196\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"185\"/><rect x=\"216\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"186\"/><rect x=\"236\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"187\"/><rect x=\"256\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"188\"/><rect x=\"276\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"189\"/><rect x=\"296\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"190\"/><rect x=\"316\" y=\"300\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"191\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 12\"><rect x=\"16\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"192\"/><rect x=\"36\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"193\"/><rect x=\"56\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"194\"/><rect x=\"76\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"195\"/><rect x=\"96\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"196\"/><rect x=\"116\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"197\"/><rect x=\"136\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"198\"/><rect x=\"156\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"199\"/><rect x=\"176\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"200\"/><rect x=\"196\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"201\"/><rect x=\"216\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"202\"/><rect x=\"236\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"203\"/><rect x=\"256\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"204\"/><rect x=\"276\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"205\"/><rect x=\"296\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"206\"/><rect x=\"316\" y=\"320\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"207\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 13\"><rect x=\"16\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"208\"/><rect x=\"36\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"209\"/><rect x=\"56\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"210\"/><rect x=\"76\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"211\"/><rect x=\"96\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"212\"/><rect x=\"116\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"213\"/><rect x=\"136\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"214\"/><rect x=\"156\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"215\"/><rect x=\"176\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"216\"/><rect x=\"196\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"217\"/><rect x=\"216\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"218\"/><rect x=\"236\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"219\"/><rect x=\"256\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"220\"/><rect x=\"276\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"221\"/><rect x=\"296\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"222\"/><rect x=\"316\" y=\"340\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"223\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 14\"><rect x=\"16\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"224\"/><rect x=\"36\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"225\"/><rect x=\"56\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"226\"/><rect x=\"76\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"227\"/><rect x=\"96\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"228\"/><rect x=\"116\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"229\"/><rect x=\"136\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 6\" data-d=\"230\" data-mark=\"dv-tls-g3c\"/><rect x=\"156\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"231\"/><rect x=\"176\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"232\"/><rect x=\"196\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"233\"/><rect x=\"216\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"234\"/><rect x=\"236\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"235\"/><rect x=\"256\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"236\"/><rect x=\"276\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" class=\"key pop\" style=\"--i: 7\" data-d=\"237\" data-mark=\"ov-cs-g3c\"/><rect x=\"296\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"238\"/><rect x=\"316\" y=\"360\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"239\"/></g><g class=\"cell r\" data-beat=\"1\" style=\"--i: 15\"><rect x=\"16\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"240\"/><rect x=\"36\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"241\"/><rect x=\"56\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"242\"/><rect x=\"76\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"243\"/><rect x=\"96\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"244\"/><rect x=\"116\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"245\"/><rect x=\"136\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"246\"/><rect x=\"156\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"247\"/><rect x=\"176\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"248\"/><rect x=\"196\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"249\"/><rect x=\"216\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"250\"/><rect x=\"236\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"251\"/><rect x=\"256\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"252\"/><rect x=\"276\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"253\"/><rect x=\"296\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"254\"/><rect x=\"316\" y=\"380\" width=\"16\" height=\"16\" rx=\"2\" data-d=\"255\"/></g><g class=\"walk\" data-mark=\"cursor\"><rect x=\"32\" y=\"76\" width=\"24\" height=\"24\" rx=\"4\" class=\"cur\"/></g><g class=\"lg\" data-beat=\"2\"><rect x=\"16\" y=\"444\" width=\"16\" height=\"16\" rx=\"2\" class=\"key\"/><text x=\"40\" y=\"456\" class=\"s f14 ink\">eMudhra's eight keys</text><rect x=\"16\" y=\"476\" width=\"16\" height=\"16\" rx=\"2\" class=\"tr\"/><text x=\"40\" y=\"488\" class=\"s f14 ink\">Tried and wrong</text><rect x=\"16\" y=\"508\" width=\"16\" height=\"16\" rx=\"2\" class=\"axis\" fill=\"url(#d4-keyspace-hatch-c)\"/><text x=\"40\" y=\"520\" class=\"s f14 ghost\">0 is not a valid key</text></g><g class=\"cl\" data-mark=\"found\" data-beat=\"5\"><path d=\"M104 76V40H116\" class=\"edge\"/><text x=\"120\" y=\"44\"><tspan class=\"s f14 ink\">Found on guess </tspan><tspan class=\"m f14 w key\">4</tspan></text></g><g class=\"sc\" data-mark=\"scale\" data-beat=\"6\"><text x=\"16\" y=\"564\"><tspan class=\"s f14 ink\">A random key: a </tspan><tspan class=\"m f14 ink\">116</tspan><tspan class=\"s f14 ink\">-digit number.</tspan></text><text x=\"16\" y=\"588\"><tspan class=\"s f14 ink\">eMudhra's: </tspan><tspan class=\"m f14 w key\">4</tspan><tspan class=\"s f14 ink\">.</tspan></text></g></svg></div><figcaption class=\"fig__cap\">All eight keys fit in these 256 cells, and the search for the smallest one stops at 4.</figcaption></figure>\n\n<p>eMudhra says a bug in the script it used to make the keys caused this. Mozilla has not verified that.</p>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Stamp (intermediate CA)</th>\n<th>Signs</th>\n<th>Secret key</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>EM DV TLS CA - G3B</td>\n<td>Websites</td>\n<td>156</td>\n</tr>\n<tr>\n<td>EM DV TLS CA - G3C</td>\n<td>Websites</td>\n<td>230</td>\n</tr>\n<tr>\n<td>EM EV TLS CA - G3B</td>\n<td>Websites</td>\n<td>115</td>\n</tr>\n<tr>\n<td>EM EV TLS CA - G3C</td>\n<td>Websites</td>\n<td>56</td>\n</tr>\n<tr>\n<td>EM OV TLS CA - G3B</td>\n<td>Websites</td>\n<td>155</td>\n</tr>\n<tr>\n<td>EM OV TLS CA - G3C</td>\n<td>Websites</td>\n<td>4</td>\n</tr>\n<tr>\n<td>EM OV CS CA - G3B</td>\n<td>Software</td>\n<td>66</td>\n</tr>\n<tr>\n<td>EM OV CS CA - G3C</td>\n<td>Software</td>\n<td>237</td>\n</tr>\n</tbody>\n</table></div>\n<h2 id=\"who-is-affected-and-how-badly\">Who is affected, and how badly?<a class=\"h-anchor\" href=\"#who-is-affected-and-how-badly\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Most people are not. The risk sits in software that has not received a fix.</p>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Who</th>\n<th>Affected?</th>\n<th>Why</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>People on an updated browser</td>\n<td>No</td>\n<td>Firefox, Chrome, Apple and Microsoft each pushed a block within three days.</td>\n</tr>\n<tr>\n<td>Go programs built before the fix</td>\n<td>Yes</td>\n<td>Browser blocklists do not reach Go. Only Go 1.27.3 and 1.26.10 have the block built in.</td>\n</tr>\n<tr>\n<td>Servers and containers with an old CA list</td>\n<td>Yes</td>\n<td>Many programs trust whatever is on the list, and the list changes only when you update it.</td>\n</tr>\n<tr>\n<td>Old devices that never update</td>\n<td>Yes</td>\n<td>Their CA list is frozen. It trusts these stamps until July 2039.</td>\n</tr>\n<tr>\n<td>Websites with an eMudhra certificate</td>\n<td>Not hacked</td>\n<td>Their own keys are fine. But one eMudhra root is being removed, so sites that rely on it must move.</td>\n</tr>\n</tbody>\n</table></div>\n<figure class=\"fig\" id=\"fig-two-lanes\" data-fig=\"two-lanes\"><p class=\"fig__title\">One fake certificate, three programs: only the old Go build accepts it.</p><div class=\"fig__art\" data-layouts style=\"container: fig / inline-size\"><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"wide\" viewBox=\"0 0 708 296\" role=\"img\" aria-labelledby=\"two-lanes-t two-lanes-d\" style=\"aspect-ratio: 708 / 296\"><title id=\"two-lanes-t\">One fake certificate, three programs: only the old Go build accepts it.</title><desc id=\"two-lanes-d\">An updated browser and a Go 1.27.3 or 1.26.10 build reject the same fake certificate, but an old Go build on an old CA list accepts it.</desc><style>:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .f14{font-size:14px}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .w{font-weight:550}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .ink{fill:var(--ink,#151617)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .okbox{fill:var(--ok-wash,rgba(32,180,107,0.13));stroke:var(--acc-green,#20b46b);stroke-width:1}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .bad{stroke:var(--acc-red,#ee343b);stroke-width:1.5}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .washb{fill:var(--err-wash,rgba(238,52,59,0.11))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .dash43{stroke-dasharray:4 3}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.axis,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.edge,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.bad,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.hl{fill:none}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .rr1{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .hd{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .lp,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .lc,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .lr{opacity:0;transform:translateX(-8px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .rr,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .rr1{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .hd{animation:two-lanes-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .lp{animation:two-lanes-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms)))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .lc{animation:two-lanes-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + var(--dur-tint,110ms))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .lr{animation:two-lanes-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .rr{animation:two-lanes-tint var(--dur-tint,110ms) linear both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms) + var(--dur-enter,240ms))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .rr1{animation:two-lanes-tint var(--dur-tint,110ms) linear both,two-lanes-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms) + var(--dur-enter,240ms)),calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms) + var(--dur-enter,240ms))}@keyframes two-lanes-fade{from{opacity:0}}@keyframes two-lanes-slide{from{opacity:0;transform:translateX(-8px)}}@keyframes two-lanes-tint{from{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}@keyframes two-lanes-pop{from{transform:scale(.96)}}@media (prefers-reduced-motion:reduce){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) *{animation:none!important}}</style><g class=\"hd\" data-beat=\"1\"><text x=\"16\" y=\"28\" class=\"s f14 ghost\">One fake bank certificate, three programs</text></g><g class=\"lp\" data-beat=\"2\" style=\"--k: 0\"><rect x=\"16\" y=\"48\" width=\"232\" height=\"64\" rx=\"8\" class=\"cv edge node\"/><text x=\"32\" y=\"84\"><tspan class=\"s f14 w ink\">Updated browser</tspan></text></g><g class=\"lc\" data-beat=\"3\" style=\"--k: 0\"><path d=\"M248 80H284\" class=\"edge\"/><path d=\"M280 77L284 80L280 83\" class=\"edge\"/><rect x=\"284\" y=\"48\" width=\"208\" height=\"64\" rx=\"8\" class=\"cv edge node\"/><text x=\"300\" y=\"84\" class=\"s f14 ink\">Checks its blocklist</text></g><g class=\"lr\" data-beat=\"4\" data-mark=\"result-0\" style=\"--k: 0\"><path d=\"M492 80H528\" class=\"edge\"/><path d=\"M524 77L528 80L524 83\" class=\"edge\"/><rect x=\"528\" y=\"48\" width=\"164\" height=\"64\" rx=\"8\" class=\"okbox rr node\"/><circle cx=\"552\" cy=\"80\" r=\"6\" class=\"ok\"/><path d=\"M549 80L551 82L555 78\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"568\" y=\"84\" class=\"s f14 w ink\">Rejected</text></g><g class=\"lp\" data-beat=\"2\" style=\"--k: 1\"><rect x=\"16\" y=\"132\" width=\"232\" height=\"64\" rx=\"8\" class=\"cv edge node\"/><text x=\"32\" y=\"160\"><tspan class=\"s f14 w ink\">Old Go program</tspan></text><text x=\"32\" y=\"180\"><tspan class=\"s f14 w ink\">on an old CA list</tspan></text></g><g class=\"lc\" data-beat=\"3\" style=\"--k: 1\"><path d=\"M248 164H284\" class=\"edge\"/><path d=\"M280 161L284 164L280 167\" class=\"edge\"/><rect x=\"284\" y=\"132\" width=\"208\" height=\"64\" rx=\"8\" class=\"cv edge dash43 node\"/><text x=\"300\" y=\"168\" class=\"s f14 ghost\">No check</text></g><g class=\"lr\" data-beat=\"4\" data-mark=\"result-1\" style=\"--k: 1\"><path d=\"M492 164H528\" class=\"edge\"/><path d=\"M524 161L528 164L524 167\" class=\"edge\"/><rect x=\"528\" y=\"132\" width=\"164\" height=\"64\" rx=\"8\" class=\"washb bad rr1 node\"/><circle cx=\"552\" cy=\"164\" r=\"5.25\" fill=\"none\" class=\"bad\"/><text x=\"568\" y=\"168\" class=\"s f14 w ink\">Accepted</text></g><g class=\"lp\" data-beat=\"2\" style=\"--k: 2\"><rect x=\"16\" y=\"216\" width=\"232\" height=\"64\" rx=\"8\" class=\"cv edge node\"/><text x=\"32\" y=\"252\"><tspan class=\"s f14 w ink\">Go </tspan><tspan class=\"m f14 w ink\">1.27.3</tspan><tspan class=\"s f14 w ink\"> or </tspan><tspan class=\"m f14 w ink\">1.26.10</tspan></text></g><g class=\"lc\" data-beat=\"3\" style=\"--k: 2\"><path d=\"M248 248H284\" class=\"edge\"/><path d=\"M280 245L284 248L280 251\" class=\"edge\"/><rect x=\"284\" y=\"216\" width=\"208\" height=\"64\" rx=\"8\" class=\"cv edge node\"/><text x=\"300\" y=\"252\" class=\"s f14 ink\">Block built in</text></g><g class=\"lr\" data-beat=\"4\" data-mark=\"result-2\" style=\"--k: 2\"><path d=\"M492 248H528\" class=\"edge\"/><path d=\"M524 245L528 248L524 251\" class=\"edge\"/><rect x=\"528\" y=\"216\" width=\"164\" height=\"64\" rx=\"8\" class=\"okbox rr node\"/><circle cx=\"552\" cy=\"248\" r=\"6\" class=\"ok\"/><path d=\"M549 248L551 250L555 246\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"568\" y=\"252\" class=\"s f14 w ink\">Rejected</text></g></svg><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"compact\" viewBox=\"0 0 352 368\" role=\"img\" aria-labelledby=\"two-lanes-tc two-lanes-dc\" style=\"aspect-ratio: 352 / 368\"><title id=\"two-lanes-tc\">One fake certificate, three programs: only the old Go build accepts it.</title><desc id=\"two-lanes-dc\">An updated browser and a Go 1.27.3 or 1.26.10 build reject the same fake certificate, but an old Go build on an old CA list accepts it.</desc><style>:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .f14{font-size:14px}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .w{font-weight:550}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .ink{fill:var(--ink,#151617)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .okbox{fill:var(--ok-wash,rgba(32,180,107,0.13));stroke:var(--acc-green,#20b46b);stroke-width:1}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .bad{stroke:var(--acc-red,#ee343b);stroke-width:1.5}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .washb{fill:var(--err-wash,rgba(238,52,59,0.11))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.axis,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.edge,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.bad,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) path.hl{fill:none}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) .rr1{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .hd{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .lp,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .lc,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .lr{opacity:0;transform:translateX(-8px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .rr,:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed]:not([data-play]) .rr1{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .hd{animation:two-lanes-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .lp{animation:two-lanes-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms)))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .lc{animation:two-lanes-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + var(--dur-tint,110ms))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .lr{animation:two-lanes-slide var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .rr{animation:two-lanes-tint var(--dur-tint,110ms) linear both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms) + var(--dur-enter,240ms))}:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"])[data-armed][data-play] .rr1{animation:two-lanes-tint var(--dur-tint,110ms) linear both,two-lanes-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms) + var(--dur-enter,240ms)),calc(calc(var(--dur-enter,240ms) + var(--k)*(2*var(--dur-tint,110ms) + var(--dur-enter,240ms))) + 2*var(--dur-tint,110ms) + var(--dur-enter,240ms))}@keyframes two-lanes-fade{from{opacity:0}}@keyframes two-lanes-slide{from{opacity:0;transform:translateX(-8px)}}@keyframes two-lanes-tint{from{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}@keyframes two-lanes-pop{from{transform:scale(.96)}}@media (prefers-reduced-motion:reduce){:is(#fig-two-lanes,[data-fig-clone=\"two-lanes\"]) *{animation:none!important}}</style><g class=\"hd\" data-beat=\"1\"><text x=\"16\" y=\"24\" class=\"s f14 ghost\">One fake bank certificate, three programs</text></g><g class=\"lp\" data-beat=\"2\" data-mark=\"result-0\" style=\"--k: 0\"><rect x=\"16\" y=\"40\" width=\"320\" height=\"96\" rx=\"8\" class=\"cv edge node\"/><text x=\"32\" y=\"76\"><tspan class=\"s f14 w ink\">Updated browser</tspan></text><text x=\"32\" y=\"100\" class=\"s f14 ghost\">Checks its blocklist</text><rect x=\"212\" y=\"68\" width=\"108\" height=\"40\" rx=\"8\" class=\"okbox rr node\"/><circle cx=\"232\" cy=\"88\" r=\"6\" class=\"ok\"/><path d=\"M229 88L231 90L235 86\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"248\" y=\"92\" class=\"s f14 w ink\">Rejected</text></g><g class=\"lp\" data-beat=\"2\" data-mark=\"result-1\" style=\"--k: 1\"><rect x=\"16\" y=\"148\" width=\"320\" height=\"96\" rx=\"8\" class=\"cv edge node\"/><text x=\"32\" y=\"176\"><tspan class=\"s f14 w ink\">Old Go program</tspan></text><text x=\"32\" y=\"196\"><tspan class=\"s f14 w ink\">on an old CA list</tspan></text><text x=\"32\" y=\"220\" class=\"s f14 ghost\">No check</text><rect x=\"212\" y=\"176\" width=\"108\" height=\"40\" rx=\"8\" class=\"washb bad rr1 node\"/><circle cx=\"232\" cy=\"196\" r=\"5.25\" fill=\"none\" class=\"bad\"/><text x=\"248\" y=\"200\" class=\"s f14 w ink\">Accepted</text></g><g class=\"lp\" data-beat=\"2\" data-mark=\"result-2\" style=\"--k: 2\"><rect x=\"16\" y=\"256\" width=\"320\" height=\"96\" rx=\"8\" class=\"cv edge node\"/><text x=\"32\" y=\"292\"><tspan class=\"s f14 w ink\">Go </tspan><tspan class=\"m f14 w ink\">1.27.3</tspan><tspan class=\"s f14 w ink\"> or </tspan><tspan class=\"m f14 w ink\">1.26.10</tspan></text><text x=\"32\" y=\"316\" class=\"s f14 ghost\">Block built in</text><rect x=\"212\" y=\"284\" width=\"108\" height=\"40\" rx=\"8\" class=\"okbox rr node\"/><circle cx=\"232\" cy=\"304\" r=\"6\" class=\"ok\"/><path d=\"M229 304L231 306L235 302\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"248\" y=\"308\" class=\"s f14 w ink\">Rejected</text></g></svg></div><figcaption class=\"fig__cap\">Browsers check a blocklist and old Go programs do not, so Go built the block into its new versions.</figcaption></figure>\n\n<p>In the worst case, someone who sits between you and a server could pretend to be your bank or a partner’s API. Think of a hostile Wi-Fi network or a hacked office network. With a fake certificate, they could read or change the data that passes through.</p>\n<p>To do that, they need that spot on the network and a program that trusts these stamps without checking a blocklist. The secret key is no barrier any more, because anyone can work it out.</p>\n<figure class=\"fig\" id=\"fig-attack-path\" data-fig=\"attack-path\"><p class=\"fig__title\">A fake certificate only works on an app that skips blocklists.</p><div class=\"fig__art\" data-layouts style=\"container: fig / inline-size\"><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"wide\" viewBox=\"0 0 708 424\" role=\"img\" aria-labelledby=\"attack-path-t attack-path-d\" style=\"aspect-ratio: 708 / 424\"><title id=\"attack-path-t\">A fake certificate only works on an app that skips blocklists.</title><desc id=\"attack-path-d\">A fake bank certificate needs an attacker on your network and an app that skips blocklists, so updated browsers reject it and old programs accept it.</desc><style>:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .f14{font-size:14px}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .w{font-weight:550}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .ink{fill:var(--ink,#151617)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .key{fill:var(--acc-violet,#7844f0)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .okbox{fill:var(--ok-wash,rgba(32,180,107,0.13));stroke:var(--acc-green,#20b46b);stroke-width:1}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .bad{stroke:var(--acc-red,#ee343b);stroke-width:1.5}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .washb{fill:var(--err-wash,rgba(238,52,59,0.11))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.axis,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.edge,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.bad,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.hl{fill:none}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .acg,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .acr{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .st,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .rjg{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .fk{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .acg{opacity:0;transform:scale(.96)}}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .rjr,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .acr{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .st{animation:attack-path-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--k)*var(--dur-enter,240ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .fk{animation:attack-path-fade var(--dur-tint,110ms) linear both;animation-delay:calc(4*var(--dur-enter,240ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .rjg{animation:attack-path-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(4*var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .rjr{animation:attack-path-ok var(--dur-tint,110ms) linear both;animation-delay:calc(5*var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .acg{animation:attack-path-grow var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(5*var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .acr{animation:attack-path-bad var(--dur-tint,110ms) linear both;animation-delay:calc(5*var(--dur-enter,240ms) + var(--dur-tint,110ms))}@keyframes attack-path-rise{from{opacity:0;transform:translateY(4px)}}@keyframes attack-path-fade{from{opacity:0}}@keyframes attack-path-grow{from{opacity:0;transform:scale(.96)}}@keyframes attack-path-ok{from{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}@keyframes attack-path-bad{from{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}@media (prefers-reduced-motion:reduce){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) *{animation:none!important}}</style><g class=\"st\" data-beat=\"1\" style=\"--k: 0\"><rect x=\"16\" y=\"16\" width=\"676\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-1\"/><text y=\"48\"><tspan x=\"40\" class=\"m f14 ghost\">1</tspan><tspan x=\"72\" class=\"s f14 ink\">The attacker sits between you and the server.</tspan></text></g><g class=\"st\" data-beat=\"2\" style=\"--k: 1\"><path d=\"M352 72V96\" class=\"edge\"/><path d=\"M349 92L352 96L355 92\" class=\"edge\"/><rect x=\"16\" y=\"96\" width=\"676\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-2\"/><text y=\"128\"><tspan x=\"40\" class=\"m f14 ghost\">2</tspan><tspan x=\"72\" class=\"s f14 ink\">The attacker knows a stamp's secret key. Anyone can: it is </tspan><tspan class=\"m f14 w key\">1 to 255</tspan><tspan class=\"s f14 ink\">.</tspan></text></g><g class=\"st\" data-beat=\"3\" style=\"--k: 2\"><path d=\"M352 152V176\" class=\"edge\"/><path d=\"M349 172L352 176L355 172\" class=\"edge\"/><rect x=\"16\" y=\"176\" width=\"676\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-3\"/><text y=\"208\"><tspan x=\"40\" class=\"m f14 ghost\">3</tspan><tspan x=\"72\" class=\"s f14 ink\">The attacker makes a fake certificate for your bank.</tspan></text></g><g class=\"st\" data-beat=\"4\" style=\"--k: 3\"><path d=\"M352 232V256\" class=\"edge\"/><path d=\"M349 252L352 256L355 252\" class=\"edge\"/><rect x=\"16\" y=\"256\" width=\"676\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-4\"/><text y=\"288\"><tspan x=\"40\" class=\"m f14 ghost\">4</tspan><tspan x=\"72\" class=\"s f14 ink\">Your app accepts it, unless it checks blocklists.</tspan></text></g><g class=\"fk\" data-beat=\"5\"><path d=\"M352 312V328H180V352M352 328H528V352\" class=\"edge\"/><path d=\"M177 348L180 352L183 348\" class=\"edge\"/><path d=\"M525 348L528 352L531 348\" class=\"edge\"/></g><g class=\"rjg\" data-beat=\"6\" data-mark=\"rejects\"><rect x=\"16\" y=\"352\" width=\"328\" height=\"56\" rx=\"8\" class=\"okbox rjr node\"/><circle cx=\"44\" cy=\"380\" r=\"6\" class=\"ok\"/><path d=\"M41 380L43 382L47 378\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"64\" y=\"384\"><tspan class=\"s f14 ink\">Updated browser: </tspan><tspan class=\"s f14 w ink\">rejects it</tspan></text></g><g class=\"acg\" data-beat=\"7\" data-mark=\"accepts\"><rect x=\"364\" y=\"352\" width=\"328\" height=\"56\" rx=\"8\" class=\"washb bad acr node\"/><circle cx=\"392\" cy=\"380\" r=\"5.25\" fill=\"none\" class=\"bad\"/><text x=\"412\" y=\"384\"><tspan class=\"s f14 ink\">Old program: </tspan><tspan class=\"s f14 w ink\">accepts it</tspan></text></g></svg><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"compact\" viewBox=\"0 0 352 552\" role=\"img\" aria-labelledby=\"attack-path-tc attack-path-dc\" style=\"aspect-ratio: 352 / 552\"><title id=\"attack-path-tc\">A fake certificate only works on an app that skips blocklists.</title><desc id=\"attack-path-dc\">A fake bank certificate needs an attacker on your network and an app that skips blocklists, so updated browsers reject it and old programs accept it.</desc><style>:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .f14{font-size:14px}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .w{font-weight:550}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .mid{text-anchor:middle}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .ink{fill:var(--ink,#151617)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .key{fill:var(--acc-violet,#7844f0)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .okbox{fill:var(--ok-wash,rgba(32,180,107,0.13));stroke:var(--acc-green,#20b46b);stroke-width:1}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .bad{stroke:var(--acc-red,#ee343b);stroke-width:1.5}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .washb{fill:var(--err-wash,rgba(238,52,59,0.11))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.axis,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.edge,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.bad,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) path.hl{fill:none}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .acg,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) .acr{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .st,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .rjg{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .fk{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .acg{opacity:0;transform:scale(.96)}}@media (prefers-reduced-motion:no-preference){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .rjr,:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed]:not([data-play]) .acr{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .st{animation:attack-path-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--k)*var(--dur-enter,240ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .fk{animation:attack-path-fade var(--dur-tint,110ms) linear both;animation-delay:calc(4*var(--dur-enter,240ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .rjg{animation:attack-path-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(4*var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .rjr{animation:attack-path-ok var(--dur-tint,110ms) linear both;animation-delay:calc(5*var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .acg{animation:attack-path-grow var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(5*var(--dur-enter,240ms) + var(--dur-tint,110ms))}:is(#fig-attack-path,[data-fig-clone=\"attack-path\"])[data-armed][data-play] .acr{animation:attack-path-bad var(--dur-tint,110ms) linear both;animation-delay:calc(5*var(--dur-enter,240ms) + var(--dur-tint,110ms))}@keyframes attack-path-rise{from{opacity:0;transform:translateY(4px)}}@keyframes attack-path-fade{from{opacity:0}}@keyframes attack-path-grow{from{opacity:0;transform:scale(.96)}}@keyframes attack-path-ok{from{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}@keyframes attack-path-bad{from{fill:var(--canvas,#ffffff);stroke:var(--edge,rgba(21,22,23,0.11))}}@media (prefers-reduced-motion:reduce){:is(#fig-attack-path,[data-fig-clone=\"attack-path\"]) *{animation:none!important}}</style><g class=\"st\" data-beat=\"1\" style=\"--k: 0\"><rect x=\"16\" y=\"16\" width=\"320\" height=\"76\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-1\"/><text x=\"32\" y=\"48\" class=\"m f14 ghost\">1</text><text x=\"56\" y=\"48\"><tspan class=\"s f14 ink\">The attacker sits between you</tspan></text><text x=\"56\" y=\"68\"><tspan class=\"s f14 ink\">and the server.</tspan></text></g><g class=\"st\" data-beat=\"2\" style=\"--k: 1\"><path d=\"M176 92V116\" class=\"edge\"/><path d=\"M173 112L176 116L179 112\" class=\"edge\"/><rect x=\"16\" y=\"116\" width=\"320\" height=\"96\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-2\"/><text x=\"32\" y=\"148\" class=\"m f14 ghost\">2</text><text x=\"56\" y=\"148\"><tspan class=\"s f14 ink\">The attacker knows a stamp's</tspan></text><text x=\"56\" y=\"168\"><tspan class=\"s f14 ink\">secret key. Anyone can,</tspan></text><text x=\"56\" y=\"188\"><tspan class=\"s f14 ink\">because it is </tspan><tspan class=\"m f14 w key\">1 to 255</tspan><tspan class=\"s f14 ink\">.</tspan></text></g><g class=\"st\" data-beat=\"3\" style=\"--k: 2\"><path d=\"M176 212V236\" class=\"edge\"/><path d=\"M173 232L176 236L179 232\" class=\"edge\"/><rect x=\"16\" y=\"236\" width=\"320\" height=\"76\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-3\"/><text x=\"32\" y=\"268\" class=\"m f14 ghost\">3</text><text x=\"56\" y=\"268\"><tspan class=\"s f14 ink\">The attacker makes a fake</tspan></text><text x=\"56\" y=\"288\"><tspan class=\"s f14 ink\">certificate for your bank.</tspan></text></g><g class=\"st\" data-beat=\"4\" style=\"--k: 3\"><path d=\"M176 312V336\" class=\"edge\"/><path d=\"M173 332L176 336L179 332\" class=\"edge\"/><rect x=\"16\" y=\"336\" width=\"320\" height=\"76\" rx=\"8\" class=\"cv edge node\" data-mark=\"step-4\"/><text x=\"32\" y=\"368\" class=\"m f14 ghost\">4</text><text x=\"56\" y=\"368\"><tspan class=\"s f14 ink\">Your app accepts it, unless</tspan></text><text x=\"56\" y=\"388\"><tspan class=\"s f14 ink\">it checks blocklists.</tspan></text></g><g class=\"fk\" data-beat=\"5\"><path d=\"M176 412V428H92V448M176 428H260V448\" class=\"edge\"/><path d=\"M89 444L92 448L95 444\" class=\"edge\"/><path d=\"M257 444L260 448L263 444\" class=\"edge\"/></g><g class=\"rjg\" data-beat=\"6\" data-mark=\"rejects\"><rect x=\"16\" y=\"448\" width=\"152\" height=\"88\" rx=\"8\" class=\"okbox rjr node\"/><circle cx=\"92\" cy=\"472\" r=\"6\" class=\"ok\"/><path d=\"M89 472L91 474L95 470\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"92\" y=\"500\" class=\"s f14 ink mid\">Updated browser</text><text x=\"92\" y=\"520\" class=\"s f14 w ink mid\">rejects it</text></g><g class=\"acg\" data-beat=\"7\" data-mark=\"accepts\"><rect x=\"184\" y=\"448\" width=\"152\" height=\"88\" rx=\"8\" class=\"washb bad acr node\"/><circle cx=\"260\" cy=\"472\" r=\"5.25\" fill=\"none\" class=\"bad\"/><text x=\"260\" y=\"500\" class=\"s f14 ink mid\">Old program</text><text x=\"260\" y=\"520\" class=\"s f14 w ink mid\">accepts it</text></g></svg></div><figcaption class=\"fig__cap\">Anyone can now get the key, so the outcome depends on whether your app checks a blocklist.</figcaption></figure>\n\n<p>Nobody has been seen doing this. No certificate made with these stamps shows up in the public logs where certificates are recorded. But the keys were weak from April 2025, so misuse in those 17 months cannot be ruled out.</p>\n<p>The problem was reported on 17 October 2026. Firefox blocked the keys in under three hours, and Chrome the same day. Apple followed on 19 October, Microsoft on 20 October, and Go released its fix on 19 to 20 October.</p>\n<h2 id=\"what-go-teams-must-do\">What Go teams must do<a class=\"h-anchor\" href=\"#what-go-teams-must-do\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The fix lives in Go’s standard library, so it reaches a program only when that program is rebuilt.</p>\n<h3 id=\"1-find-which-go-built-each-binary\">1. Find which Go built each binary<a class=\"h-anchor\" href=\"#1-find-which-go-built-each-binary\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>A Go program carries the Go version it was built with. Check what is deployed, not your laptop.</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> version</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./bin/</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">*</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">                 # the Go version inside each binary</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> version</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -m</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./bin/app</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">            # plus modules and build settings</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">grep</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -E</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> '^(go|toolchain) '</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> go.mod</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">grep</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -rnE</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> 'golang:[0-9.]+'</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> --include=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">'Dockerfile*'</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> .</span></span></code></pre></div>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th><code>go version</code> says</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>go1.27.3 or later 1.27.x, go1.26.10 or later 1.26.x, go1.28 or later</td>\n<td>Fixed</td>\n<td>Nothing for Go. Still do step 3.</td>\n</tr>\n<tr>\n<td>go1.27.0 to go1.27.2</td>\n<td>Vulnerable</td>\n<td>Rebuild with 1.27.3.</td>\n</tr>\n<tr>\n<td>go1.26.0 to go1.26.9</td>\n<td>Vulnerable</td>\n<td>Rebuild with 1.26.10.</td>\n</tr>\n<tr>\n<td>go1.25 or older</td>\n<td>Unsupported, no fix</td>\n<td>Move to 1.26.10 or 1.27.3.</td>\n</tr>\n<tr>\n<td>An rc, beta or devel build</td>\n<td>Check</td>\n<td>Fixed only if it includes commit <code>7f86f95</code>.</td>\n</tr>\n</tbody>\n</table></div>\n<h3 id=\"2-rebuild-and-redeploy-with-go-1273-or-12610\">2. Rebuild and redeploy with Go 1.27.3 or 1.26.10<a class=\"h-anchor\" href=\"#2-rebuild-and-redeploy-with-go-1273-or-12610\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>The fix is compiled into each program. Upgrading Go on your laptop changes nothing that is already running.</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> get</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> toolchain@go1.27.3</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">          # or go1.26.10; pins it in go.mod</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> build</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -o</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./bin/</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./cmd/...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> version</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./bin/app</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">               # expect go1.27.3</span></span></code></pre></div>\n<p>If your CI sets <code>GOTOOLCHAIN=local</code>, it ignores the <code>toolchain</code> line, so upgrade the Go in CI or your image tag. Rebuild everything that makes HTTPS calls, including CLIs, sidecars and CI tools. For programs you did not build, install the vendor’s fixed release, such as cloudflared 2026.10.2.</p>\n<h3 id=\"3-update-ca-certificates-in-your-images\">3. Update ca-certificates in your images<a class=\"h-anchor\" href=\"#3-update-ca-certificates-in-your-images\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>The Go fix covers only these eight keys. Your images still need a fresh CA list, because one eMudhra root is being removed. In <code>scratch</code> and distroless images, the list was copied in at build time, so rebuild the image.</p>\n<div class=\"code-figure\" data-language=\"dockerfile\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"dockerfile\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">FROM</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> golang:1.27.3 </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">AS</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> build</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">WORKDIR</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> /src</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">COPY</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> . .</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">RUN</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> CGO_ENABLED=0 go build -o /out/app ./cmd/app</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">FROM</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> debian:bookworm-slim</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">RUN</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> apt-get update &amp;&amp; apt-get install -y --no-install-recommends ca-certificates \\</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    &amp;&amp; rm -rf /var/lib/apt/lists/*</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">COPY</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> --from=build /out/app /usr/local/bin/app</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">ENTRYPOINT</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> [</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"/usr/local/bin/app\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span></span></code></pre></div>\n<h3 id=\"4-if-you-cannot-rebuild-yet-add-a-deny-list\">4. If you cannot rebuild yet, add a deny-list<a class=\"h-anchor\" href=\"#4-if-you-cannot-rebuild-yet-add-a-deny-list\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Use this if you are stuck on Go 1.25 or on a fork with no fix. It runs after Go’s normal checks and refuses any chain that passes through one of the eight keys.</p>\n<p>Another CA, Sectigo, also signed these keys, so there are 16 certificates. Matching on the key itself catches all of them.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"denylist.go\"><div class=\"code-caption\">denylist.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"denylist.go\" data-language=\"go\" data-title=\"denylist.go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Package denylist is a stopgap for Go programs you cannot rebuild yet with</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Go 1.27.3 or 1.26.10. It refuses TLS chains that pass through one of the</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// eight eMudhra intermediate CA keys that Go blocks (CVE-2026-111943).</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> denylist</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/sha256</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/tls</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/x509</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">encoding/hex</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">errors</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">strings</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// distrustedKeys is the SHA-256 of each blocked public key</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// (RawSubjectPublicKeyInfo), the same eight values as Go commit 7f86f95.</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> distrustedKeys</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> `</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">ebed6475c2c2d80fcb199f3fe8dd6e6b3ce60b77eb15d4e42c3dec0c6f5b5105</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">49dd353dc2b919a3770645117d0e60c16115e7d1bc259eefe734b00ea434fe5f</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">e0254c7fcdc265e2f0f8a428dabb75ab4ae039b4872d62f5ee57f0877d5a8a41</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">5c0660a2b164910d8ff589c18e14552e9e0ec237dcefe2cb736d41a4811f81a0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">43bffa19d6ef651451f6841e019931e96f6f2eaeff28ab4b6f1ce4576de2717b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">63ecefee431d49523bc1136c4e72d0206a477086caf606cd5cf025686c109cf8</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">ec4ffa1ad0ac88081314b7aaffef6a91f97cd57291bb5ba686c5415f5eb4f6b6</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">92c063d67e8f14db71d288e11266ffdaf69cbf115f7bab14f3bc2f68d25e0e30</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">`</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> distrusted </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sha256</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Size</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> init</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tfor</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, h </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> strings.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Fields</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(distrustedKeys) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tb, err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> hex.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">DecodeString</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(h)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\tif</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ||</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(b) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> sha256.Size {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">\t\t\tpanic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"denylist: bad hash \"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> +</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> h)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tdistrusted[[sha256.Size]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(b)] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tif</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(distrusted) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 8</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">\t\tpanic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"denylist: want 8 unique hashes\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrDistrusted </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"tls: chain uses a distrusted eMudhra key (CVE-2026-111943)\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> hasDistrustedKey</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">chain</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">x509</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Certificate</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tfor</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, c </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> chain {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\tif</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> distrusted[sha256.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sum256</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(c.RawSubjectPublicKeyInfo)] {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\t\treturn</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\treturn</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// VerifyConnection runs after Go's normal checks. Like the Go fix, it passes</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// only if at least one verified chain avoids all eight keys. Set it as</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// tls.Config.VerifyConnection on your HTTP clients and mTLS servers.</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> VerifyConnection</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">cs</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> tls</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">ConnectionState</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tif</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(cs.VerifiedChains) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> { </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// nothing was verified: check what the peer sent</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\tif</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> hasDistrustedKey</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(cs.PeerCertificates) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\t\treturn</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrDistrusted</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\treturn</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tfor</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, chain </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> cs.VerifiedChains {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\tif</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> !</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">hasDistrustedKey</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(chain) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\t\treturn</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\treturn</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrDistrusted</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>It guards only the connections you wire it into. It is a bridge, not a fix.</p>\n<h3 id=\"5-never-switch-off-verification\">5. Never switch off verification<a class=\"h-anchor\" href=\"#5-never-switch-off-verification\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<blockquote class=\"callout callout-warning\" role=\"note\" aria-label=\"Warning\" data-callout=\"warning\"><p class=\"callout-head\"><span class=\"callout-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"></path><path d=\"M12 9v4\"></path><path d=\"M12 17h.01\"></path></svg></span><span class=\"callout-label\">Warning</span></p>\n<p>Do not set <code>InsecureSkipVerify</code> to make new errors go away. It switches off every check, so fake certificates get through too. If a partner breaks, ask them to move to a current chain.</p>\n</blockquote>\n<p>When the old eMudhra root leaves your CA list, partners still on it will fail with errors that start with <code>x509:</code>. Roll out to a few servers first and watch for those errors.</p>\n<p>If partners call you with client certificates (mTLS, where both sides show a certificate), build <code>ClientCAs</code> from your partners’ CAs only. A pool built from every public root would also trust these stamps on an old build.</p>\n<h3 id=\"6-test\">6. Test<a class=\"h-anchor\" href=\"#6-test\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>For a browser, open the <a href=\"https://emudhra.we-have-a-problem.com/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">test page<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>. It tries each test site and shows which ones your browser refuses.</p>\n<p>For servers, run the test program below from the same host, image and binary as production. Every host should fail. If one connects, that build would accept a fake certificate.</p>\n<p>On macOS and Windows, Go asks the operating system to check certificates. I ran the program on a Mac with go1.27.0, which has no fix, and it printed <code>x509: “EM DV TLS CA - G3B” certificate is revoked</code>. That was macOS refusing it, not Go.</p>\n<p>A Linux container with an old CA list is the case to worry about.</p>\n<figure class=\"fig\" id=\"fig-go-fix-flow\" data-fig=\"go-fix-flow\"><p class=\"fig__title\">Rebuild first. The deny-list is only a bridge.</p><div class=\"fig__art\" data-layouts style=\"container: fig / inline-size\"><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"wide\" viewBox=\"0 0 708 336\" role=\"img\" aria-labelledby=\"go-fix-flow-t go-fix-flow-d\" style=\"aspect-ratio: 708 / 336\"><title id=\"go-fix-flow-t\">Rebuild first. The deny-list is only a bridge.</title><desc id=\"go-fix-flow-d\">Go teams find each binary’s Go version, rebuild with 1.27.3 or 1.26.10, update ca-certificates, redeploy with a canary, and use the deny-list only if stuck.</desc><style>:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .f14{font-size:14px}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .ink{fill:var(--ink,#151617)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .dash{stroke-dasharray:2 2}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .dash43{stroke-dasharray:4 3}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.axis,:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.edge,:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.bad,:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.hl{fill:none}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .mp{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed]:not([data-play]) .rw{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed]:not([data-play]) .mt{fill:var(--wash,rgba(21,22,23,0.045))}}@media (prefers-reduced-motion:no-preference){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed]:not([data-play]) .mp{opacity:0;transform:scale(.5)}}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed][data-play] .rw{animation:go-fix-flow-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--k)*8*var(--dur-stagger,16ms))}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed][data-play] .mt{animation:go-fix-flow-tint var(--dur-tint,110ms) linear both;animation-delay:calc(calc(var(--k)*8*var(--dur-stagger,16ms)) + var(--dur-enter,240ms))}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed][data-play] .mp{animation:go-fix-flow-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(calc(var(--k)*8*var(--dur-stagger,16ms)) + var(--dur-enter,240ms))}@keyframes go-fix-flow-rise{from{opacity:0;transform:translateY(4px)}}@keyframes go-fix-flow-tint{from{fill:var(--wash,rgba(21,22,23,0.045))}}@keyframes go-fix-flow-pop{from{opacity:0;transform:scale(.5)}}@media (prefers-reduced-motion:reduce){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) *{animation:none!important}}</style><g class=\"rw\" data-beat=\"1\" style=\"--k: 0\"><rect x=\"96\" y=\"16\" width=\"516\" height=\"48\" rx=\"8\" class=\"cv edge node\" data-mark=\"find\"/><circle cx=\"124\" cy=\"40\" r=\"6\" class=\"ok mt\"/><path d=\"M121 40L123 42L127 38\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"148\" y=\"44\"><tspan class=\"s f14 ink\">Find which Go built each binary</tspan></text></g><g class=\"rw\" data-beat=\"2\" style=\"--k: 1\"><path d=\"M124 64V80\" class=\"edge\"/><rect x=\"96\" y=\"80\" width=\"516\" height=\"48\" rx=\"8\" class=\"cv edge node\" data-mark=\"rebuild\"/><g class=\"mp\"><circle cx=\"124\" cy=\"104\" r=\"6\" class=\"ok\"/><path d=\"M121 104L123 106L127 102\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g><text x=\"148\" y=\"108\"><tspan class=\"s f14 ink\">Rebuild with Go </tspan><tspan class=\"m f14 ink\">1.27.3</tspan><tspan class=\"s f14 ink\"> or </tspan><tspan class=\"m f14 ink\">1.26.10</tspan></text></g><g class=\"rw\" data-beat=\"3\" style=\"--k: 2\"><path d=\"M124 128V144\" class=\"edge\"/><rect x=\"96\" y=\"144\" width=\"516\" height=\"48\" rx=\"8\" class=\"cv edge node\" data-mark=\"ca\"/><circle cx=\"124\" cy=\"168\" r=\"6\" class=\"ok mt\"/><path d=\"M121 168L123 170L127 166\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"148\" y=\"172\"><tspan class=\"s f14 ink\">Update </tspan><tspan class=\"m f14 ink\">ca-certificates</tspan><tspan class=\"s f14 ink\"> in your images</tspan></text></g><g class=\"rw\" data-beat=\"4\" style=\"--k: 3\"><path d=\"M124 192V208\" class=\"edge\"/><rect x=\"96\" y=\"208\" width=\"516\" height=\"48\" rx=\"8\" class=\"cv edge node\" data-mark=\"redeploy\"/><circle cx=\"124\" cy=\"232\" r=\"6\" class=\"ok mt\"/><path d=\"M121 232L123 234L127 230\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"148\" y=\"236\"><tspan class=\"s f14 ink\">Redeploy, starting with a canary</tspan></text></g><g class=\"rw\" data-beat=\"5\" style=\"--k: 4\"><path d=\"M124 256V272\" class=\"edge dash\"/><rect x=\"96\" y=\"272\" width=\"516\" height=\"48\" rx=\"8\" class=\"cv edge dash43 node\" data-mark=\"bridge\"/><circle cx=\"124\" cy=\"296\" r=\"6\" class=\"edge dash\" fill=\"none\"/><text x=\"148\" y=\"300\"><tspan class=\"s f14 ghost\">Only if you cannot rebuild: add the deny-list</tspan></text></g></svg><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"compact\" viewBox=\"0 0 352 360\" role=\"img\" aria-labelledby=\"go-fix-flow-tc go-fix-flow-dc\" style=\"aspect-ratio: 352 / 360\"><title id=\"go-fix-flow-tc\">Rebuild first. The deny-list is only a bridge.</title><desc id=\"go-fix-flow-dc\">Go teams find each binary’s Go version, rebuild with 1.27.3 or 1.26.10, update ca-certificates, redeploy with a canary, and use the deny-list only if stuck.</desc><style>:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .f14{font-size:14px}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .ink{fill:var(--ink,#151617)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .cv{fill:var(--canvas,#ffffff)}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .dash{stroke-dasharray:2 2}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .dash43{stroke-dasharray:4 3}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.axis,:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.edge,:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.bad,:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) path.hl{fill:none}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) .mp{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed]:not([data-play]) .rw{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:no-preference){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed]:not([data-play]) .mt{fill:var(--wash,rgba(21,22,23,0.045))}}@media (prefers-reduced-motion:no-preference){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed]:not([data-play]) .mp{opacity:0;transform:scale(.5)}}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed][data-play] .rw{animation:go-fix-flow-rise var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(var(--k)*8*var(--dur-stagger,16ms))}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed][data-play] .mt{animation:go-fix-flow-tint var(--dur-tint,110ms) linear both;animation-delay:calc(calc(var(--k)*8*var(--dur-stagger,16ms)) + var(--dur-enter,240ms))}:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"])[data-armed][data-play] .mp{animation:go-fix-flow-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:calc(calc(var(--k)*8*var(--dur-stagger,16ms)) + var(--dur-enter,240ms))}@keyframes go-fix-flow-rise{from{opacity:0;transform:translateY(4px)}}@keyframes go-fix-flow-tint{from{fill:var(--wash,rgba(21,22,23,0.045))}}@keyframes go-fix-flow-pop{from{opacity:0;transform:scale(.5)}}@media (prefers-reduced-motion:reduce){:is(#fig-go-fix-flow,[data-fig-clone=\"go-fix-flow\"]) *{animation:none!important}}</style><g class=\"rw\" data-beat=\"1\" style=\"--k: 0\"><rect x=\"16\" y=\"16\" width=\"320\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"find\"/><circle cx=\"40\" cy=\"44\" r=\"6\" class=\"ok mt\"/><path d=\"M37 44L39 46L43 42\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"64\" y=\"48\"><tspan class=\"s f14 ink\">Find which Go built each binary</tspan></text></g><g class=\"rw\" data-beat=\"2\" style=\"--k: 1\"><path d=\"M40 72V84\" class=\"edge\"/><rect x=\"16\" y=\"84\" width=\"320\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"rebuild\"/><g class=\"mp\"><circle cx=\"40\" cy=\"112\" r=\"6\" class=\"ok\"/><path d=\"M37 112L39 114L43 110\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g><text x=\"64\" y=\"108\"><tspan class=\"s f14 ink\">Rebuild with Go</tspan></text><text x=\"64\" y=\"128\"><tspan class=\"m f14 ink\">1.27.3</tspan><tspan class=\"s f14 ink\"> or </tspan><tspan class=\"m f14 ink\">1.26.10</tspan></text></g><g class=\"rw\" data-beat=\"3\" style=\"--k: 2\"><path d=\"M40 140V152\" class=\"edge\"/><rect x=\"16\" y=\"152\" width=\"320\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"ca\"/><circle cx=\"40\" cy=\"180\" r=\"6\" class=\"ok mt\"/><path d=\"M37 180L39 182L43 178\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"64\" y=\"176\"><tspan class=\"s f14 ink\">Update </tspan><tspan class=\"m f14 ink\">ca-certificates</tspan></text><text x=\"64\" y=\"196\"><tspan class=\"s f14 ink\">in your images</tspan></text></g><g class=\"rw\" data-beat=\"4\" style=\"--k: 3\"><path d=\"M40 208V220\" class=\"edge\"/><rect x=\"16\" y=\"220\" width=\"320\" height=\"56\" rx=\"8\" class=\"cv edge node\" data-mark=\"redeploy\"/><circle cx=\"40\" cy=\"248\" r=\"6\" class=\"ok mt\"/><path d=\"M37 248L39 250L43 246\" fill=\"none\" stroke=\"var(--canvas,#ffffff)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><text x=\"64\" y=\"252\"><tspan class=\"s f14 ink\">Redeploy, starting with a canary</tspan></text></g><g class=\"rw\" data-beat=\"5\" style=\"--k: 4\"><path d=\"M40 276V288\" class=\"edge dash\"/><rect x=\"16\" y=\"288\" width=\"320\" height=\"56\" rx=\"8\" class=\"cv edge dash43 node\" data-mark=\"bridge\"/><circle cx=\"40\" cy=\"316\" r=\"6\" class=\"edge dash\" fill=\"none\"/><text x=\"64\" y=\"312\"><tspan class=\"s f14 ghost\">Only if you cannot rebuild:</tspan></text><text x=\"64\" y=\"332\"><tspan class=\"s f14 ghost\">add the deny-list</tspan></text></g></svg></div><figcaption class=\"fig__cap\">Rebuild first, and use the deny-list only as a bridge.</figcaption></figure>\n\n<h3 id=\"test-program\">Test program<a class=\"h-anchor\" href=\"#test-program\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Build it with the same Go and base image as your service, and pass it hosts from the test page, such as <code>dv-g3b-emudhra.we-have-a-problem.com</code>.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"testhosts.go\"><div class=\"code-caption\">testhosts.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"testhosts.go\" data-language=\"go\" data-title=\"testhosts.go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Command testhosts dials the upstream eMudhra test hosts and reports what</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// this binary's Go version and trust store do with each one. Every host</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// should fail verification. A completed handshake means this build would</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// accept a certificate that chains through a compromised intermediate.</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">//</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Usage: go run . [host ...]   (defaults to one host; pass the full list)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/tls</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/x509</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">errors</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">net</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">os</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\t\"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">time</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\thosts </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> os.Args[</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tif</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(hosts) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\thosts </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"dv-g3b-emudhra.we-have-a-problem.com\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\tfmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"built with </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> for </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">/</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s\\n\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, runtime.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Version</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(), runtime.GOOS, runtime.GOARCH)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\taccepted </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tfor</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, host </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> hosts {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tverdict, err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> probe</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(host)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tfmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%-9s</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> %s\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, verdict, host)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\tif</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t\tfmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"          </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%v\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// print the exact error your build returns</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\tif</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> verdict </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"ACCEPTED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t\taccepted</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">++</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tif</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> accepted </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tfmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\n%d</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> host(s) accepted: rebuild with Go 1.27.3 or 1.26.10 and update the trust store</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, accepted)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tos.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Exit</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> probe</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">host</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) (</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\tdialer </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">net</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Dialer</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{Timeout: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">10</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.Second}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\tconn, err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tls.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">DialWithDialer</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(dialer, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"tcp\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, net.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">JoinHostPort</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(host, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"443\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">), </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">tls</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Config</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tServerName: host,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tMinVersion: tls.VersionTLS12,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t})</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tif</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tconn.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Close</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\treturn</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"ACCEPTED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tvar</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tinvalid </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">x509</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">CertificateInvalidError</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tunknown </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">x509</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">UnknownAuthorityError</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t\tverify  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">tls</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">CertificateVerificationError</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tswitch</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tcase</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">As</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">invalid) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> invalid.Reason </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> x509.NoValidChains:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\treturn</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"BLOCKED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// the shape Go's fix returns for these keys</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tcase</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">As</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">unknown):</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\treturn</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"UNTRUSTED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// the trust store no longer has a root for this chain</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tcase</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">As</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">invalid), errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">As</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">verify):</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\treturn</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"REJECTED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// some other verification failure; read the error</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\tdefault</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\t\treturn</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"NO TEST\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// DNS, timeout or network: this says nothing about trust</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">\t}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"what-fintech-and-payments-teams-must-do\">What fintech and payments teams must do<a class=\"h-anchor\" href=\"#what-fintech-and-payments-teams-must-do\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<blockquote class=\"callout callout-important\" role=\"note\" aria-label=\"Important\" data-callout=\"important\"><p class=\"callout-head\"><span class=\"callout-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"></line><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"></line></svg></span><span class=\"callout-label\">Important</span></p>\n<p>No payment impact has been reported. This is a list of places to check, not a finding.</p>\n</blockquote>\n<p>Payment systems check certificates in more places than most teams track:</p>\n<ul>\n<li>Outbound calls to payment gateways, banks, KYC and eSign providers. An old Go service on an old CA list would accept a fake partner certificate.</li>\n<li>Partner mTLS. Trust only the CAs that issue your partners’ client certificates, never every public CA.</li>\n<li>Webhooks you send. The sender is a client too and needs the same fix.</li>\n<li>Code signing and devices. Two of the stamps sign software, and Windows trusts eMudhra’s code-signing root. Confirm your Windows machines have Microsoft’s 20 October block, and ask device vendors when their CA list updates.</li>\n<li>Partner chains. Ask each partner which root their certificates chain to. Calls to partners on emSign ECC Root CA - G3 will fail once that root is removed.</li>\n<li>An inventory of the certificates you trust, the fastest way to answer “are we exposed?”</li>\n</ul>\n<p>PCI DSS 4.2.1.1 asks for an inventory of the trusted keys and certificates that protect card numbers in transit. It has been mandatory since 31 March 2025 (<a href=\"https://scotthelme.co.uk/pci-dss-4-0-certificate-transparency-monitoring-is-mandatory/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">summary by Scott Helme<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>).</p>\n<p><a href=\"https://www.cert-in.org.in/PDF/CERT-In_Directions_70B_28.04.2022.pdf\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">CERT-In’s directions of 28 April 2022<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a> require some incidents to be reported within six hours, under Direction (ii). Ask compliance whether this counts.</p>\n<p>I found no RBI or NPCI rule about certificates, and no source links this incident to any payment system. Whether eMudhra’s digital signature (DSC) and eSign certificates are affected is not established, so ask your provider.</p>\n<h2 id=\"reference\">Reference<a class=\"h-anchor\" href=\"#reference\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<h3 id=\"how-an-attack-would-work\">How an attack would work<a class=\"h-anchor\" href=\"#how-an-attack-would-work\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>An attack needs all four of these at once:</p>\n<ol>\n<li>The attacker is on the network path between your program and the server, such as a hostile Wi-Fi network.</li>\n<li>The attacker has one of the eight secret keys. Anyone can now work them out.</li>\n<li>The attacker signs a fake certificate for the site they want to copy.</li>\n<li>Your program still trusts the eMudhra chain and checks no blocklist.</li>\n</ol>\n<p>Browsers that require Certificate Transparency, public logs that every trusted certificate should appear in, would also reject a fake that was never logged. Logging one would make it public, and none has appeared.</p>\n<h3 id=\"why-cancelling-the-certificates-was-not-enough\">Why cancelling the certificates was not enough<a class=\"h-anchor\" href=\"#why-cancelling-the-certificates-was-not-enough\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>eMudhra cancelled, or revoked, all eight on 18 October. But a cancellation only helps programs that check for one.</p>\n<p>Browsers do not wait for that. They ship their own blocklists, which update with the browser (Firefox calls its list <a href=\"https://blog.mozilla.org/security/2015/03/03/revoking-intermediate-certificates-introducing-onecrl/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">OneCRL<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>). Most other programs, including curl and OpenSSL with default settings, do not check for cancellations at all.</p>\n<p>As far as I can tell, Go does not check them either. The Go team gave a simpler reason for its fix: many Linux users do not get automatic updates to their CA list. So Go built the block into its standard library.</p>\n<h3 id=\"how-fast-everyone-reacted\">How fast everyone reacted<a class=\"h-anchor\" href=\"#how-fast-everyone-reacted\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<figure class=\"fig\" id=\"fig-incident-timeline\" data-fig=\"incident-timeline\"><p class=\"fig__title\">Firefox moved in hours. Apple, Go and Microsoft took three days.</p><div class=\"fig__art\" data-layouts style=\"container: fig / inline-size\"><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"wide\" viewBox=\"0 0 708 336\" role=\"img\" aria-labelledby=\"incident-timeline-t incident-timeline-d\" style=\"aspect-ratio: 708 / 336\"><title id=\"incident-timeline-t\">Firefox moved in hours. Apple, Go and Microsoft took three days.</title><desc id=\"incident-timeline-d\">Firefox blocked the keys within three hours of the report, eMudhra revoked them after 13 hours, and Apple, Go and Microsoft followed within three days.</desc><style>:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .f14{font-size:14px}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .mid{text-anchor:middle}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .end{text-anchor:end}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .ink{fill:var(--ink,#151617)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .okbox{fill:var(--ok-wash,rgba(32,180,107,0.13));stroke:var(--acc-green,#20b46b);stroke-width:1}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .axis{stroke:var(--edge-strong,rgba(21,22,23,0.2));stroke-width:.5}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .hl{stroke:var(--ink,#151617);stroke-opacity:.45;stroke-width:.5}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.axis,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.edge,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.bad,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.hl{fill:none}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .e1{--d:var(--dur-enter,240ms)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .e2{--d:calc(2*var(--dur-enter,240ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .e3{--d:calc(2*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .pt{transform-box:fill-box;transform-origin:center}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .bd{transform-box:fill-box;transform-origin:0 50%}@media (prefers-reduced-motion:no-preference){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .ax,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .ev,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .bl,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .nv{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .pt{opacity:0;transform:scale(.5)}}@media (prefers-reduced-motion:no-preference){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .bd{transform:scaleX(0)}}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .ax{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .ev{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:var(--d)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .pt{animation:incident-timeline-pop var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:var(--d)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .pt.sp{animation:incident-timeline-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:var(--d)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .bd{animation:incident-timeline-grow var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(3*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms) + var(--k)*var(--dur-enter,240ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .bl{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(3*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms) + var(--k)*var(--dur-enter,240ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .nv{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(6*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms))}@keyframes incident-timeline-fade{from{opacity:0}}@keyframes incident-timeline-pop{from{opacity:0;transform:scale(.5)}}@keyframes incident-timeline-grow{from{transform:scaleX(0)}}@media (prefers-reduced-motion:reduce){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) *{animation:none!important}}</style><defs><pattern id=\"incident-timeline-hatch\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\"><path d=\"M0 0V4\" class=\"hl\"/></pattern></defs><g class=\"ax\" data-beat=\"1\"><path d=\"M80 168H656\" class=\"axis\"/><path d=\"M80 168v4M224 168v4M368 168v4M512 168v4M656 168v4\" class=\"axis\"/><text x=\"80\" y=\"188\" class=\"s f14 ghost mid\">0</text><text x=\"224\" y=\"188\" class=\"s f14 ghost mid\">1 day</text><text x=\"368\" y=\"188\" class=\"s f14 ghost mid\">2 days</text><text x=\"512\" y=\"188\" class=\"s f14 ghost mid\">3 days</text><text x=\"656\" y=\"188\" class=\"s f14 ghost mid\">4 days</text></g><g class=\"ev e1\" data-mark=\"report\" data-beat=\"2\"><path d=\"M80 160V36H88\" class=\"axis\"/><text x=\"92\" y=\"40\"><tspan class=\"s f14 ink\">Report</tspan><tspan class=\"m f14 ghost\"> T+0</tspan></text><g class=\"pt \"><circle cx=\"80\" cy=\"168\" r=\"6\" class=\"ink\"/></g></g><g class=\"ev e2\" data-mark=\"firefox\" data-beat=\"2\"><path d=\"M96 160V76H104\" class=\"axis\"/><text x=\"108\" y=\"80\"><tspan class=\"s f14 ink\">Firefox blocks</tspan><tspan class=\"m f14 ghost\"> T+2h53m</tspan></text><g class=\"pt sp\"><circle cx=\"96\" cy=\"168\" r=\"6\" class=\"ok\"/></g></g><g class=\"ev e3\" data-mark=\"emudhra-revokes\" data-beat=\"2\"><path d=\"M160 160V116H168\" class=\"axis\"/><text x=\"172\" y=\"120\"><tspan class=\"s f14 ink\">eMudhra revokes</tspan><tspan class=\"m f14 ghost\"> T+13h18m</tspan></text><g class=\"pt \"><circle cx=\"160\" cy=\"168\" r=\"6\" class=\"ok\"/></g></g><rect x=\"248\" y=\"208\" width=\"144\" height=\"12\" rx=\"2\" class=\"okbox bd\" data-mark=\"apple\" style=\"--k: 0\"/><g class=\"bl\" style=\"--k: 0\"><text x=\"240\" y=\"220\" class=\"s f14 ink end\">Apple: 19 Oct</text></g><rect x=\"248\" y=\"236\" width=\"288\" height=\"12\" rx=\"2\" class=\"okbox bd\" data-mark=\"go-release\" style=\"--k: 1\"/><g class=\"bl\" style=\"--k: 1\"><text x=\"240\" y=\"248\" class=\"s f14 ink end\">Go fix: 19 to 20 Oct</text></g><rect x=\"392\" y=\"264\" width=\"144\" height=\"12\" rx=\"2\" class=\"okbox bd\" data-mark=\"microsoft\" style=\"--k: 2\"/><g class=\"bl\" style=\"--k: 2\"><text x=\"384\" y=\"276\" class=\"s f14 ink end\">Microsoft and public news: 20 Oct</text></g><g class=\"nv\" data-mark=\"never\" data-beat=\"6\"><text x=\"80\" y=\"296\" class=\"s f14 ink\">Devices that never update</text><rect x=\"80\" y=\"304\" width=\"576\" height=\"8\" class=\"axis\" fill=\"url(#incident-timeline-hatch)\"/><path d=\"M656 308H668\" class=\"edge\"/><path d=\"M664 305L668 308L664 311\" class=\"edge\"/></g></svg><svg xmlns=\"http://www.w3.org/2000/svg\" data-layout=\"compact\" viewBox=\"0 0 352 416\" role=\"img\" aria-labelledby=\"incident-timeline-tc incident-timeline-dc\" style=\"aspect-ratio: 352 / 416\"><title id=\"incident-timeline-tc\">Firefox moved in hours. Apple, Go and Microsoft took three days.</title><desc id=\"incident-timeline-dc\">Firefox blocked the keys within three hours of the report, eMudhra revoked them after 13 hours, and Apple, Go and Microsoft followed within three days.</desc><style>:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) text{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif;font-weight:400}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .s{font-family:\"Inter Variable\",\"Inter Fallback\",system-ui,-apple-system,sans-serif}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .m{font-family:\"JetBrains Mono\",\"JetBrains Mono Fallback\",ui-monospace,monospace}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .f14{font-size:14px}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .mid{text-anchor:middle}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .ink{fill:var(--ink,#151617)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .ghost{fill:var(--ghost,#6c6f72)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .ok{fill:var(--acc-green,#20b46b)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .okbox{fill:var(--ok-wash,rgba(32,180,107,0.13));stroke:var(--acc-green,#20b46b);stroke-width:1}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .axis{stroke:var(--edge-strong,rgba(21,22,23,0.2));stroke-width:.5}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .edge{stroke:var(--ink,#151617);stroke-opacity:.7;stroke-width:1}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .hl{stroke:var(--ink,#151617);stroke-opacity:.45;stroke-width:.5}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.axis,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.edge,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.bad,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) path.hl{fill:none}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) svg[data-layout=\"compact\"]{display:none}@container fig (max-width:559px){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) svg[data-layout=\"wide\"]{display:none}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) svg[data-layout=\"compact\"]{display:block}}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .e1{--d:var(--dur-enter,240ms)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .e2{--d:calc(2*var(--dur-enter,240ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .e3{--d:calc(2*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .pt{transform-box:fill-box;transform-origin:center}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) .bd{transform-box:fill-box;transform-origin:0 50%}@media (prefers-reduced-motion:no-preference){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .ax,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .ev,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .bl,:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .nv{opacity:0}}@media (prefers-reduced-motion:no-preference){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .pt{opacity:0;transform:scale(.5)}}@media (prefers-reduced-motion:no-preference){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed]:not([data-play]) .bd{transform:scaleX(0)}}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .ax{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .ev{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:var(--d)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .pt{animation:incident-timeline-pop var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:var(--d)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .pt.sp{animation:incident-timeline-pop var(--dur-spring-pop,313ms) var(--ease-spring-pop,linear(0, 0.0911, 0.2968, 0.5354, 0.7535, 0.9229, 1.0354, 1.0956, 1.115, 1.1072, 1.0846, 1.0572, 1.0315, 1.0111, 0.9973, 0.9896, 0.9868, 0.9874, 0.9898, 0.993, 1)) both;animation-delay:var(--d)}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .bd{animation:incident-timeline-grow var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(3*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms) + var(--k)*var(--dur-enter,240ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .bl{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(3*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms) + var(--k)*var(--dur-enter,240ms))}:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"])[data-armed][data-play] .nv{animation:incident-timeline-fade var(--dur-enter,240ms) var(--ease-enter,cubic-bezier(0.16, 1, 0.3, 1)) both;animation-delay:calc(6*var(--dur-enter,240ms) + var(--dur-spring-pop,313ms))}@keyframes incident-timeline-fade{from{opacity:0}}@keyframes incident-timeline-pop{from{opacity:0;transform:scale(.5)}}@keyframes incident-timeline-grow{from{transform:scaleX(0)}}@media (prefers-reduced-motion:reduce){:is(#fig-incident-timeline,[data-fig-clone=\"incident-timeline\"]) *{animation:none!important}}</style><defs><pattern id=\"incident-timeline-hatch-c\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\"><path d=\"M0 0V4\" class=\"hl\"/></pattern></defs><g class=\"ax\" data-beat=\"1\"><path d=\"M32 180H320\" class=\"axis\"/><path d=\"M32 180v4M104 180v4M176 180v4M248 180v4M320 180v4\" class=\"axis\"/><text x=\"32\" y=\"200\" class=\"s f14 ghost mid\">0</text><text x=\"104\" y=\"200\" class=\"s f14 ghost mid\">1 day</text><text x=\"176\" y=\"200\" class=\"s f14 ghost mid\">2 days</text><text x=\"248\" y=\"200\" class=\"s f14 ghost mid\">3 days</text><text x=\"320\" y=\"200\" class=\"s f14 ghost mid\">4 days</text></g><g class=\"ev e1\" data-mark=\"report\" data-beat=\"2\"><path d=\"M32 172V36H40\" class=\"axis\"/><text x=\"44\" y=\"40\"><tspan class=\"s f14 ink\">Report</tspan><tspan class=\"m f14 ghost\"> T+0</tspan></text><g class=\"pt \"><circle cx=\"32\" cy=\"180\" r=\"6\" class=\"ink\"/></g></g><g class=\"ev e2\" data-mark=\"firefox\" data-beat=\"2\"><path d=\"M40 172V84H48\" class=\"axis\"/><text x=\"52\" y=\"88\"><tspan class=\"s f14 ink\">Firefox blocks</tspan><tspan class=\"m f14 ghost\"> T+2h53m</tspan></text><g class=\"pt sp\"><circle cx=\"40\" cy=\"180\" r=\"6\" class=\"ok\"/></g></g><g class=\"ev e3\" data-mark=\"emudhra-revokes\" data-beat=\"2\"><path d=\"M72 172V132H80\" class=\"axis\"/><text x=\"84\" y=\"136\"><tspan class=\"s f14 ink\">eMudhra revokes</tspan><tspan class=\"m f14 ghost\"> T+13h18m</tspan></text><g class=\"pt \"><circle cx=\"72\" cy=\"180\" r=\"6\" class=\"ok\"/></g></g><rect x=\"116\" y=\"244\" width=\"72\" height=\"12\" rx=\"2\" class=\"okbox bd\" data-mark=\"apple\" style=\"--k: 0\"/><g class=\"bl\" style=\"--k: 0\"><text x=\"16\" y=\"236\" class=\"s f14 ink\">Apple: 19 Oct</text></g><rect x=\"116\" y=\"292\" width=\"144\" height=\"12\" rx=\"2\" class=\"okbox bd\" data-mark=\"go-release\" style=\"--k: 1\"/><g class=\"bl\" style=\"--k: 1\"><text x=\"16\" y=\"284\" class=\"s f14 ink\">Go fix: 19 to 20 Oct</text></g><rect x=\"188\" y=\"340\" width=\"72\" height=\"12\" rx=\"2\" class=\"okbox bd\" data-mark=\"microsoft\" style=\"--k: 2\"/><g class=\"bl\" style=\"--k: 2\"><text x=\"16\" y=\"332\" class=\"s f14 ink\">Microsoft and public news: 20 Oct</text></g><g class=\"nv\" data-mark=\"never\" data-beat=\"6\"><text x=\"16\" y=\"380\" class=\"s f14 ink\">Devices that never update</text><rect x=\"32\" y=\"388\" width=\"288\" height=\"8\" class=\"axis\" fill=\"url(#incident-timeline-hatch-c)\"/><path d=\"M320 392H332\" class=\"edge\"/><path d=\"M328 389L332 392L328 395\" class=\"edge\"/></g></svg></div><figcaption class=\"fig__cap\">The first four days after Mozilla received the report, in UTC.</figcaption></figure>\n\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>UTC</th>\n<th>T+</th>\n<th>What happened</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>17 Oct 20:06</td>\n<td>0</td>\n<td>Mozilla receives the report</td>\n</tr>\n<tr>\n<td>17 Oct 21:28</td>\n<td>1h22m</td>\n<td>eMudhra replies and turns off one affected stamp</td>\n</tr>\n<tr>\n<td>17 Oct 21:48</td>\n<td>1h42m</td>\n<td>Mozilla works out the keys itself</td>\n</tr>\n<tr>\n<td>17 Oct 22:59</td>\n<td>2h53m</td>\n<td>Firefox’s blocklist update goes out</td>\n</tr>\n<tr>\n<td>17 Oct</td>\n<td>same day</td>\n<td>Chrome blocks them (time not published)</td>\n</tr>\n<tr>\n<td>18 Oct 09:24</td>\n<td>13h18m</td>\n<td>eMudhra revokes all eight</td>\n</tr>\n<tr>\n<td>19 Oct</td>\n<td>day 2</td>\n<td>Apple blocks them, and the Go team opens issue #82345</td>\n</tr>\n<tr>\n<td>19 to 20 Oct</td>\n<td>day 2 to 3</td>\n<td>Go 1.27.3 and 1.26.10 ship</td>\n</tr>\n<tr>\n<td>20 Oct</td>\n<td>day 3</td>\n<td>Microsoft blocks them, and the news goes public</td>\n</tr>\n<tr>\n<td>20 Oct 21:00</td>\n<td>72h54m</td>\n<td>Debian removes the two roots these stamps chain up to</td>\n</tr>\n</tbody>\n</table></div>\n<h3 id=\"which-software-has-a-fix\">Which software has a fix<a class=\"h-anchor\" href=\"#which-software-has-a-fix\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>These rows come from <a href=\"https://emudhra.we-have-a-problem.com/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Dennis Jackson’s tracker<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a> at Mozilla, through its <a href=\"https://github.com/galadran/we-have-a-problem.com\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">public repository<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, and refresh on each sync.</p>\n<!-- tracker:stats:start -->\n<p><strong>20 of 24</strong> packages patched · <strong>4</strong> pending (FreeBSD, Node.js, Bun, Composer) · synced 2026-10-21 05:50 UTC from <a href=\"https://github.com/galadran/we-have-a-problem.com/commit/bb7c2a8\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">galadran/we-have-a-problem.com@bb7c2a8<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></p>\n<!-- tracker:stats:end -->\n<!-- tracker:patched:start -->\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Software</th>\n<th>Patched version</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>FreeBSD ca_root_nss</td>\n<td><a href=\"https://reviews.freebsd.org/D60905\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">tracking<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Pending</td>\n</tr>\n<tr>\n<td>Node.js</td>\n<td><a href=\"https://github.com/nodejs/node/pull/66871\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">tracking<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Pending</td>\n</tr>\n<tr>\n<td>Bun</td>\n<td><a href=\"https://github.com/oven-sh/bun/pull/46159\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">tracking<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Pending</td>\n</tr>\n<tr>\n<td>Composer ca-bundle</td>\n<td><a href=\"https://github.com/composer/ca-bundle/pull/154\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">1.4.16<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://github.com/composer/ca-bundle/pull/154\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">1.6.0<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Pending</td>\n</tr>\n<tr>\n<td>Ubuntu ca-certificates</td>\n<td><a href=\"https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/2171507\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260816ubuntu0.22.04.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/2171507\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260816ubuntu0.24.04.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/2171507\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260816ubuntu0.26.04.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/2171507\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260816ubuntu0.26.10.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Debian ca-certificates</td>\n<td><a href=\"https://bugs.debian.org/1151413\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20250419~deb12u2<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://bugs.debian.org/1151413\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20250419+deb13u1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://bugs.debian.org/1151413\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260816+nmu1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Arch Linux ca-certificates-mozilla</td>\n<td><a href=\"https://archlinux.org/packages/core/x86_64/ca-certificates-mozilla/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">3.131.1-1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Gentoo ca-certificates</td>\n<td><a href=\"https://bugs.gentoo.org/984601\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260816.3.125<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Fedora ca-certificates</td>\n<td><a href=\"https://bugzilla.redhat.com/show_bug.cgi?id=2556376\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">2026.2.92_v9.0.319<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Chainguard ca-certificates</td>\n<td><a href=\"https://images.chainguard.dev/security/CVE-2026-111943\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20260909-r3<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Alpine Linux ca-certificates</td>\n<td><a href=\"https://pkgs.alpinelinux.org/packages?name=ca-certificates&amp;arch=\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20261020-r0<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>NSS</td>\n<td><a href=\"https://groups.google.com/a/mozilla.org/g/dev-tech-crypto/c/vSxZxnOMMvs\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">3.131.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>curl CA bundle</td>\n<td><a href=\"https://curl.se/docs/caextract.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">2026-10-20<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Cloudflare CFSSL trust store</td>\n<td><a href=\"https://github.com/cloudflare/cfssl_trust/releases/tag/trust-store-2026.10.1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">2026.10.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Homebrew ca-certificates</td>\n<td><a href=\"https://github.com/Homebrew/homebrew-core/blob/d02b8762f4a29859c47a635a0d2683223fea9812/Formula/c/ca-certificates.rb\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">2026-09-25_1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Go</td>\n<td><a href=\"https://groups.google.com/g/golang-announce/c/66pojueaQek\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">1.27.3<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://groups.google.com/g/golang-announce/c/66pojueaQek\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">1.26.10<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Python certifi</td>\n<td><a href=\"https://github.com/certifi/python-certifi/releases/tag/2026.10.19\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">2026.10.19<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>pip</td>\n<td><a href=\"https://github.com/pypa/pip/releases/tag/26.2.2\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">26.2.2<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>uv</td>\n<td><a href=\"https://github.com/astral-sh/uv/releases/tag/0.13.4\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">0.13.4<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Rust rustls-webpki</td>\n<td><a href=\"https://github.com/rustls/webpki/releases/tag/v%2F0.103.16\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">0.103.16<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Rust webpki-roots / webpki-root-certs</td>\n<td><a href=\"https://github.com/rustls/webpki-roots/releases/tag/v%2F1.0.10\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">1.0.10<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Electron</td>\n<td><a href=\"https://github.com/electron/electron/releases/tag/v44.9.1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">44.9.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://github.com/electron/electron/releases/tag/v44.9.1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">43.8.1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>, <a href=\"https://github.com/electron/electron/releases/tag/v44.9.1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">42.11.16<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Elixir castore</td>\n<td><a href=\"https://hex.pm/packages/castore/1.0.22\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">1.0.22<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n<tr>\n<td>Perl Mozilla::CA</td>\n<td><a href=\"https://metacpan.org/release/LWP/Mozilla-CA-20261020\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">20261020<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Patched</td>\n</tr>\n</tbody>\n</table></div>\n<!-- tracker:patched:end -->\n<p>Pending means no fix is listed yet, not that an attack happened. Java, Android and OpenSSL had made no statement, so a missing row does not mean safe.</p>\n<h3 id=\"has-this-happened-before\">Has this happened before?<a class=\"h-anchor\" href=\"#has-this-happened-before\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>CAs have failed before, but those cases took weeks to years to settle. Browsers blocked this one within hours.</p>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Year</th>\n<th>Case</th>\n<th>What happened</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>2008</td>\n<td><a href=\"https://lists.debian.org/debian-security-announce/2008/msg00152.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Debian OpenSSL<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>A bug left only 32,767 possible keys per architecture (<a href=\"https://wiki.debian.org/SSLkeys\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">details<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>). Advisory on 13 May.</td>\n</tr>\n<tr>\n<td>2011</td>\n<td><a href=\"https://blog.mozilla.org/security/2011/08/29/fraudulent-google-com-certificate/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">DigiNotar<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Hacked around 17 June. A fake google.com certificate appeared on 10 July and was used against about 300,000 IP addresses, mostly in Iran. Mozilla removed the root on 29 to 30 August. Bankrupt on 20 September.</td>\n</tr>\n<tr>\n<td>2014</td>\n<td><a href=\"https://learn.microsoft.com/en-us/security-updates/securityadvisories/2014/2982792\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">India CCA and NIC<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Google noticed the problem on 2 July. Microsoft removed three NIC CAs on 10 July.</td>\n</tr>\n<tr>\n<td>2015</td>\n<td><a href=\"https://blog.mozilla.org/security/2015/04/02/distrusting-new-cnnic-certificates/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">CNNIC and MCS Holdings<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Google found the problem on 20 March. CNNIC revoked on 22 March. Mozilla stopped trusting new CNNIC certificates on 2 April.</td>\n</tr>\n<tr>\n<td>2016</td>\n<td><a href=\"https://blog.mozilla.org/security/2016/10/24/distrusting-new-wosign-and-startcom-certificates/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">WoSign and StartCom<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Mozilla stopped trusting new certificates on 24 October, over backdating and an undisclosed purchase.</td>\n</tr>\n<tr>\n<td>2017 to 2018</td>\n<td><a href=\"https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Symantec<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Google announced its plan on 11 September 2017. Chrome 66 (April 2018) and Chrome 70 (October 2018) carried it out.</td>\n</tr>\n<tr>\n<td>2022</td>\n<td>TrustCor</td>\n<td>Mozilla and Microsoft stopped trusting it by 30 November. Chrome followed on 15 December.</td>\n</tr>\n<tr>\n<td>2024</td>\n<td><a href=\"https://security.googleblog.com/2024/06/sustaining-digital-certificate-security.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Entrust<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></td>\n<td>Google announced on 27 June. Chrome blocked it from about 12 November (Chrome 131).</td>\n</tr>\n<tr>\n<td>2026</td>\n<td>eMudhra</td>\n<td>Reported on 17 October at 20:06 UTC. Firefox blocked it at 22:59 UTC the same day.</td>\n</tr>\n</tbody>\n</table></div>\n<h3 id=\"viral-claims-checked\">Viral claims, checked<a class=\"h-anchor\" href=\"#viral-claims-checked\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<ul>\n<li>Claim: SSL is now broken. Verdict: wrong. The encryption worked, one CA made eight weak keys, and Firefox blocked them in under three hours (<a href=\"https://blog.mozilla.org/security/2026/10/20/protecting-firefox-users-following-the-compromise-of-emudhra-intermediate-certificates/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Mozilla<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>).</li>\n<li>Claim: avoid public Wi-Fi, or use a VPN, for weeks. Verdict: overstated. Updated browsers reject the fakes, and a VPN on your laptop does nothing for the servers and devices at risk (<a href=\"https://scotthelme.co.uk/eight-bits-of-trust-emudhras-ca-keys-cracked-in-milliseconds/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Scott Helme<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>).</li>\n<li>Claim: anyone can now make a fake HTTPS certificate for any website. Verdict: true, but it gets blocked. Updated browsers, Apple and Microsoft systems and rebuilt Go programs reject such a fake (<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2083449\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Mozilla bug 2083449<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>).</li>\n<li>Claim: 60 million certificates can no longer be trusted. Verdict: wrong. That is eMudhra’s own lifetime count, while the problem covers 8 keys in 16 certificates (<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2083449\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Mozilla bug 2083449<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>).</li>\n<li>Claim: eMudhra’s private keys leaked. Verdict: wrong. Nothing leaked, because the keys were small enough to work out from the public certificates (<a href=\"https://scotthelme.co.uk/eight-bits-of-trust-emudhras-ca-keys-cracked-in-milliseconds/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Scott Helme<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>).</li>\n</ul>\n<h2 id=\"faq\">FAQ<a class=\"h-anchor\" href=\"#faq\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<h3 id=\"is-https-broken\">Is HTTPS broken?<a class=\"h-anchor\" href=\"#is-https-broken\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>No. The encryption worked as designed. One CA made eight weak keys, and updated browsers and rebuilt Go programs block them.</p>\n<h3 id=\"do-i-need-to-change-my-passwords\">Do I need to change my passwords?<a class=\"h-anchor\" href=\"#do-i-need-to-change-my-passwords\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Not because of this. No fake certificate has been seen, and updated browsers reject anything signed with these keys.</p>\n<h3 id=\"should-i-avoid-public-wi-fi\">Should I avoid public Wi-Fi?<a class=\"h-anchor\" href=\"#should-i-avoid-public-wi-fi\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Not if your browser is up to date. The programs at risk are old servers, containers and devices, not an updated browser.</p>\n<h3 id=\"was-anyone-attacked\">Was anyone attacked?<a class=\"h-anchor\" href=\"#was-anyone-attacked\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>No attack has been seen. The keys were weak from April 2025, so misuse in that time cannot be ruled out.</p>\n<h3 id=\"my-website-uses-an-emudhra-certificate-what-should-i-do\">My website uses an eMudhra certificate. What should I do?<a class=\"h-anchor\" href=\"#my-website-uses-an-emudhra-certificate-what-should-i-do\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Your own key is fine. If your chain ends at emSign ECC Root CA - G3, plan to move, because Mozilla and Chrome are removing that root. eMudhra plans to move about 30,000 certificates to its G1 chain, so ask it when yours will move.</p>\n<h3 id=\"do-i-need-to-release-a-new-version-of-my-go-library\">Do I need to release a new version of my Go library?<a class=\"h-anchor\" href=\"#do-i-need-to-release-a-new-version-of-my-go-library\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>No. The fix lives in the Go version that builds the final program. Tell your users to rebuild with Go 1.27.3 or 1.26.10, and do not raise your <code>go</code> line just for this.</p>\n<h2 id=\"updates\">Updates<a class=\"h-anchor\" href=\"#updates\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Date (UTC)</th>\n<th>Change</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>21 Oct 2026</td>\n<td>Published.</td>\n</tr>\n</tbody>\n</table></div>\n<!-- tracker:changelog:start -->\n<p>No tracker changes since publication.</p>\n<!-- tracker:changelog:end -->\n<h2 id=\"sources\">Sources<a class=\"h-anchor\" href=\"#sources\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p><strong>Start here</strong></p>\n<ul>\n<li><a href=\"https://github.com/golang/go/issues/82345\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go issue #82345<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the Go team’s tracking issue for the block.</li>\n<li><a href=\"https://threatlandscape.io/blog/go-hard-blocks-emudhra-intermediate-ca-keys-cve-2026-111943\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">ThreatLandscape on Go’s hard block<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: what the Go fix covers.</li>\n<li><a href=\"https://emudhra.we-have-a-problem.com/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">we-have-a-problem.com<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Dennis Jackson’s tracker, browser test and test hosts.</li>\n<li><a href=\"https://blog.cloudflare.com/emudhra-certificate-compromise/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Cloudflare’s write-up<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: how Cloudflare checked and protected its own products.</li>\n</ul>\n<p><strong>Primary</strong></p>\n<ul>\n<li><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2083449\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Mozilla bug 2083449<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the incident bug, with the timeline and eMudhra’s first report.</li>\n<li><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1970728\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Mozilla bug 1970728<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: an earlier eMudhra signing problem from 2025.</li>\n<li><a href=\"https://blog.mozilla.org/security/2026/10/20/protecting-firefox-users-following-the-compromise-of-emudhra-intermediate-certificates/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Mozilla Security Blog<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: how Firefox users were protected.</li>\n<li><a href=\"https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/0R3XLJL6FuE\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">dev-security-policy thread<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Mozilla’s public discussion.</li>\n<li><a href=\"https://groups.google.com/g/golang-announce/c/66pojueaQek\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">golang-announce<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the Go 1.27.3 and 1.26.10 announcement.</li>\n<li><a href=\"https://github.com/golang/go/commit/7f86f95\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go commit 7f86f95<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the change that blocks the eight keys.</li>\n<li><a href=\"https://go.dev/doc/devel/release#go1.27.3\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go release history<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: official release dates.</li>\n<li><a href=\"https://emudhra.com/en/post/certificate-security-incident\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">eMudhra’s statement<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the CA’s own account.</li>\n<li><a href=\"https://lists.debian.org/debian-security-announce/2026/msg00487.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Debian DSA-6572-1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Debian’s root removal.</li>\n<li><a href=\"https://github.com/galadran/we-have-a-problem.com\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">galadran/we-have-a-problem.com<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the tracker’s source data.</li>\n</ul>\n<p><strong>Analysis</strong></p>\n<ul>\n<li><a href=\"https://scotthelme.co.uk/eight-bits-of-trust-emudhras-ca-keys-cracked-in-milliseconds/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Scott Helme, Eight bits of trust<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: a clear walkthrough of the keys and who is exposed.</li>\n<li><a href=\"https://www.theregister.com/security/2026/10/20/indian-certification-authority-emudhras-private-keys-compromised-one-of-them-was-the-number-4/5304312\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">The Register<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: news report.</li>\n<li><a href=\"https://lwn.net/Articles/1101643/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">LWN<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: what it means for Linux CA lists.</li>\n<li><a href=\"https://thehackernews.com/2026/10/eight-emudhra-ca-keys-compromised.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">The Hacker News<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: news report.</li>\n</ul>\n<p><strong>Background and history</strong></p>\n<ul>\n<li><a href=\"https://blog.mozilla.org/security/2015/03/03/revoking-intermediate-certificates-introducing-onecrl/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Introducing OneCRL<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: how Firefox blocks intermediate CAs.</li>\n<li><a href=\"https://letsencrypt.org/2025/05/14/ending-tls-client-authentication\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Let’s Encrypt ends TLS client authentication<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: why public CAs rarely issue client certificates now.</li>\n<li><a href=\"https://blog.mozilla.org/security/2011/08/29/fraudulent-google-com-certificate/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">DigiNotar<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Mozilla’s 2011 response.</li>\n<li><a href=\"https://learn.microsoft.com/en-us/security-updates/securityadvisories/2014/2982792\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Microsoft advisory 2982792<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the 2014 removal of three NIC CAs.</li>\n<li><a href=\"https://blog.mozilla.org/security/2015/04/02/distrusting-new-cnnic-certificates/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Distrusting new CNNIC certificates<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Mozilla’s 2015 decision.</li>\n<li><a href=\"https://blog.mozilla.org/security/2016/10/24/distrusting-new-wosign-and-startcom-certificates/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Distrusting WoSign and StartCom<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Mozilla’s 2016 decision.</li>\n<li><a href=\"https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Chrome’s plan to distrust Symantec<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Google’s 2017 schedule.</li>\n<li><a href=\"https://security.googleblog.com/2024/06/sustaining-digital-certificate-security.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Sustaining digital certificate security<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: Google’s 2024 Entrust decision.</li>\n<li><a href=\"https://lists.debian.org/debian-security-announce/2008/msg00152.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Debian DSA-1571-1<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: the 2008 Debian OpenSSL advisory.</li>\n<li><a href=\"https://wiki.debian.org/SSLkeys\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Debian SSLkeys wiki<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: how many keys the 2008 bug could make.</li>\n</ul>\n<p><strong>Regulatory</strong></p>\n<ul>\n<li><a href=\"https://www.cert-in.org.in/PDF/CERT-In_Directions_70B_28.04.2022.pdf\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">CERT-In directions, 28 April 2022<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: India’s six-hour reporting directions.</li>\n<li><a href=\"https://rbi.org.in/Scripts/BS_CircularIndexDisplay.aspx?Id=12562\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">RBI Master Direction on IT Governance<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: RBI/2023-24/107, with a clause on cryptographic controls.</li>\n<li><a href=\"https://rbi.org.in/scripts/BS_ViewMasDirections.aspx?id=12486\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">RBI Master Direction on IT Outsourcing<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: RBI/2023-24/102, on IT service providers.</li>\n<li><a href=\"https://scotthelme.co.uk/pci-dss-4-0-certificate-transparency-monitoring-is-mandatory/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Scott Helme on PCI DSS 4.0<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>: a summary of requirement 4.2.1.1.</li>\n</ul>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-1-27-interactive-tour/",
      "url": "https://ashwingopalsamy.in/blog/go-1-27-interactive-tour/",
      "title": "Go 1.27 Interactive Tour",
      "content_text": "An in-depth, hands-on exploration of language features, runtime optimizations, and standard library evolutions in Go 1.27.",
      "date_published": "2026-08-20T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Go 1.27 maintains the <a href=\"https://go.dev/doc/go1compat\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go 1 compatibility guarantee<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a> while delivering significant architectural updates to the compiler type system, small-object allocation path, goroutine leak forensics, post-quantum cryptography, and deterministic test infrastructure.</p>\n<p>Below is a structured technical walkthrough of every notable change with runnable, editable snippets, mechanical explanations, and verified links to the Go specifications, proposals, and compiler CLs.</p>\n<h3 id=\"in-this-tour\">In this tour<a class=\"h-anchor\" href=\"#in-this-tour\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<ul>\n<li><a href=\"#generic-methods\">Generic methods on types</a></li>\n<li><a href=\"#struct-selectors\">Struct literal field selectors</a></li>\n<li><a href=\"#type-inference\">Generalized function type inference</a></li>\n<li><a href=\"#malloc\">Size-specialized fast malloc (&lt;80B)</a></li>\n<li><a href=\"#goroutineleak\">Goroutine leak profiler</a></li>\n<li><a href=\"#tracebacklabels\">Goroutine labels in tracebacks</a></li>\n<li><a href=\"#uuid-v7\">Native UUID package &amp; UUIDv7</a></li>\n<li><a href=\"#json-v2\">encoding/json/v2 &amp; streaming jsontext</a></li>\n<li><a href=\"#crypto-mldsa\">Post-quantum signatures &amp; TLS 1.3</a></li>\n<li><a href=\"#simd\">Portable &amp; architecture SIMD (simd)</a></li>\n<li><a href=\"#synctest\">Deterministic time (synctest &amp; httptest)</a></li>\n<li><a href=\"#cutlast-hasher\">CutLast &amp; extensible maphash.Hasher</a></li>\n<li><a href=\"#divide-rand\">math/big.Int.Divide &amp; rand.Rand.N</a></li>\n<li><a href=\"#db-scanning\">Zero-alloc database scanning (database/sql)</a></li>\n<li><a href=\"#http-upgrades\">HTTP/1 auto-drain, HTTP/2 &amp; Sockets</a></li>\n<li><a href=\"#toolchain\">Modernized go fix, @file &amp; CI JSON</a></li>\n<li><a href=\"#hidden-gems\">Compiler SSA, runtime/secret &amp; Metaprogramming</a></li>\n</ul>\n<h2 id=\"generic-methods-on-types\">Generic methods on types<a class=\"h-anchor\" href=\"#generic-methods-on-types\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"generic-methods\" class=\"go-tour-section\">\n<p>Prior to Go 1.27, type parameters were restricted to top-level function declarations and type definitions. Methods on structs could only consume the type parameters already attached to the receiver. In Go 1.27, concrete type methods can declare their own independent type parameters directly:</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"dispatcher.go\"><div class=\"code-caption\">dispatcher.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"dispatcher.go\" data-language=\"go\" data-title=\"dispatcher.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Dispatcher</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Endpoint </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// In Go 1.27, concrete type methods declare their own type parameters:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">d </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Dispatcher</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Call</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Req</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> any</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Resp</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> any</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">](</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">req</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Req</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">handle</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Req</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Resp</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Resp</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Dispatching via </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, d.Endpoint)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> handle</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(req)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> PaymentReq</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{ Account </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; Amount </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> PaymentResp</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{ Status </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; RefID </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    d </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Dispatcher</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{Endpoint: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"https://ledger.internal/rpc\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    req </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> PaymentReq</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{Account: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"ACC-9921\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, Amount: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">5000</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Type inference handles Req=PaymentReq and Resp=PaymentResp automatically:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    resp </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> d.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Call</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(req, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">r</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> PaymentReq</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">PaymentResp</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> PaymentResp</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{Status: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"AUTHORIZED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, RefID: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"TX-7718\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    })</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Status: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> (Ref: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, resp.Status, resp.RefID)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Crucial Invariant: Interfaces Remain Non-Generic</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Methods of <strong>interfaces cannot declare type parameters</strong>, and generic methods cannot satisfy interface contracts. Allowing generic interface methods would require JIT dictionary passing or boxing tables at runtime. By constraining generic methods to concrete types, Go preserves static monomorphization and zero-allocation dynamic dispatch.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"generic-methods\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://tip.golang.org/ref/spec#Method_declarations\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">Spec: Method declarations ↗</a>\n    <a href=\"https://go.dev/issue/77273\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#77273 ↗</a>\n    <a href=\"https://go.dev/cl/524b860\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 524b860 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Robert Griesemer & Mark Freeman</div>\n</div>\n</div>\n<h2 id=\"struct-literal-field-selectors\">Struct literal field selectors<a class=\"h-anchor\" href=\"#struct-literal-field-selectors\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"struct-selectors\" class=\"go-tour-section\">\n<p>A key in a struct literal may now be any valid field selector for the struct type, rather than strictly a top-level field name. This resolves a long-standing proposal (<a href=\"https://go.dev/issue/9859\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">#9859<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a>), allowing promoted fields from embedded structs and nested field selectors to be initialized directly at the top level.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"struct_selectors.go\"><div class=\"code-caption\">struct_selectors.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"struct_selectors.go\" data-language=\"go\" data-title=\"struct_selectors.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Header</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    TraceID </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Payload</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Account </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Amount  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> WireMessage</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">    Header</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Data </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Payload</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Go 1.27: Promoted field TraceID and nested Data selectors are initialized directly:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    msg </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> WireMessage</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        TraceID:      </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"tr-9918\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        Data.Account: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"ACC-101\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        Data.Amount:  </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">5000</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Trace: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> | Account: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> | $</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%d\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, msg.TraceID, msg.Data.Account, msg.Data.Amount)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Protocol Buffers & Hierarchical Schemas</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Embedded models in databases, protocol schemas, and configuration structures no longer require nested composite literals. This eliminates visual nesting noise while preserving compile-time type verification.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"struct-selectors\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://tip.golang.org/ref/spec#Composite_literals\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">Spec: Composite literals ↗</a>\n    <a href=\"https://go.dev/issue/9859\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#9859 ↗</a>\n    <a href=\"https://go.dev/cl/1a8f9d8\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 1a8f9d8 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Robert Griesemer & Cherry Mui</div>\n</div>\n</div>\n<h2 id=\"generalized-function-type-inference\">Generalized function type inference<a class=\"h-anchor\" href=\"#generalized-function-type-inference\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"type-inference\" class=\"go-tour-section\">\n<p>Function type inference now applies in all contexts where a generic function is assigned or converted to a matching function type. In earlier Go versions, type inference only worked during direct function calls or simple variable assignments; placing generic functions into slice literals or map entries required manual instantiation (e.g. <code>fn[int]</code>).</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"inference.go\"><div class=\"code-caption\">inference.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"inference.go\" data-language=\"go\" data-title=\"inference.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">strings</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> identity</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> any</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">](</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">v</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> { </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> v }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> sanitize</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ~</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">](</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">v</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> { </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(strings.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">TrimSpace</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(v))) }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // In Go 1.27, target slice element type drives inference automatically:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    pipeline </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{identity, sanitize}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    input </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"   user_alice   \"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    res </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> input</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, step </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> pipeline {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        res </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> step</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(res)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Validated:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, res)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Declarative Middleware & Transformer Tables</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Registering generic middlewares, validator chains, or arithmetic pipelines in lookup tables no longer requires repetitive manual type annotations. The compiler infers type parameters from the receiving collection's type contract.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"type-inference\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://tip.golang.org/ref/spec#Assignability\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">Spec: Assignability ↗</a>\n    <a href=\"https://go.dev/issue/77245\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#77245 ↗</a>\n    <a href=\"https://go.dev/cl/ef06728\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL ef06728 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Robert Griesemer & Mark Freeman</div>\n</div>\n</div>\n<h2 id=\"size-specialized-memory-allocation-80b\">Size-specialized memory allocation (&lt;80B)<a class=\"h-anchor\" href=\"#size-specialized-memory-allocation-80b\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"malloc\" class=\"go-tour-section\">\n<p>The Go 1.27 compiler’s SSA backend directly generates calls to specialized allocation entry points for small heap objects (&lt;80 bytes). By bypassing generic size-class lookup arithmetic and branching logic inside <code>runtime.mallocgc</code>, allocation overhead for small structs is reduced by up to 30%.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"order_alloc.go\"><div class=\"code-caption\">order_alloc.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"order_alloc.go\" data-language=\"go\" data-title=\"order_alloc.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">time</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Order</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ID    </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // 8B</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Price </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">  // 8B</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Qty   </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int32</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">  // 4B</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Side  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint8</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">  // 1B</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    start </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Now</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    orders </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">([]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Order</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">100_000</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 100_000</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; i</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">++</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        orders[i] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Order</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{ID: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(i), Price: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">14500</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, Qty: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">10</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, Side: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    elapsed </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Since</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(start)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Allocated 100,000 small structs in </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%v</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> (9.8 ns/op)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, elapsed)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Runtime Tradeoffs & Opt-Out</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Across real-world allocation-heavy workloads, this yields an estimated <strong>~1% overall application speedup</strong> with a modest binary size increase of ~60 KB. If needed, build with <code>GOEXPERIMENT=nosizespecializedmalloc</code> (temporary opt-out removed in Go 1.28).\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"malloc\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://go.dev/doc/go1.27#runtime\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">Release Notes: Faster memory allocation ↗</a>\n    <a href=\"https://go.dev/issue/79286\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#79286 ↗</a>\n    <a href=\"https://go.dev/cl/2a93576\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 2a93576 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Michael Matloob</div>\n</div>\n</div>\n<h2 id=\"goroutine-leak-profiler\">Goroutine leak profiler<a class=\"h-anchor\" href=\"#goroutine-leak-profiler\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"goroutineleak\" class=\"go-tour-section\">\n<p>Previously available as an experiment in Go 1.26, the <code>goroutineleak</code> profile graduates to general availability in Go 1.27. It is exposed through <code>runtime/pprof</code> and via the HTTP endpoint <code>/debug/pprof/goroutineleak</code> in <code>net/http/pprof</code>.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"leak_forensics.go\"><div class=\"code-caption\">leak_forensics.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"leak_forensics.go\" data-language=\"go\" data-title=\"leak_forensics.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">os</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime/pprof</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> leak</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ch </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">chan</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// channel held only by this orphaned goroutine</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ch </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">              // blocks indefinitely: no receiver can ever exist</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    go</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> leak</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    runtime.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Gosched</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// allow the leaked goroutine to park</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Inspect the GC-backed leak profiler:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    pprof.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Lookup</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"goroutineleak\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">).</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">WriteTo</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(os.Stdout, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">GC Reachability Detection Algorithm</span>\n  </div>\n  <p class=\"go-callout-body\">\n    The runtime detects leaked goroutines by analyzing the garbage collector's reachability graph: if goroutine <code>G</code> is parked on synchronization primitive <code>P</code> (channel, <code>sync.Mutex</code>, <code>sync.Cond</code>), and <code>P</code> is unreachable from any runnable goroutine, <code>G</code> can never wake up.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"goroutineleak\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/runtime/pprof#Lookup\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">pprof.Lookup (goroutineleak) ↗</a>\n    <a href=\"https://go.dev/issue/74609\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#74609 ↗</a>\n    <a href=\"https://go.dev/cl/253aa2a\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 253aa2a ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Vlad Saioc (Uber), Austin Clements & Cherry Mui</div>\n</div>\n</div>\n<h2 id=\"goroutine-labels-in-tracebacks\">Goroutine labels in tracebacks<a class=\"h-anchor\" href=\"#goroutine-labels-in-tracebacks\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"tracebacklabels\" class=\"go-tour-section\">\n<p>For modules specifying Go 1.27 or later in <code>go.mod</code>, panic dumps, <code>SIGQUIT</code> traces, and <code>runtime.Stack()</code> output automatically display <code>runtime/pprof</code> goroutine labels directly inside the header line of each goroutine.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"labels_traceback.go\"><div class=\"code-caption\">labels_traceback.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"labels_traceback.go\" data-language=\"go\" data-title=\"labels_traceback.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">context</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime/pprof</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ctx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> context.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Background</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    pprof.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Do</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(ctx, pprof.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Labels</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"tenant\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"acme-corp\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"request\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"req_9921\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">), </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">ctx</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        buf </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">([]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1024</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        n </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> runtime.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Stack</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(buf, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">false</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, buf[:n])</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Production Incident Forensics</span>\n  </div>\n  <p class=\"go-callout-body\">\n    When a service panics under high concurrency, disambiguating which tenant or request ID caused the failure among hundreds of identical goroutines previously required custom recovery middleware. If labels contain sensitive PII, disable via <code>GODEBUG=tracebacklabels=0</code>.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"tracebacklabels\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/runtime/pprof#Do\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">pprof.Do documentation ↗</a>\n    <a href=\"https://go.dev/issue/76349\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#76349 ↗</a>\n    <a href=\"https://go.dev/cl/3694f33\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 3694f33 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">David Finkel</div>\n</div>\n</div>\n<h2 id=\"native-uuid-package--uuidv7\">Native UUID package &amp; UUIDv7<a class=\"h-anchor\" href=\"#native-uuid-package--uuidv7\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"uuid-v7\" class=\"go-tour-section\">\n<p>Go 1.27 introduces a standard library <code>uuid</code> package implementing RFC 9562. It provides cryptographically secure random UUIDv4 (<code>uuid.NewV4()</code>) and time-ordered UUIDv7 (<code>uuid.NewV7()</code>). UUID values are comparable with <code>==</code> and implement standard text marshaling interfaces.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"uuid_v7.go\"><div class=\"code-caption\">uuid_v7.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"uuid_v7.go\" data-language=\"go\" data-title=\"uuid_v7.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">time</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">uuid</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    id </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> uuid.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">NewV7</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"UUIDv7:   \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, id.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">String</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Version:  \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, id.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Version</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Timestamp:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, id.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Time</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">().</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">UTC</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">().</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Format</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(time.RFC3339Nano))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Nil UUID: \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, uuid.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Max UUID: \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, uuid.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Max</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">B-Tree Index Locality vs Random I/O</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Random UUIDv4 distributes writes randomly across database index leaves, causing heavy page splits and random I/O in PostgreSQL, MySQL, and CockroachDB. UUIDv7 embeds a 48-bit millisecond timestamp in the high bits, preserving strict append locality.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"uuid-v7\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/uuid\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">package uuid (RFC 9562) ↗</a>\n    <a href=\"https://go.dev/issue/62026\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#62026 ↗</a>\n    <a href=\"https://go.dev/cl/2fb2b98\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 2fb2b98 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Damien Neil</div>\n</div>\n</div>\n<h2 id=\"encodingjsonv2--streaming-jsontext\">encoding/json/v2 &amp; streaming jsontext<a class=\"h-anchor\" href=\"#encodingjsonv2--streaming-jsontext\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"json-v2\" class=\"go-tour-section\">\n<p>The long-awaited <code>encoding/json/v2</code> and <code>encoding/json/jsontext</code> packages graduate out of experimental status in Go 1.27. Furthermore, the classic <code>encoding/json</code> package is now backed by the v2 engine under the hood. Unmarshaling is 3.1x faster, and strict validation rejects duplicate keys by default.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"json_v2_security.go\"><div class=\"code-caption\">json_v2_security.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"json_v2_security.go\" data-language=\"go\" data-title=\"json_v2_security.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">encoding/json/jsontext</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">encoding/json/v2</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Payment</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Account </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> `json:\"account\"`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Amount  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">  `json:\"amount\"`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Malicious payload with duplicate keys attempting parameter smuggling:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    payload </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">`{\"account\":\"ACC-101\",\"amount\":100,\"amount\":9999999}`</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Payment</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> json.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Unmarshal</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(payload, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">p, jsontext.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">AllowDuplicateNames</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">false</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Rejected:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Map Ordering & Opt-Out</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Unlike v1, v2 does not sort map keys by default to optimize performance; pass <code>json.Deterministic(true)</code> when stable output is required (e.g. golden tests or hashing). If compatibility issues arise, revert via <code>GOEXPERIMENT=nojsonv2</code>.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"json-v2\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/encoding/json/v2\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">package encoding/json/v2 ↗</a>\n    <a href=\"https://go.dev/issue/71497\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#71497 ↗</a>\n    <a href=\"https://go.dev/cl/e62d3e6\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL e62d3e6 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Joe Tsai, Damien Neil & Daniel Martí</div>\n</div>\n</div>\n<h2 id=\"post-quantum-signatures--tls-13\">Post-quantum signatures &amp; TLS 1.3<a class=\"h-anchor\" href=\"#post-quantum-signatures--tls-13\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"crypto-mldsa\" class=\"go-tour-section\">\n<p>The new <code>crypto/mldsa</code> package implements NIST FIPS 204 Module-Lattice-Based Digital Signature Algorithm (ML-DSA). In tandem, <code>crypto/tls</code> introduces <code>MLKEM1024</code> post-quantum key encapsulation in <code>Config.CurvePreferences</code>, <code>ConnectionState.LocalCertificate</code> to inspect presented certificate chains, and adds <code>crypto.MLDSAMu</code> hash signaling.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"pqc_sign.go\"><div class=\"code-caption\">pqc_sign.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"pqc_sign.go\" data-language=\"go\" data-title=\"pqc_sign.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/mldsa</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/rand</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Generate NIST FIPS 204 ML-DSA-65 post-quantum key pair:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    priv, err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> mldsa.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">GenerateKey</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(mldsa.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">MLDSA65</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">        panic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    msg </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"SETTLEMENT:FEDNOW:50000000:USD\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    sig, _ </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> priv.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sign</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(rand.Reader, msg, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Scheme:    \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, mldsa.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">MLDSA65</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Sig Size:  \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(sig), </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"bytes\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Verified:  \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, mldsa.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Verify</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(priv.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">PublicKey</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(), msg, sig, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">PQC Standards, Cryptotest & OS Root Certificates</span>\n  </div>\n  <p class=\"go-callout-body\">\n    <code>Config.Rand</code> is deprecated in favor of <code>testing/cryptotest.SetGlobalRandom</code> for deterministic testing. Furthermore, <code>crypto/x509</code> now respects <code>SSL_CERT_FILE</code> and <code>SSL_CERT_DIR</code> on Windows and macOS, loading roots directly with the native Go verifier.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"crypto-mldsa\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/crypto/mldsa\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">package crypto/mldsa (FIPS 204) ↗</a>\n    <a href=\"https://go.dev/issue/77626\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#77626 ↗</a>\n    <a href=\"https://go.dev/cl/7bc111c\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 7bc111c ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Filippo Valsorda & Daniel McCarney</div>\n</div>\n</div>\n<h2 id=\"portable--architecture-simd-simd\">Portable &amp; architecture SIMD (simd)<a class=\"h-anchor\" href=\"#portable--architecture-simd-simd\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"simd\" class=\"go-tour-section\">\n<p>Go 1.27 introduces an experimental <code>simd</code> package providing portable, vector-size-agnostic vector intrinsics enabled via <code>GOEXPERIMENT=simd</code>. Vector types like <code>simd.Float32s</code> dynamically adapt to host hardware widths (AVX2, AVX-512, ARM64 Neon) with automatic pure-Go fallback.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"simd_vector.go\"><div class=\"code-caption\">simd_vector.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"simd_vector.go\" data-language=\"go\" data-title=\"simd_vector.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">simd</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    a </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">2</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">3</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">5</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">6</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">7</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">8</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    b </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">10</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">20</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">30</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">40</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">50</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">60</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">70</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">80</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    va </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> simd.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">LoadFloat32s</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// dynamically loads va.Len() lanes</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    vb </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> simd.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">LoadFloat32s</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(b)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    sum </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> va.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Add</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(vb) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// single-instruction parallel addition</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    out </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">([]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, sum.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    sum.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Store</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(out)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Vector sum:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, out[:</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">])</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Standard Library Dogfooding</span>\n  </div>\n  <p class=\"go-callout-body\">\n    The Go runtime's new Swiss Table map implementation already utilizes <code>simd/archsimd</code> under the hood to accelerate <code>MemHash32</code> and <code>MemHash64</code> lookups.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"simd\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/simd\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">package simd ↗</a>\n    <a href=\"https://go.dev/issue/78902\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#78902 ↗</a>\n    <a href=\"https://go.dev/cl/44a4be9\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 44a4be9 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">David Chase, Junyang Shao & Cherry Mui</div>\n</div>\n</div>\n<h2 id=\"deterministic-time-testing-synctest--httptest\">Deterministic time testing (synctest &amp; httptest)<a class=\"h-anchor\" href=\"#deterministic-time-testing-synctest--httptest\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"synctest\" class=\"go-tour-section\">\n<p>Go 1.27 introduces <code>synctest.Sleep</code>, combining <code>time.Sleep</code> and <code>synctest.Wait</code> to advance synthetic clocks and wait for goroutines to settle in a single call. In tandem, <code>httptest.NewTestServer</code> creates in-memory test servers without opening real TCP ports, pairing with <code>synctest</code> for sub-millisecond deterministic integration testing.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"synctest_demo.go\"><div class=\"code-caption\">synctest_demo.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"synctest_demo.go\" data-language=\"go\" data-title=\"synctest_demo.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">testing</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">testing/synctest</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">time</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    t </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">testing</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{} </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// in real tests, use *testing.T</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    synctest.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Test</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(t, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">t</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">testing</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        start </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Now</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        go</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sleep</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.Second)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Worker completed in virtual time:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Since</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(start))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }()</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Advance fake clock by 2s and wait for background workers:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        synctest.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sleep</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">2</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.Second)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Main synthetic time:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Since</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(start))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Eliminating Flaky CI Clocks</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Testing complex consensus timeouts, cache TTL expirations, and backoff retries traditionally relied on real wall-clock sleeps or fragile mock interfaces. Virtual time bubbles advance instantly when goroutines block, resulting in 100% deterministic test suites.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"synctest\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/testing/synctest\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">package testing/synctest ↗</a>\n    <a href=\"https://go.dev/issue/77169\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#77169 ↗</a>\n    <a href=\"https://go.dev/cl/8ac41b5\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 8ac41b5 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Damien Neil</div>\n</div>\n</div>\n<h2 id=\"cutlast--extensible-maphashhasher\">CutLast &amp; extensible maphash.Hasher<a class=\"h-anchor\" href=\"#cutlast--extensible-maphashhasher\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"cutlast-hasher\" class=\"go-tour-section\">\n<p>Go 1.27 adds <code>strings.CutLast</code> and <code>bytes.CutLast</code> to slice around the <em>last</em> occurrence of a separator. Additionally, <code>hash/maphash</code> introduces <code>Hasher[T]</code> and <code>ComparableHasher[T]</code>, standardizing hashing contracts for custom data structures and case-insensitive lookups.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"hasher_cutlast.go\"><div class=\"code-caption\">hasher_cutlast.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"hasher_cutlast.go\" data-language=\"go\" data-title=\"hasher_cutlast.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">hash/maphash</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">strings</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> CaseInsensitiveHasher</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">CaseInsensitiveHasher</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Hash</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">h</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">maphash</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Hash</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">s</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    h.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">WriteString</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(strings.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">ToLower</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(s))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">CaseInsensitiveHasher</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Equal</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">x</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">y</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> strings.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">EqualFold</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(x, y)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // 1. CutLast:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    before, after, found </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> strings.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">CutLast</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"api/v1/ledger/tx_9918.json\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\".\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Base: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%q</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> | Ext: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%q</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> | Found: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%v\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, before, after, found)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // 2. Extensible maphash.Hasher:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> h </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">maphash</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Hasher</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> CaseInsensitiveHasher</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Equal Fold:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, h.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Equal</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"GOPHER\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"gopher\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Standard Library Integration</span>\n  </div>\n  <p class=\"go-callout-body\">\n    <code>go/types</code> now provides <code>Hasher</code> and <code>HasherIgnoreTags</code> implementing <code>maphash.Hasher</code> for type nodes.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"cutlast-hasher\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/hash/maphash#Hasher\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">maphash.Hasher interface ↗</a>\n    <a href=\"https://go.dev/issue/70471\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#70471 ↗</a>\n    <a href=\"https://go.dev/cl/330aec8\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 330aec8 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Alan Donovan & qiulaidongfeng</div>\n</div>\n</div>\n<h2 id=\"mathbigintdivide--randrandn\">math/big.Int.Divide &amp; rand.Rand.N<a class=\"h-anchor\" href=\"#mathbigintdivide--randrandn\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"divide-rand\" class=\"go-tour-section\">\n<p><code>math/big</code> adds <code>Int.Divide</code>, computing quotient and remainder with explicit rounding modes: <code>Trunc</code>, <code>Floor</code>, <code>Round</code>, and <code>Ceil</code>. In addition, <code>math/rand/v2</code> adds the generic method <code>(*Rand).N</code> on instances.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"divide_rand.go\"><div class=\"code-caption\">divide_rand.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"divide_rand.go\" data-language=\"go\" data-title=\"divide_rand.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">math/big</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">math/rand/v2</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    x, y </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> big.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">NewInt</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">7</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">), big.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">NewInt</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">2</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    q, r </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> new</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">big</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">), </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">new</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">big</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    q.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Divide</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(x, y, r, big.Ceil)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Ceil:  q=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> r=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, q, r)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    q.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Divide</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(x, y, r, big.Floor)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Floor: q=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> r=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, q, r)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Generic random generation on instance:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    rng </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> rand.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(rand.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">NewPCG</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">42</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">108</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Generic uint16 in [0, 500):\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, rng.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">N</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint16</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">500</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Financial Currency Rounding</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Traditional integer division always truncates toward zero. Supporting mathematical Floor and Ceil modes ensures precise monetary interest and ledger fee calculations.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"divide-rand\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/math/big#Int.Divide\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">math/big.Int.Divide ↗</a>\n    <a href=\"https://go.dev/issue/76821\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#76821 ↗</a>\n    <a href=\"https://go.dev/cl/8f7f951\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 8f7f951 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Armin Günther</div>\n</div>\n</div>\n<h2 id=\"zero-alloc-database-scanning-databasesql\">Zero-alloc database scanning (database/sql)<a class=\"h-anchor\" href=\"#zero-alloc-database-scanning-databasesql\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"db-scanning\" class=\"go-tour-section\">\n<p>Go 1.27 upgrades <code>database/sql</code> and <code>database/sql/driver</code> to eliminate interface allocation bottlenecks in high-frequency database queries. The new <code>driver.RowsColumnScanner</code> interface allows drivers (such as pgx, MySQL, and ClickHouse) to scan directly into user destination pointers, while <code>database/sql.ConvertAssign</code> exposes driver-level type conversion logic.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"db_scan.go\"><div class=\"code-caption\">db_scan.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"db_scan.go\" data-language=\"go\" data-title=\"db_scan.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">database/sql</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // database/sql.ConvertAssign allows direct driver-level assignment:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> dest </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    src </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"9948201\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> sql.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">ConvertAssign</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">dest, src)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">        panic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Converted and assigned directly: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%d</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> (type: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%T</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, dest, dest)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">High-Throughput Driver Optimization</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Traditional <code>Rows.Scan</code> creates intermediate <code>driver.Value</code> interface wrappers for every row and column. By implementing <code>RowsColumnScanner</code>, drivers stream wire bytes directly into destination memory with zero intermediate allocations.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"db-scanning\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://pkg.go.dev/database/sql/driver#RowsColumnScanner\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">driver.RowsColumnScanner ↗</a>\n    <a href=\"https://go.dev/issue/69018\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#69018 ↗</a>\n    <a href=\"https://go.dev/cl/720110\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 720110 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Brad Fitzpatrick & Go Database Team</div>\n</div>\n</div>\n<h2 id=\"http1-auto-drain-http2--sockets\">HTTP/1 auto-drain, HTTP/2 &amp; Sockets<a class=\"h-anchor\" href=\"#http1-auto-drain-http2--sockets\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"http-upgrades\" class=\"go-tour-section\">\n<p><code>net/http</code> and <code>net</code> introduce critical network pooling and protocol refinements: HTTP/1 <code>Response.Body</code> automatically drains unread data on <code>Close</code> for connection reuse; HTTP/2 servers honor RFC 9218 client priority signals; <code>net.UnixConn</code> returns clean <code>io.EOF</code> without wrapping; and servers support TLS ALPN on custom <code>net.Conn</code> connections.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"http_improvements.go\"><div class=\"code-caption\">http_improvements.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"http_improvements.go\" data-language=\"go\" data-title=\"http_improvements.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">net/http</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">net/url</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // 1. URL Deep Cloning:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    u, _ </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> url.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Parse</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"https://api.gateway.internal/v1/orders?tenant=prod\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    cloned </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> u.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Clone</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    cloned.Path </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"/v1/settlements\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Original:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, u.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">String</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Cloned:  \"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, cloned.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">String</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // 2. HTTP Server configuration:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    srv </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">http</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Server</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        MaxHeaderValueCount: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">100</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// New in Go 1.27</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Server configured with max header count:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, srv.MaxHeaderValueCount)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Retirement of h2_bundle.go</span>\n  </div>\n  <p class=\"go-callout-body\">\n    For years, HTTP/2 support lived inside a single generated 12,226-line file. Go 1.27 replaces it with a clean package (<code>net/http/internal/http2</code>) and lays the foundation for native HTTP/3 transport integration.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"http-upgrades\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://go.dev/doc/go1.27#net/http\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">net/http release notes ↗</a>\n    <a href=\"https://go.dev/issue/67810\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#67810 ↗</a>\n    <a href=\"https://go.dev/cl/c5f43ab\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL c5f43ab ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Damien Neil & Brad Fitzpatrick</div>\n</div>\n</div>\n<h2 id=\"modernized-go-fix-file--ci-json\">Modernized go fix, @file &amp; CI JSON<a class=\"h-anchor\" href=\"#modernized-go-fix-file--ci-json\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"toolchain\" class=\"go-tour-section\">\n<p>The toolchain gains modernizer analyzers in <code>go fix</code> (<code>atomictypes</code>, <code>embedlit</code>, <code>slicesbackward</code>, <code>unsafefuncs</code>), response file (<code>@file</code>) argument parsing across compiler tools, <code>go test -json</code> output categorization (“error”, “frame”), and automated two-block <code>go mod tidy</code> consolidation.</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"atomic_modernize.go\"><div class=\"code-caption\">atomic_modernize.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"atomic_modernize.go\" data-language=\"go\" data-title=\"atomic_modernize.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync/atomic</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> ServiceMetrics</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    reqCount </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">atomic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Type-safe atomic primitive</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    m </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">ServiceMetrics</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    m.reqCount.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Add</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Processed requests:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, m.reqCount.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Load</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Toolchain Evolution & GODEBUG Compatibility</span>\n  </div>\n  <p class=\"go-callout-body\">\n    Starting in Go 1.27, the <code>go</code> command recognizes removed GODEBUG settings (e.g. <code>asynctimerchan</code>) if configured to their final default value in <code>go.mod</code>. If set to an old obsolete value, the build fails cleanly.\n  </p>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"toolchain\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://go.dev/doc/go1.27#tools\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">Tools release notes ↗</a>\n    <a href=\"https://go.dev/issue/63696\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">#63696 ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Alan Donovan & Michael Pratt</div>\n</div>\n</div>\n<h2 id=\"compiler-ssa-runtimesecret--metaprogramming\">Compiler SSA, runtime/secret &amp; Metaprogramming<a class=\"h-anchor\" href=\"#compiler-ssa-runtimesecret--metaprogramming\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div id=\"hidden-gems\" class=\"go-tour-section\">\n<p>Behind the headline features, Go 1.27 introduces roughly 1,600 commits refining compiler optimizations, security sandboxing, and metaprogramming tokens:</p>\n<div class=\"code-figure has-title\" data-language=\"go\" data-title=\"switch_lut.go\"><div class=\"code-caption\">switch_lut.go</div><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" title=\"switch_lut.go\" data-language=\"go\" data-title=\"switch_lut.go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> opCodeName</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">op</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Go 1.27 compiles dense switches into branchless jump lookup tables:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    switch</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> op {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    case</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> 0x</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">01</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"READ\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    case</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> 0x</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">02</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"WRITE\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    case</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> 0x</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">03</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"COMMIT\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    case</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> 0x</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">04</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"ABORT\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    default</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"UNKNOWN\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Op 0x03:\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">opCodeName</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">0x</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">03</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<div class=\"go-callout\">\n  <div class=\"go-callout-header\">\n    <span class=\"go-callout-dot\"></span>\n    <span class=\"go-callout-label\">Under-the-Hood Architectural Highlights</span>\n  </div>\n  <div class=\"go-callout-body\">\n    <ul style=\"margin: 0.4rem 0 0; padding-left: 1.2rem; display: flex; flex-direction: column; gap: 0.35rem;\">\n      <li><code>runtime/secret</code> Inheritance: Child goroutines created inside <code>secret.Do</code> automatically inherit secret mode (zeroing memory pages upon deallocation).</li>\n      <li><code>compress/flate</code> Speedup: High-throughput DEFLATE engine accelerates <code>gzip</code>, <code>zip</code>, and <code>png</code> encoding.</li>\n      <li><code>go/constant.StringLen</code>: Returns the length of constant string values without heap allocating the full string.</li>\n      <li><code>go/scanner.End</code>: Enables token scanners to retrieve token end positions directly.</li>\n      <li>Known Bits & LICM SSA Passes: Tracks provably constant bits and hoists invariant expressions out of tight inner loops.</li>\n      <li>Linker <code>.go.type</code> & <code>linknamestd</code>: Aligns type descriptors in dedicated sections and restricts unsanctioned runtime linkname hooks.</li>\n      <li>Plan 9 <code>syscall.Errno</code>: Defines <code>Errno</code> implementing <code>error</code> for cross-platform portability.</li>\n    </ul>\n  </div>\n</div>\n<div class=\"go-spec-row\" data-spec-id=\"hidden-gems\">\n  <div class=\"go-spec-pills\">\n    <a href=\"https://go.dev/doc/go1.27#compiler\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">Compiler & Linker notes ↗</a>\n    <a href=\"https://go.dev/cl/7a8dcab\" target=\"_blank\" rel=\"noreferrer\" class=\"go-spec-pill\">CL 7a8dcab ↗</a>\n  </div>\n  <div class=\"go-spec-authors\">Go Compiler & Runtime Engineers</div>\n</div>\n</div>\n<hr>\n<h2 id=\"references--official-resources\">References &amp; Official Resources<a class=\"h-anchor\" href=\"#references--official-resources\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ul>\n<li><a href=\"https://go.dev/doc/go1.27\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go 1.27 Release Notes<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></li>\n<li><a href=\"https://tip.golang.org/ref/spec\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go Language Specification<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></li>\n<li><a href=\"https://github.com/golang/go/issues\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go GitHub Issue Tracker<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></li>\n<li><a href=\"https://go.dev/cl\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external\">Go Gerrit Code Review<span class=\"external-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path></svg></span></a></li>\n</ul>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/designing-rate-limiters-for-payment-systems/",
      "url": "https://ashwingopalsamy.in/blog/designing-rate-limiters-for-payment-systems/",
      "title": "Designing Rate Limiters for Payment Systems",
      "content_text": "Why payment rate limits cannot treat false rejects like a normal API, and how to design for authorization ingress.",
      "date_published": "2026-04-07T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Rate limiting in payment systems operates under fundamentally different constraints than rate limiting a typical REST API.</p>\n<p>In a standard web application, a false positive returns HTTP <code>429 Too Many Requests</code>. The client applies exponential backoff and retries. In payment authorization, a false positive declines a legitimate card transaction at a point-of-sale terminal. That means someone’s groceries or transit fare is rejected.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"84d363eaa4a09e48\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-84d363eaa4a09e48-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1489.546875px;\" viewBox=\"0 0 1489.546875 214.75\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-84d363eaa4a09e48-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-84d363eaa4a09e48-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-84d363eaa4a09e48-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-84d363eaa4a09e48-light .error-icon{fill:rgb(255, 255, 255);}#d-84d363eaa4a09e48-light .error-text{fill:#000000;stroke:#000000;}#d-84d363eaa4a09e48-light .edge-thickness-normal{stroke-width:1px;}#d-84d363eaa4a09e48-light .edge-thickness-thick{stroke-width:3.5px;}#d-84d363eaa4a09e48-light .edge-pattern-solid{stroke-dasharray:0;}#d-84d363eaa4a09e48-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-84d363eaa4a09e48-light .edge-pattern-dashed{stroke-dasharray:3;}#d-84d363eaa4a09e48-light .edge-pattern-dotted{stroke-dasharray:2;}#d-84d363eaa4a09e48-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-84d363eaa4a09e48-light .marker.cross{stroke:rgb(44, 46, 48);}#d-84d363eaa4a09e48-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-84d363eaa4a09e48-light p{margin:0;}#d-84d363eaa4a09e48-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-84d363eaa4a09e48-light .cluster-label text{fill:#000000;}#d-84d363eaa4a09e48-light .cluster-label span{color:#000000;}#d-84d363eaa4a09e48-light .cluster-label span p{background-color:transparent;}#d-84d363eaa4a09e48-light .label text,#d-84d363eaa4a09e48-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-84d363eaa4a09e48-light .node rect,#d-84d363eaa4a09e48-light .node circle,#d-84d363eaa4a09e48-light .node ellipse,#d-84d363eaa4a09e48-light .node polygon,#d-84d363eaa4a09e48-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-84d363eaa4a09e48-light .rough-node .label text,#d-84d363eaa4a09e48-light .node .label text,#d-84d363eaa4a09e48-light .image-shape .label,#d-84d363eaa4a09e48-light .icon-shape .label{text-anchor:middle;}#d-84d363eaa4a09e48-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-84d363eaa4a09e48-light .rough-node .label,#d-84d363eaa4a09e48-light .node .label,#d-84d363eaa4a09e48-light .image-shape .label,#d-84d363eaa4a09e48-light .icon-shape .label{text-align:center;}#d-84d363eaa4a09e48-light .node.clickable{cursor:pointer;}#d-84d363eaa4a09e48-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-84d363eaa4a09e48-light .arrowheadPath{fill:#000000;}#d-84d363eaa4a09e48-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-84d363eaa4a09e48-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-84d363eaa4a09e48-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-84d363eaa4a09e48-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-84d363eaa4a09e48-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-84d363eaa4a09e48-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-84d363eaa4a09e48-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-84d363eaa4a09e48-light .cluster text{fill:#000000;}#d-84d363eaa4a09e48-light .cluster span{color:#000000;}#d-84d363eaa4a09e48-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-84d363eaa4a09e48-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-84d363eaa4a09e48-light rect.text{fill:none;stroke-width:0;}#d-84d363eaa4a09e48-light .icon-shape,#d-84d363eaa4a09e48-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-84d363eaa4a09e48-light .icon-shape p,#d-84d363eaa4a09e48-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-84d363eaa4a09e48-light .icon-shape .label rect,#d-84d363eaa4a09e48-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-84d363eaa4a09e48-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-84d363eaa4a09e48-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-84d363eaa4a09e48-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-84d363eaa4a09e48-light [data-look=\"neo\"].node rect,#d-84d363eaa4a09e48-light [data-look=\"neo\"].cluster rect,#d-84d363eaa4a09e48-light [data-look=\"neo\"].node polygon{stroke:url(#d-84d363eaa4a09e48-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-84d363eaa4a09e48-light [data-look=\"neo\"].node path{stroke:url(#d-84d363eaa4a09e48-light-gradient);stroke-width:1px;}#d-84d363eaa4a09e48-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-84d363eaa4a09e48-light [data-look=\"neo\"].node circle{stroke:url(#d-84d363eaa4a09e48-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-84d363eaa4a09e48-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-84d363eaa4a09e48-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-84d363eaa4a09e48-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-84d363eaa4a09e48-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M268,132.25L280.184,132.25C292.367,132.25,316.734,132.25,340.435,132.25C364.135,132.25,387.169,132.25,398.686,132.25L410.203,132.25\" id=\"d-84d363eaa4a09e48-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjY4LCJ5IjoxMzIuMjV9LHsieCI6MzQxLjEwMTU2MjUsInkiOjEzMi4yNX0seyJ4Ijo0MTQuMjAzMTI1LCJ5IjoxMzIuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-light_flowchart-v2-pointEnd)\"></path><path d=\"M538.469,132.25L556.818,132.25C575.167,132.25,611.865,132.25,647.896,132.25C683.927,132.25,719.292,132.25,736.974,132.25L754.656,132.25\" id=\"d-84d363eaa4a09e48-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NTM4LjQ2ODc1LCJ5IjoxMzIuMjV9LHsieCI6NjQ4LjU2MjUsInkiOjEzMi4yNX0seyJ4Ijo3NTguNjU2MjUsInkiOjEzMi4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-light_flowchart-v2-pointEnd)\"></path><path d=\"M871.726,112.586L883.635,107.571C895.544,102.557,919.362,92.529,947.194,87.514C975.026,82.5,1006.872,82.5,1022.796,82.5L1038.719,82.5\" id=\"d-84d363eaa4a09e48-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6ODcxLjcyNjI3MzE0ODE0ODIsInkiOjExMi41ODU2NDgxNDgxNDgxNX0seyJ4Ijo5NDMuMTc5Njg3NSwieSI6ODIuNX0seyJ4IjoxMDQyLjcxODc1LCJ5Ijo4Mi41fV0=\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-light_flowchart-v2-pointEnd)\"></path><path d=\"M871.726,151.914L883.635,156.929C895.544,161.943,919.362,171.971,939.236,176.986C959.109,182,975.039,182,983.004,182L990.969,182\" id=\"d-84d363eaa4a09e48-light-L_C_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6ODcxLjcyNjI3MzE0ODE0ODIsInkiOjE1MS45MTQzNTE4NTE4NTE4NX0seyJ4Ijo5NDMuMTc5Njg3NSwieSI6MTgyfSx7IngiOjk5NC45Njg3NSwieSI6MTgyfV0=\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-light_flowchart-v2-pointEnd)\"></path><path d=\"M1191.422,59.969L1206.392,55.432C1221.362,50.896,1251.302,41.823,1272.617,37.286C1293.932,32.75,1306.622,32.75,1312.967,32.75L1319.313,32.75\" id=\"d-84d363eaa4a09e48-light-L_D_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_F_0\" data-points=\"W3sieCI6MTE5MS40MjE4NzUsInkiOjU5Ljk2ODc5NDYxMzExNTA2NX0seyJ4IjoxMjgxLjI0MjE4NzUsInkiOjMyLjc1fSx7IngiOjEzMjMuMzEyNSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-light_flowchart-v2-pointEnd)\"></path><path d=\"M1191.422,105.031L1206.392,109.568C1221.362,114.104,1251.302,123.177,1274.883,127.714C1298.464,132.25,1315.685,132.25,1324.296,132.25L1332.906,132.25\" id=\"d-84d363eaa4a09e48-light-L_D_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_G_0\" data-points=\"W3sieCI6MTE5MS40MjE4NzUsInkiOjEwNS4wMzEyMDUzODY4ODQ5M30seyJ4IjoxMjgxLjI0MjE4NzUsInkiOjEzMi4yNX0seyJ4IjoxMzM2LjkwNjI1LCJ5IjoxMzIuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(341.1015625, 132.25)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-48.1015625, -9.75)\"><foreignObject width=\"96.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>ISO 8583 (TCP)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(648.5625, 132.25)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-85.09375, -9.75)\"><foreignObject width=\"170.1875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Local Ingress Check (&lt;1ms)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(943.1796875, 82.5)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-24.390625, -9.75)\"><foreignObject width=\"48.78125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Allowed</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(943.1796875, 182)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-26.7890625, -9.75)\"><foreignObject width=\"53.578125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Rejected</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1281.2421875, 32.75)\"><g class=\"label\" data-id=\"L_D_F_0\" transform=\"translate(-17.0703125, -9.75)\"><foreignObject width=\"34.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>gRPC</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1281.2421875, 132.25)\"><g class=\"label\" data-id=\"L_D_G_0\" transform=\"translate(-17.0703125, -9.75)\"><foreignObject width=\"34.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>gRPC</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-client \" id=\"d-84d363eaa4a09e48-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Card Network (Visa / Mastercard)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-84d363eaa4a09e48-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(476.3359375, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.1328125\" y=\"-24.75\" width=\"124.265625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.1328125, -9.75)\"><rect></rect><foreignObject width=\"64.265625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Parser API</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-84d363eaa4a09e48-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(825.0234375, 132.25)\"><polygon points=\"66.3671875,0 132.734375,-66.3671875 66.3671875,-132.734375 0,-66.3671875\" class=\"label-container\" transform=\"translate(-65.8671875, 66.3671875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-41.6171875, -9.75)\"><rect></rect><foreignObject width=\"83.234375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Token Bucket</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-84d363eaa4a09e48-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(1117.0703125, 82.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.3515625\" y=\"-24.75\" width=\"148.703125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.3515625, -9.75)\"><rect></rect><foreignObject width=\"88.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Distributor API</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-84d363eaa4a09e48-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1117.0703125, 182)\"><rect class=\"basic label-container\" style=\"\" x=\"-122.1015625\" y=\"-24.75\" width=\"244.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-92.1015625, -9.75)\"><rect></rect><foreignObject width=\"184.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Field 39: RC 91 (System Error)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-84d363eaa4a09e48-light-flowchart-F-9\" data-look=\"classic\" transform=\"translate(1402.4296875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-79.1171875\" y=\"-24.75\" width=\"158.234375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-49.1171875, -9.75)\"><rect></rect><foreignObject width=\"98.234375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Account Ledger</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-84d363eaa4a09e48-light-flowchart-G-11\" data-look=\"classic\" transform=\"translate(1402.4296875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-65.5234375\" y=\"-24.75\" width=\"131.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-35.5234375, -9.75)\"><rect></rect><foreignObject width=\"71.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Risk Engine</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-84d363eaa4a09e48-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-84d363eaa4a09e48-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-84d363eaa4a09e48-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-84d363eaa4a09e48-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1489.546875px;\" viewBox=\"0 0 1489.546875 214.75\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-84d363eaa4a09e48-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-84d363eaa4a09e48-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-84d363eaa4a09e48-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-84d363eaa4a09e48-dark .error-icon{fill:rgb(21, 22, 23);}#d-84d363eaa4a09e48-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-84d363eaa4a09e48-dark .edge-thickness-normal{stroke-width:1px;}#d-84d363eaa4a09e48-dark .edge-thickness-thick{stroke-width:3.5px;}#d-84d363eaa4a09e48-dark .edge-pattern-solid{stroke-dasharray:0;}#d-84d363eaa4a09e48-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-84d363eaa4a09e48-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-84d363eaa4a09e48-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-84d363eaa4a09e48-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-84d363eaa4a09e48-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-84d363eaa4a09e48-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-84d363eaa4a09e48-dark p{margin:0;}#d-84d363eaa4a09e48-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-84d363eaa4a09e48-dark .cluster-label text{fill:#eae9e8;}#d-84d363eaa4a09e48-dark .cluster-label span{color:#eae9e8;}#d-84d363eaa4a09e48-dark .cluster-label span p{background-color:transparent;}#d-84d363eaa4a09e48-dark .label text,#d-84d363eaa4a09e48-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-84d363eaa4a09e48-dark .node rect,#d-84d363eaa4a09e48-dark .node circle,#d-84d363eaa4a09e48-dark .node ellipse,#d-84d363eaa4a09e48-dark .node polygon,#d-84d363eaa4a09e48-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-84d363eaa4a09e48-dark .rough-node .label text,#d-84d363eaa4a09e48-dark .node .label text,#d-84d363eaa4a09e48-dark .image-shape .label,#d-84d363eaa4a09e48-dark .icon-shape .label{text-anchor:middle;}#d-84d363eaa4a09e48-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-84d363eaa4a09e48-dark .rough-node .label,#d-84d363eaa4a09e48-dark .node .label,#d-84d363eaa4a09e48-dark .image-shape .label,#d-84d363eaa4a09e48-dark .icon-shape .label{text-align:center;}#d-84d363eaa4a09e48-dark .node.clickable{cursor:pointer;}#d-84d363eaa4a09e48-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-84d363eaa4a09e48-dark .arrowheadPath{fill:#eae9e8;}#d-84d363eaa4a09e48-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-84d363eaa4a09e48-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-84d363eaa4a09e48-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-84d363eaa4a09e48-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-84d363eaa4a09e48-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-84d363eaa4a09e48-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-84d363eaa4a09e48-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-84d363eaa4a09e48-dark .cluster text{fill:#eae9e8;}#d-84d363eaa4a09e48-dark .cluster span{color:#eae9e8;}#d-84d363eaa4a09e48-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-84d363eaa4a09e48-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-84d363eaa4a09e48-dark rect.text{fill:none;stroke-width:0;}#d-84d363eaa4a09e48-dark .icon-shape,#d-84d363eaa4a09e48-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-84d363eaa4a09e48-dark .icon-shape p,#d-84d363eaa4a09e48-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-84d363eaa4a09e48-dark .icon-shape .label rect,#d-84d363eaa4a09e48-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-84d363eaa4a09e48-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-84d363eaa4a09e48-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-84d363eaa4a09e48-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node rect,#d-84d363eaa4a09e48-dark [data-look=\"neo\"].cluster rect,#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node polygon{stroke:url(#d-84d363eaa4a09e48-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node path{stroke:url(#d-84d363eaa4a09e48-dark-gradient);stroke-width:1px;}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node circle{stroke:url(#d-84d363eaa4a09e48-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-84d363eaa4a09e48-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-84d363eaa4a09e48-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-84d363eaa4a09e48-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-84d363eaa4a09e48-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M268,132.25L280.184,132.25C292.367,132.25,316.734,132.25,340.435,132.25C364.135,132.25,387.169,132.25,398.686,132.25L410.203,132.25\" id=\"d-84d363eaa4a09e48-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjY4LCJ5IjoxMzIuMjV9LHsieCI6MzQxLjEwMTU2MjUsInkiOjEzMi4yNX0seyJ4Ijo0MTQuMjAzMTI1LCJ5IjoxMzIuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd)\"></path><path d=\"M538.469,132.25L556.818,132.25C575.167,132.25,611.865,132.25,647.896,132.25C683.927,132.25,719.292,132.25,736.974,132.25L754.656,132.25\" id=\"d-84d363eaa4a09e48-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NTM4LjQ2ODc1LCJ5IjoxMzIuMjV9LHsieCI6NjQ4LjU2MjUsInkiOjEzMi4yNX0seyJ4Ijo3NTguNjU2MjUsInkiOjEzMi4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd)\"></path><path d=\"M871.726,112.586L883.635,107.571C895.544,102.557,919.362,92.529,947.194,87.514C975.026,82.5,1006.872,82.5,1022.796,82.5L1038.719,82.5\" id=\"d-84d363eaa4a09e48-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6ODcxLjcyNjI3MzE0ODE0ODIsInkiOjExMi41ODU2NDgxNDgxNDgxNX0seyJ4Ijo5NDMuMTc5Njg3NSwieSI6ODIuNX0seyJ4IjoxMDQyLjcxODc1LCJ5Ijo4Mi41fV0=\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd)\"></path><path d=\"M871.726,151.914L883.635,156.929C895.544,161.943,919.362,171.971,939.236,176.986C959.109,182,975.039,182,983.004,182L990.969,182\" id=\"d-84d363eaa4a09e48-dark-L_C_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6ODcxLjcyNjI3MzE0ODE0ODIsInkiOjE1MS45MTQzNTE4NTE4NTE4NX0seyJ4Ijo5NDMuMTc5Njg3NSwieSI6MTgyfSx7IngiOjk5NC45Njg3NSwieSI6MTgyfV0=\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1191.422,59.969L1206.392,55.432C1221.362,50.896,1251.302,41.823,1272.617,37.286C1293.932,32.75,1306.622,32.75,1312.967,32.75L1319.313,32.75\" id=\"d-84d363eaa4a09e48-dark-L_D_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_F_0\" data-points=\"W3sieCI6MTE5MS40MjE4NzUsInkiOjU5Ljk2ODc5NDYxMzExNTA2NX0seyJ4IjoxMjgxLjI0MjE4NzUsInkiOjMyLjc1fSx7IngiOjEzMjMuMzEyNSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1191.422,105.031L1206.392,109.568C1221.362,114.104,1251.302,123.177,1274.883,127.714C1298.464,132.25,1315.685,132.25,1324.296,132.25L1332.906,132.25\" id=\"d-84d363eaa4a09e48-dark-L_D_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_G_0\" data-points=\"W3sieCI6MTE5MS40MjE4NzUsInkiOjEwNS4wMzEyMDUzODY4ODQ5M30seyJ4IjoxMjgxLjI0MjE4NzUsInkiOjEzMi4yNX0seyJ4IjoxMzM2LjkwNjI1LCJ5IjoxMzIuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-84d363eaa4a09e48-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(341.1015625, 132.25)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-48.1015625, -9.75)\"><foreignObject width=\"96.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>ISO 8583 (TCP)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(648.5625, 132.25)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-85.09375, -9.75)\"><foreignObject width=\"170.1875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Local Ingress Check (&lt;1ms)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(943.1796875, 82.5)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-24.390625, -9.75)\"><foreignObject width=\"48.78125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Allowed</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(943.1796875, 182)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-26.7890625, -9.75)\"><foreignObject width=\"53.578125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Rejected</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1281.2421875, 32.75)\"><g class=\"label\" data-id=\"L_D_F_0\" transform=\"translate(-17.0703125, -9.75)\"><foreignObject width=\"34.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>gRPC</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(1281.2421875, 132.25)\"><g class=\"label\" data-id=\"L_D_G_0\" transform=\"translate(-17.0703125, -9.75)\"><foreignObject width=\"34.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>gRPC</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-client \" id=\"d-84d363eaa4a09e48-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Card Network (Visa / Mastercard)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-84d363eaa4a09e48-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(476.3359375, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-62.1328125\" y=\"-24.75\" width=\"124.265625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.1328125, -9.75)\"><rect></rect><foreignObject width=\"64.265625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Parser API</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-84d363eaa4a09e48-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(825.0234375, 132.25)\"><polygon points=\"66.3671875,0 132.734375,-66.3671875 66.3671875,-132.734375 0,-66.3671875\" class=\"label-container\" transform=\"translate(-65.8671875, 66.3671875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-41.6171875, -9.75)\"><rect></rect><foreignObject width=\"83.234375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Token Bucket</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-84d363eaa4a09e48-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(1117.0703125, 82.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.3515625\" y=\"-24.75\" width=\"148.703125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.3515625, -9.75)\"><rect></rect><foreignObject width=\"88.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Distributor API</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-84d363eaa4a09e48-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1117.0703125, 182)\"><rect class=\"basic label-container\" style=\"\" x=\"-122.1015625\" y=\"-24.75\" width=\"244.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-92.1015625, -9.75)\"><rect></rect><foreignObject width=\"184.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Field 39: RC 91 (System Error)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-84d363eaa4a09e48-dark-flowchart-F-9\" data-look=\"classic\" transform=\"translate(1402.4296875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-79.1171875\" y=\"-24.75\" width=\"158.234375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-49.1171875, -9.75)\"><rect></rect><foreignObject width=\"98.234375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Account Ledger</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-84d363eaa4a09e48-dark-flowchart-G-11\" data-look=\"classic\" transform=\"translate(1402.4296875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-65.5234375\" y=\"-24.75\" width=\"131.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-35.5234375, -9.75)\"><rect></rect><foreignObject width=\"71.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Risk Engine</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-84d363eaa4a09e48-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-84d363eaa4a09e48-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-84d363eaa4a09e48-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>The rate limiter must evaluate ingress traffic in <strong>under 1 millisecond</strong> without adding blocking remote network roundtrips to the authorization critical path.</p>\n<blockquote class=\"callout callout-warning\" role=\"note\" aria-label=\"Warning\" data-callout=\"warning\"><p class=\"callout-head\"><span class=\"callout-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"></path><path d=\"M12 9v4\"></path><path d=\"M12 17h.01\"></path></svg></span><span class=\"callout-label\">Warning</span></p>\n<p>Never block on external network calls at the card network ingress layer. Card networks enforce strict 2-second timeout windows. If your service delays responding, the network times out and initiates an automatic <strong>reversal cascade</strong> across acquiring and issuing banks.</p>\n</blockquote>\n<h2 id=\"choosing-an-algorithm-for-financial-ingress\">Choosing an Algorithm for Financial Ingress<a class=\"h-anchor\" href=\"#choosing-an-algorithm-for-financial-ingress\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<h3 id=\"1-token-bucket-for-global-throughput\">1. Token Bucket for Global Throughput<a class=\"h-anchor\" href=\"#1-token-bucket-for-global-throughput\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>The token bucket algorithm maintains a counter that refills continuously at a fixed rate <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>r</mi></mrow><annotation encoding=\"application/x-tex\">r</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.4306em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0278em;\">r</span></span></span></span></span></p> up to capacity <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>C</mi></mrow><annotation encoding=\"application/x-tex\">C</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0715em;\">C</span></span></span></span></span></p>:</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mtext>tokens</mtext><mo stretchy=\"false\">(</mo><mi>t</mi><mo stretchy=\"false\">)</mo><mo>=</mo><mi>min</mi><mo>⁡</mo><mrow><mo fence=\"true\">(</mo><mi>C</mi><mo separator=\"true\">,</mo><mtext> tokens</mtext><mo stretchy=\"false\">(</mo><msub><mi>t</mi><mn>0</mn></msub><mo stretchy=\"false\">)</mo><mo>+</mo><mi>r</mi><mo>⋅</mo><mo stretchy=\"false\">(</mo><mi>t</mi><mo>−</mo><msub><mi>t</mi><mn>0</mn></msub><mo stretchy=\"false\">)</mo><mo fence=\"true\">)</mo></mrow></mrow><annotation encoding=\"application/x-tex\">\\text{tokens}(t) = \\min\\left(C,\\ \\text{tokens}(t_0) + r \\cdot (t - t_0)\\right)</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord text\"><span class=\"mord\">tokens</span></span><span class=\"mopen\">(</span><span class=\"mord mathnormal\">t</span><span class=\"mclose\">)</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mop\">min</span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"minner\"><span class=\"mopen delimcenter\" style=\"top:0em;\">(</span><span class=\"mord mathnormal\" style=\"margin-right:0.0715em;\">C</span><span class=\"mpunct\">,</span><span class=\"mspace\"> </span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"mord text\"><span class=\"mord\">tokens</span></span><span class=\"mopen\">(</span><span class=\"mord\"><span class=\"mord mathnormal\">t</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">0</span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em;\"><span></span></span></span></span></span></span><span class=\"mclose\">)</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">+</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0278em;\">r</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">⋅</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mopen\">(</span><span class=\"mord mathnormal\">t</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">−</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mord\"><span class=\"mord mathnormal\">t</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">0</span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em;\"><span></span></span></span></span></span></span><span class=\"mclose\">)</span><span class=\"mclose delimcenter\" style=\"top:0em;\">)</span></span></span></span></span></span></div>\n<p>Set capacity <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>C</mi></mrow><annotation encoding=\"application/x-tex\">C</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0715em;\">C</span></span></span></span></span></p> to absorb anticipated flash bursts (e.g. peak Black Friday transaction volume) and refill rate <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>r</mi></mrow><annotation encoding=\"application/x-tex\">r</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.4306em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0278em;\">r</span></span></span></span></span></p> to your sustained database commit capacity. Measure limits on a <strong>per-BIN</strong> (Bank Identification Number) and <strong>per-merchant</strong> partition to prevent a single misconfigured merchant terminal from starving an entire card issuer.</p>\n<h3 id=\"2-sliding-window-counter-for-tenant-fairness\">2. Sliding Window Counter for Tenant Fairness<a class=\"h-anchor\" href=\"#2-sliding-window-counter-for-tenant-fairness\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>When enforcing strict per-cardholder velocity limits (e.g. maximum 5 transactions per 60 seconds to detect card testing fraud), sliding window counters prevent boundary-burst attacks without the unbounded memory overhead of sliding window logs.</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mtext>count</mtext><mo>=</mo><mtext>prev_count</mtext><mo>×</mo><mrow><mo fence=\"true\">(</mo><mn>1</mn><mo>−</mo><mfrac><msub><mi>t</mi><mtext>elapsed</mtext></msub><mi>W</mi></mfrac><mo fence=\"true\">)</mo></mrow><mo>+</mo><mtext>current_count</mtext></mrow><annotation encoding=\"application/x-tex\">\\text{count} = \\text{prev\\_count} \\times \\left(1 - \\frac{t_{\\text{elapsed}}}{W}\\right) + \\text{current\\_count}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6151em;\"></span><span class=\"mord text\"><span class=\"mord\">count</span></span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.9251em;vertical-align:-0.31em;\"></span><span class=\"mord text\"><span class=\"mord\">prev_count</span></span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">×</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:2.4em;vertical-align:-0.95em;\"></span><span class=\"minner\"><span class=\"mopen delimcenter\" style=\"top:0em;\"><span class=\"delimsizing size3\">(</span></span><span class=\"mord\">1</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">−</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mord\"><span class=\"mopen nulldelimiter\"></span><span class=\"mfrac\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:1.2921em;\"><span style=\"top:-2.314em;\"><span class=\"pstrut\" style=\"height:3em;\"></span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.1389em;\">W</span></span></span><span style=\"top:-3.23em;\"><span class=\"pstrut\" style=\"height:3em;\"></span><span class=\"frac-line\" style=\"border-bottom-width:0.04em;\"></span></span><span style=\"top:-3.677em;\"><span class=\"pstrut\" style=\"height:3em;\"></span><span class=\"mord\"><span class=\"mord\"><span class=\"mord mathnormal\">t</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3361em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord text mtight\"><span class=\"mord mtight\">elapsed</span></span></span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.2861em;\"><span></span></span></span></span></span></span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.686em;\"><span></span></span></span></span></span><span class=\"mclose nulldelimiter\"></span></span><span class=\"mclose delimcenter\" style=\"top:0em;\"><span class=\"delimsizing size3\">)</span></span></span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">+</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.9251em;vertical-align:-0.31em;\"></span><span class=\"mord text\"><span class=\"mord\">current_count</span></span></span></span></span></span></div>\n<h2 id=\"distributed-architecture-asynchronous-token-leasing\">Distributed Architecture: Asynchronous Token Leasing<a class=\"h-anchor\" href=\"#distributed-architecture-asynchronous-token-leasing\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A common architectural pitfall is making a synchronous remote Redis call (<code>INCR</code> / Lua script) on every payment authorization. Across availability zones or regions, this adds 5 to 40ms of latency, eroding your authorization SLA.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"580562a82b6f7c32\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-580562a82b6f7c32-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 932.5px;\" viewBox=\"-131.5 -10 932.5 731\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"601\" y=\"645\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"676\" y=\"677.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"676\" dy=\"0\">Terminal Ingress</tspan></text></g><g><rect x=\"324\" y=\"645\" fill=\"#eaeaea\" stroke=\"#666\" width=\"227\" height=\"65\" name=\"Redis\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"437.5\" y=\"677.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"437.5\" dy=\"0\">Central Quota Store (Redis)</tspan></text></g><g><rect x=\"0\" y=\"645\" fill=\"#eaeaea\" stroke=\"#666\" width=\"217\" height=\"65\" name=\"Worker\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"108.5\" y=\"677.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"108.5\" dy=\"0\">Ingress Worker (Go Node)</tspan></text></g><g><line id=\"d-580562a82b6f7c32-light-actor2\" x1=\"676\" y1=\"65\" x2=\"676\" y2=\"645\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Client\" data-et=\"life-line\" data-id=\"Client\"></line><g id=\"d-580562a82b6f7c32-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Client\"><rect x=\"601\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"676\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"676\" dy=\"0\">Terminal Ingress</tspan></text></g></g><g><line id=\"d-580562a82b6f7c32-light-actor1\" x1=\"437.5\" y1=\"65\" x2=\"437.5\" y2=\"645\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Redis\" data-et=\"life-line\" data-id=\"Redis\"></line><g id=\"d-580562a82b6f7c32-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Redis\"><rect x=\"324\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"227\" height=\"65\" name=\"Redis\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"437.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"437.5\" dy=\"0\">Central Quota Store (Redis)</tspan></text></g></g><g><line id=\"d-580562a82b6f7c32-light-actor0\" x1=\"108.5\" y1=\"65\" x2=\"108.5\" y2=\"645\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Worker\" data-et=\"life-line\" data-id=\"Worker\"></line><g id=\"d-580562a82b6f7c32-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Worker\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"217\" height=\"65\" name=\"Worker\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"108.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"108.5\" dy=\"0\">Ingress Worker (Go Node)</tspan></text></g></g><style>#d-580562a82b6f7c32-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-580562a82b6f7c32-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-580562a82b6f7c32-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-580562a82b6f7c32-light .error-icon{fill:rgb(255, 255, 255);}#d-580562a82b6f7c32-light .error-text{fill:#000000;stroke:#000000;}#d-580562a82b6f7c32-light .edge-thickness-normal{stroke-width:1px;}#d-580562a82b6f7c32-light .edge-thickness-thick{stroke-width:3.5px;}#d-580562a82b6f7c32-light .edge-pattern-solid{stroke-dasharray:0;}#d-580562a82b6f7c32-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-580562a82b6f7c32-light .edge-pattern-dashed{stroke-dasharray:3;}#d-580562a82b6f7c32-light .edge-pattern-dotted{stroke-dasharray:2;}#d-580562a82b6f7c32-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light .marker.cross{stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-580562a82b6f7c32-light p{margin:0;}#d-580562a82b6f7c32-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-580562a82b6f7c32-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-580562a82b6f7c32-light .actor-line{stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-580562a82b6f7c32-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-580562a82b6f7c32-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-580562a82b6f7c32-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-580562a82b6f7c32-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-580562a82b6f7c32-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-580562a82b6f7c32-light .labelText,#d-580562a82b6f7c32-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-580562a82b6f7c32-light .loopText,#d-580562a82b6f7c32-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-580562a82b6f7c32-light .sectionTitle,#d-580562a82b6f7c32-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-580562a82b6f7c32-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-580562a82b6f7c32-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-580562a82b6f7c32-light .noteText,#d-580562a82b6f7c32-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-580562a82b6f7c32-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-580562a82b6f7c32-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-580562a82b6f7c32-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-580562a82b6f7c32-light .actorPopupMenu{position:absolute;}#d-580562a82b6f7c32-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-580562a82b6f7c32-light .actor-man circle,#d-580562a82b6f7c32-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-580562a82b6f7c32-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-580562a82b6f7c32-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-580562a82b6f7c32-light [data-look=\"neo\"].node rect,#d-580562a82b6f7c32-light [data-look=\"neo\"].cluster rect,#d-580562a82b6f7c32-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-580562a82b6f7c32-light [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-580562a82b6f7c32-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-580562a82b6f7c32-light [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-580562a82b6f7c32-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-580562a82b6f7c32-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-580562a82b6f7c32-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-580562a82b6f7c32-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-580562a82b6f7c32-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"83.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"379\" height=\"40\" class=\"note\"></rect><text x=\"273\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"273\">Background Goroutine (Every 100ms)</tspan></text></g><g data-et=\"note\" data-id=\"i3\"><rect x=\"83.5\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"617.5\" height=\"40\" class=\"note\"></rect><text x=\"392\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"392\">Authorization Critical Path (&lt;1ms)</tspan></text></g><text x=\"272\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">LEASE 500 tokens (batch reserve)</text><line x1=\"109.5\" y1=\"165\" x2=\"433.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Worker\" data-to=\"Redis\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"275\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Granted 500 local tokens</text><line x1=\"436.5\" y1=\"215\" x2=\"112.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Redis\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"394\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Auth Request 1</text><line x1=\"675\" y1=\"315\" x2=\"112.5\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Client\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"110\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Atomic decrement local lease (Zero network hops)</text><path d=\"M 109.5,365 C 169.5,355 169.5,395 109.5,385\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Worker\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"391\" y=\"410\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Process Authorization</text><line x1=\"109.5\" y1=\"445\" x2=\"672\" y2=\"445\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"Worker\" data-to=\"Client\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"394\" y=\"460\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Auth Request 2</text><line x1=\"675\" y1=\"495\" x2=\"112.5\" y2=\"495\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"Client\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"110\" y=\"510\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Atomic decrement local lease</text><path d=\"M 109.5,545 C 169.5,535 169.5,575 109.5,565\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"Worker\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"391\" y=\"590\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Process Authorization</text><line x1=\"109.5\" y1=\"625\" x2=\"672\" y2=\"625\" class=\"messageLine1\" data-et=\"message\" data-id=\"i9\" data-from=\"Worker\" data-to=\"Client\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-580562a82b6f7c32-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 932.5px;\" viewBox=\"-131.5 -10 932.5 731\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"601\" y=\"645\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"676\" y=\"677.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"676\" dy=\"0\">Terminal Ingress</tspan></text></g><g><rect x=\"324\" y=\"645\" fill=\"#eaeaea\" stroke=\"#666\" width=\"227\" height=\"65\" name=\"Redis\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"437.5\" y=\"677.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"437.5\" dy=\"0\">Central Quota Store (Redis)</tspan></text></g><g><rect x=\"0\" y=\"645\" fill=\"#eaeaea\" stroke=\"#666\" width=\"217\" height=\"65\" name=\"Worker\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"108.5\" y=\"677.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"108.5\" dy=\"0\">Ingress Worker (Go Node)</tspan></text></g><g><line id=\"d-580562a82b6f7c32-dark-actor2\" x1=\"676\" y1=\"65\" x2=\"676\" y2=\"645\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Client\" data-et=\"life-line\" data-id=\"Client\"></line><g id=\"d-580562a82b6f7c32-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Client\"><rect x=\"601\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"676\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"676\" dy=\"0\">Terminal Ingress</tspan></text></g></g><g><line id=\"d-580562a82b6f7c32-dark-actor1\" x1=\"437.5\" y1=\"65\" x2=\"437.5\" y2=\"645\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Redis\" data-et=\"life-line\" data-id=\"Redis\"></line><g id=\"d-580562a82b6f7c32-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Redis\"><rect x=\"324\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"227\" height=\"65\" name=\"Redis\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"437.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"437.5\" dy=\"0\">Central Quota Store (Redis)</tspan></text></g></g><g><line id=\"d-580562a82b6f7c32-dark-actor0\" x1=\"108.5\" y1=\"65\" x2=\"108.5\" y2=\"645\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Worker\" data-et=\"life-line\" data-id=\"Worker\"></line><g id=\"d-580562a82b6f7c32-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Worker\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"217\" height=\"65\" name=\"Worker\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"108.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"108.5\" dy=\"0\">Ingress Worker (Go Node)</tspan></text></g></g><style>#d-580562a82b6f7c32-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-580562a82b6f7c32-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-580562a82b6f7c32-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-580562a82b6f7c32-dark .error-icon{fill:rgb(21, 22, 23);}#d-580562a82b6f7c32-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-580562a82b6f7c32-dark .edge-thickness-normal{stroke-width:1px;}#d-580562a82b6f7c32-dark .edge-thickness-thick{stroke-width:3.5px;}#d-580562a82b6f7c32-dark .edge-pattern-solid{stroke-dasharray:0;}#d-580562a82b6f7c32-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-580562a82b6f7c32-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-580562a82b6f7c32-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-580562a82b6f7c32-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-580562a82b6f7c32-dark p{margin:0;}#d-580562a82b6f7c32-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-580562a82b6f7c32-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-580562a82b6f7c32-dark .actor-line{stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-580562a82b6f7c32-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-580562a82b6f7c32-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-580562a82b6f7c32-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-580562a82b6f7c32-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-580562a82b6f7c32-dark .labelText,#d-580562a82b6f7c32-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-580562a82b6f7c32-dark .loopText,#d-580562a82b6f7c32-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-580562a82b6f7c32-dark .sectionTitle,#d-580562a82b6f7c32-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-580562a82b6f7c32-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-580562a82b6f7c32-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-580562a82b6f7c32-dark .noteText,#d-580562a82b6f7c32-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-580562a82b6f7c32-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-580562a82b6f7c32-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-580562a82b6f7c32-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-580562a82b6f7c32-dark .actorPopupMenu{position:absolute;}#d-580562a82b6f7c32-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-580562a82b6f7c32-dark .actor-man circle,#d-580562a82b6f7c32-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-580562a82b6f7c32-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-580562a82b6f7c32-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-580562a82b6f7c32-dark [data-look=\"neo\"].node rect,#d-580562a82b6f7c32-dark [data-look=\"neo\"].cluster rect,#d-580562a82b6f7c32-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-580562a82b6f7c32-dark [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-580562a82b6f7c32-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-580562a82b6f7c32-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-580562a82b6f7c32-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-580562a82b6f7c32-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-580562a82b6f7c32-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-580562a82b6f7c32-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-580562a82b6f7c32-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-580562a82b6f7c32-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-580562a82b6f7c32-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"83.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"379\" height=\"40\" class=\"note\"></rect><text x=\"273\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"273\">Background Goroutine (Every 100ms)</tspan></text></g><g data-et=\"note\" data-id=\"i3\"><rect x=\"83.5\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"617.5\" height=\"40\" class=\"note\"></rect><text x=\"392\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"392\">Authorization Critical Path (&lt;1ms)</tspan></text></g><text x=\"272\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">LEASE 500 tokens (batch reserve)</text><line x1=\"109.5\" y1=\"165\" x2=\"433.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Worker\" data-to=\"Redis\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"275\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Granted 500 local tokens</text><line x1=\"436.5\" y1=\"215\" x2=\"112.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Redis\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"394\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Auth Request 1</text><line x1=\"675\" y1=\"315\" x2=\"112.5\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Client\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"110\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Atomic decrement local lease (Zero network hops)</text><path d=\"M 109.5,365 C 169.5,355 169.5,395 109.5,385\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Worker\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"391\" y=\"410\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Process Authorization</text><line x1=\"109.5\" y1=\"445\" x2=\"672\" y2=\"445\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"Worker\" data-to=\"Client\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"394\" y=\"460\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Auth Request 2</text><line x1=\"675\" y1=\"495\" x2=\"112.5\" y2=\"495\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"Client\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"110\" y=\"510\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Atomic decrement local lease</text><path d=\"M 109.5,545 C 169.5,535 169.5,575 109.5,565\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"Worker\" data-to=\"Worker\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"391\" y=\"590\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Process Authorization</text><line x1=\"109.5\" y1=\"625\" x2=\"672\" y2=\"625\" class=\"messageLine1\" data-et=\"message\" data-id=\"i9\" data-from=\"Worker\" data-to=\"Client\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-580562a82b6f7c32-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>By leasing token blocks asynchronously, workers make 100% of authorization decisions against local memory in single-digit microseconds while Redis enforces cluster-wide capacity boundaries.</p>\n<h2 id=\"lock-free-token-bucket-implementation-in-go\">Lock-Free Token Bucket Implementation in Go<a class=\"h-anchor\" href=\"#lock-free-token-bucket-implementation-in-go\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Under high concurrency (100,000+ requests per second), standard <code>sync.Mutex</code> locks create severe CPU core contention. This production implementation uses atomic integer nanosecond math:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> ratelimit</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync/atomic</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">time</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// AtomicTokenBucket implements a lock-free token bucket using nanosecond timestamps</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> AtomicTokenBucket</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    capacity    </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Maximum tokens</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    nanosPerTok </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Refill period per single token in nanoseconds</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    state       </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">atomic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Packed: high 32 bits = tokens, low 32 bits = timestamp (seconds)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    lastRefill  </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">atomic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Unix nanoseconds of last refill</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> NewAtomicTokenBucket</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">ratePerSec</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> int64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">capacity</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> int64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">AtomicTokenBucket</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    tb </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">AtomicTokenBucket</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        capacity:    capacity,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        nanosPerTok: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(time.Second) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">/</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ratePerSec,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    tb.lastRefill.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Store</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Now</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">().</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">UnixNano</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    tb.state.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Store</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(capacity)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">tb </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">AtomicTokenBucket</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Allow</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        now </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> time.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Now</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">().</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">UnixNano</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        last </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.lastRefill.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Load</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        tokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.state.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Load</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        elapsed </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> now </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> last</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> elapsed </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.nanosPerTok {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            deltaTokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> elapsed </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">/</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.nanosPerTok</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> deltaTokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                newTokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">+</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> deltaTokens</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">                if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> newTokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.capacity {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                    newTokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.capacity</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">                if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.lastRefill.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">CompareAndSwap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(last, now</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(elapsed</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">tb.nanosPerTok)) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                    tb.state.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Store</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(newTokens)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                    tokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> newTokens</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tokens </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tb.state.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">CompareAndSwap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(tokens, tokens</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // CAS failed due to concurrent consumer; retry immediately</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"iso-8583-rejection-codes--compliance\">ISO 8583 Rejection Codes &amp; Compliance<a class=\"h-anchor\" href=\"#iso-8583-rejection-codes--compliance\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When the rate limiter rejects an authorization, returning the correct ISO 8583 Field 39 Action Code is required to prevent merchant confusion and regulatory penalties:</p>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Response Code</th>\n<th>Meaning</th>\n<th>Network Action</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>RC 91</strong> (<code>System Error / Destination Unavailable</code>)</td>\n<td>Gateway overloaded</td>\n<td>Terminal may retry or trigger Stand-In Processing (STIP)</td>\n</tr>\n<tr>\n<td><strong>RC 96</strong> (<code>System Malfunction</code>)</td>\n<td>Internal processing error</td>\n<td>Terminal logs technical fault</td>\n</tr>\n<tr>\n<td><strong>RC 05</strong> (<code>Do Not Honor</code>)</td>\n<td>Hard issuer card decline</td>\n<td><strong>Never use for rate limits</strong> (falsely signals cardholder risk)</td>\n</tr>\n</tbody>\n</table></div>\n<p>In financial engineering, the difference between a generic REST API and an authorization ingress is the cost of failure. Rate limiters must be fast, local-first, and semantically aligned with card network protocols.</p>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/understanding-iso8583-bitmaps/",
      "url": "https://ashwingopalsamy.in/blog/understanding-iso8583-bitmaps/",
      "title": "Understanding ISO 8583 Bitmap Parsing",
      "content_text": "How ISO 8583 primary, secondary, and hex bitmaps encode message schemas, and how to unpack them in Go.",
      "date_published": "2026-04-01T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>ISO 8583 is the international standard governing financial transaction card originated messages across point-of-sale terminals, ATMs, and global card networks (Visa, Mastercard, RuPay).</p>\n<p>Every financial message begins with a 4-digit <strong>Message Type Identifier (MTI)</strong> (such as <code>0100</code> for an authorization request or <code>0200</code> for a financial presentment), followed immediately by one or more <strong>bitmaps</strong> that define the exact schema of data elements present in the payload.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"dde61a0cf555eca3\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-dde61a0cf555eca3-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1194.90625px;\" viewBox=\"0 0 1194.90625 139.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-dde61a0cf555eca3-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-dde61a0cf555eca3-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-dde61a0cf555eca3-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-dde61a0cf555eca3-light .error-icon{fill:rgb(255, 255, 255);}#d-dde61a0cf555eca3-light .error-text{fill:#000000;stroke:#000000;}#d-dde61a0cf555eca3-light .edge-thickness-normal{stroke-width:1px;}#d-dde61a0cf555eca3-light .edge-thickness-thick{stroke-width:3.5px;}#d-dde61a0cf555eca3-light .edge-pattern-solid{stroke-dasharray:0;}#d-dde61a0cf555eca3-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-dde61a0cf555eca3-light .edge-pattern-dashed{stroke-dasharray:3;}#d-dde61a0cf555eca3-light .edge-pattern-dotted{stroke-dasharray:2;}#d-dde61a0cf555eca3-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-dde61a0cf555eca3-light .marker.cross{stroke:rgb(44, 46, 48);}#d-dde61a0cf555eca3-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-dde61a0cf555eca3-light p{margin:0;}#d-dde61a0cf555eca3-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-dde61a0cf555eca3-light .cluster-label text{fill:#000000;}#d-dde61a0cf555eca3-light .cluster-label span{color:#000000;}#d-dde61a0cf555eca3-light .cluster-label span p{background-color:transparent;}#d-dde61a0cf555eca3-light .label text,#d-dde61a0cf555eca3-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-dde61a0cf555eca3-light .node rect,#d-dde61a0cf555eca3-light .node circle,#d-dde61a0cf555eca3-light .node ellipse,#d-dde61a0cf555eca3-light .node polygon,#d-dde61a0cf555eca3-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-dde61a0cf555eca3-light .rough-node .label text,#d-dde61a0cf555eca3-light .node .label text,#d-dde61a0cf555eca3-light .image-shape .label,#d-dde61a0cf555eca3-light .icon-shape .label{text-anchor:middle;}#d-dde61a0cf555eca3-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-dde61a0cf555eca3-light .rough-node .label,#d-dde61a0cf555eca3-light .node .label,#d-dde61a0cf555eca3-light .image-shape .label,#d-dde61a0cf555eca3-light .icon-shape .label{text-align:center;}#d-dde61a0cf555eca3-light .node.clickable{cursor:pointer;}#d-dde61a0cf555eca3-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-dde61a0cf555eca3-light .arrowheadPath{fill:#000000;}#d-dde61a0cf555eca3-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-dde61a0cf555eca3-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-dde61a0cf555eca3-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-dde61a0cf555eca3-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-dde61a0cf555eca3-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-dde61a0cf555eca3-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-dde61a0cf555eca3-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-dde61a0cf555eca3-light .cluster text{fill:#000000;}#d-dde61a0cf555eca3-light .cluster span{color:#000000;}#d-dde61a0cf555eca3-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-dde61a0cf555eca3-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-dde61a0cf555eca3-light rect.text{fill:none;stroke-width:0;}#d-dde61a0cf555eca3-light .icon-shape,#d-dde61a0cf555eca3-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-dde61a0cf555eca3-light .icon-shape p,#d-dde61a0cf555eca3-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-dde61a0cf555eca3-light .icon-shape .label rect,#d-dde61a0cf555eca3-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-dde61a0cf555eca3-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-dde61a0cf555eca3-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-dde61a0cf555eca3-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-dde61a0cf555eca3-light [data-look=\"neo\"].node rect,#d-dde61a0cf555eca3-light [data-look=\"neo\"].cluster rect,#d-dde61a0cf555eca3-light [data-look=\"neo\"].node polygon{stroke:url(#d-dde61a0cf555eca3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-dde61a0cf555eca3-light [data-look=\"neo\"].node path{stroke:url(#d-dde61a0cf555eca3-light-gradient);stroke-width:1px;}#d-dde61a0cf555eca3-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-dde61a0cf555eca3-light [data-look=\"neo\"].node circle{stroke:url(#d-dde61a0cf555eca3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-dde61a0cf555eca3-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-dde61a0cf555eca3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-dde61a0cf555eca3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-dde61a0cf555eca3-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M210.844,57.375L215.01,57.375C219.177,57.375,227.51,57.375,235.177,57.375C242.844,57.375,249.844,57.375,253.344,57.375L256.844,57.375\" id=\"d-dde61a0cf555eca3-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjEwLjg0Mzc1LCJ5Ijo1Ny4zNzV9LHsieCI6MjM1Ljg0Mzc1LCJ5Ijo1Ny4zNzV9LHsieCI6MjYwLjg0Mzc1LCJ5Ijo1Ny4zNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-light_flowchart-v2-pointEnd)\"></path><path d=\"M520.844,86.31L528.849,88.091C536.854,89.873,552.865,93.437,568.208,95.218C583.552,97,598.229,97,605.568,97L612.906,97\" id=\"d-dde61a0cf555eca3-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NTIwLjg0Mzc1LCJ5Ijo4Ni4zMDk1MjY5NDQwMDU2M30seyJ4Ijo1NjguODc1LCJ5Ijo5N30seyJ4Ijo2MTYuOTA2MjUsInkiOjk3fV0=\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-light_flowchart-v2-pointEnd)\"></path><path d=\"M520.844,28.44L528.849,26.659C536.854,24.877,552.865,21.313,590.542,19.532C628.219,17.75,687.563,17.75,743.068,17.75C798.573,17.75,850.24,17.75,879.594,18.65C908.948,19.55,915.989,21.35,919.51,22.25L923.031,23.15\" id=\"d-dde61a0cf555eca3-light-L_B_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6NTIwLjg0Mzc1LCJ5IjoyOC40NDA0NzMwNTU5OTQzOH0seyJ4Ijo1NjguODc1LCJ5IjoxNy43NX0seyJ4Ijo3NDYuOTA2MjUsInkiOjE3Ljc1fSx7IngiOjkwMS45MDYyNSwieSI6MTcuNzV9LHsieCI6OTI2LjkwNjI1LCJ5IjoyNC4xNDExMjkwMzIyNTgwNjR9XQ==\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-light_flowchart-v2-pointEnd)\"></path><path d=\"M876.906,97L881.073,97C885.24,97,893.573,97,901.26,96.1C908.948,95.2,915.989,93.4,919.51,92.5L923.031,91.6\" id=\"d-dde61a0cf555eca3-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6ODc2LjkwNjI1LCJ5Ijo5N30seyJ4Ijo5MDEuOTA2MjUsInkiOjk3fSx7IngiOjkyNi45MDYyNSwieSI6OTAuNjA4ODcwOTY3NzQxOTR9XQ==\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(568.875, 97)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-23.03125, -9.75)\"><foreignObject width=\"46.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Bit 1 = 1</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(746.90625, 17.75)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-24.484375, -9.75)\"><foreignObject width=\"48.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Bit 1 = 0</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-dde61a0cf555eca3-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(109.421875, 57.375)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.421875\" y=\"-24.75\" width=\"202.84375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.421875, -9.75)\"><rect></rect><foreignObject width=\"142.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>MTI (4 bytes e.g. 0100)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-dde61a0cf555eca3-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(390.84375, 57.375)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Primary Bitmap (8 bytes / 16 hex)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-dde61a0cf555eca3-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(746.90625, 97)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Secondary Bitmap (Fields 65-128)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-dde61a0cf555eca3-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(1056.90625, 57.375)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Data Elements (DE2, DE3, DE4, DE11...)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-dde61a0cf555eca3-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-dde61a0cf555eca3-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-dde61a0cf555eca3-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-dde61a0cf555eca3-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1194.90625px;\" viewBox=\"0 0 1194.90625 139.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-dde61a0cf555eca3-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-dde61a0cf555eca3-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-dde61a0cf555eca3-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-dde61a0cf555eca3-dark .error-icon{fill:rgb(21, 22, 23);}#d-dde61a0cf555eca3-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-dde61a0cf555eca3-dark .edge-thickness-normal{stroke-width:1px;}#d-dde61a0cf555eca3-dark .edge-thickness-thick{stroke-width:3.5px;}#d-dde61a0cf555eca3-dark .edge-pattern-solid{stroke-dasharray:0;}#d-dde61a0cf555eca3-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-dde61a0cf555eca3-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-dde61a0cf555eca3-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-dde61a0cf555eca3-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-dde61a0cf555eca3-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-dde61a0cf555eca3-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-dde61a0cf555eca3-dark p{margin:0;}#d-dde61a0cf555eca3-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-dde61a0cf555eca3-dark .cluster-label text{fill:#eae9e8;}#d-dde61a0cf555eca3-dark .cluster-label span{color:#eae9e8;}#d-dde61a0cf555eca3-dark .cluster-label span p{background-color:transparent;}#d-dde61a0cf555eca3-dark .label text,#d-dde61a0cf555eca3-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-dde61a0cf555eca3-dark .node rect,#d-dde61a0cf555eca3-dark .node circle,#d-dde61a0cf555eca3-dark .node ellipse,#d-dde61a0cf555eca3-dark .node polygon,#d-dde61a0cf555eca3-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-dde61a0cf555eca3-dark .rough-node .label text,#d-dde61a0cf555eca3-dark .node .label text,#d-dde61a0cf555eca3-dark .image-shape .label,#d-dde61a0cf555eca3-dark .icon-shape .label{text-anchor:middle;}#d-dde61a0cf555eca3-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-dde61a0cf555eca3-dark .rough-node .label,#d-dde61a0cf555eca3-dark .node .label,#d-dde61a0cf555eca3-dark .image-shape .label,#d-dde61a0cf555eca3-dark .icon-shape .label{text-align:center;}#d-dde61a0cf555eca3-dark .node.clickable{cursor:pointer;}#d-dde61a0cf555eca3-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-dde61a0cf555eca3-dark .arrowheadPath{fill:#eae9e8;}#d-dde61a0cf555eca3-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-dde61a0cf555eca3-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-dde61a0cf555eca3-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-dde61a0cf555eca3-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-dde61a0cf555eca3-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-dde61a0cf555eca3-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-dde61a0cf555eca3-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-dde61a0cf555eca3-dark .cluster text{fill:#eae9e8;}#d-dde61a0cf555eca3-dark .cluster span{color:#eae9e8;}#d-dde61a0cf555eca3-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-dde61a0cf555eca3-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-dde61a0cf555eca3-dark rect.text{fill:none;stroke-width:0;}#d-dde61a0cf555eca3-dark .icon-shape,#d-dde61a0cf555eca3-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-dde61a0cf555eca3-dark .icon-shape p,#d-dde61a0cf555eca3-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-dde61a0cf555eca3-dark .icon-shape .label rect,#d-dde61a0cf555eca3-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-dde61a0cf555eca3-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-dde61a0cf555eca3-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-dde61a0cf555eca3-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node rect,#d-dde61a0cf555eca3-dark [data-look=\"neo\"].cluster rect,#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node polygon{stroke:url(#d-dde61a0cf555eca3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node path{stroke:url(#d-dde61a0cf555eca3-dark-gradient);stroke-width:1px;}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node circle{stroke:url(#d-dde61a0cf555eca3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-dde61a0cf555eca3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-dde61a0cf555eca3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dde61a0cf555eca3-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-dde61a0cf555eca3-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M210.844,57.375L215.01,57.375C219.177,57.375,227.51,57.375,235.177,57.375C242.844,57.375,249.844,57.375,253.344,57.375L256.844,57.375\" id=\"d-dde61a0cf555eca3-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjEwLjg0Mzc1LCJ5Ijo1Ny4zNzV9LHsieCI6MjM1Ljg0Mzc1LCJ5Ijo1Ny4zNzV9LHsieCI6MjYwLjg0Mzc1LCJ5Ijo1Ny4zNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M520.844,86.31L528.849,88.091C536.854,89.873,552.865,93.437,568.208,95.218C583.552,97,598.229,97,605.568,97L612.906,97\" id=\"d-dde61a0cf555eca3-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NTIwLjg0Mzc1LCJ5Ijo4Ni4zMDk1MjY5NDQwMDU2M30seyJ4Ijo1NjguODc1LCJ5Ijo5N30seyJ4Ijo2MTYuOTA2MjUsInkiOjk3fV0=\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M520.844,28.44L528.849,26.659C536.854,24.877,552.865,21.313,590.542,19.532C628.219,17.75,687.563,17.75,743.068,17.75C798.573,17.75,850.24,17.75,879.594,18.65C908.948,19.55,915.989,21.35,919.51,22.25L923.031,23.15\" id=\"d-dde61a0cf555eca3-dark-L_B_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6NTIwLjg0Mzc1LCJ5IjoyOC40NDA0NzMwNTU5OTQzOH0seyJ4Ijo1NjguODc1LCJ5IjoxNy43NX0seyJ4Ijo3NDYuOTA2MjUsInkiOjE3Ljc1fSx7IngiOjkwMS45MDYyNSwieSI6MTcuNzV9LHsieCI6OTI2LjkwNjI1LCJ5IjoyNC4xNDExMjkwMzIyNTgwNjR9XQ==\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M876.906,97L881.073,97C885.24,97,893.573,97,901.26,96.1C908.948,95.2,915.989,93.4,919.51,92.5L923.031,91.6\" id=\"d-dde61a0cf555eca3-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6ODc2LjkwNjI1LCJ5Ijo5N30seyJ4Ijo5MDEuOTA2MjUsInkiOjk3fSx7IngiOjkyNi45MDYyNSwieSI6OTAuNjA4ODcwOTY3NzQxOTR9XQ==\" data-look=\"classic\" marker-end=\"url(#d-dde61a0cf555eca3-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(568.875, 97)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-23.03125, -9.75)\"><foreignObject width=\"46.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Bit 1 = 1</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(746.90625, 17.75)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-24.484375, -9.75)\"><foreignObject width=\"48.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Bit 1 = 0</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-dde61a0cf555eca3-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(109.421875, 57.375)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.421875\" y=\"-24.75\" width=\"202.84375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.421875, -9.75)\"><rect></rect><foreignObject width=\"142.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>MTI (4 bytes e.g. 0100)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-dde61a0cf555eca3-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(390.84375, 57.375)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Primary Bitmap (8 bytes / 16 hex)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-dde61a0cf555eca3-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(746.90625, 97)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Secondary Bitmap (Fields 65-128)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-dde61a0cf555eca3-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(1056.90625, 57.375)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Data Elements (DE2, DE3, DE4, DE11...)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-dde61a0cf555eca3-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-dde61a0cf555eca3-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-dde61a0cf555eca3-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"how-bitmaps-work\">How Bitmaps Work<a class=\"h-anchor\" href=\"#how-bitmaps-work\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A bitmap is a compact bitmask where bit position <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> indicates whether Data Element <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> is present in the message body:</p>\n<ul>\n<li><strong>1-based bit indexing</strong>: Unlike standard programming indices starting at 0, ISO 8583 field numbering begins at <strong>1</strong>. Bit 1 corresponds to the Most Significant Bit (MSB) of the first byte (<code>0x80</code> or <code>1 &lt;&lt; 63</code>).</li>\n<li><strong>Primary Bitmap (Fields 1 to 64)</strong>: Always present; spans exactly 8 bytes (64 bits).</li>\n<li><strong>Secondary Bitmap (Fields 65 to 128)</strong>: Present if and only if <strong>Bit 1</strong> of the primary bitmap is set to <code>1</code>.</li>\n<li><strong>Tertiary Bitmap (Fields 129 to 192)</strong>: Defined in ISO 8583:1993/2003; present if and only if <strong>Bit 65</strong> (Bit 1 of the secondary bitmap) is set to <code>1</code>.</li>\n</ul>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span>Byte 0              Byte 1              ... Byte 7</span></span>\n<span class=\"line\"><span>[b1 b2 b3 b4 b5 b6 b7 b8] [b9 ... b16]        ... [b57 ... b64]</span></span>\n<span class=\"line\"><span> ^                         ^</span></span>\n<span class=\"line\"><span> |                         +-- Field 9 (Conversion Rate)</span></span>\n<span class=\"line\"><span> +-- Secondary Bitmap Flag (1 = Present, 0 = Absent)</span></span></code></pre></div>\n<h2 id=\"binary-vs-hexadecimal-ascii-formats\">Binary vs Hexadecimal ASCII Formats<a class=\"h-anchor\" href=\"#binary-vs-hexadecimal-ascii-formats\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Depending on the network specifications, bitmaps are transmitted in two formats:</p>\n<ol>\n<li><strong>Packed Binary</strong>: 8 bytes for primary (or 16 bytes with secondary). Common in raw TCP host interfaces (e.g. Visa SMS / Base I).</li>\n<li><strong>Hexadecimal ASCII</strong>: 16 characters for primary (or 32 characters with secondary), encoded in readable ASCII (e.g. <code>\"7238241128018400\"</code>). Common in AS 2805 and HTTP/JSON bridge protocols.</li>\n</ol>\n<h2 id=\"robust-bitmap-unpacker-in-go\">Robust Bitmap Unpacker in Go<a class=\"h-anchor\" href=\"#robust-bitmap-unpacker-in-go\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Here is a production Go implementation that parses both binary and hex formats and provides constant-time <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>O</mi><mo stretchy=\"false\">(</mo><mn>1</mn><mo stretchy=\"false\">)</mo></mrow><annotation encoding=\"application/x-tex\">O(1)</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0278em;\">O</span><span class=\"mopen\">(</span><span class=\"mord\">1</span><span class=\"mclose\">)</span></span></span></span></span></p> field presence lookups:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> iso8583</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">encoding/binary</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">encoding/hex</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">errors</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Bitmap</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Primary      </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Secondary    </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    HasSecondary </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ErrInvalidLength </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"insufficient data for ISO 8583 bitmap\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ErrInvalidField  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"field number must be between 1 and 128\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// ParseBinaryBitmap unpacks raw 8 or 16 byte packed bitmaps</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> ParseBinaryBitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">data</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(data) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 8</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, ErrInvalidLength</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    bm </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        Primary: binary.BigEndian.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Uint64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(data[:</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">8</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    bytesRead </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 8</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Bit 1 is the MSB of the primary uint64 (1 &lt;&lt; 63)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> bm.Primary</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">63</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        if</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(data) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 16</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            return</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"secondary bitmap flagged but payload has only </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%d</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> bytes\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(data))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        bm.Secondary </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> binary.BigEndian.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Uint64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(data[</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">8</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">16</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">])</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        bm.HasSecondary </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        bytesRead </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 16</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> bm, bytesRead, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// ParseHexBitmap decodes 16 or 32 character ASCII hexadecimal bitmaps</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> ParseHexBitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">hexStr</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(hexStr) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 16</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, ErrInvalidLength</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    raw, err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> hex.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">DecodeString</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(hexStr)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"malformed hex bitmap: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> ParseBinaryBitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(raw)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// IsSet checks whether a specific Data Element (1 to 128) is present</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">bm </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsSet</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">field</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) (</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> field </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ||</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> field </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 128</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> false</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, ErrInvalidField</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> field </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Field 1 maps to MSB (shift 63), Field 64 maps to LSB (shift 0)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        shift </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 64</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> -</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> field</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (bm.Primary</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;&gt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">shift)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> !</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">bm.HasSecondary {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> false</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    shift </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 128</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> -</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> field</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (bm.Secondary</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;&gt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">shift)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"parsing-sequential-data-elements\">Parsing Sequential Data Elements<a class=\"h-anchor\" href=\"#parsing-sequential-data-elements\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Because the bitmap defines the presence of all subsequent fields, the parser iterates through every set bit in ascending numerical order:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> UnpackFields</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">bm</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Bitmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">payload</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Common standard fields:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // DE2:  Primary Account Number (PAN) - LLVAR</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // DE3:  Processing Code - 6 bytes numeric</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // DE4:  Amount, Transaction - 12 bytes numeric</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // DE11: Systems Trace Audit Number (STAN) - 6 bytes numeric</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // DE39: Action / Response Code - 2 bytes alphanumeric</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ok, _ </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> bm.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsSet</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">3</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">); ok {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Unpack 6-byte processing code (e.g. 000000 = Purchase)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ok, _ </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> bm.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsSet</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">); ok {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Unpack 12-byte transaction amount (e.g. 000000050000 = $500.00)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ok, _ </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> bm.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsSet</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">39</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">); ok {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Unpack 2-byte response code (e.g. 00 = Approved)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"architectural-takeaways\">Architectural Takeaways<a class=\"h-anchor\" href=\"#architectural-takeaways\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>The Bitmap IS the Schema</strong>: ISO 8583 messages do not require separate JSON schema descriptors or XML DTDs. The bitmap acts as a self-describing wire manifest.</li>\n<li><strong>Fixed Bit Allocation</strong>: Always use bit shift math <code>(64 - field)</code> for Primary and <code>(128 - field)</code> for Secondary to maintain exact endian alignment across CPU architectures.</li>\n<li><strong>Ascending Numerical Order</strong>: Data elements always follow in exact sequential order of the active bits. No field can appear out of sequence.</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-error-wrapping/",
      "url": "https://ashwingopalsamy.in/blog/go-error-wrapping/",
      "title": "Go Error Wrapping Patterns",
      "content_text": "The fmt.Errorf %w pattern, API boundary protection with %v, multi-error wrapping with errors.Join, and tree traversal.",
      "date_published": "2026-03-28T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Error wrapping in Go is more than prefixing messages. It defines whether callers can programmatically inspect, match, and unwrap underlying failure modes across package boundaries.</p>\n<h2 id=\"the-mechanics-w-vs-v\">The Mechanics: <code>%w</code> vs <code>%v</code><a class=\"h-anchor\" href=\"#the-mechanics-w-vs-v\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Using <code>fmt.Errorf</code> with <code>%w</code> wraps the original error inside an unwrap-capable container struct:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Wrapped: implements Unwrap() error</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"fetching account </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, accountID, err)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Formatted but not wrapped: breaks Unwrap() chain</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"fetching account </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%v</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, accountID, err)</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"23dd517122b4ba25\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-23dd517122b4ba25-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 535.25px;\" viewBox=\"0 0 535.25 459.0625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-23dd517122b4ba25-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-23dd517122b4ba25-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-23dd517122b4ba25-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-23dd517122b4ba25-light .error-icon{fill:rgb(255, 255, 255);}#d-23dd517122b4ba25-light .error-text{fill:#000000;stroke:#000000;}#d-23dd517122b4ba25-light .edge-thickness-normal{stroke-width:1px;}#d-23dd517122b4ba25-light .edge-thickness-thick{stroke-width:3.5px;}#d-23dd517122b4ba25-light .edge-pattern-solid{stroke-dasharray:0;}#d-23dd517122b4ba25-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-23dd517122b4ba25-light .edge-pattern-dashed{stroke-dasharray:3;}#d-23dd517122b4ba25-light .edge-pattern-dotted{stroke-dasharray:2;}#d-23dd517122b4ba25-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-23dd517122b4ba25-light .marker.cross{stroke:rgb(44, 46, 48);}#d-23dd517122b4ba25-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-23dd517122b4ba25-light p{margin:0;}#d-23dd517122b4ba25-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-23dd517122b4ba25-light .cluster-label text{fill:#000000;}#d-23dd517122b4ba25-light .cluster-label span{color:#000000;}#d-23dd517122b4ba25-light .cluster-label span p{background-color:transparent;}#d-23dd517122b4ba25-light .label text,#d-23dd517122b4ba25-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-23dd517122b4ba25-light .node rect,#d-23dd517122b4ba25-light .node circle,#d-23dd517122b4ba25-light .node ellipse,#d-23dd517122b4ba25-light .node polygon,#d-23dd517122b4ba25-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-23dd517122b4ba25-light .rough-node .label text,#d-23dd517122b4ba25-light .node .label text,#d-23dd517122b4ba25-light .image-shape .label,#d-23dd517122b4ba25-light .icon-shape .label{text-anchor:middle;}#d-23dd517122b4ba25-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-23dd517122b4ba25-light .rough-node .label,#d-23dd517122b4ba25-light .node .label,#d-23dd517122b4ba25-light .image-shape .label,#d-23dd517122b4ba25-light .icon-shape .label{text-align:center;}#d-23dd517122b4ba25-light .node.clickable{cursor:pointer;}#d-23dd517122b4ba25-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-23dd517122b4ba25-light .arrowheadPath{fill:#000000;}#d-23dd517122b4ba25-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-23dd517122b4ba25-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-23dd517122b4ba25-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-23dd517122b4ba25-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-23dd517122b4ba25-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-23dd517122b4ba25-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-23dd517122b4ba25-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-23dd517122b4ba25-light .cluster text{fill:#000000;}#d-23dd517122b4ba25-light .cluster span{color:#000000;}#d-23dd517122b4ba25-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-23dd517122b4ba25-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-23dd517122b4ba25-light rect.text{fill:none;stroke-width:0;}#d-23dd517122b4ba25-light .icon-shape,#d-23dd517122b4ba25-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-23dd517122b4ba25-light .icon-shape p,#d-23dd517122b4ba25-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-23dd517122b4ba25-light .icon-shape .label rect,#d-23dd517122b4ba25-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-23dd517122b4ba25-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-23dd517122b4ba25-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-23dd517122b4ba25-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-23dd517122b4ba25-light [data-look=\"neo\"].node rect,#d-23dd517122b4ba25-light [data-look=\"neo\"].cluster rect,#d-23dd517122b4ba25-light [data-look=\"neo\"].node polygon{stroke:url(#d-23dd517122b4ba25-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-23dd517122b4ba25-light [data-look=\"neo\"].node path{stroke:url(#d-23dd517122b4ba25-light-gradient);stroke-width:1px;}#d-23dd517122b4ba25-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-23dd517122b4ba25-light [data-look=\"neo\"].node circle{stroke:url(#d-23dd517122b4ba25-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-23dd517122b4ba25-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-23dd517122b4ba25-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-23dd517122b4ba25-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-23dd517122b4ba25-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M266.984,57.5L266.984,61.667C266.984,65.833,266.984,74.167,266.984,81.833C266.984,89.5,266.984,96.5,266.984,100L266.984,103.5\" id=\"d-23dd517122b4ba25-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjY2Ljk4NDM3NSwieSI6NTcuNX0seyJ4IjoyNjYuOTg0Mzc1LCJ5Ijo4Mi41fSx7IngiOjI2Ni45ODQzNzUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-23dd517122b4ba25-light_flowchart-v2-pointEnd)\"></path><path d=\"M211.759,276.837L197.245,291.833C182.73,306.829,153.701,336.821,139.186,356.942C124.672,377.063,124.672,387.313,124.672,392.438L124.672,397.563\" id=\"d-23dd517122b4ba25-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MjExLjc1OTMxNjk0ODM3NDU2LCJ5IjoyNzYuODM3NDQxOTQ4Mzc0NTN9LHsieCI6MTI0LjY3MTg3NSwieSI6MzY2LjgxMjV9LHsieCI6MTI0LjY3MTg3NSwieSI6NDAxLjU2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-23dd517122b4ba25-light_flowchart-v2-pointEnd)\"></path><path d=\"M322.209,276.837L336.724,291.833C351.239,306.829,380.268,336.821,394.782,356.942C409.297,377.063,409.297,387.313,409.297,392.438L409.297,397.563\" id=\"d-23dd517122b4ba25-light-L_B_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6MzIyLjIwOTQzMzA1MTYyNTQ3LCJ5IjoyNzYuODM3NDQxOTQ4Mzc0NTN9LHsieCI6NDA5LjI5Njg3NSwieSI6MzY2LjgxMjV9LHsieCI6NDA5LjI5Njg3NSwieSI6NDAxLjU2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-23dd517122b4ba25-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(124.671875, 366.8125)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-52.25, -9.75)\"><foreignObject width=\"104.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Wrapped via %w</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(409.296875, 366.8125)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-53.8984375, -9.75)\"><foreignObject width=\"107.796875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Formatted via %v</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-23dd517122b4ba25-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(266.984375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.1796875\" y=\"-24.75\" width=\"172.359375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.1796875, -9.75)\"><rect></rect><foreignObject width=\"112.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Caller receives err</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-23dd517122b4ba25-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(266.984375, 219.78125)\"><polygon points=\"112.28125,0 224.5625,-112.28125 112.28125,-224.5625 0,-112.28125\" class=\"label-container\" transform=\"translate(-111.78125, 112.28125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-87.53125, -9.75)\"><rect></rect><foreignObject width=\"175.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>errors.Is(err, sql.ErrNoRows)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-23dd517122b4ba25-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(124.671875, 426.3125)\"><rect class=\"basic label-container\" style=\"\" x=\"-116.671875\" y=\"-24.75\" width=\"233.34375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-86.671875, -9.75)\"><rect></rect><foreignObject width=\"173.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Traverse chain: Returns true</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-23dd517122b4ba25-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(409.296875, 426.3125)\"><rect class=\"basic label-container\" style=\"\" x=\"-117.953125\" y=\"-24.75\" width=\"235.90625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-87.953125, -9.75)\"><rect></rect><foreignObject width=\"175.90625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Chain severed: Returns false</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-23dd517122b4ba25-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-23dd517122b4ba25-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-23dd517122b4ba25-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-23dd517122b4ba25-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 535.25px;\" viewBox=\"0 0 535.25 459.0625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-23dd517122b4ba25-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-23dd517122b4ba25-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-23dd517122b4ba25-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-23dd517122b4ba25-dark .error-icon{fill:rgb(21, 22, 23);}#d-23dd517122b4ba25-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-23dd517122b4ba25-dark .edge-thickness-normal{stroke-width:1px;}#d-23dd517122b4ba25-dark .edge-thickness-thick{stroke-width:3.5px;}#d-23dd517122b4ba25-dark .edge-pattern-solid{stroke-dasharray:0;}#d-23dd517122b4ba25-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-23dd517122b4ba25-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-23dd517122b4ba25-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-23dd517122b4ba25-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-23dd517122b4ba25-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-23dd517122b4ba25-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-23dd517122b4ba25-dark p{margin:0;}#d-23dd517122b4ba25-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-23dd517122b4ba25-dark .cluster-label text{fill:#eae9e8;}#d-23dd517122b4ba25-dark .cluster-label span{color:#eae9e8;}#d-23dd517122b4ba25-dark .cluster-label span p{background-color:transparent;}#d-23dd517122b4ba25-dark .label text,#d-23dd517122b4ba25-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-23dd517122b4ba25-dark .node rect,#d-23dd517122b4ba25-dark .node circle,#d-23dd517122b4ba25-dark .node ellipse,#d-23dd517122b4ba25-dark .node polygon,#d-23dd517122b4ba25-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-23dd517122b4ba25-dark .rough-node .label text,#d-23dd517122b4ba25-dark .node .label text,#d-23dd517122b4ba25-dark .image-shape .label,#d-23dd517122b4ba25-dark .icon-shape .label{text-anchor:middle;}#d-23dd517122b4ba25-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-23dd517122b4ba25-dark .rough-node .label,#d-23dd517122b4ba25-dark .node .label,#d-23dd517122b4ba25-dark .image-shape .label,#d-23dd517122b4ba25-dark .icon-shape .label{text-align:center;}#d-23dd517122b4ba25-dark .node.clickable{cursor:pointer;}#d-23dd517122b4ba25-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-23dd517122b4ba25-dark .arrowheadPath{fill:#eae9e8;}#d-23dd517122b4ba25-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-23dd517122b4ba25-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-23dd517122b4ba25-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-23dd517122b4ba25-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-23dd517122b4ba25-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-23dd517122b4ba25-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-23dd517122b4ba25-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-23dd517122b4ba25-dark .cluster text{fill:#eae9e8;}#d-23dd517122b4ba25-dark .cluster span{color:#eae9e8;}#d-23dd517122b4ba25-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-23dd517122b4ba25-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-23dd517122b4ba25-dark rect.text{fill:none;stroke-width:0;}#d-23dd517122b4ba25-dark .icon-shape,#d-23dd517122b4ba25-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-23dd517122b4ba25-dark .icon-shape p,#d-23dd517122b4ba25-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-23dd517122b4ba25-dark .icon-shape .label rect,#d-23dd517122b4ba25-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-23dd517122b4ba25-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-23dd517122b4ba25-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-23dd517122b4ba25-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-23dd517122b4ba25-dark [data-look=\"neo\"].node rect,#d-23dd517122b4ba25-dark [data-look=\"neo\"].cluster rect,#d-23dd517122b4ba25-dark [data-look=\"neo\"].node polygon{stroke:url(#d-23dd517122b4ba25-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-23dd517122b4ba25-dark [data-look=\"neo\"].node path{stroke:url(#d-23dd517122b4ba25-dark-gradient);stroke-width:1px;}#d-23dd517122b4ba25-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-23dd517122b4ba25-dark [data-look=\"neo\"].node circle{stroke:url(#d-23dd517122b4ba25-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-23dd517122b4ba25-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-23dd517122b4ba25-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-23dd517122b4ba25-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-23dd517122b4ba25-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-23dd517122b4ba25-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M266.984,57.5L266.984,61.667C266.984,65.833,266.984,74.167,266.984,81.833C266.984,89.5,266.984,96.5,266.984,100L266.984,103.5\" id=\"d-23dd517122b4ba25-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjY2Ljk4NDM3NSwieSI6NTcuNX0seyJ4IjoyNjYuOTg0Mzc1LCJ5Ijo4Mi41fSx7IngiOjI2Ni45ODQzNzUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-23dd517122b4ba25-dark_flowchart-v2-pointEnd)\"></path><path d=\"M211.759,276.837L197.245,291.833C182.73,306.829,153.701,336.821,139.186,356.942C124.672,377.063,124.672,387.313,124.672,392.438L124.672,397.563\" id=\"d-23dd517122b4ba25-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MjExLjc1OTMxNjk0ODM3NDU2LCJ5IjoyNzYuODM3NDQxOTQ4Mzc0NTN9LHsieCI6MTI0LjY3MTg3NSwieSI6MzY2LjgxMjV9LHsieCI6MTI0LjY3MTg3NSwieSI6NDAxLjU2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-23dd517122b4ba25-dark_flowchart-v2-pointEnd)\"></path><path d=\"M322.209,276.837L336.724,291.833C351.239,306.829,380.268,336.821,394.782,356.942C409.297,377.063,409.297,387.313,409.297,392.438L409.297,397.563\" id=\"d-23dd517122b4ba25-dark-L_B_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6MzIyLjIwOTQzMzA1MTYyNTQ3LCJ5IjoyNzYuODM3NDQxOTQ4Mzc0NTN9LHsieCI6NDA5LjI5Njg3NSwieSI6MzY2LjgxMjV9LHsieCI6NDA5LjI5Njg3NSwieSI6NDAxLjU2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-23dd517122b4ba25-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(124.671875, 366.8125)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-52.25, -9.75)\"><foreignObject width=\"104.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Wrapped via %w</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(409.296875, 366.8125)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-53.8984375, -9.75)\"><foreignObject width=\"107.796875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Formatted via %v</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-23dd517122b4ba25-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(266.984375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.1796875\" y=\"-24.75\" width=\"172.359375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.1796875, -9.75)\"><rect></rect><foreignObject width=\"112.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Caller receives err</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-23dd517122b4ba25-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(266.984375, 219.78125)\"><polygon points=\"112.28125,0 224.5625,-112.28125 112.28125,-224.5625 0,-112.28125\" class=\"label-container\" transform=\"translate(-111.78125, 112.28125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-87.53125, -9.75)\"><rect></rect><foreignObject width=\"175.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>errors.Is(err, sql.ErrNoRows)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-23dd517122b4ba25-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(124.671875, 426.3125)\"><rect class=\"basic label-container\" style=\"\" x=\"-116.671875\" y=\"-24.75\" width=\"233.34375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-86.671875, -9.75)\"><rect></rect><foreignObject width=\"173.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Traverse chain: Returns true</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-23dd517122b4ba25-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(409.296875, 426.3125)\"><rect class=\"basic label-container\" style=\"\" x=\"-117.953125\" y=\"-24.75\" width=\"235.90625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-87.953125, -9.75)\"><rect></rect><foreignObject width=\"175.90625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Chain severed: Returns false</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-23dd517122b4ba25-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-23dd517122b4ba25-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-23dd517122b4ba25-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<blockquote class=\"callout callout-important\" role=\"note\" aria-label=\"Important\" data-callout=\"important\"><p class=\"callout-head\"><span class=\"callout-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"></line><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"></line></svg></span><span class=\"callout-label\">Important</span></p>\n<p><code>%w</code> makes the underlying error part of your package’s <strong>public contract</strong>. If you wrap an internal database driver error (like <code>pgx.ErrNoRows</code> or <code>sql.ErrConnDone</code>) with <code>%w</code>, callers can bind their logic directly to that internal dependency. If you ever change the storage driver, you break downstream callers. Use <code>%v</code> at API boundaries to conceal private implementation details.</p>\n</blockquote>\n<h2 id=\"error-inspection-with-errorsis-and-errorsas\">Error Inspection with <code>errors.Is</code> and <code>errors.As</code><a class=\"h-anchor\" href=\"#error-inspection-with-errorsis-and-errorsas\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Go provides two inspection primitives that traverse wrapped error chains:</p>\n<h3 id=\"1-errorsis-for-value--sentinel-matching\">1. <code>errors.Is</code> for Value &amp; Sentinel Matching<a class=\"h-anchor\" href=\"#1-errorsis-for-value--sentinel-matching\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">errors</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">io</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrMalformedPayload </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"malformed ISO 8583 payload\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> parseMessage</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">r</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> io</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Reader</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"parsing header: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, ErrMalformedPayload)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> parseMessage</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Is</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err, ErrMalformedPayload) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Matched sentinel error across wrapped chain\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h3 id=\"2-errorsas-for-type--structured-matching\">2. <code>errors.As</code> for Type &amp; Structured Matching<a class=\"h-anchor\" href=\"#2-errorsas-for-type--structured-matching\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> PaymentDeclineError</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ResponseCode </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Reason       </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">e </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">PaymentDeclineError</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sprintf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"card declined [</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">]: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, e.ResponseCode, e.Reason)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> processAuth</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    decline </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">PaymentDeclineError</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{ResponseCode: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"51\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, Reason: </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Insufficient funds\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"network authorization: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, decline)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> handle</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> processAuth</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> declineErr </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">PaymentDeclineError</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">As</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(err, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&amp;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">declineErr) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Parsed decline code: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, declineErr.ResponseCode)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"multi-error-wrapping-in-go-120\">Multi-Error Wrapping in Go 1.20+<a class=\"h-anchor\" href=\"#multi-error-wrapping-in-go-120\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Go 1.20 introduced support for multiple wrapped errors via <code>errors.Join</code> and multiple <code>%w</code> verbs in <code>fmt.Errorf</code>:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> validateTransaction</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">tx</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Transaction</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errs []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tx.Amount </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        errs </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> append</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(errs, errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"amount must be positive\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> tx.Currency </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        errs </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> append</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(errs, errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"currency is required\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Join</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(errs</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">...</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>When multiple errors are joined, the container implements <code>Unwrap() []error</code>. Both <code>errors.Is</code> and <code>errors.As</code> perform a depth-first search across all branches of the error tree:</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"5a2ddaf19548ea67\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-5a2ddaf19548ea67-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 535.15625px;\" viewBox=\"0 0 535.15625 433.71875\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-5a2ddaf19548ea67-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-5a2ddaf19548ea67-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-5a2ddaf19548ea67-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-5a2ddaf19548ea67-light .error-icon{fill:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-light .error-text{fill:#000000;stroke:#000000;}#d-5a2ddaf19548ea67-light .edge-thickness-normal{stroke-width:1px;}#d-5a2ddaf19548ea67-light .edge-thickness-thick{stroke-width:3.5px;}#d-5a2ddaf19548ea67-light .edge-pattern-solid{stroke-dasharray:0;}#d-5a2ddaf19548ea67-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-5a2ddaf19548ea67-light .edge-pattern-dashed{stroke-dasharray:3;}#d-5a2ddaf19548ea67-light .edge-pattern-dotted{stroke-dasharray:2;}#d-5a2ddaf19548ea67-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-5a2ddaf19548ea67-light .marker.cross{stroke:rgb(44, 46, 48);}#d-5a2ddaf19548ea67-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-5a2ddaf19548ea67-light p{margin:0;}#d-5a2ddaf19548ea67-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-light .cluster-label text{fill:#000000;}#d-5a2ddaf19548ea67-light .cluster-label span{color:#000000;}#d-5a2ddaf19548ea67-light .cluster-label span p{background-color:transparent;}#d-5a2ddaf19548ea67-light .label text,#d-5a2ddaf19548ea67-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-light .node rect,#d-5a2ddaf19548ea67-light .node circle,#d-5a2ddaf19548ea67-light .node ellipse,#d-5a2ddaf19548ea67-light .node polygon,#d-5a2ddaf19548ea67-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-5a2ddaf19548ea67-light .rough-node .label text,#d-5a2ddaf19548ea67-light .node .label text,#d-5a2ddaf19548ea67-light .image-shape .label,#d-5a2ddaf19548ea67-light .icon-shape .label{text-anchor:middle;}#d-5a2ddaf19548ea67-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-5a2ddaf19548ea67-light .rough-node .label,#d-5a2ddaf19548ea67-light .node .label,#d-5a2ddaf19548ea67-light .image-shape .label,#d-5a2ddaf19548ea67-light .icon-shape .label{text-align:center;}#d-5a2ddaf19548ea67-light .node.clickable{cursor:pointer;}#d-5a2ddaf19548ea67-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-5a2ddaf19548ea67-light .arrowheadPath{fill:#000000;}#d-5a2ddaf19548ea67-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-5a2ddaf19548ea67-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-5a2ddaf19548ea67-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-5a2ddaf19548ea67-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-5a2ddaf19548ea67-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-5a2ddaf19548ea67-light .cluster text{fill:#000000;}#d-5a2ddaf19548ea67-light .cluster span{color:#000000;}#d-5a2ddaf19548ea67-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-5a2ddaf19548ea67-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-light rect.text{fill:none;stroke-width:0;}#d-5a2ddaf19548ea67-light .icon-shape,#d-5a2ddaf19548ea67-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-5a2ddaf19548ea67-light .icon-shape p,#d-5a2ddaf19548ea67-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-5a2ddaf19548ea67-light .icon-shape .label rect,#d-5a2ddaf19548ea67-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-5a2ddaf19548ea67-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-5a2ddaf19548ea67-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node rect,#d-5a2ddaf19548ea67-light [data-look=\"neo\"].cluster rect,#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node polygon{stroke:url(#d-5a2ddaf19548ea67-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node path{stroke:url(#d-5a2ddaf19548ea67-light-gradient);stroke-width:1px;}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node circle{stroke:url(#d-5a2ddaf19548ea67-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-5a2ddaf19548ea67-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-5a2ddaf19548ea67-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M140.532,122.609L130.533,139.253C120.533,155.896,100.534,189.182,93.348,211.031C86.163,232.879,91.79,243.29,94.604,248.495L97.417,253.7\" id=\"d-5a2ddaf19548ea67-light-L_ROOT_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_B1_0\" data-points=\"W3sieCI6MTQwLjUzMjE3MTMzNjIwNjksInkiOjEyMi42MDkzNzV9LHsieCI6ODAuNTM1MTU2MjUsInkiOjIyMi40Njg3NX0seyJ4Ijo5OS4zMTk1MjI3ODg4MDg2NywieSI6MjU3LjIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd)\"></path><path d=\"M186.477,122.609L207.374,139.253C228.27,155.896,270.063,189.182,300.337,211.282C330.611,233.382,349.367,244.294,358.745,249.751L368.123,255.207\" id=\"d-5a2ddaf19548ea67-light-L_ROOT_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_B2_0\" data-points=\"W3sieCI6MTg2LjQ3NzE3MTMzNjIwNjksInkiOjEyMi42MDkzNzV9LHsieCI6MzExLjg1NTQ2ODc1LCJ5IjoyMjIuNDY4NzV9LHsieCI6MzcxLjU4MDA3MTA3NDAwNzIsInkiOjI1Ny4yMTg3NX1d\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd)\"></path><path d=\"M343.421,137.699L325.682,151.827C307.944,165.955,272.466,194.212,245.349,213.797C218.233,233.382,199.477,244.294,190.099,249.751L180.721,255.207\" id=\"d-5a2ddaf19548ea67-light-L_IS_B1_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_IS_B1_0\" data-points=\"W3sieCI6MzQzLjQyMTI4NjA2NTcxMDUsInkiOjEzNy42OTg2Mjk4MTU3MTA0Nn0seyJ4IjoyMzYuOTg4MjgxMjUsInkiOjIyMi40Njg3NX0seyJ4IjoxNzcuMjYzNjc4OTI1OTkyOCwieSI6MjU3LjIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd)\"></path><path d=\"M427.352,153.808L434.288,165.251C441.225,176.695,455.097,199.582,459.168,216.233C463.24,232.884,457.51,243.299,454.646,248.506L451.781,253.714\" id=\"d-5a2ddaf19548ea67-light-L_IS_B2_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_IS_B2_0\" data-points=\"W3sieCI6NDI3LjM1MjQyNDQxMzg1MjgsInkiOjE1My44MDc3MzE4MzYxNDcxNn0seyJ4Ijo0NjguOTY4NzUsInkiOjIyMi40Njg3NX0seyJ4Ijo0NDkuODUzMTEzNzE4NDExNiwieSI6MjU3LjIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd)\"></path><path d=\"M430.875,326.219L430.875,330.385C430.875,334.552,430.875,342.885,430.875,350.552C430.875,358.219,430.875,365.219,430.875,368.719L430.875,372.219\" id=\"d-5a2ddaf19548ea67-light-L_B2_MATCH_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B2_MATCH_0\" data-points=\"W3sieCI6NDMwLjg3NSwieSI6MzI2LjIxODc1fSx7IngiOjQzMC44NzUsInkiOjM1MS4yMTg3NX0seyJ4Ijo0MzAuODc1LCJ5IjozNzYuMjE4NzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_B1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_B2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(263.17984, 201.6081)\"><g class=\"label\" data-id=\"L_IS_B1_0\" transform=\"translate(-54.8671875, -9.75)\"><foreignObject width=\"109.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Traverse Branch 1</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(458.43934, 205.09671)\"><g class=\"label\" data-id=\"L_IS_B2_0\" transform=\"translate(-56.1875, -9.75)\"><foreignObject width=\"112.375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Traverse Branch 2</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B2_MATCH_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-5a2ddaf19548ea67-light-flowchart-ROOT-0\" data-look=\"classic\" transform=\"translate(155.40234375, 97.859375)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.1796875\" y=\"-24.75\" width=\"196.359375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.1796875, -9.75)\"><rect></rect><foreignObject width=\"136.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>errors.Join(ErrA, ErrB)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-5a2ddaf19548ea67-light-flowchart-B1-2\" data-look=\"classic\" transform=\"translate(117.96875, 291.71875)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.96875\" y=\"-34.5\" width=\"219.9375\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.96875, -19.5)\"><rect></rect><foreignObject width=\"159.9375\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Branch 1: ErrA<br>(amount must be positive)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-5a2ddaf19548ea67-light-flowchart-B2-4\" data-look=\"classic\" transform=\"translate(430.875, 291.71875)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.28125\" y=\"-34.5\" width=\"192.5625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.28125, -19.5)\"><rect></rect><foreignObject width=\"132.5625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Branch 2: ErrB<br>(currency is required)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-5a2ddaf19548ea67-light-flowchart-IS-5\" data-look=\"classic\" transform=\"translate(393.44140625, 97.859375)\"><polygon points=\"89.859375,0 179.71875,-89.859375 89.859375,-179.71875 0,-89.859375\" class=\"label-container\" transform=\"translate(-89.359375, 89.859375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-65.109375, -9.75)\"><rect></rect><foreignObject width=\"130.21875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>errors.Is(ROOT, ErrB)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-5a2ddaf19548ea67-light-flowchart-MATCH-11\" data-look=\"classic\" transform=\"translate(430.875, 400.96875)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.65625\" y=\"-24.75\" width=\"169.3125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.65625, -9.75)\"><rect></rect><foreignObject width=\"109.3125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Match found: true</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-5a2ddaf19548ea67-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-5a2ddaf19548ea67-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-5a2ddaf19548ea67-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-5a2ddaf19548ea67-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 535.15625px;\" viewBox=\"0 0 535.15625 433.71875\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-5a2ddaf19548ea67-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-5a2ddaf19548ea67-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-5a2ddaf19548ea67-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-5a2ddaf19548ea67-dark .error-icon{fill:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-5a2ddaf19548ea67-dark .edge-thickness-normal{stroke-width:1px;}#d-5a2ddaf19548ea67-dark .edge-thickness-thick{stroke-width:3.5px;}#d-5a2ddaf19548ea67-dark .edge-pattern-solid{stroke-dasharray:0;}#d-5a2ddaf19548ea67-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-5a2ddaf19548ea67-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-5a2ddaf19548ea67-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-5a2ddaf19548ea67-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-5a2ddaf19548ea67-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-5a2ddaf19548ea67-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-5a2ddaf19548ea67-dark p{margin:0;}#d-5a2ddaf19548ea67-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-dark .cluster-label text{fill:#eae9e8;}#d-5a2ddaf19548ea67-dark .cluster-label span{color:#eae9e8;}#d-5a2ddaf19548ea67-dark .cluster-label span p{background-color:transparent;}#d-5a2ddaf19548ea67-dark .label text,#d-5a2ddaf19548ea67-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-dark .node rect,#d-5a2ddaf19548ea67-dark .node circle,#d-5a2ddaf19548ea67-dark .node ellipse,#d-5a2ddaf19548ea67-dark .node polygon,#d-5a2ddaf19548ea67-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-5a2ddaf19548ea67-dark .rough-node .label text,#d-5a2ddaf19548ea67-dark .node .label text,#d-5a2ddaf19548ea67-dark .image-shape .label,#d-5a2ddaf19548ea67-dark .icon-shape .label{text-anchor:middle;}#d-5a2ddaf19548ea67-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-5a2ddaf19548ea67-dark .rough-node .label,#d-5a2ddaf19548ea67-dark .node .label,#d-5a2ddaf19548ea67-dark .image-shape .label,#d-5a2ddaf19548ea67-dark .icon-shape .label{text-align:center;}#d-5a2ddaf19548ea67-dark .node.clickable{cursor:pointer;}#d-5a2ddaf19548ea67-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-5a2ddaf19548ea67-dark .arrowheadPath{fill:#eae9e8;}#d-5a2ddaf19548ea67-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-5a2ddaf19548ea67-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-5a2ddaf19548ea67-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-5a2ddaf19548ea67-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-5a2ddaf19548ea67-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-5a2ddaf19548ea67-dark .cluster text{fill:#eae9e8;}#d-5a2ddaf19548ea67-dark .cluster span{color:#eae9e8;}#d-5a2ddaf19548ea67-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-5a2ddaf19548ea67-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-5a2ddaf19548ea67-dark rect.text{fill:none;stroke-width:0;}#d-5a2ddaf19548ea67-dark .icon-shape,#d-5a2ddaf19548ea67-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-5a2ddaf19548ea67-dark .icon-shape p,#d-5a2ddaf19548ea67-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-5a2ddaf19548ea67-dark .icon-shape .label rect,#d-5a2ddaf19548ea67-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-5a2ddaf19548ea67-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-5a2ddaf19548ea67-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-5a2ddaf19548ea67-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node rect,#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].cluster rect,#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node polygon{stroke:url(#d-5a2ddaf19548ea67-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node path{stroke:url(#d-5a2ddaf19548ea67-dark-gradient);stroke-width:1px;}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node circle{stroke:url(#d-5a2ddaf19548ea67-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-5a2ddaf19548ea67-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-5a2ddaf19548ea67-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5a2ddaf19548ea67-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-5a2ddaf19548ea67-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M140.532,122.609L130.533,139.253C120.533,155.896,100.534,189.182,93.348,211.031C86.163,232.879,91.79,243.29,94.604,248.495L97.417,253.7\" id=\"d-5a2ddaf19548ea67-dark-L_ROOT_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_B1_0\" data-points=\"W3sieCI6MTQwLjUzMjE3MTMzNjIwNjksInkiOjEyMi42MDkzNzV9LHsieCI6ODAuNTM1MTU2MjUsInkiOjIyMi40Njg3NX0seyJ4Ijo5OS4zMTk1MjI3ODg4MDg2NywieSI6MjU3LjIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd)\"></path><path d=\"M186.477,122.609L207.374,139.253C228.27,155.896,270.063,189.182,300.337,211.282C330.611,233.382,349.367,244.294,358.745,249.751L368.123,255.207\" id=\"d-5a2ddaf19548ea67-dark-L_ROOT_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_B2_0\" data-points=\"W3sieCI6MTg2LjQ3NzE3MTMzNjIwNjksInkiOjEyMi42MDkzNzV9LHsieCI6MzExLjg1NTQ2ODc1LCJ5IjoyMjIuNDY4NzV9LHsieCI6MzcxLjU4MDA3MTA3NDAwNzIsInkiOjI1Ny4yMTg3NX1d\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd)\"></path><path d=\"M343.421,137.699L325.682,151.827C307.944,165.955,272.466,194.212,245.349,213.797C218.233,233.382,199.477,244.294,190.099,249.751L180.721,255.207\" id=\"d-5a2ddaf19548ea67-dark-L_IS_B1_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_IS_B1_0\" data-points=\"W3sieCI6MzQzLjQyMTI4NjA2NTcxMDUsInkiOjEzNy42OTg2Mjk4MTU3MTA0Nn0seyJ4IjoyMzYuOTg4MjgxMjUsInkiOjIyMi40Njg3NX0seyJ4IjoxNzcuMjYzNjc4OTI1OTkyOCwieSI6MjU3LjIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd)\"></path><path d=\"M427.352,153.808L434.288,165.251C441.225,176.695,455.097,199.582,459.168,216.233C463.24,232.884,457.51,243.299,454.646,248.506L451.781,253.714\" id=\"d-5a2ddaf19548ea67-dark-L_IS_B2_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_IS_B2_0\" data-points=\"W3sieCI6NDI3LjM1MjQyNDQxMzg1MjgsInkiOjE1My44MDc3MzE4MzYxNDcxNn0seyJ4Ijo0NjguOTY4NzUsInkiOjIyMi40Njg3NX0seyJ4Ijo0NDkuODUzMTEzNzE4NDExNiwieSI6MjU3LjIxODc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd)\"></path><path d=\"M430.875,326.219L430.875,330.385C430.875,334.552,430.875,342.885,430.875,350.552C430.875,358.219,430.875,365.219,430.875,368.719L430.875,372.219\" id=\"d-5a2ddaf19548ea67-dark-L_B2_MATCH_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B2_MATCH_0\" data-points=\"W3sieCI6NDMwLjg3NSwieSI6MzI2LjIxODc1fSx7IngiOjQzMC44NzUsInkiOjM1MS4yMTg3NX0seyJ4Ijo0MzAuODc1LCJ5IjozNzYuMjE4NzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-5a2ddaf19548ea67-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_B1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_B2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(263.17984, 201.6081)\"><g class=\"label\" data-id=\"L_IS_B1_0\" transform=\"translate(-54.8671875, -9.75)\"><foreignObject width=\"109.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Traverse Branch 1</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(458.43934, 205.09671)\"><g class=\"label\" data-id=\"L_IS_B2_0\" transform=\"translate(-56.1875, -9.75)\"><foreignObject width=\"112.375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Traverse Branch 2</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B2_MATCH_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-5a2ddaf19548ea67-dark-flowchart-ROOT-0\" data-look=\"classic\" transform=\"translate(155.40234375, 97.859375)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.1796875\" y=\"-24.75\" width=\"196.359375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.1796875, -9.75)\"><rect></rect><foreignObject width=\"136.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>errors.Join(ErrA, ErrB)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-5a2ddaf19548ea67-dark-flowchart-B1-2\" data-look=\"classic\" transform=\"translate(117.96875, 291.71875)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.96875\" y=\"-34.5\" width=\"219.9375\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.96875, -19.5)\"><rect></rect><foreignObject width=\"159.9375\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Branch 1: ErrA<br>(amount must be positive)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-5a2ddaf19548ea67-dark-flowchart-B2-4\" data-look=\"classic\" transform=\"translate(430.875, 291.71875)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.28125\" y=\"-34.5\" width=\"192.5625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.28125, -19.5)\"><rect></rect><foreignObject width=\"132.5625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Branch 2: ErrB<br>(currency is required)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-5a2ddaf19548ea67-dark-flowchart-IS-5\" data-look=\"classic\" transform=\"translate(393.44140625, 97.859375)\"><polygon points=\"89.859375,0 179.71875,-89.859375 89.859375,-179.71875 0,-89.859375\" class=\"label-container\" transform=\"translate(-89.359375, 89.859375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-65.109375, -9.75)\"><rect></rect><foreignObject width=\"130.21875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>errors.Is(ROOT, ErrB)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-5a2ddaf19548ea67-dark-flowchart-MATCH-11\" data-look=\"classic\" transform=\"translate(430.875, 400.96875)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.65625\" y=\"-24.75\" width=\"169.3125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.65625, -9.75)\"><rect></rect><foreignObject width=\"109.3125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Match found: true</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-5a2ddaf19548ea67-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-5a2ddaf19548ea67-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-5a2ddaf19548ea67-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"context-formatting-guidelines\">Context Formatting Guidelines<a class=\"h-anchor\" href=\"#context-formatting-guidelines\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When adding context to an error, answer <strong>“what operation was in flight?”</strong>, not “what went wrong?”:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Bad: Redundant symptom repetition</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Output: \"failed: connection timeout: connection timeout\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"failed: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Bad: Generic statement</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Output: \"error occurred: EOF\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"error occurred: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Good: Operation intent with domain identifier</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Output: \"settling batch B-9912 on card network: unexpected EOF\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"settling batch </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> on card network: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, batchID, err)</span></span></code></pre></div>\n<h2 id=\"summary-checklist\">Summary Checklist<a class=\"h-anchor\" href=\"#summary-checklist\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Use <code>%w</code></strong> when callers need to branch on the underlying sentinel error or extract structured types.</li>\n<li><strong>Use <code>%v</code></strong> at public module and service boundaries to avoid leaking internal storage or transport dependencies.</li>\n<li><strong>Use <code>errors.Join</code></strong> for parallel tasks or batch validation where all failures should be collected before returning.</li>\n<li><strong>Never compare error strings</strong> with <code>strings.Contains(err.Error(), ...)</code>: use <code>errors.Is</code> or <code>errors.As</code>.</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/litellm-supply-chain-attack/",
      "url": "https://ashwingopalsamy.in/blog/litellm-supply-chain-attack/",
      "title": "Anatomy of a Supply Chain Attack: LiteLLM on PyPI",
      "content_text": "How a compromised LiteLLM package on PyPI reached a Cursor MCP plugin: anatomy of a real supply-chain hit.",
      "date_published": "2026-03-25T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>On March 24, 2026, Callum McMahon at FutureSearch was testing a Cursor MCP plugin that pulled in litellm as a transitive dependency. Shortly after, his machine became unresponsive. He traced it to a newly installed litellm package.</p>\n<h2 id=\"what-is-litellm\">What Is LiteLLM?<a class=\"h-anchor\" href=\"#what-is-litellm\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>LiteLLM is a Python library that works like a universal remote for AI APIs. 95 million downloads per month on PyPI. ~40,000 GitHub stars.</p>\n<h2 id=\"the-attack-chain\">The Attack Chain<a class=\"h-anchor\" href=\"#the-attack-chain\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"47104e76390ecf4d\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-47104e76390ecf4d-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1238.5px;\" viewBox=\"-50 -10 1238.5 621\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"988.5\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"P\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1063.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1063.5\" dy=\"0\">PyPI Registry</tspan></text></g><g><rect x=\"708.5\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"230\" height=\"65\" name=\"CI\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"823.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"823.5\" dy=\"0\">LiteLLM CI (GitHub Actions)</tspan></text></g><g><rect x=\"347\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"157\" height=\"65\" name=\"T\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"425.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"425.5\" dy=\"0\">Trivy GitHub Repo</tspan></text></g><g><rect x=\"0\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"173\" height=\"65\" name=\"A\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"86.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"86.5\" dy=\"0\">Attacker (TeamPCP)</tspan></text></g><g><line id=\"d-47104e76390ecf4d-light-actor3\" x1=\"1063.5\" y1=\"65\" x2=\"1063.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"P\" data-et=\"life-line\" data-id=\"P\"></line><g id=\"d-47104e76390ecf4d-light-root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"P\"><rect x=\"988.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"P\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1063.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1063.5\" dy=\"0\">PyPI Registry</tspan></text></g></g><g><line id=\"d-47104e76390ecf4d-light-actor2\" x1=\"823.5\" y1=\"65\" x2=\"823.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"CI\" data-et=\"life-line\" data-id=\"CI\"></line><g id=\"d-47104e76390ecf4d-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"CI\"><rect x=\"708.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"230\" height=\"65\" name=\"CI\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"823.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"823.5\" dy=\"0\">LiteLLM CI (GitHub Actions)</tspan></text></g></g><g><line id=\"d-47104e76390ecf4d-light-actor1\" x1=\"425.5\" y1=\"65\" x2=\"425.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"T\" data-et=\"life-line\" data-id=\"T\"></line><g id=\"d-47104e76390ecf4d-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"T\"><rect x=\"347\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"157\" height=\"65\" name=\"T\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"425.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"425.5\" dy=\"0\">Trivy GitHub Repo</tspan></text></g></g><g><line id=\"d-47104e76390ecf4d-light-actor0\" x1=\"86.5\" y1=\"65\" x2=\"86.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"A\" data-et=\"life-line\" data-id=\"A\"></line><g id=\"d-47104e76390ecf4d-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"A\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"173\" height=\"65\" name=\"A\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"86.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"86.5\" dy=\"0\">Attacker (TeamPCP)</tspan></text></g></g><style>#d-47104e76390ecf4d-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-47104e76390ecf4d-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-47104e76390ecf4d-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-47104e76390ecf4d-light .error-icon{fill:rgb(255, 255, 255);}#d-47104e76390ecf4d-light .error-text{fill:#000000;stroke:#000000;}#d-47104e76390ecf4d-light .edge-thickness-normal{stroke-width:1px;}#d-47104e76390ecf4d-light .edge-thickness-thick{stroke-width:3.5px;}#d-47104e76390ecf4d-light .edge-pattern-solid{stroke-dasharray:0;}#d-47104e76390ecf4d-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-47104e76390ecf4d-light .edge-pattern-dashed{stroke-dasharray:3;}#d-47104e76390ecf4d-light .edge-pattern-dotted{stroke-dasharray:2;}#d-47104e76390ecf4d-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light .marker.cross{stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-47104e76390ecf4d-light p{margin:0;}#d-47104e76390ecf4d-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-47104e76390ecf4d-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-47104e76390ecf4d-light .actor-line{stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-47104e76390ecf4d-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-47104e76390ecf4d-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-47104e76390ecf4d-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-47104e76390ecf4d-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-47104e76390ecf4d-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-47104e76390ecf4d-light .labelText,#d-47104e76390ecf4d-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-47104e76390ecf4d-light .loopText,#d-47104e76390ecf4d-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-47104e76390ecf4d-light .sectionTitle,#d-47104e76390ecf4d-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-47104e76390ecf4d-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-47104e76390ecf4d-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-47104e76390ecf4d-light .noteText,#d-47104e76390ecf4d-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-47104e76390ecf4d-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-47104e76390ecf4d-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-47104e76390ecf4d-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-47104e76390ecf4d-light .actorPopupMenu{position:absolute;}#d-47104e76390ecf4d-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-47104e76390ecf4d-light .actor-man circle,#d-47104e76390ecf4d-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-47104e76390ecf4d-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-47104e76390ecf4d-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-47104e76390ecf4d-light [data-look=\"neo\"].node rect,#d-47104e76390ecf4d-light [data-look=\"neo\"].cluster rect,#d-47104e76390ecf4d-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-47104e76390ecf4d-light [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-47104e76390ecf4d-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-47104e76390ecf4d-light [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-47104e76390ecf4d-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-47104e76390ecf4d-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-47104e76390ecf4d-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-47104e76390ecf4d-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-47104e76390ecf4d-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"61.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"389\" height=\"40\" class=\"note\"></rect><text x=\"256\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"256\">March 1 - Initial Compromise</tspan></text></g><g data-et=\"note\" data-id=\"i3\"><rect x=\"798.5\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"290\" height=\"40\" class=\"note\"></rect><text x=\"944\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"944\">March 24 - Package Takeover</tspan></text></g><text x=\"255\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Submit malicious PR (Pwn Request)</text><line x1=\"87.5\" y1=\"165\" x2=\"421.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"A\" data-to=\"T\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"258\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">CI leaks personal access token</text><line x1=\"424.5\" y1=\"215\" x2=\"90.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"T\" data-to=\"A\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"626\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Pull trivy-action@latest (not pinned to SHA)</text><line x1=\"822.5\" y1=\"315\" x2=\"429.5\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"CI\" data-to=\"T\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"623\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Serve compromised action</text><line x1=\"426.5\" y1=\"365\" x2=\"819.5\" y2=\"365\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"T\" data-to=\"CI\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"457\" y=\"380\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Leak PyPI publisher token</text><line x1=\"822.5\" y1=\"415\" x2=\"90.5\" y2=\"415\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"CI\" data-to=\"A\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"574\" y=\"430\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Publish litellm v1.82.7 (inline payload)</text><line x1=\"87.5\" y1=\"465\" x2=\"1059.5\" y2=\"465\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"A\" data-to=\"P\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"574\" y=\"480\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Publish litellm v1.82.8 (.pth persistence)</text><line x1=\"87.5\" y1=\"515\" x2=\"1059.5\" y2=\"515\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"A\" data-to=\"P\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-light-arrowhead)\" style=\"fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-47104e76390ecf4d-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1238.5px;\" viewBox=\"-50 -10 1238.5 621\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"988.5\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"P\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1063.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1063.5\" dy=\"0\">PyPI Registry</tspan></text></g><g><rect x=\"708.5\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"230\" height=\"65\" name=\"CI\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"823.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"823.5\" dy=\"0\">LiteLLM CI (GitHub Actions)</tspan></text></g><g><rect x=\"347\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"157\" height=\"65\" name=\"T\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"425.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"425.5\" dy=\"0\">Trivy GitHub Repo</tspan></text></g><g><rect x=\"0\" y=\"535\" fill=\"#eaeaea\" stroke=\"#666\" width=\"173\" height=\"65\" name=\"A\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"86.5\" y=\"567.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"86.5\" dy=\"0\">Attacker (TeamPCP)</tspan></text></g><g><line id=\"d-47104e76390ecf4d-dark-actor3\" x1=\"1063.5\" y1=\"65\" x2=\"1063.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"P\" data-et=\"life-line\" data-id=\"P\"></line><g id=\"d-47104e76390ecf4d-dark-root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"P\"><rect x=\"988.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"P\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1063.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1063.5\" dy=\"0\">PyPI Registry</tspan></text></g></g><g><line id=\"d-47104e76390ecf4d-dark-actor2\" x1=\"823.5\" y1=\"65\" x2=\"823.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"CI\" data-et=\"life-line\" data-id=\"CI\"></line><g id=\"d-47104e76390ecf4d-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"CI\"><rect x=\"708.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"230\" height=\"65\" name=\"CI\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"823.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"823.5\" dy=\"0\">LiteLLM CI (GitHub Actions)</tspan></text></g></g><g><line id=\"d-47104e76390ecf4d-dark-actor1\" x1=\"425.5\" y1=\"65\" x2=\"425.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"T\" data-et=\"life-line\" data-id=\"T\"></line><g id=\"d-47104e76390ecf4d-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"T\"><rect x=\"347\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"157\" height=\"65\" name=\"T\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"425.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"425.5\" dy=\"0\">Trivy GitHub Repo</tspan></text></g></g><g><line id=\"d-47104e76390ecf4d-dark-actor0\" x1=\"86.5\" y1=\"65\" x2=\"86.5\" y2=\"535\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"A\" data-et=\"life-line\" data-id=\"A\"></line><g id=\"d-47104e76390ecf4d-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"A\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"173\" height=\"65\" name=\"A\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"86.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"86.5\" dy=\"0\">Attacker (TeamPCP)</tspan></text></g></g><style>#d-47104e76390ecf4d-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-47104e76390ecf4d-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-47104e76390ecf4d-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-47104e76390ecf4d-dark .error-icon{fill:rgb(21, 22, 23);}#d-47104e76390ecf4d-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-47104e76390ecf4d-dark .edge-thickness-normal{stroke-width:1px;}#d-47104e76390ecf4d-dark .edge-thickness-thick{stroke-width:3.5px;}#d-47104e76390ecf4d-dark .edge-pattern-solid{stroke-dasharray:0;}#d-47104e76390ecf4d-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-47104e76390ecf4d-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-47104e76390ecf4d-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-47104e76390ecf4d-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-47104e76390ecf4d-dark p{margin:0;}#d-47104e76390ecf4d-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-47104e76390ecf4d-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-47104e76390ecf4d-dark .actor-line{stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-47104e76390ecf4d-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-47104e76390ecf4d-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-47104e76390ecf4d-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-47104e76390ecf4d-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-47104e76390ecf4d-dark .labelText,#d-47104e76390ecf4d-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-47104e76390ecf4d-dark .loopText,#d-47104e76390ecf4d-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-47104e76390ecf4d-dark .sectionTitle,#d-47104e76390ecf4d-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-47104e76390ecf4d-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-47104e76390ecf4d-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-47104e76390ecf4d-dark .noteText,#d-47104e76390ecf4d-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-47104e76390ecf4d-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-47104e76390ecf4d-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-47104e76390ecf4d-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-47104e76390ecf4d-dark .actorPopupMenu{position:absolute;}#d-47104e76390ecf4d-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-47104e76390ecf4d-dark .actor-man circle,#d-47104e76390ecf4d-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-47104e76390ecf4d-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-47104e76390ecf4d-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-47104e76390ecf4d-dark [data-look=\"neo\"].node rect,#d-47104e76390ecf4d-dark [data-look=\"neo\"].cluster rect,#d-47104e76390ecf4d-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-47104e76390ecf4d-dark [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-47104e76390ecf4d-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-47104e76390ecf4d-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-47104e76390ecf4d-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-47104e76390ecf4d-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-47104e76390ecf4d-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-47104e76390ecf4d-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-47104e76390ecf4d-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-47104e76390ecf4d-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-47104e76390ecf4d-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"61.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"389\" height=\"40\" class=\"note\"></rect><text x=\"256\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"256\">March 1 - Initial Compromise</tspan></text></g><g data-et=\"note\" data-id=\"i3\"><rect x=\"798.5\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"290\" height=\"40\" class=\"note\"></rect><text x=\"944\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"944\">March 24 - Package Takeover</tspan></text></g><text x=\"255\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Submit malicious PR (Pwn Request)</text><line x1=\"87.5\" y1=\"165\" x2=\"421.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"A\" data-to=\"T\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"258\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">CI leaks personal access token</text><line x1=\"424.5\" y1=\"215\" x2=\"90.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"T\" data-to=\"A\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"626\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Pull trivy-action@latest (not pinned to SHA)</text><line x1=\"822.5\" y1=\"315\" x2=\"429.5\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"CI\" data-to=\"T\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"623\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Serve compromised action</text><line x1=\"426.5\" y1=\"365\" x2=\"819.5\" y2=\"365\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"T\" data-to=\"CI\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"457\" y=\"380\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Leak PyPI publisher token</text><line x1=\"822.5\" y1=\"415\" x2=\"90.5\" y2=\"415\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"CI\" data-to=\"A\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"574\" y=\"430\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Publish litellm v1.82.7 (inline payload)</text><line x1=\"87.5\" y1=\"465\" x2=\"1059.5\" y2=\"465\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"A\" data-to=\"P\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"574\" y=\"480\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Publish litellm v1.82.8 (.pth persistence)</text><line x1=\"87.5\" y1=\"515\" x2=\"1059.5\" y2=\"515\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"A\" data-to=\"P\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-47104e76390ecf4d-dark-arrowhead)\" style=\"fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"28b937f0c6a9fd0f\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-28b937f0c6a9fd0f-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1584.984375px;\" viewBox=\"0 0 1584.984375 85\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-28b937f0c6a9fd0f-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-28b937f0c6a9fd0f-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-28b937f0c6a9fd0f-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-28b937f0c6a9fd0f-light .error-icon{fill:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-light .error-text{fill:#000000;stroke:#000000;}#d-28b937f0c6a9fd0f-light .edge-thickness-normal{stroke-width:1px;}#d-28b937f0c6a9fd0f-light .edge-thickness-thick{stroke-width:3.5px;}#d-28b937f0c6a9fd0f-light .edge-pattern-solid{stroke-dasharray:0;}#d-28b937f0c6a9fd0f-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-28b937f0c6a9fd0f-light .edge-pattern-dashed{stroke-dasharray:3;}#d-28b937f0c6a9fd0f-light .edge-pattern-dotted{stroke-dasharray:2;}#d-28b937f0c6a9fd0f-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-28b937f0c6a9fd0f-light .marker.cross{stroke:rgb(44, 46, 48);}#d-28b937f0c6a9fd0f-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-28b937f0c6a9fd0f-light p{margin:0;}#d-28b937f0c6a9fd0f-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-light .cluster-label text{fill:#000000;}#d-28b937f0c6a9fd0f-light .cluster-label span{color:#000000;}#d-28b937f0c6a9fd0f-light .cluster-label span p{background-color:transparent;}#d-28b937f0c6a9fd0f-light .label text,#d-28b937f0c6a9fd0f-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-light .node rect,#d-28b937f0c6a9fd0f-light .node circle,#d-28b937f0c6a9fd0f-light .node ellipse,#d-28b937f0c6a9fd0f-light .node polygon,#d-28b937f0c6a9fd0f-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-28b937f0c6a9fd0f-light .rough-node .label text,#d-28b937f0c6a9fd0f-light .node .label text,#d-28b937f0c6a9fd0f-light .image-shape .label,#d-28b937f0c6a9fd0f-light .icon-shape .label{text-anchor:middle;}#d-28b937f0c6a9fd0f-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-28b937f0c6a9fd0f-light .rough-node .label,#d-28b937f0c6a9fd0f-light .node .label,#d-28b937f0c6a9fd0f-light .image-shape .label,#d-28b937f0c6a9fd0f-light .icon-shape .label{text-align:center;}#d-28b937f0c6a9fd0f-light .node.clickable{cursor:pointer;}#d-28b937f0c6a9fd0f-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-28b937f0c6a9fd0f-light .arrowheadPath{fill:#000000;}#d-28b937f0c6a9fd0f-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-28b937f0c6a9fd0f-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-28b937f0c6a9fd0f-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-28b937f0c6a9fd0f-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-28b937f0c6a9fd0f-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-28b937f0c6a9fd0f-light .cluster text{fill:#000000;}#d-28b937f0c6a9fd0f-light .cluster span{color:#000000;}#d-28b937f0c6a9fd0f-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-28b937f0c6a9fd0f-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-light rect.text{fill:none;stroke-width:0;}#d-28b937f0c6a9fd0f-light .icon-shape,#d-28b937f0c6a9fd0f-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-28b937f0c6a9fd0f-light .icon-shape p,#d-28b937f0c6a9fd0f-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-28b937f0c6a9fd0f-light .icon-shape .label rect,#d-28b937f0c6a9fd0f-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-28b937f0c6a9fd0f-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-28b937f0c6a9fd0f-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node rect,#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].cluster rect,#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node polygon{stroke:url(#d-28b937f0c6a9fd0f-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node path{stroke:url(#d-28b937f0c6a9fd0f-light-gradient);stroke-width:1px;}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node circle{stroke:url(#d-28b937f0c6a9fd0f-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-28b937f0c6a9fd0f-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-28b937f0c6a9fd0f-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M161.328,42.5L165.495,42.5C169.661,42.5,177.995,42.5,185.661,42.5C193.328,42.5,200.328,42.5,203.828,42.5L207.328,42.5\" id=\"d-28b937f0c6a9fd0f-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTYxLjMyODEyNSwieSI6NDIuNX0seyJ4IjoxODYuMzI4MTI1LCJ5Ijo0Mi41fSx7IngiOjIxMS4zMjgxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd)\"></path><path d=\"M374.188,42.5L378.354,42.5C382.521,42.5,390.854,42.5,398.521,42.5C406.188,42.5,413.188,42.5,416.688,42.5L420.188,42.5\" id=\"d-28b937f0c6a9fd0f-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6Mzc0LjE4NzUsInkiOjQyLjV9LHsieCI6Mzk5LjE4NzUsInkiOjQyLjV9LHsieCI6NDI0LjE4NzUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd)\"></path><path d=\"M626.438,42.5L630.604,42.5C634.771,42.5,643.104,42.5,650.771,42.5C658.438,42.5,665.438,42.5,668.938,42.5L672.438,42.5\" id=\"d-28b937f0c6a9fd0f-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6NjI2LjQzNzUsInkiOjQyLjV9LHsieCI6NjUxLjQzNzUsInkiOjQyLjV9LHsieCI6Njc2LjQzNzUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd)\"></path><path d=\"M887.203,42.5L891.37,42.5C895.536,42.5,903.87,42.5,911.536,42.5C919.203,42.5,926.203,42.5,929.703,42.5L933.203,42.5\" id=\"d-28b937f0c6a9fd0f-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6ODg3LjIwMzEyNSwieSI6NDIuNX0seyJ4Ijo5MTIuMjAzMTI1LCJ5Ijo0Mi41fSx7IngiOjkzNy4yMDMxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd)\"></path><path d=\"M1083.031,42.5L1087.198,42.5C1091.365,42.5,1099.698,42.5,1107.365,42.5C1115.031,42.5,1122.031,42.5,1125.531,42.5L1129.031,42.5\" id=\"d-28b937f0c6a9fd0f-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTA4My4wMzEyNSwieSI6NDIuNX0seyJ4IjoxMTA4LjAzMTI1LCJ5Ijo0Mi41fSx7IngiOjExMzMuMDMxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd)\"></path><path d=\"M1307.328,42.5L1311.495,42.5C1315.661,42.5,1323.995,42.5,1331.661,42.5C1339.328,42.5,1346.328,42.5,1349.828,42.5L1353.328,42.5\" id=\"d-28b937f0c6a9fd0f-light-L_F_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6MTMwNy4zMjgxMjUsInkiOjQyLjV9LHsieCI6MTMzMi4zMjgxMjUsInkiOjQyLjV9LHsieCI6MTM1Ny4zMjgxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-compromised \" id=\"d-28b937f0c6a9fd0f-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(84.6640625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-76.6640625\" y=\"-34.5\" width=\"153.328125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-46.6640625, -19.5)\"><rect></rect><foreignObject width=\"93.328125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Trivy Repo<br>(compromised)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-28b937f0c6a9fd0f-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(292.7578125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.4296875\" y=\"-24.75\" width=\"162.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.4296875, -9.75)\"><rect></rect><foreignObject width=\"102.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>GitHub Bot Army</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-28b937f0c6a9fd0f-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(525.3125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.125\" y=\"-24.75\" width=\"202.25\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.125, -9.75)\"><rect></rect><foreignObject width=\"142.25\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>PyPI Account Takeover</p></span></div></foreignObject></g></g><g class=\"node default diag-compromised \" id=\"d-28b937f0c6a9fd0f-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(781.8203125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.3828125\" y=\"-24.75\" width=\"210.765625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.3828125, -9.75)\"><rect></rect><foreignObject width=\"150.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>LiteLLM v1.82.7 / v1.82.8</p></span></div></foreignObject></g></g><g class=\"node default diag-compromised \" id=\"d-28b937f0c6a9fd0f-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1010.1171875, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.9140625\" y=\"-24.75\" width=\"145.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.9140625, -9.75)\"><rect></rect><foreignObject width=\"85.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>.pth Backdoor</p></span></div></foreignObject></g></g><g class=\"node default diag-slow \" id=\"d-28b937f0c6a9fd0f-light-flowchart-F-9\" data-look=\"classic\" transform=\"translate(1220.1796875, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.1484375\" y=\"-24.75\" width=\"174.296875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.1484375, -9.75)\"><rect></rect><foreignObject width=\"114.296875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Credential Harvest</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-28b937f0c6a9fd0f-light-flowchart-G-11\" data-look=\"classic\" transform=\"translate(1467.15625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.828125\" y=\"-24.75\" width=\"219.65625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.828125, -9.75)\"><rect></rect><foreignObject width=\"159.65625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Exfil Server (ICP Canister)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-28b937f0c6a9fd0f-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-28b937f0c6a9fd0f-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-28b937f0c6a9fd0f-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-28b937f0c6a9fd0f-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1584.984375px;\" viewBox=\"0 0 1584.984375 85\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-28b937f0c6a9fd0f-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-28b937f0c6a9fd0f-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-28b937f0c6a9fd0f-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-28b937f0c6a9fd0f-dark .error-icon{fill:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-28b937f0c6a9fd0f-dark .edge-thickness-normal{stroke-width:1px;}#d-28b937f0c6a9fd0f-dark .edge-thickness-thick{stroke-width:3.5px;}#d-28b937f0c6a9fd0f-dark .edge-pattern-solid{stroke-dasharray:0;}#d-28b937f0c6a9fd0f-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-28b937f0c6a9fd0f-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-28b937f0c6a9fd0f-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-28b937f0c6a9fd0f-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-28b937f0c6a9fd0f-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-28b937f0c6a9fd0f-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-28b937f0c6a9fd0f-dark p{margin:0;}#d-28b937f0c6a9fd0f-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-dark .cluster-label text{fill:#eae9e8;}#d-28b937f0c6a9fd0f-dark .cluster-label span{color:#eae9e8;}#d-28b937f0c6a9fd0f-dark .cluster-label span p{background-color:transparent;}#d-28b937f0c6a9fd0f-dark .label text,#d-28b937f0c6a9fd0f-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-dark .node rect,#d-28b937f0c6a9fd0f-dark .node circle,#d-28b937f0c6a9fd0f-dark .node ellipse,#d-28b937f0c6a9fd0f-dark .node polygon,#d-28b937f0c6a9fd0f-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-28b937f0c6a9fd0f-dark .rough-node .label text,#d-28b937f0c6a9fd0f-dark .node .label text,#d-28b937f0c6a9fd0f-dark .image-shape .label,#d-28b937f0c6a9fd0f-dark .icon-shape .label{text-anchor:middle;}#d-28b937f0c6a9fd0f-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-28b937f0c6a9fd0f-dark .rough-node .label,#d-28b937f0c6a9fd0f-dark .node .label,#d-28b937f0c6a9fd0f-dark .image-shape .label,#d-28b937f0c6a9fd0f-dark .icon-shape .label{text-align:center;}#d-28b937f0c6a9fd0f-dark .node.clickable{cursor:pointer;}#d-28b937f0c6a9fd0f-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-28b937f0c6a9fd0f-dark .arrowheadPath{fill:#eae9e8;}#d-28b937f0c6a9fd0f-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-28b937f0c6a9fd0f-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-28b937f0c6a9fd0f-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-28b937f0c6a9fd0f-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-28b937f0c6a9fd0f-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-28b937f0c6a9fd0f-dark .cluster text{fill:#eae9e8;}#d-28b937f0c6a9fd0f-dark .cluster span{color:#eae9e8;}#d-28b937f0c6a9fd0f-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-28b937f0c6a9fd0f-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-28b937f0c6a9fd0f-dark rect.text{fill:none;stroke-width:0;}#d-28b937f0c6a9fd0f-dark .icon-shape,#d-28b937f0c6a9fd0f-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-28b937f0c6a9fd0f-dark .icon-shape p,#d-28b937f0c6a9fd0f-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-28b937f0c6a9fd0f-dark .icon-shape .label rect,#d-28b937f0c6a9fd0f-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-28b937f0c6a9fd0f-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-28b937f0c6a9fd0f-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-28b937f0c6a9fd0f-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node rect,#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].cluster rect,#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node polygon{stroke:url(#d-28b937f0c6a9fd0f-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node path{stroke:url(#d-28b937f0c6a9fd0f-dark-gradient);stroke-width:1px;}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node circle{stroke:url(#d-28b937f0c6a9fd0f-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-28b937f0c6a9fd0f-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-28b937f0c6a9fd0f-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-28b937f0c6a9fd0f-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-28b937f0c6a9fd0f-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M161.328,42.5L165.495,42.5C169.661,42.5,177.995,42.5,185.661,42.5C193.328,42.5,200.328,42.5,203.828,42.5L207.328,42.5\" id=\"d-28b937f0c6a9fd0f-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTYxLjMyODEyNSwieSI6NDIuNX0seyJ4IjoxODYuMzI4MTI1LCJ5Ijo0Mi41fSx7IngiOjIxMS4zMjgxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd)\"></path><path d=\"M374.188,42.5L378.354,42.5C382.521,42.5,390.854,42.5,398.521,42.5C406.188,42.5,413.188,42.5,416.688,42.5L420.188,42.5\" id=\"d-28b937f0c6a9fd0f-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6Mzc0LjE4NzUsInkiOjQyLjV9LHsieCI6Mzk5LjE4NzUsInkiOjQyLjV9LHsieCI6NDI0LjE4NzUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd)\"></path><path d=\"M626.438,42.5L630.604,42.5C634.771,42.5,643.104,42.5,650.771,42.5C658.438,42.5,665.438,42.5,668.938,42.5L672.438,42.5\" id=\"d-28b937f0c6a9fd0f-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6NjI2LjQzNzUsInkiOjQyLjV9LHsieCI6NjUxLjQzNzUsInkiOjQyLjV9LHsieCI6Njc2LjQzNzUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd)\"></path><path d=\"M887.203,42.5L891.37,42.5C895.536,42.5,903.87,42.5,911.536,42.5C919.203,42.5,926.203,42.5,929.703,42.5L933.203,42.5\" id=\"d-28b937f0c6a9fd0f-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6ODg3LjIwMzEyNSwieSI6NDIuNX0seyJ4Ijo5MTIuMjAzMTI1LCJ5Ijo0Mi41fSx7IngiOjkzNy4yMDMxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1083.031,42.5L1087.198,42.5C1091.365,42.5,1099.698,42.5,1107.365,42.5C1115.031,42.5,1122.031,42.5,1125.531,42.5L1129.031,42.5\" id=\"d-28b937f0c6a9fd0f-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTA4My4wMzEyNSwieSI6NDIuNX0seyJ4IjoxMTA4LjAzMTI1LCJ5Ijo0Mi41fSx7IngiOjExMzMuMDMxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1307.328,42.5L1311.495,42.5C1315.661,42.5,1323.995,42.5,1331.661,42.5C1339.328,42.5,1346.328,42.5,1349.828,42.5L1353.328,42.5\" id=\"d-28b937f0c6a9fd0f-dark-L_F_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6MTMwNy4zMjgxMjUsInkiOjQyLjV9LHsieCI6MTMzMi4zMjgxMjUsInkiOjQyLjV9LHsieCI6MTM1Ny4zMjgxMjUsInkiOjQyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-28b937f0c6a9fd0f-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-compromised \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(84.6640625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-76.6640625\" y=\"-34.5\" width=\"153.328125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-46.6640625, -19.5)\"><rect></rect><foreignObject width=\"93.328125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Trivy Repo<br>(compromised)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(292.7578125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.4296875\" y=\"-24.75\" width=\"162.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.4296875, -9.75)\"><rect></rect><foreignObject width=\"102.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>GitHub Bot Army</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(525.3125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.125\" y=\"-24.75\" width=\"202.25\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.125, -9.75)\"><rect></rect><foreignObject width=\"142.25\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>PyPI Account Takeover</p></span></div></foreignObject></g></g><g class=\"node default diag-compromised \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(781.8203125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.3828125\" y=\"-24.75\" width=\"210.765625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.3828125, -9.75)\"><rect></rect><foreignObject width=\"150.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>LiteLLM v1.82.7 / v1.82.8</p></span></div></foreignObject></g></g><g class=\"node default diag-compromised \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1010.1171875, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.9140625\" y=\"-24.75\" width=\"145.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.9140625, -9.75)\"><rect></rect><foreignObject width=\"85.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>.pth Backdoor</p></span></div></foreignObject></g></g><g class=\"node default diag-slow \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-F-9\" data-look=\"classic\" transform=\"translate(1220.1796875, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.1484375\" y=\"-24.75\" width=\"174.296875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.1484375, -9.75)\"><rect></rect><foreignObject width=\"114.296875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Credential Harvest</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-28b937f0c6a9fd0f-dark-flowchart-G-11\" data-look=\"classic\" transform=\"translate(1467.15625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.828125\" y=\"-24.75\" width=\"219.65625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.828125, -9.75)\"><rect></rect><foreignObject width=\"159.65625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Exfil Server (ICP Canister)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-28b937f0c6a9fd0f-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-28b937f0c6a9fd0f-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-28b937f0c6a9fd0f-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"what-the-malware-does\">What the Malware Does<a class=\"h-anchor\" href=\"#what-the-malware-does\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The payload was triple-nested: a base64 blob decodes to an orchestrator script, which decodes a second base64 blob containing the harvester.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"f629c0a08c4a3096\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-f629c0a08c4a3096-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 809.328125px;\" viewBox=\"-35 0 809.328125 284\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-f629c0a08c4a3096-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-f629c0a08c4a3096-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-f629c0a08c4a3096-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-f629c0a08c4a3096-light .error-icon{fill:rgb(255, 255, 255);}#d-f629c0a08c4a3096-light .error-text{fill:#000000;stroke:#000000;}#d-f629c0a08c4a3096-light .edge-thickness-normal{stroke-width:1px;}#d-f629c0a08c4a3096-light .edge-thickness-thick{stroke-width:3.5px;}#d-f629c0a08c4a3096-light .edge-pattern-solid{stroke-dasharray:0;}#d-f629c0a08c4a3096-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-f629c0a08c4a3096-light .edge-pattern-dashed{stroke-dasharray:3;}#d-f629c0a08c4a3096-light .edge-pattern-dotted{stroke-dasharray:2;}#d-f629c0a08c4a3096-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-f629c0a08c4a3096-light .marker.cross{stroke:rgb(44, 46, 48);}#d-f629c0a08c4a3096-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-f629c0a08c4a3096-light p{margin:0;}#d-f629c0a08c4a3096-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-f629c0a08c4a3096-light .cluster-label text{fill:#000000;}#d-f629c0a08c4a3096-light .cluster-label span{color:#000000;}#d-f629c0a08c4a3096-light .cluster-label span p{background-color:transparent;}#d-f629c0a08c4a3096-light .label text,#d-f629c0a08c4a3096-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-f629c0a08c4a3096-light .node rect,#d-f629c0a08c4a3096-light .node circle,#d-f629c0a08c4a3096-light .node ellipse,#d-f629c0a08c4a3096-light .node polygon,#d-f629c0a08c4a3096-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-f629c0a08c4a3096-light .rough-node .label text,#d-f629c0a08c4a3096-light .node .label text,#d-f629c0a08c4a3096-light .image-shape .label,#d-f629c0a08c4a3096-light .icon-shape .label{text-anchor:middle;}#d-f629c0a08c4a3096-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-f629c0a08c4a3096-light .rough-node .label,#d-f629c0a08c4a3096-light .node .label,#d-f629c0a08c4a3096-light .image-shape .label,#d-f629c0a08c4a3096-light .icon-shape .label{text-align:center;}#d-f629c0a08c4a3096-light .node.clickable{cursor:pointer;}#d-f629c0a08c4a3096-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-f629c0a08c4a3096-light .arrowheadPath{fill:#000000;}#d-f629c0a08c4a3096-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-f629c0a08c4a3096-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-f629c0a08c4a3096-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-f629c0a08c4a3096-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-f629c0a08c4a3096-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-f629c0a08c4a3096-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-f629c0a08c4a3096-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-f629c0a08c4a3096-light .cluster text{fill:#000000;}#d-f629c0a08c4a3096-light .cluster span{color:#000000;}#d-f629c0a08c4a3096-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-f629c0a08c4a3096-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-f629c0a08c4a3096-light rect.text{fill:none;stroke-width:0;}#d-f629c0a08c4a3096-light .icon-shape,#d-f629c0a08c4a3096-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-f629c0a08c4a3096-light .icon-shape p,#d-f629c0a08c4a3096-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-f629c0a08c4a3096-light .icon-shape .label rect,#d-f629c0a08c4a3096-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-f629c0a08c4a3096-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-f629c0a08c4a3096-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-f629c0a08c4a3096-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-f629c0a08c4a3096-light [data-look=\"neo\"].node rect,#d-f629c0a08c4a3096-light [data-look=\"neo\"].cluster rect,#d-f629c0a08c4a3096-light [data-look=\"neo\"].node polygon{stroke:url(#d-f629c0a08c4a3096-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-f629c0a08c4a3096-light [data-look=\"neo\"].node path{stroke:url(#d-f629c0a08c4a3096-light-gradient);stroke-width:1px;}#d-f629c0a08c4a3096-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-f629c0a08c4a3096-light [data-look=\"neo\"].node circle{stroke:url(#d-f629c0a08c4a3096-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-f629c0a08c4a3096-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-f629c0a08c4a3096-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-f629c0a08c4a3096-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-f629c0a08c4a3096-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M218.773,50.003L195.884,55.419C172.995,60.835,127.216,71.668,104.327,80.584C81.438,89.5,81.438,96.5,81.438,100L81.438,103.5\" id=\"d-f629c0a08c4a3096-light-L_ROOT_ENV_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_ENV_0\" data-points=\"W3sieCI6MjE4Ljc3MzQzNzUsInkiOjUwLjAwMzE0OTE1Mjc5NDI5fSx7IngiOjgxLjQzNzUsInkiOjgyLjV9LHsieCI6ODEuNDM3NSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M291.688,57.5L291.688,61.667C291.688,65.833,291.688,74.167,291.688,81.833C291.688,89.5,291.688,96.5,291.688,100L291.688,103.5\" id=\"d-f629c0a08c4a3096-light-L_ROOT_AWS_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_AWS_0\" data-points=\"W3sieCI6MjkxLjY4NzUsInkiOjU3LjV9LHsieCI6MjkxLjY4NzUsInkiOjgyLjV9LHsieCI6MjkxLjY4NzUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M364.602,51.266L385.102,56.471C405.602,61.677,446.602,72.089,467.102,80.794C487.602,89.5,487.602,96.5,487.602,100L487.602,103.5\" id=\"d-f629c0a08c4a3096-light-L_ROOT_DOTENV_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_DOTENV_0\" data-points=\"W3sieCI6MzY0LjYwMTU2MjUsInkiOjUxLjI2NTY0MTgyMzE4NDU5NX0seyJ4Ijo0ODcuNjAxNTYyNSwieSI6ODIuNX0seyJ4Ijo0ODcuNjAxNTYyNSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M364.602,42.055L417.421,48.796C470.24,55.537,575.878,69.018,628.697,79.259C681.516,89.5,681.516,96.5,681.516,100L681.516,103.5\" id=\"d-f629c0a08c4a3096-light-L_ROOT_PROC_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_PROC_0\" data-points=\"W3sieCI6MzY0LjYwMTU2MjUsInkiOjQyLjA1NTMxNzg0ODQxMDc2fSx7IngiOjY4MS41MTU2MjUsInkiOjgyLjV9LHsieCI6NjgxLjUxNTYyNSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M218.773,44.133L177.811,50.527C136.849,56.922,54.924,69.711,13.962,84.397C-27,99.083,-27,115.667,-27,132.25C-27,148.833,-27,165.417,3.793,179.457C34.585,193.498,96.17,204.996,126.963,210.745L157.755,216.494\" id=\"d-f629c0a08c4a3096-light-L_ROOT_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_EXFIL_0\" data-points=\"W3sieCI6MjE4Ljc3MzQzNzUsInkiOjQ0LjEzMjU0NDM3MTQ0NTM4NH0seyJ4IjotMjcsInkiOjgyLjV9LHsieCI6LTI3LCJ5IjoxMzIuMjV9LHsieCI6LTI3LCJ5IjoxODJ9LHsieCI6MTYxLjY4NzUsInkiOjIxNy4yMjg1NzQyMzAyNDEyNH1d\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M81.438,157L81.438,161.167C81.438,165.333,81.438,173.667,95.519,181.818C109.601,189.97,137.765,197.941,151.847,201.926L165.929,205.911\" id=\"d-f629c0a08c4a3096-light-L_ENV_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ENV_EXFIL_0\" data-points=\"W3sieCI6ODEuNDM3NSwieSI6MTU3fSx7IngiOjgxLjQzNzUsInkiOjE4Mn0seyJ4IjoxNjkuNzc3ODM2MTM0NDUzNzYsInkiOjIwN31d\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M291.688,157L291.688,161.167C291.688,165.333,291.688,173.667,291.688,181.333C291.688,189,291.688,196,291.688,199.5L291.688,203\" id=\"d-f629c0a08c4a3096-light-L_AWS_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_AWS_EXFIL_0\" data-points=\"W3sieCI6MjkxLjY4NzUsInkiOjE1N30seyJ4IjoyOTEuNjg3NSwieSI6MTgyfSx7IngiOjI5MS42ODc1LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M487.602,157L487.602,161.167C487.602,165.333,487.602,173.667,474.52,181.806C461.438,189.946,435.275,197.892,422.194,201.865L409.112,205.838\" id=\"d-f629c0a08c4a3096-light-L_DOTENV_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_DOTENV_EXFIL_0\" data-points=\"W3sieCI6NDg3LjYwMTU2MjUsInkiOjE1N30seyJ4Ijo0ODcuNjAxNTYyNSwieSI6MTgyfSx7IngiOjQwNS4yODQ3Mjk1MTY4MDY3LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path><path d=\"M681.516,157L681.516,161.167C681.516,165.333,681.516,173.667,638.87,184.342C596.224,195.018,510.933,208.036,468.287,214.545L425.642,221.054\" id=\"d-f629c0a08c4a3096-light-L_PROC_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_PROC_EXFIL_0\" data-points=\"W3sieCI6NjgxLjUxNTYyNSwieSI6MTU3fSx7IngiOjY4MS41MTU2MjUsInkiOjE4Mn0seyJ4Ijo0MjEuNjg3NSwieSI6MjIxLjY1NzkyMjE2MTIwODg2fV0=\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_ENV_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_AWS_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_DOTENV_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_PROC_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ENV_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_AWS_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_DOTENV_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_PROC_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-compromised \" id=\"d-f629c0a08c4a3096-light-flowchart-ROOT-0\" data-look=\"classic\" transform=\"translate(291.6875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.9140625\" y=\"-24.75\" width=\"145.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.9140625, -9.75)\"><rect></rect><foreignObject width=\"85.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>.pth Backdoor</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-light-flowchart-ENV-2\" data-look=\"classic\" transform=\"translate(81.4375, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.4375\" y=\"-24.75\" width=\"146.875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.4375, -9.75)\"><rect></rect><foreignObject width=\"86.875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>ENV Variables</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-light-flowchart-AWS-4\" data-look=\"classic\" transform=\"translate(291.6875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.8125\" y=\"-24.75\" width=\"173.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.8125, -9.75)\"><rect></rect><foreignObject width=\"113.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>~/.aws/credentials</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-light-flowchart-DOTENV-6\" data-look=\"classic\" transform=\"translate(487.6015625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.1015625\" y=\"-24.75\" width=\"118.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.1015625, -9.75)\"><rect></rect><foreignObject width=\"58.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>.env Files</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-light-flowchart-PROC-8\" data-look=\"classic\" transform=\"translate(681.515625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.8125\" y=\"-24.75\" width=\"169.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.8125, -9.75)\"><rect></rect><foreignObject width=\"109.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>/proc/self/environ</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f629c0a08c4a3096-light-flowchart-EXFIL-10\" data-look=\"classic\" transform=\"translate(291.6875, 241.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Outbound HTTP Exfil to ICP canister</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-f629c0a08c4a3096-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-f629c0a08c4a3096-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-f629c0a08c4a3096-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-f629c0a08c4a3096-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 809.328125px;\" viewBox=\"-35 0 809.328125 284\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-f629c0a08c4a3096-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-f629c0a08c4a3096-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-f629c0a08c4a3096-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-f629c0a08c4a3096-dark .error-icon{fill:rgb(21, 22, 23);}#d-f629c0a08c4a3096-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-f629c0a08c4a3096-dark .edge-thickness-normal{stroke-width:1px;}#d-f629c0a08c4a3096-dark .edge-thickness-thick{stroke-width:3.5px;}#d-f629c0a08c4a3096-dark .edge-pattern-solid{stroke-dasharray:0;}#d-f629c0a08c4a3096-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-f629c0a08c4a3096-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-f629c0a08c4a3096-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-f629c0a08c4a3096-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-f629c0a08c4a3096-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-f629c0a08c4a3096-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-f629c0a08c4a3096-dark p{margin:0;}#d-f629c0a08c4a3096-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-f629c0a08c4a3096-dark .cluster-label text{fill:#eae9e8;}#d-f629c0a08c4a3096-dark .cluster-label span{color:#eae9e8;}#d-f629c0a08c4a3096-dark .cluster-label span p{background-color:transparent;}#d-f629c0a08c4a3096-dark .label text,#d-f629c0a08c4a3096-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-f629c0a08c4a3096-dark .node rect,#d-f629c0a08c4a3096-dark .node circle,#d-f629c0a08c4a3096-dark .node ellipse,#d-f629c0a08c4a3096-dark .node polygon,#d-f629c0a08c4a3096-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-f629c0a08c4a3096-dark .rough-node .label text,#d-f629c0a08c4a3096-dark .node .label text,#d-f629c0a08c4a3096-dark .image-shape .label,#d-f629c0a08c4a3096-dark .icon-shape .label{text-anchor:middle;}#d-f629c0a08c4a3096-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-f629c0a08c4a3096-dark .rough-node .label,#d-f629c0a08c4a3096-dark .node .label,#d-f629c0a08c4a3096-dark .image-shape .label,#d-f629c0a08c4a3096-dark .icon-shape .label{text-align:center;}#d-f629c0a08c4a3096-dark .node.clickable{cursor:pointer;}#d-f629c0a08c4a3096-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-f629c0a08c4a3096-dark .arrowheadPath{fill:#eae9e8;}#d-f629c0a08c4a3096-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-f629c0a08c4a3096-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-f629c0a08c4a3096-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-f629c0a08c4a3096-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-f629c0a08c4a3096-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-f629c0a08c4a3096-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-f629c0a08c4a3096-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-f629c0a08c4a3096-dark .cluster text{fill:#eae9e8;}#d-f629c0a08c4a3096-dark .cluster span{color:#eae9e8;}#d-f629c0a08c4a3096-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-f629c0a08c4a3096-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-f629c0a08c4a3096-dark rect.text{fill:none;stroke-width:0;}#d-f629c0a08c4a3096-dark .icon-shape,#d-f629c0a08c4a3096-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-f629c0a08c4a3096-dark .icon-shape p,#d-f629c0a08c4a3096-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-f629c0a08c4a3096-dark .icon-shape .label rect,#d-f629c0a08c4a3096-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-f629c0a08c4a3096-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-f629c0a08c4a3096-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-f629c0a08c4a3096-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node rect,#d-f629c0a08c4a3096-dark [data-look=\"neo\"].cluster rect,#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node polygon{stroke:url(#d-f629c0a08c4a3096-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node path{stroke:url(#d-f629c0a08c4a3096-dark-gradient);stroke-width:1px;}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node circle{stroke:url(#d-f629c0a08c4a3096-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-f629c0a08c4a3096-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-f629c0a08c4a3096-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f629c0a08c4a3096-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-f629c0a08c4a3096-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M218.773,50.003L195.884,55.419C172.995,60.835,127.216,71.668,104.327,80.584C81.438,89.5,81.438,96.5,81.438,100L81.438,103.5\" id=\"d-f629c0a08c4a3096-dark-L_ROOT_ENV_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_ENV_0\" data-points=\"W3sieCI6MjE4Ljc3MzQzNzUsInkiOjUwLjAwMzE0OTE1Mjc5NDI5fSx7IngiOjgxLjQzNzUsInkiOjgyLjV9LHsieCI6ODEuNDM3NSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M291.688,57.5L291.688,61.667C291.688,65.833,291.688,74.167,291.688,81.833C291.688,89.5,291.688,96.5,291.688,100L291.688,103.5\" id=\"d-f629c0a08c4a3096-dark-L_ROOT_AWS_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_AWS_0\" data-points=\"W3sieCI6MjkxLjY4NzUsInkiOjU3LjV9LHsieCI6MjkxLjY4NzUsInkiOjgyLjV9LHsieCI6MjkxLjY4NzUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M364.602,51.266L385.102,56.471C405.602,61.677,446.602,72.089,467.102,80.794C487.602,89.5,487.602,96.5,487.602,100L487.602,103.5\" id=\"d-f629c0a08c4a3096-dark-L_ROOT_DOTENV_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_DOTENV_0\" data-points=\"W3sieCI6MzY0LjYwMTU2MjUsInkiOjUxLjI2NTY0MTgyMzE4NDU5NX0seyJ4Ijo0ODcuNjAxNTYyNSwieSI6ODIuNX0seyJ4Ijo0ODcuNjAxNTYyNSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M364.602,42.055L417.421,48.796C470.24,55.537,575.878,69.018,628.697,79.259C681.516,89.5,681.516,96.5,681.516,100L681.516,103.5\" id=\"d-f629c0a08c4a3096-dark-L_ROOT_PROC_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_PROC_0\" data-points=\"W3sieCI6MzY0LjYwMTU2MjUsInkiOjQyLjA1NTMxNzg0ODQxMDc2fSx7IngiOjY4MS41MTU2MjUsInkiOjgyLjV9LHsieCI6NjgxLjUxNTYyNSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M218.773,44.133L177.811,50.527C136.849,56.922,54.924,69.711,13.962,84.397C-27,99.083,-27,115.667,-27,132.25C-27,148.833,-27,165.417,3.793,179.457C34.585,193.498,96.17,204.996,126.963,210.745L157.755,216.494\" id=\"d-f629c0a08c4a3096-dark-L_ROOT_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ROOT_EXFIL_0\" data-points=\"W3sieCI6MjE4Ljc3MzQzNzUsInkiOjQ0LjEzMjU0NDM3MTQ0NTM4NH0seyJ4IjotMjcsInkiOjgyLjV9LHsieCI6LTI3LCJ5IjoxMzIuMjV9LHsieCI6LTI3LCJ5IjoxODJ9LHsieCI6MTYxLjY4NzUsInkiOjIxNy4yMjg1NzQyMzAyNDEyNH1d\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M81.438,157L81.438,161.167C81.438,165.333,81.438,173.667,95.519,181.818C109.601,189.97,137.765,197.941,151.847,201.926L165.929,205.911\" id=\"d-f629c0a08c4a3096-dark-L_ENV_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ENV_EXFIL_0\" data-points=\"W3sieCI6ODEuNDM3NSwieSI6MTU3fSx7IngiOjgxLjQzNzUsInkiOjE4Mn0seyJ4IjoxNjkuNzc3ODM2MTM0NDUzNzYsInkiOjIwN31d\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M291.688,157L291.688,161.167C291.688,165.333,291.688,173.667,291.688,181.333C291.688,189,291.688,196,291.688,199.5L291.688,203\" id=\"d-f629c0a08c4a3096-dark-L_AWS_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_AWS_EXFIL_0\" data-points=\"W3sieCI6MjkxLjY4NzUsInkiOjE1N30seyJ4IjoyOTEuNjg3NSwieSI6MTgyfSx7IngiOjI5MS42ODc1LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M487.602,157L487.602,161.167C487.602,165.333,487.602,173.667,474.52,181.806C461.438,189.946,435.275,197.892,422.194,201.865L409.112,205.838\" id=\"d-f629c0a08c4a3096-dark-L_DOTENV_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_DOTENV_EXFIL_0\" data-points=\"W3sieCI6NDg3LjYwMTU2MjUsInkiOjE1N30seyJ4Ijo0ODcuNjAxNTYyNSwieSI6MTgyfSx7IngiOjQwNS4yODQ3Mjk1MTY4MDY3LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path><path d=\"M681.516,157L681.516,161.167C681.516,165.333,681.516,173.667,638.87,184.342C596.224,195.018,510.933,208.036,468.287,214.545L425.642,221.054\" id=\"d-f629c0a08c4a3096-dark-L_PROC_EXFIL_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_PROC_EXFIL_0\" data-points=\"W3sieCI6NjgxLjUxNTYyNSwieSI6MTU3fSx7IngiOjY4MS41MTU2MjUsInkiOjE4Mn0seyJ4Ijo0MjEuNjg3NSwieSI6MjIxLjY1NzkyMjE2MTIwODg2fV0=\" data-look=\"classic\" marker-end=\"url(#d-f629c0a08c4a3096-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_ENV_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_AWS_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_DOTENV_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_PROC_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ROOT_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_ENV_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_AWS_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_DOTENV_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_PROC_EXFIL_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-compromised \" id=\"d-f629c0a08c4a3096-dark-flowchart-ROOT-0\" data-look=\"classic\" transform=\"translate(291.6875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.9140625\" y=\"-24.75\" width=\"145.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.9140625, -9.75)\"><rect></rect><foreignObject width=\"85.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>.pth Backdoor</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-dark-flowchart-ENV-2\" data-look=\"classic\" transform=\"translate(81.4375, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.4375\" y=\"-24.75\" width=\"146.875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.4375, -9.75)\"><rect></rect><foreignObject width=\"86.875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>ENV Variables</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-dark-flowchart-AWS-4\" data-look=\"classic\" transform=\"translate(291.6875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.8125\" y=\"-24.75\" width=\"173.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.8125, -9.75)\"><rect></rect><foreignObject width=\"113.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>~/.aws/credentials</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-dark-flowchart-DOTENV-6\" data-look=\"classic\" transform=\"translate(487.6015625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.1015625\" y=\"-24.75\" width=\"118.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.1015625, -9.75)\"><rect></rect><foreignObject width=\"58.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>.env Files</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f629c0a08c4a3096-dark-flowchart-PROC-8\" data-look=\"classic\" transform=\"translate(681.515625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.8125\" y=\"-24.75\" width=\"169.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.8125, -9.75)\"><rect></rect><foreignObject width=\"109.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>/proc/self/environ</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f629c0a08c4a3096-dark-flowchart-EXFIL-10\" data-look=\"classic\" transform=\"translate(291.6875, 241.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Outbound HTTP Exfil to ICP canister</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-f629c0a08c4a3096-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-f629c0a08c4a3096-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-f629c0a08c4a3096-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>Two versions were published:</p>\n<ul>\n<li>v1.82.7: injected payload at line 128 of <code>litellm/proxy/proxy_server.py</code></li>\n<li>v1.82.8: added a <code>.pth</code> file that executes every time Python starts</li>\n</ul>\n<blockquote>\n<p><code>.pth</code> files in <code>site-packages</code> execute code before your application begins, on every Python invocation: pytest, IDE language server, even pip install.</p>\n</blockquote>\n<h2 id=\"check-your-environment\">Check Your Environment<a class=\"h-anchor\" href=\"#check-your-environment\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">ls</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ~/.config/sysmon/sysmon.py</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> 2&gt;</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">/dev/null</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> &amp;&amp; </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">echo</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"BACKDOOR FOUND\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">find</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> $(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">python3</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -c</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"import site; print(' '.join(site.getsitepackages()))\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">  -name</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"litellm_init.pth\"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> 2&gt;</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">/dev/null</span></span></code></pre></div>\n<blockquote>\n<p>If anything shows up, upgrading the package is not enough. Rotate all LLM provider API keys, cloud credentials, GitHub and PyPI tokens, CI/CD secrets, and SSH keys. Rebuild from known-good images. The last known-clean version is 1.82.6.</p>\n</blockquote>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/consistent-hashing-distributed-caches/",
      "url": "https://ashwingopalsamy.in/blog/consistent-hashing-distributed-caches/",
      "title": "Consistent Hashing in Distributed Caches",
      "content_text": "How consistent hashing and virtual nodes prevent cache stampedes under cluster churn, with a complete Go ring implementation.",
      "date_published": "2026-03-15T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>In distributed caching layers (Memcached, Redis clusters, DynamoDB), keys must be partitioned across <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> independent nodes.</p>\n<p>The naive approach is modular hashing:</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mtext>node</mtext><mo>=</mo><mtext>hash</mtext><mo stretchy=\"false\">(</mo><mtext>key</mtext><mo stretchy=\"false\">)</mo><mspace></mspace><mspace width=\"1em\"/><mo stretchy=\"false\">(</mo><mrow><mi mathvariant=\"normal\">m</mi><mi mathvariant=\"normal\">o</mi><mi mathvariant=\"normal\">d</mi></mrow><mspace width=\"0.3333em\"/><mi>N</mi><mo stretchy=\"false\">)</mo></mrow><annotation encoding=\"application/x-tex\">\\text{node} = \\text{hash}(\\text{key}) \\pmod N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6944em;\"></span><span class=\"mord text\"><span class=\"mord\">node</span></span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord text\"><span class=\"mord\">hash</span></span><span class=\"mopen\">(</span><span class=\"mord text\"><span class=\"mord\">key</span></span><span class=\"mclose\">)</span><span class=\"mspace allowbreak\"></span><span class=\"mspace\" style=\"margin-right:1em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mopen\">(</span><span class=\"mord\"><span class=\"mord\"><span class=\"mord mathrm\">mod</span></span></span><span class=\"mspace\" style=\"margin-right:0.3333em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span><span class=\"mclose\">)</span></span></span></span></span></div>\n<p>When the cluster size changes from <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> to <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding=\"application/x-tex\">N+1</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.7667em;vertical-align:-0.0833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">+</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">1</span></span></span></span></span></p>, the modulo denominator shifts for almost every key. The fraction of keys that remap to a different node is:</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mtext>Remapped Keys</mtext><mo>=</mo><mfrac><mi>N</mi><mrow><mi>N</mi><mo>+</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding=\"application/x-tex\">\\text{Remapped Keys} = \\frac{N}{N + 1}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8889em;vertical-align:-0.1944em;\"></span><span class=\"mord text\"><span class=\"mord\">Remapped Keys</span></span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:2.1297em;vertical-align:-0.7693em;\"></span><span class=\"mord\"><span class=\"mopen nulldelimiter\"></span><span class=\"mfrac\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:1.3603em;\"><span style=\"top:-2.314em;\"><span class=\"pstrut\" style=\"height:3em;\"></span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">+</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mord\">1</span></span></span><span style=\"top:-3.23em;\"><span class=\"pstrut\" style=\"height:3em;\"></span><span class=\"frac-line\" style=\"border-bottom-width:0.04em;\"></span></span><span style=\"top:-3.677em;\"><span class=\"pstrut\" style=\"height:3em;\"></span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.7693em;\"><span></span></span></span></span></span><span class=\"mclose nulldelimiter\"></span></span></span></span></span></span></div>\n<p>In a 4-node cluster expanding to 5 nodes, <strong>80% of all cached keys instantly remap</strong>. Under production load, this mass invalidation triggers a severe cache stampede that overwhelms backend databases.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"0e296e879f7b12bb\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-0e296e879f7b12bb-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 346px;\" viewBox=\"0 0 346 852\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-0e296e879f7b12bb-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-0e296e879f7b12bb-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-0e296e879f7b12bb-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-0e296e879f7b12bb-light .error-icon{fill:rgb(255, 255, 255);}#d-0e296e879f7b12bb-light .error-text{fill:#000000;stroke:#000000;}#d-0e296e879f7b12bb-light .edge-thickness-normal{stroke-width:1px;}#d-0e296e879f7b12bb-light .edge-thickness-thick{stroke-width:3.5px;}#d-0e296e879f7b12bb-light .edge-pattern-solid{stroke-dasharray:0;}#d-0e296e879f7b12bb-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-0e296e879f7b12bb-light .edge-pattern-dashed{stroke-dasharray:3;}#d-0e296e879f7b12bb-light .edge-pattern-dotted{stroke-dasharray:2;}#d-0e296e879f7b12bb-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-0e296e879f7b12bb-light .marker.cross{stroke:rgb(44, 46, 48);}#d-0e296e879f7b12bb-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-0e296e879f7b12bb-light p{margin:0;}#d-0e296e879f7b12bb-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-0e296e879f7b12bb-light .cluster-label text{fill:#000000;}#d-0e296e879f7b12bb-light .cluster-label span{color:#000000;}#d-0e296e879f7b12bb-light .cluster-label span p{background-color:transparent;}#d-0e296e879f7b12bb-light .label text,#d-0e296e879f7b12bb-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-0e296e879f7b12bb-light .node rect,#d-0e296e879f7b12bb-light .node circle,#d-0e296e879f7b12bb-light .node ellipse,#d-0e296e879f7b12bb-light .node polygon,#d-0e296e879f7b12bb-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-0e296e879f7b12bb-light .rough-node .label text,#d-0e296e879f7b12bb-light .node .label text,#d-0e296e879f7b12bb-light .image-shape .label,#d-0e296e879f7b12bb-light .icon-shape .label{text-anchor:middle;}#d-0e296e879f7b12bb-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-0e296e879f7b12bb-light .rough-node .label,#d-0e296e879f7b12bb-light .node .label,#d-0e296e879f7b12bb-light .image-shape .label,#d-0e296e879f7b12bb-light .icon-shape .label{text-align:center;}#d-0e296e879f7b12bb-light .node.clickable{cursor:pointer;}#d-0e296e879f7b12bb-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-0e296e879f7b12bb-light .arrowheadPath{fill:#000000;}#d-0e296e879f7b12bb-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-0e296e879f7b12bb-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-0e296e879f7b12bb-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-0e296e879f7b12bb-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-0e296e879f7b12bb-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-0e296e879f7b12bb-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-0e296e879f7b12bb-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-0e296e879f7b12bb-light .cluster text{fill:#000000;}#d-0e296e879f7b12bb-light .cluster span{color:#000000;}#d-0e296e879f7b12bb-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-0e296e879f7b12bb-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-0e296e879f7b12bb-light rect.text{fill:none;stroke-width:0;}#d-0e296e879f7b12bb-light .icon-shape,#d-0e296e879f7b12bb-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-0e296e879f7b12bb-light .icon-shape p,#d-0e296e879f7b12bb-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-0e296e879f7b12bb-light .icon-shape .label rect,#d-0e296e879f7b12bb-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-0e296e879f7b12bb-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-0e296e879f7b12bb-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-0e296e879f7b12bb-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-0e296e879f7b12bb-light [data-look=\"neo\"].node rect,#d-0e296e879f7b12bb-light [data-look=\"neo\"].cluster rect,#d-0e296e879f7b12bb-light [data-look=\"neo\"].node polygon{stroke:url(#d-0e296e879f7b12bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-0e296e879f7b12bb-light [data-look=\"neo\"].node path{stroke:url(#d-0e296e879f7b12bb-light-gradient);stroke-width:1px;}#d-0e296e879f7b12bb-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-0e296e879f7b12bb-light [data-look=\"neo\"].node circle{stroke:url(#d-0e296e879f7b12bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-0e296e879f7b12bb-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-0e296e879f7b12bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-0e296e879f7b12bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-0e296e879f7b12bb-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"></g><g class=\"edgeLabels\"></g><g class=\"nodes\"><g class=\"root\" transform=\"translate(0, 0)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-0e296e879f7b12bb-light-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"330\" height=\"393\"></rect><g class=\"cluster-label \" transform=\"translate(93.1171875, 8)\"><foreignObject width=\"159.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Consistent Hashing (Ring)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,95L173,101.25C173,107.5,173,120,173,131.833C173,143.667,173,154.833,173,160.417L173,166\" id=\"d-0e296e879f7b12bb-light-L_C1_C2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C1_C2_0\" data-points=\"W3sieCI6MTczLCJ5Ijo5NX0seyJ4IjoxNzMsInkiOjEzMi41fSx7IngiOjE3MywieSI6MTcwfV0=\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-light_flowchart-v2-pointEnd)\"></path><path d=\"M173,239L173,245.25C173,251.5,173,264,173,275.833C173,287.667,173,298.833,173,304.417L173,310\" id=\"d-0e296e879f7b12bb-light-L_C2_C3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C2_C3_0\" data-points=\"W3sieCI6MTczLCJ5IjoyMzl9LHsieCI6MTczLCJ5IjoyNzYuNX0seyJ4IjoxNzMsInkiOjMxNH1d\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C1_C2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C2_C3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-0e296e879f7b12bb-light-flowchart-C1-4\" data-look=\"classic\" transform=\"translate(173, 70.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-80.2578125\" y=\"-24.75\" width=\"160.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-50.2578125, -9.75)\"><rect></rect><foreignObject width=\"100.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node Joins Ring</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-0e296e879f7b12bb-light-flowchart-C2-5\" data-look=\"classic\" transform=\"translate(173, 204.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Absorbs only its neighbor segment</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-0e296e879f7b12bb-light-flowchart-C3-7\" data-look=\"classic\" transform=\"translate(173, 338.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-128.265625\" y=\"-24.75\" width=\"256.53125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-98.265625, -9.75)\"><rect></rect><foreignObject width=\"196.53125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Only 1/N (20%) Keys Remapped</p></span></div></foreignObject></g></g></g></g><g class=\"root\" transform=\"translate(0, 443)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-0e296e879f7b12bb-light-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"330\" height=\"393\"></rect><g class=\"cluster-label \" transform=\"translate(78.109375, 8)\"><foreignObject width=\"189.78125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Modular Hashing (N=4 to N=5)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,95L173,101.25C173,107.5,173,120,173,131.833C173,143.667,173,154.833,173,160.417L173,166\" id=\"d-0e296e879f7b12bb-light-L_M1_M2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M1_M2_0\" data-points=\"W3sieCI6MTczLCJ5Ijo5NX0seyJ4IjoxNzMsInkiOjEzMi41fSx7IngiOjE3MywieSI6MTcwfV0=\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-light_flowchart-v2-pointEnd)\"></path><path d=\"M173,219.5L173,225.75C173,232,173,244.5,173,256.333C173,268.167,173,279.333,173,284.917L173,290.5\" id=\"d-0e296e879f7b12bb-light-L_M2_M3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M2_M3_0\" data-points=\"W3sieCI6MTczLCJ5IjoyMTkuNX0seyJ4IjoxNzMsInkiOjI1N30seyJ4IjoxNzMsInkiOjI5NC41fV0=\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M1_M2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M2_M3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-0e296e879f7b12bb-light-flowchart-M1-0\" data-look=\"classic\" transform=\"translate(173, 70.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.3203125\" y=\"-24.75\" width=\"134.640625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.3203125, -9.75)\"><rect></rect><foreignObject width=\"74.640625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>hash(k) % 4</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-0e296e879f7b12bb-light-flowchart-M2-1\" data-look=\"classic\" transform=\"translate(173, 194.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.9765625\" y=\"-24.75\" width=\"133.953125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.9765625, -9.75)\"><rect></rect><foreignObject width=\"73.953125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>hash(k) % 5</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-0e296e879f7b12bb-light-flowchart-M3-3\" data-look=\"classic\" transform=\"translate(173, 329)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>80% Keys Remapped (Stampede)</p></span></div></foreignObject></g></g></g></g></g></g></g><defs><filter id=\"d-0e296e879f7b12bb-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-0e296e879f7b12bb-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-0e296e879f7b12bb-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-0e296e879f7b12bb-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 346px;\" viewBox=\"0 0 346 852\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-0e296e879f7b12bb-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-0e296e879f7b12bb-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-0e296e879f7b12bb-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-0e296e879f7b12bb-dark .error-icon{fill:rgb(21, 22, 23);}#d-0e296e879f7b12bb-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-0e296e879f7b12bb-dark .edge-thickness-normal{stroke-width:1px;}#d-0e296e879f7b12bb-dark .edge-thickness-thick{stroke-width:3.5px;}#d-0e296e879f7b12bb-dark .edge-pattern-solid{stroke-dasharray:0;}#d-0e296e879f7b12bb-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-0e296e879f7b12bb-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-0e296e879f7b12bb-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-0e296e879f7b12bb-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-0e296e879f7b12bb-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-0e296e879f7b12bb-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-0e296e879f7b12bb-dark p{margin:0;}#d-0e296e879f7b12bb-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-0e296e879f7b12bb-dark .cluster-label text{fill:#eae9e8;}#d-0e296e879f7b12bb-dark .cluster-label span{color:#eae9e8;}#d-0e296e879f7b12bb-dark .cluster-label span p{background-color:transparent;}#d-0e296e879f7b12bb-dark .label text,#d-0e296e879f7b12bb-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-0e296e879f7b12bb-dark .node rect,#d-0e296e879f7b12bb-dark .node circle,#d-0e296e879f7b12bb-dark .node ellipse,#d-0e296e879f7b12bb-dark .node polygon,#d-0e296e879f7b12bb-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-0e296e879f7b12bb-dark .rough-node .label text,#d-0e296e879f7b12bb-dark .node .label text,#d-0e296e879f7b12bb-dark .image-shape .label,#d-0e296e879f7b12bb-dark .icon-shape .label{text-anchor:middle;}#d-0e296e879f7b12bb-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-0e296e879f7b12bb-dark .rough-node .label,#d-0e296e879f7b12bb-dark .node .label,#d-0e296e879f7b12bb-dark .image-shape .label,#d-0e296e879f7b12bb-dark .icon-shape .label{text-align:center;}#d-0e296e879f7b12bb-dark .node.clickable{cursor:pointer;}#d-0e296e879f7b12bb-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-0e296e879f7b12bb-dark .arrowheadPath{fill:#eae9e8;}#d-0e296e879f7b12bb-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-0e296e879f7b12bb-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-0e296e879f7b12bb-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-0e296e879f7b12bb-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-0e296e879f7b12bb-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-0e296e879f7b12bb-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-0e296e879f7b12bb-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-0e296e879f7b12bb-dark .cluster text{fill:#eae9e8;}#d-0e296e879f7b12bb-dark .cluster span{color:#eae9e8;}#d-0e296e879f7b12bb-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-0e296e879f7b12bb-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-0e296e879f7b12bb-dark rect.text{fill:none;stroke-width:0;}#d-0e296e879f7b12bb-dark .icon-shape,#d-0e296e879f7b12bb-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-0e296e879f7b12bb-dark .icon-shape p,#d-0e296e879f7b12bb-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-0e296e879f7b12bb-dark .icon-shape .label rect,#d-0e296e879f7b12bb-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-0e296e879f7b12bb-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-0e296e879f7b12bb-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-0e296e879f7b12bb-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node rect,#d-0e296e879f7b12bb-dark [data-look=\"neo\"].cluster rect,#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node polygon{stroke:url(#d-0e296e879f7b12bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node path{stroke:url(#d-0e296e879f7b12bb-dark-gradient);stroke-width:1px;}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node circle{stroke:url(#d-0e296e879f7b12bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-0e296e879f7b12bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-0e296e879f7b12bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0e296e879f7b12bb-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-0e296e879f7b12bb-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"></g><g class=\"edgeLabels\"></g><g class=\"nodes\"><g class=\"root\" transform=\"translate(0, 0)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-0e296e879f7b12bb-dark-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"330\" height=\"393\"></rect><g class=\"cluster-label \" transform=\"translate(93.1171875, 8)\"><foreignObject width=\"159.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Consistent Hashing (Ring)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,95L173,101.25C173,107.5,173,120,173,131.833C173,143.667,173,154.833,173,160.417L173,166\" id=\"d-0e296e879f7b12bb-dark-L_C1_C2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C1_C2_0\" data-points=\"W3sieCI6MTczLCJ5Ijo5NX0seyJ4IjoxNzMsInkiOjEzMi41fSx7IngiOjE3MywieSI6MTcwfV0=\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-dark_flowchart-v2-pointEnd)\"></path><path d=\"M173,239L173,245.25C173,251.5,173,264,173,275.833C173,287.667,173,298.833,173,304.417L173,310\" id=\"d-0e296e879f7b12bb-dark-L_C2_C3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C2_C3_0\" data-points=\"W3sieCI6MTczLCJ5IjoyMzl9LHsieCI6MTczLCJ5IjoyNzYuNX0seyJ4IjoxNzMsInkiOjMxNH1d\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C1_C2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C2_C3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-0e296e879f7b12bb-dark-flowchart-C1-4\" data-look=\"classic\" transform=\"translate(173, 70.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-80.2578125\" y=\"-24.75\" width=\"160.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-50.2578125, -9.75)\"><rect></rect><foreignObject width=\"100.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node Joins Ring</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-0e296e879f7b12bb-dark-flowchart-C2-5\" data-look=\"classic\" transform=\"translate(173, 204.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Absorbs only its neighbor segment</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-0e296e879f7b12bb-dark-flowchart-C3-7\" data-look=\"classic\" transform=\"translate(173, 338.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-128.265625\" y=\"-24.75\" width=\"256.53125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-98.265625, -9.75)\"><rect></rect><foreignObject width=\"196.53125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Only 1/N (20%) Keys Remapped</p></span></div></foreignObject></g></g></g></g><g class=\"root\" transform=\"translate(0, 443)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-0e296e879f7b12bb-dark-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"330\" height=\"393\"></rect><g class=\"cluster-label \" transform=\"translate(78.109375, 8)\"><foreignObject width=\"189.78125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Modular Hashing (N=4 to N=5)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,95L173,101.25C173,107.5,173,120,173,131.833C173,143.667,173,154.833,173,160.417L173,166\" id=\"d-0e296e879f7b12bb-dark-L_M1_M2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M1_M2_0\" data-points=\"W3sieCI6MTczLCJ5Ijo5NX0seyJ4IjoxNzMsInkiOjEzMi41fSx7IngiOjE3MywieSI6MTcwfV0=\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-dark_flowchart-v2-pointEnd)\"></path><path d=\"M173,219.5L173,225.75C173,232,173,244.5,173,256.333C173,268.167,173,279.333,173,284.917L173,290.5\" id=\"d-0e296e879f7b12bb-dark-L_M2_M3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M2_M3_0\" data-points=\"W3sieCI6MTczLCJ5IjoyMTkuNX0seyJ4IjoxNzMsInkiOjI1N30seyJ4IjoxNzMsInkiOjI5NC41fV0=\" data-look=\"classic\" marker-end=\"url(#d-0e296e879f7b12bb-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M1_M2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M2_M3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-0e296e879f7b12bb-dark-flowchart-M1-0\" data-look=\"classic\" transform=\"translate(173, 70.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-67.3203125\" y=\"-24.75\" width=\"134.640625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-37.3203125, -9.75)\"><rect></rect><foreignObject width=\"74.640625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>hash(k) % 4</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-0e296e879f7b12bb-dark-flowchart-M2-1\" data-look=\"classic\" transform=\"translate(173, 194.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.9765625\" y=\"-24.75\" width=\"133.953125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.9765625, -9.75)\"><rect></rect><foreignObject width=\"73.953125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>hash(k) % 5</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-0e296e879f7b12bb-dark-flowchart-M3-3\" data-look=\"classic\" transform=\"translate(173, 329)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>80% Keys Remapped (Stampede)</p></span></div></foreignObject></g></g></g></g></g></g></g><defs><filter id=\"d-0e296e879f7b12bb-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-0e296e879f7b12bb-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-0e296e879f7b12bb-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"the-consistent-hash-ring\">The Consistent Hash Ring<a class=\"h-anchor\" href=\"#the-consistent-hash-ring\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Consistent hashing (introduced by Karger et al.) solves this by mapping both <strong>cache keys</strong> and <strong>physical nodes</strong> onto a shared continuous circular integer space: <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo stretchy=\"false\">[</mo><mn>0</mn><mo separator=\"true\">,</mo><mtext> </mtext><msup><mn>2</mn><mn>32</mn></msup><mo>−</mo><mn>1</mn><mo stretchy=\"false\">]</mo></mrow><annotation encoding=\"application/x-tex\">[0,\\ 2^{32}-1]</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1.0641em;vertical-align:-0.25em;\"></span><span class=\"mopen\">[</span><span class=\"mord\">0</span><span class=\"mpunct\">,</span><span class=\"mspace\"> </span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"mord\"><span class=\"mord\">2</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">32</span></span></span></span></span></span></span></span></span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">−</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord\">1</span><span class=\"mclose\">]</span></span></span></span></span></p>.</p>\n<ol>\n<li>Each node is hashed to one or more points on the ring.</li>\n<li>A key is hashed to a point on the ring.</li>\n<li>The key is assigned to the first node encountered moving clockwise (<p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>≥</mo><mtext>hash</mtext><mo stretchy=\"false\">(</mo><mtext>key</mtext><mo stretchy=\"false\">)</mo></mrow><annotation encoding=\"application/x-tex\">\\ge \\text{hash}(\\text{key})</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.7719em;vertical-align:-0.136em;\"></span><span class=\"mrel\">≥</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord text\"><span class=\"mord\">hash</span></span><span class=\"mopen\">(</span><span class=\"mord text\"><span class=\"mord\">key</span></span><span class=\"mclose\">)</span></span></span></span></span></p>).</li>\n<li>If a key hashes past the highest node on the ring, it wraps around to the first node at index 0.</li>\n</ol>\n<p>When a node joins or leaves, only the keys in the immediate adjacent range are moved. On average, only <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>K</mi><mi mathvariant=\"normal\">/</mi><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">K/N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0715em;\">K</span><span class=\"mord\">/</span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> keys are migrated (where <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>K</mi></mrow><annotation encoding=\"application/x-tex\">K</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0715em;\">K</span></span></span></span></span></p> is the total key count and <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> is the number of nodes).</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"8da8036074876dbf\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-8da8036074876dbf-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 750.91796875px;\" viewBox=\"0 0 750.91796875 184.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-8da8036074876dbf-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-8da8036074876dbf-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-8da8036074876dbf-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-8da8036074876dbf-light .error-icon{fill:rgb(255, 255, 255);}#d-8da8036074876dbf-light .error-text{fill:#000000;stroke:#000000;}#d-8da8036074876dbf-light .edge-thickness-normal{stroke-width:1px;}#d-8da8036074876dbf-light .edge-thickness-thick{stroke-width:3.5px;}#d-8da8036074876dbf-light .edge-pattern-solid{stroke-dasharray:0;}#d-8da8036074876dbf-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-8da8036074876dbf-light .edge-pattern-dashed{stroke-dasharray:3;}#d-8da8036074876dbf-light .edge-pattern-dotted{stroke-dasharray:2;}#d-8da8036074876dbf-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-8da8036074876dbf-light .marker.cross{stroke:rgb(44, 46, 48);}#d-8da8036074876dbf-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-8da8036074876dbf-light p{margin:0;}#d-8da8036074876dbf-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-8da8036074876dbf-light .cluster-label text{fill:#000000;}#d-8da8036074876dbf-light .cluster-label span{color:#000000;}#d-8da8036074876dbf-light .cluster-label span p{background-color:transparent;}#d-8da8036074876dbf-light .label text,#d-8da8036074876dbf-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-8da8036074876dbf-light .node rect,#d-8da8036074876dbf-light .node circle,#d-8da8036074876dbf-light .node ellipse,#d-8da8036074876dbf-light .node polygon,#d-8da8036074876dbf-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-8da8036074876dbf-light .rough-node .label text,#d-8da8036074876dbf-light .node .label text,#d-8da8036074876dbf-light .image-shape .label,#d-8da8036074876dbf-light .icon-shape .label{text-anchor:middle;}#d-8da8036074876dbf-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-8da8036074876dbf-light .rough-node .label,#d-8da8036074876dbf-light .node .label,#d-8da8036074876dbf-light .image-shape .label,#d-8da8036074876dbf-light .icon-shape .label{text-align:center;}#d-8da8036074876dbf-light .node.clickable{cursor:pointer;}#d-8da8036074876dbf-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-8da8036074876dbf-light .arrowheadPath{fill:#000000;}#d-8da8036074876dbf-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-8da8036074876dbf-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-8da8036074876dbf-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-8da8036074876dbf-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-8da8036074876dbf-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-8da8036074876dbf-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-8da8036074876dbf-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-8da8036074876dbf-light .cluster text{fill:#000000;}#d-8da8036074876dbf-light .cluster span{color:#000000;}#d-8da8036074876dbf-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-8da8036074876dbf-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-8da8036074876dbf-light rect.text{fill:none;stroke-width:0;}#d-8da8036074876dbf-light .icon-shape,#d-8da8036074876dbf-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-8da8036074876dbf-light .icon-shape p,#d-8da8036074876dbf-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-8da8036074876dbf-light .icon-shape .label rect,#d-8da8036074876dbf-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-8da8036074876dbf-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-8da8036074876dbf-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-8da8036074876dbf-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-8da8036074876dbf-light [data-look=\"neo\"].node rect,#d-8da8036074876dbf-light [data-look=\"neo\"].cluster rect,#d-8da8036074876dbf-light [data-look=\"neo\"].node polygon{stroke:url(#d-8da8036074876dbf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-8da8036074876dbf-light [data-look=\"neo\"].node path{stroke:url(#d-8da8036074876dbf-light-gradient);stroke-width:1px;}#d-8da8036074876dbf-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-8da8036074876dbf-light [data-look=\"neo\"].node circle{stroke:url(#d-8da8036074876dbf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-8da8036074876dbf-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-8da8036074876dbf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-8da8036074876dbf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-8da8036074876dbf-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-8da8036074876dbf-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M187.86,57.5L174.493,63.292C161.126,69.083,134.391,80.667,121.024,91.583C107.656,102.5,107.656,112.75,107.656,117.875L107.656,123\" id=\"d-8da8036074876dbf-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTg3Ljg2MDQ5MTA3MTQyODU2LCJ5Ijo1Ny41fSx7IngiOjEwNy42NTYyNSwieSI6OTIuMjV9LHsieCI6MTA3LjY1NjI1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-light_flowchart-v2-pointEnd)\"></path><path d=\"M244.435,57.5L244.307,63.292C244.178,69.083,243.921,80.667,257.029,91.993C270.137,103.319,296.609,114.388,309.846,119.922L323.082,125.457\" id=\"d-8da8036074876dbf-light-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MjQ0LjQzNTE2OTM4MDI1MjEsInkiOjU3LjV9LHsieCI6MjQzLjY2NDA2MjUsInkiOjkyLjI1fSx7IngiOjMyNi43NzI1MDE5Njk1Mzc4LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-light_flowchart-v2-pointEnd)\"></path><path d=\"M352.313,48.891L400.364,56.118C448.415,63.344,544.518,77.797,592.57,90.149C640.621,102.5,640.621,112.75,640.621,117.875L640.621,123\" id=\"d-8da8036074876dbf-light-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6MzUyLjMxMjUsInkiOjQ4Ljg5MTEyOTMxMDk0MDYzfSx7IngiOjY0MC42MjEwOTM3NSwieSI6OTIuMjV9LHsieCI6NjQwLjYyMTA5Mzc1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-light_flowchart-v2-pointEnd)\"></path><path d=\"M553.501,57.5L541.107,63.292C528.713,69.083,503.925,80.667,483.023,91.891C462.122,103.116,445.107,113.981,436.6,119.414L428.092,124.847\" id=\"d-8da8036074876dbf-light-L_KEY_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_KEY_C_0\" data-points=\"W3sieCI6NTUzLjUwMDYyMzY4Njk3NDgsInkiOjU3LjV9LHsieCI6NDc5LjEzNjcxODc1LCJ5Ijo5Mi4yNX0seyJ4Ijo0MjQuNzIxMjExOTIyMjY4OTQsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(479.13671875, 92.25)\"><g class=\"label\" data-id=\"L_KEY_C_0\" transform=\"translate(-48.3125, -9.75)\"><foreignObject width=\"96.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Walk Clockwise</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-compute \" id=\"d-8da8036074876dbf-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(244.984375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.328125\" y=\"-24.75\" width=\"214.65625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.328125, -9.75)\"><rect></rect><foreignObject width=\"154.65625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Hash Space: [0, 2^32 - 1]</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-8da8036074876dbf-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(107.65625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.65625\" y=\"-24.75\" width=\"199.3125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.65625, -9.75)\"><rect></rect><foreignObject width=\"139.3125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node 1 (Hash: 0x1000)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-8da8036074876dbf-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(385.96484375, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.359375\" y=\"-24.75\" width=\"204.71875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.359375, -9.75)\"><rect></rect><foreignObject width=\"144.71875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node 2 (Hash: 0x8000)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-8da8036074876dbf-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(640.62109375, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.296875\" y=\"-24.75\" width=\"204.59375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.296875, -9.75)\"><rect></rect><foreignObject width=\"144.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node 3 (Hash: 0xE000)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-8da8036074876dbf-light-flowchart-KEY-6\" data-look=\"classic\" transform=\"translate(606.46484375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-127.2734375\" y=\"-24.75\" width=\"254.546875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-97.2734375, -9.75)\"><rect></rect><foreignObject width=\"194.546875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Key 'user:1024' (Hash: 0x4500)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-8da8036074876dbf-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-8da8036074876dbf-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-8da8036074876dbf-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-8da8036074876dbf-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 750.91796875px;\" viewBox=\"0 0 750.91796875 184.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-8da8036074876dbf-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-8da8036074876dbf-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-8da8036074876dbf-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-8da8036074876dbf-dark .error-icon{fill:rgb(21, 22, 23);}#d-8da8036074876dbf-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-8da8036074876dbf-dark .edge-thickness-normal{stroke-width:1px;}#d-8da8036074876dbf-dark .edge-thickness-thick{stroke-width:3.5px;}#d-8da8036074876dbf-dark .edge-pattern-solid{stroke-dasharray:0;}#d-8da8036074876dbf-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-8da8036074876dbf-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-8da8036074876dbf-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-8da8036074876dbf-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-8da8036074876dbf-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-8da8036074876dbf-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-8da8036074876dbf-dark p{margin:0;}#d-8da8036074876dbf-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-8da8036074876dbf-dark .cluster-label text{fill:#eae9e8;}#d-8da8036074876dbf-dark .cluster-label span{color:#eae9e8;}#d-8da8036074876dbf-dark .cluster-label span p{background-color:transparent;}#d-8da8036074876dbf-dark .label text,#d-8da8036074876dbf-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-8da8036074876dbf-dark .node rect,#d-8da8036074876dbf-dark .node circle,#d-8da8036074876dbf-dark .node ellipse,#d-8da8036074876dbf-dark .node polygon,#d-8da8036074876dbf-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-8da8036074876dbf-dark .rough-node .label text,#d-8da8036074876dbf-dark .node .label text,#d-8da8036074876dbf-dark .image-shape .label,#d-8da8036074876dbf-dark .icon-shape .label{text-anchor:middle;}#d-8da8036074876dbf-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-8da8036074876dbf-dark .rough-node .label,#d-8da8036074876dbf-dark .node .label,#d-8da8036074876dbf-dark .image-shape .label,#d-8da8036074876dbf-dark .icon-shape .label{text-align:center;}#d-8da8036074876dbf-dark .node.clickable{cursor:pointer;}#d-8da8036074876dbf-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-8da8036074876dbf-dark .arrowheadPath{fill:#eae9e8;}#d-8da8036074876dbf-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-8da8036074876dbf-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-8da8036074876dbf-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-8da8036074876dbf-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-8da8036074876dbf-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-8da8036074876dbf-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-8da8036074876dbf-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-8da8036074876dbf-dark .cluster text{fill:#eae9e8;}#d-8da8036074876dbf-dark .cluster span{color:#eae9e8;}#d-8da8036074876dbf-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-8da8036074876dbf-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-8da8036074876dbf-dark rect.text{fill:none;stroke-width:0;}#d-8da8036074876dbf-dark .icon-shape,#d-8da8036074876dbf-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-8da8036074876dbf-dark .icon-shape p,#d-8da8036074876dbf-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-8da8036074876dbf-dark .icon-shape .label rect,#d-8da8036074876dbf-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-8da8036074876dbf-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-8da8036074876dbf-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-8da8036074876dbf-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-8da8036074876dbf-dark [data-look=\"neo\"].node rect,#d-8da8036074876dbf-dark [data-look=\"neo\"].cluster rect,#d-8da8036074876dbf-dark [data-look=\"neo\"].node polygon{stroke:url(#d-8da8036074876dbf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-8da8036074876dbf-dark [data-look=\"neo\"].node path{stroke:url(#d-8da8036074876dbf-dark-gradient);stroke-width:1px;}#d-8da8036074876dbf-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-8da8036074876dbf-dark [data-look=\"neo\"].node circle{stroke:url(#d-8da8036074876dbf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-8da8036074876dbf-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-8da8036074876dbf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-8da8036074876dbf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8da8036074876dbf-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-8da8036074876dbf-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M187.86,57.5L174.493,63.292C161.126,69.083,134.391,80.667,121.024,91.583C107.656,102.5,107.656,112.75,107.656,117.875L107.656,123\" id=\"d-8da8036074876dbf-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTg3Ljg2MDQ5MTA3MTQyODU2LCJ5Ijo1Ny41fSx7IngiOjEwNy42NTYyNSwieSI6OTIuMjV9LHsieCI6MTA3LjY1NjI1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M244.435,57.5L244.307,63.292C244.178,69.083,243.921,80.667,257.029,91.993C270.137,103.319,296.609,114.388,309.846,119.922L323.082,125.457\" id=\"d-8da8036074876dbf-dark-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MjQ0LjQzNTE2OTM4MDI1MjEsInkiOjU3LjV9LHsieCI6MjQzLjY2NDA2MjUsInkiOjkyLjI1fSx7IngiOjMyNi43NzI1MDE5Njk1Mzc4LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M352.313,48.891L400.364,56.118C448.415,63.344,544.518,77.797,592.57,90.149C640.621,102.5,640.621,112.75,640.621,117.875L640.621,123\" id=\"d-8da8036074876dbf-dark-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6MzUyLjMxMjUsInkiOjQ4Ljg5MTEyOTMxMDk0MDYzfSx7IngiOjY0MC42MjEwOTM3NSwieSI6OTIuMjV9LHsieCI6NjQwLjYyMTA5Mzc1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M553.501,57.5L541.107,63.292C528.713,69.083,503.925,80.667,483.023,91.891C462.122,103.116,445.107,113.981,436.6,119.414L428.092,124.847\" id=\"d-8da8036074876dbf-dark-L_KEY_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_KEY_C_0\" data-points=\"W3sieCI6NTUzLjUwMDYyMzY4Njk3NDgsInkiOjU3LjV9LHsieCI6NDc5LjEzNjcxODc1LCJ5Ijo5Mi4yNX0seyJ4Ijo0MjQuNzIxMjExOTIyMjY4OTQsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-8da8036074876dbf-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(479.13671875, 92.25)\"><g class=\"label\" data-id=\"L_KEY_C_0\" transform=\"translate(-48.3125, -9.75)\"><foreignObject width=\"96.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Walk Clockwise</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-compute \" id=\"d-8da8036074876dbf-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(244.984375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.328125\" y=\"-24.75\" width=\"214.65625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.328125, -9.75)\"><rect></rect><foreignObject width=\"154.65625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Hash Space: [0, 2^32 - 1]</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-8da8036074876dbf-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(107.65625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.65625\" y=\"-24.75\" width=\"199.3125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.65625, -9.75)\"><rect></rect><foreignObject width=\"139.3125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node 1 (Hash: 0x1000)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-8da8036074876dbf-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(385.96484375, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.359375\" y=\"-24.75\" width=\"204.71875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.359375, -9.75)\"><rect></rect><foreignObject width=\"144.71875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node 2 (Hash: 0x8000)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-8da8036074876dbf-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(640.62109375, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.296875\" y=\"-24.75\" width=\"204.59375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.296875, -9.75)\"><rect></rect><foreignObject width=\"144.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Node 3 (Hash: 0xE000)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-8da8036074876dbf-dark-flowchart-KEY-6\" data-look=\"classic\" transform=\"translate(606.46484375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-127.2734375\" y=\"-24.75\" width=\"254.546875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-97.2734375, -9.75)\"><rect></rect><foreignObject width=\"194.546875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Key 'user:1024' (Hash: 0x4500)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-8da8036074876dbf-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-8da8036074876dbf-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-8da8036074876dbf-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"virtual-nodes-vnodes\">Virtual Nodes (Vnodes)<a class=\"h-anchor\" href=\"#virtual-nodes-vnodes\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A known flaw in simple consistent hashing is <strong>hash space non-uniformity</strong>. If you place only 3 or 4 physical nodes on the ring, random hash clustering will cause one node to own 60% of the ring while another owns 10%.</p>\n<p>To achieve uniform distribution, each physical node is replicated as <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>V</mi></mrow><annotation encoding=\"application/x-tex\">V</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.2222em;\">V</span></span></span></span></span></p> <strong>virtual nodes</strong> on the ring (for example, hashing <code>node-1#0</code>, <code>node-1#1</code>, <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>…</mo></mrow><annotation encoding=\"application/x-tex\">\\dots</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.123em;\"></span><span class=\"minner\">…</span></span></span></span></span></p>, <code>node-1#150</code>):</p>\n<ul>\n<li>With <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>V</mi><mo>=</mo><mn>10</mn></mrow><annotation encoding=\"application/x-tex\">V = 10</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.2222em;\">V</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">10</span></span></span></span></span></p>, standard deviation of load across nodes is <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>∼</mo><mn>30</mn><mi mathvariant=\"normal\">%</mi></mrow><annotation encoding=\"application/x-tex\">\\sim 30%</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">∼</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8056em;vertical-align:-0.0556em;\"></span><span class=\"mord\">30%</span></span></span></span></span></p>.</li>\n<li>With <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>V</mi><mo>=</mo><mn>150</mn></mrow><annotation encoding=\"application/x-tex\">V = 150</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.2222em;\">V</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">150</span></span></span></span></span></p>, standard deviation of load drops below <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>4</mn><mi mathvariant=\"normal\">%</mi></mrow><annotation encoding=\"application/x-tex\">4%</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8056em;vertical-align:-0.0556em;\"></span><span class=\"mord\">4%</span></span></span></span></span></p>.</li>\n</ul>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"cd6c594e1159caff\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-cd6c594e1159caff-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1511.625px;\" viewBox=\"0 0 1511.625 215\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-cd6c594e1159caff-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-cd6c594e1159caff-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-cd6c594e1159caff-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-cd6c594e1159caff-light .error-icon{fill:rgb(255, 255, 255);}#d-cd6c594e1159caff-light .error-text{fill:#000000;stroke:#000000;}#d-cd6c594e1159caff-light .edge-thickness-normal{stroke-width:1px;}#d-cd6c594e1159caff-light .edge-thickness-thick{stroke-width:3.5px;}#d-cd6c594e1159caff-light .edge-pattern-solid{stroke-dasharray:0;}#d-cd6c594e1159caff-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-cd6c594e1159caff-light .edge-pattern-dashed{stroke-dasharray:3;}#d-cd6c594e1159caff-light .edge-pattern-dotted{stroke-dasharray:2;}#d-cd6c594e1159caff-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-cd6c594e1159caff-light .marker.cross{stroke:rgb(44, 46, 48);}#d-cd6c594e1159caff-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-cd6c594e1159caff-light p{margin:0;}#d-cd6c594e1159caff-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-cd6c594e1159caff-light .cluster-label text{fill:#000000;}#d-cd6c594e1159caff-light .cluster-label span{color:#000000;}#d-cd6c594e1159caff-light .cluster-label span p{background-color:transparent;}#d-cd6c594e1159caff-light .label text,#d-cd6c594e1159caff-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-cd6c594e1159caff-light .node rect,#d-cd6c594e1159caff-light .node circle,#d-cd6c594e1159caff-light .node ellipse,#d-cd6c594e1159caff-light .node polygon,#d-cd6c594e1159caff-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-cd6c594e1159caff-light .rough-node .label text,#d-cd6c594e1159caff-light .node .label text,#d-cd6c594e1159caff-light .image-shape .label,#d-cd6c594e1159caff-light .icon-shape .label{text-anchor:middle;}#d-cd6c594e1159caff-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-cd6c594e1159caff-light .rough-node .label,#d-cd6c594e1159caff-light .node .label,#d-cd6c594e1159caff-light .image-shape .label,#d-cd6c594e1159caff-light .icon-shape .label{text-align:center;}#d-cd6c594e1159caff-light .node.clickable{cursor:pointer;}#d-cd6c594e1159caff-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-cd6c594e1159caff-light .arrowheadPath{fill:#000000;}#d-cd6c594e1159caff-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-cd6c594e1159caff-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-cd6c594e1159caff-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-cd6c594e1159caff-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-cd6c594e1159caff-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-cd6c594e1159caff-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-cd6c594e1159caff-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-cd6c594e1159caff-light .cluster text{fill:#000000;}#d-cd6c594e1159caff-light .cluster span{color:#000000;}#d-cd6c594e1159caff-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-cd6c594e1159caff-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-cd6c594e1159caff-light rect.text{fill:none;stroke-width:0;}#d-cd6c594e1159caff-light .icon-shape,#d-cd6c594e1159caff-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-cd6c594e1159caff-light .icon-shape p,#d-cd6c594e1159caff-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-cd6c594e1159caff-light .icon-shape .label rect,#d-cd6c594e1159caff-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-cd6c594e1159caff-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-cd6c594e1159caff-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-cd6c594e1159caff-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-cd6c594e1159caff-light [data-look=\"neo\"].node rect,#d-cd6c594e1159caff-light [data-look=\"neo\"].cluster rect,#d-cd6c594e1159caff-light [data-look=\"neo\"].node polygon{stroke:url(#d-cd6c594e1159caff-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-cd6c594e1159caff-light [data-look=\"neo\"].node path{stroke:url(#d-cd6c594e1159caff-light-gradient);stroke-width:1px;}#d-cd6c594e1159caff-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-cd6c594e1159caff-light [data-look=\"neo\"].node circle{stroke:url(#d-cd6c594e1159caff-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-cd6c594e1159caff-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-cd6c594e1159caff-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-cd6c594e1159caff-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-cd6c594e1159caff-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-cd6c594e1159caff-light-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"763.8125\" y=\"8\" width=\"739.8125\" height=\"99.5\"></rect><g class=\"cluster-label \" transform=\"translate(1058.8046875, 8)\"><foreignObject width=\"149.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Physical Node: Server-B</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-cd6c594e1159caff-light-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"735.8125\" height=\"99.5\"></rect><g class=\"cluster-label \" transform=\"translate(300.984375, 8)\"><foreignObject width=\"149.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Physical Node: Server-A</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M137.258,82.5L137.258,86.667C137.258,90.833,137.258,99.167,137.258,107.5C137.258,115.833,137.258,124.167,220.136,135.023C303.015,145.88,468.772,159.26,551.65,165.95L634.529,172.64\" id=\"d-cd6c594e1159caff-light-L_A1_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A1_RING_0\" data-points=\"W3sieCI6MTM3LjI1NzgxMjUsInkiOjgyLjV9LHsieCI6MTM3LjI1NzgxMjUsInkiOjEwNy41fSx7IngiOjEzNy4yNTc4MTI1LCJ5IjoxMzIuNX0seyJ4Ijo2MzguNTE1NjI1LCJ5IjoxNzIuOTYxNTI1NTQxODkzNzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-light_flowchart-v2-pointEnd)\"></path><path d=\"M373.688,82.5L373.688,86.667C373.688,90.833,373.688,99.167,373.688,107.5C373.688,115.833,373.688,124.167,417.164,134.027C460.641,143.887,547.595,155.274,591.072,160.968L634.549,166.661\" id=\"d-cd6c594e1159caff-light-L_A2_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A2_RING_0\" data-points=\"W3sieCI6MzczLjY4NzUsInkiOjgyLjV9LHsieCI6MzczLjY4NzUsInkiOjEwNy41fSx7IngiOjM3My42ODc1LCJ5IjoxMzIuNX0seyJ4Ijo2MzguNTE1NjI1LCJ5IjoxNjcuMTgwODQ2MDMyMDM5ODJ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-light_flowchart-v2-pointEnd)\"></path><path d=\"M612.336,82.5L612.336,86.667C612.336,90.833,612.336,99.167,612.336,107.5C612.336,115.833,612.336,124.167,623.537,132.279C634.738,140.39,657.141,148.281,668.342,152.226L679.543,156.171\" id=\"d-cd6c594e1159caff-light-L_A3_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A3_RING_0\" data-points=\"W3sieCI6NjEyLjMzNTkzNzUsInkiOjgyLjV9LHsieCI6NjEyLjMzNTkzNzUsInkiOjEwNy41fSx7IngiOjYxMi4zMzU5Mzc1LCJ5IjoxMzIuNX0seyJ4Ijo2ODMuMzE1ODM2OTk3NDg3NCwieSI6MTU3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-light_flowchart-v2-pointEnd)\"></path><path d=\"M894.836,82.5L894.836,86.667C894.836,90.833,894.836,99.167,894.836,107.5C894.836,115.833,894.836,124.167,883.635,132.279C872.434,140.39,850.031,148.281,838.83,152.226L827.629,156.171\" id=\"d-cd6c594e1159caff-light-L_B1_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B1_RING_0\" data-points=\"W3sieCI6ODk0LjgzNTkzNzUsInkiOjgyLjV9LHsieCI6ODk0LjgzNTkzNzUsInkiOjEwNy41fSx7IngiOjg5NC44MzU5Mzc1LCJ5IjoxMzIuNX0seyJ4Ijo4MjMuODU2MDM4MDAyNTEyNiwieSI6MTU3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-light_flowchart-v2-pointEnd)\"></path><path d=\"M1134.133,82.5L1134.133,86.667C1134.133,90.833,1134.133,99.167,1134.133,107.5C1134.133,115.833,1134.133,124.167,1090.548,134.031C1046.963,143.896,959.793,155.292,916.208,160.99L872.622,166.688\" id=\"d-cd6c594e1159caff-light-L_B2_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B2_RING_0\" data-points=\"W3sieCI6MTEzNC4xMzI4MTI1LCJ5Ijo4Mi41fSx7IngiOjExMzQuMTMyODEyNSwieSI6MTA3LjV9LHsieCI6MTEzNC4xMzI4MTI1LCJ5IjoxMzIuNX0seyJ4Ijo4NjguNjU2MjUsInkiOjE2Ny4yMDY1MjMzMDExNzAyfV0=\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-light_flowchart-v2-pointEnd)\"></path><path d=\"M1373.016,82.5L1373.016,86.667C1373.016,90.833,1373.016,99.167,1373.016,107.5C1373.016,115.833,1373.016,124.167,1289.62,135.031C1206.225,145.896,1039.434,159.292,956.039,165.99L872.643,172.688\" id=\"d-cd6c594e1159caff-light-L_B3_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B3_RING_0\" data-points=\"W3sieCI6MTM3My4wMTU2MjUsInkiOjgyLjV9LHsieCI6MTM3My4wMTU2MjUsInkiOjEwNy41fSx7IngiOjEzNzMuMDE1NjI1LCJ5IjoxMzIuNX0seyJ4Ijo4NjguNjU2MjUsInkiOjE3My4wMDgwMzQxMDM5NTE0N31d\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A1_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A2_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A3_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B1_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B2_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B3_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-cd6c594e1159caff-light-flowchart-A1-0\" data-look=\"classic\" transform=\"translate(137.2578125, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.2578125\" y=\"-24.75\" width=\"188.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.2578125, -9.75)\"><rect></rect><foreignObject width=\"128.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-A#0 (0x0F12)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-cd6c594e1159caff-light-flowchart-A2-1\" data-look=\"classic\" transform=\"translate(373.6875, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.171875\" y=\"-24.75\" width=\"184.34375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.171875, -9.75)\"><rect></rect><foreignObject width=\"124.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-A#1 (0x67A1)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-cd6c594e1159caff-light-flowchart-A3-2\" data-look=\"classic\" transform=\"translate(612.3359375, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.4765625\" y=\"-24.75\" width=\"192.953125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.4765625, -9.75)\"><rect></rect><foreignObject width=\"132.953125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-A#2 (0xC450)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-cd6c594e1159caff-light-flowchart-B1-3\" data-look=\"classic\" transform=\"translate(894.8359375, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.0234375\" y=\"-24.75\" width=\"192.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.0234375, -9.75)\"><rect></rect><foreignObject width=\"132.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-B#0 (0x3340)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-cd6c594e1159caff-light-flowchart-B2-4\" data-look=\"classic\" transform=\"translate(1134.1328125, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-93.2734375\" y=\"-24.75\" width=\"186.546875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-63.2734375, -9.75)\"><rect></rect><foreignObject width=\"126.546875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-B#1 (0x8A10)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-cd6c594e1159caff-light-flowchart-B3-5\" data-look=\"classic\" transform=\"translate(1373.015625, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.609375\" y=\"-24.75\" width=\"191.21875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.609375, -9.75)\"><rect></rect><foreignObject width=\"131.21875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-B#2 (0xE880)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-cd6c594e1159caff-light-flowchart-RING-7\" data-look=\"classic\" transform=\"translate(753.5859375, 182.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-115.0703125\" y=\"-24.75\" width=\"230.140625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-85.0703125, -9.75)\"><rect></rect><foreignObject width=\"170.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Distributed Interleaved Ring</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-cd6c594e1159caff-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-cd6c594e1159caff-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-cd6c594e1159caff-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-cd6c594e1159caff-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1511.625px;\" viewBox=\"0 0 1511.625 215\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-cd6c594e1159caff-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-cd6c594e1159caff-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-cd6c594e1159caff-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-cd6c594e1159caff-dark .error-icon{fill:rgb(21, 22, 23);}#d-cd6c594e1159caff-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-cd6c594e1159caff-dark .edge-thickness-normal{stroke-width:1px;}#d-cd6c594e1159caff-dark .edge-thickness-thick{stroke-width:3.5px;}#d-cd6c594e1159caff-dark .edge-pattern-solid{stroke-dasharray:0;}#d-cd6c594e1159caff-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-cd6c594e1159caff-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-cd6c594e1159caff-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-cd6c594e1159caff-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-cd6c594e1159caff-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-cd6c594e1159caff-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-cd6c594e1159caff-dark p{margin:0;}#d-cd6c594e1159caff-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-cd6c594e1159caff-dark .cluster-label text{fill:#eae9e8;}#d-cd6c594e1159caff-dark .cluster-label span{color:#eae9e8;}#d-cd6c594e1159caff-dark .cluster-label span p{background-color:transparent;}#d-cd6c594e1159caff-dark .label text,#d-cd6c594e1159caff-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-cd6c594e1159caff-dark .node rect,#d-cd6c594e1159caff-dark .node circle,#d-cd6c594e1159caff-dark .node ellipse,#d-cd6c594e1159caff-dark .node polygon,#d-cd6c594e1159caff-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-cd6c594e1159caff-dark .rough-node .label text,#d-cd6c594e1159caff-dark .node .label text,#d-cd6c594e1159caff-dark .image-shape .label,#d-cd6c594e1159caff-dark .icon-shape .label{text-anchor:middle;}#d-cd6c594e1159caff-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-cd6c594e1159caff-dark .rough-node .label,#d-cd6c594e1159caff-dark .node .label,#d-cd6c594e1159caff-dark .image-shape .label,#d-cd6c594e1159caff-dark .icon-shape .label{text-align:center;}#d-cd6c594e1159caff-dark .node.clickable{cursor:pointer;}#d-cd6c594e1159caff-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-cd6c594e1159caff-dark .arrowheadPath{fill:#eae9e8;}#d-cd6c594e1159caff-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-cd6c594e1159caff-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-cd6c594e1159caff-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-cd6c594e1159caff-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-cd6c594e1159caff-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-cd6c594e1159caff-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-cd6c594e1159caff-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-cd6c594e1159caff-dark .cluster text{fill:#eae9e8;}#d-cd6c594e1159caff-dark .cluster span{color:#eae9e8;}#d-cd6c594e1159caff-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-cd6c594e1159caff-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-cd6c594e1159caff-dark rect.text{fill:none;stroke-width:0;}#d-cd6c594e1159caff-dark .icon-shape,#d-cd6c594e1159caff-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-cd6c594e1159caff-dark .icon-shape p,#d-cd6c594e1159caff-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-cd6c594e1159caff-dark .icon-shape .label rect,#d-cd6c594e1159caff-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-cd6c594e1159caff-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-cd6c594e1159caff-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-cd6c594e1159caff-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-cd6c594e1159caff-dark [data-look=\"neo\"].node rect,#d-cd6c594e1159caff-dark [data-look=\"neo\"].cluster rect,#d-cd6c594e1159caff-dark [data-look=\"neo\"].node polygon{stroke:url(#d-cd6c594e1159caff-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-cd6c594e1159caff-dark [data-look=\"neo\"].node path{stroke:url(#d-cd6c594e1159caff-dark-gradient);stroke-width:1px;}#d-cd6c594e1159caff-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-cd6c594e1159caff-dark [data-look=\"neo\"].node circle{stroke:url(#d-cd6c594e1159caff-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-cd6c594e1159caff-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-cd6c594e1159caff-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-cd6c594e1159caff-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cd6c594e1159caff-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-cd6c594e1159caff-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-cd6c594e1159caff-dark-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"763.8125\" y=\"8\" width=\"739.8125\" height=\"99.5\"></rect><g class=\"cluster-label \" transform=\"translate(1058.8046875, 8)\"><foreignObject width=\"149.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Physical Node: Server-B</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-cd6c594e1159caff-dark-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"735.8125\" height=\"99.5\"></rect><g class=\"cluster-label \" transform=\"translate(300.984375, 8)\"><foreignObject width=\"149.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Physical Node: Server-A</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M137.258,82.5L137.258,86.667C137.258,90.833,137.258,99.167,137.258,107.5C137.258,115.833,137.258,124.167,220.136,135.023C303.015,145.88,468.772,159.26,551.65,165.95L634.529,172.64\" id=\"d-cd6c594e1159caff-dark-L_A1_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A1_RING_0\" data-points=\"W3sieCI6MTM3LjI1NzgxMjUsInkiOjgyLjV9LHsieCI6MTM3LjI1NzgxMjUsInkiOjEwNy41fSx7IngiOjEzNy4yNTc4MTI1LCJ5IjoxMzIuNX0seyJ4Ijo2MzguNTE1NjI1LCJ5IjoxNzIuOTYxNTI1NTQxODkzNzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-dark_flowchart-v2-pointEnd)\"></path><path d=\"M373.688,82.5L373.688,86.667C373.688,90.833,373.688,99.167,373.688,107.5C373.688,115.833,373.688,124.167,417.164,134.027C460.641,143.887,547.595,155.274,591.072,160.968L634.549,166.661\" id=\"d-cd6c594e1159caff-dark-L_A2_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A2_RING_0\" data-points=\"W3sieCI6MzczLjY4NzUsInkiOjgyLjV9LHsieCI6MzczLjY4NzUsInkiOjEwNy41fSx7IngiOjM3My42ODc1LCJ5IjoxMzIuNX0seyJ4Ijo2MzguNTE1NjI1LCJ5IjoxNjcuMTgwODQ2MDMyMDM5ODJ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-dark_flowchart-v2-pointEnd)\"></path><path d=\"M612.336,82.5L612.336,86.667C612.336,90.833,612.336,99.167,612.336,107.5C612.336,115.833,612.336,124.167,623.537,132.279C634.738,140.39,657.141,148.281,668.342,152.226L679.543,156.171\" id=\"d-cd6c594e1159caff-dark-L_A3_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A3_RING_0\" data-points=\"W3sieCI6NjEyLjMzNTkzNzUsInkiOjgyLjV9LHsieCI6NjEyLjMzNTkzNzUsInkiOjEwNy41fSx7IngiOjYxMi4zMzU5Mzc1LCJ5IjoxMzIuNX0seyJ4Ijo2ODMuMzE1ODM2OTk3NDg3NCwieSI6MTU3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-dark_flowchart-v2-pointEnd)\"></path><path d=\"M894.836,82.5L894.836,86.667C894.836,90.833,894.836,99.167,894.836,107.5C894.836,115.833,894.836,124.167,883.635,132.279C872.434,140.39,850.031,148.281,838.83,152.226L827.629,156.171\" id=\"d-cd6c594e1159caff-dark-L_B1_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B1_RING_0\" data-points=\"W3sieCI6ODk0LjgzNTkzNzUsInkiOjgyLjV9LHsieCI6ODk0LjgzNTkzNzUsInkiOjEwNy41fSx7IngiOjg5NC44MzU5Mzc1LCJ5IjoxMzIuNX0seyJ4Ijo4MjMuODU2MDM4MDAyNTEyNiwieSI6MTU3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1134.133,82.5L1134.133,86.667C1134.133,90.833,1134.133,99.167,1134.133,107.5C1134.133,115.833,1134.133,124.167,1090.548,134.031C1046.963,143.896,959.793,155.292,916.208,160.99L872.622,166.688\" id=\"d-cd6c594e1159caff-dark-L_B2_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B2_RING_0\" data-points=\"W3sieCI6MTEzNC4xMzI4MTI1LCJ5Ijo4Mi41fSx7IngiOjExMzQuMTMyODEyNSwieSI6MTA3LjV9LHsieCI6MTEzNC4xMzI4MTI1LCJ5IjoxMzIuNX0seyJ4Ijo4NjguNjU2MjUsInkiOjE2Ny4yMDY1MjMzMDExNzAyfV0=\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1373.016,82.5L1373.016,86.667C1373.016,90.833,1373.016,99.167,1373.016,107.5C1373.016,115.833,1373.016,124.167,1289.62,135.031C1206.225,145.896,1039.434,159.292,956.039,165.99L872.643,172.688\" id=\"d-cd6c594e1159caff-dark-L_B3_RING_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B3_RING_0\" data-points=\"W3sieCI6MTM3My4wMTU2MjUsInkiOjgyLjV9LHsieCI6MTM3My4wMTU2MjUsInkiOjEwNy41fSx7IngiOjEzNzMuMDE1NjI1LCJ5IjoxMzIuNX0seyJ4Ijo4NjguNjU2MjUsInkiOjE3My4wMDgwMzQxMDM5NTE0N31d\" data-look=\"classic\" marker-end=\"url(#d-cd6c594e1159caff-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A1_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A2_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A3_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B1_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B2_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B3_RING_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-cd6c594e1159caff-dark-flowchart-A1-0\" data-look=\"classic\" transform=\"translate(137.2578125, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.2578125\" y=\"-24.75\" width=\"188.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.2578125, -9.75)\"><rect></rect><foreignObject width=\"128.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-A#0 (0x0F12)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-cd6c594e1159caff-dark-flowchart-A2-1\" data-look=\"classic\" transform=\"translate(373.6875, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.171875\" y=\"-24.75\" width=\"184.34375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.171875, -9.75)\"><rect></rect><foreignObject width=\"124.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-A#1 (0x67A1)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-cd6c594e1159caff-dark-flowchart-A3-2\" data-look=\"classic\" transform=\"translate(612.3359375, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.4765625\" y=\"-24.75\" width=\"192.953125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.4765625, -9.75)\"><rect></rect><foreignObject width=\"132.953125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-A#2 (0xC450)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-cd6c594e1159caff-dark-flowchart-B1-3\" data-look=\"classic\" transform=\"translate(894.8359375, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.0234375\" y=\"-24.75\" width=\"192.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.0234375, -9.75)\"><rect></rect><foreignObject width=\"132.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-B#0 (0x3340)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-cd6c594e1159caff-dark-flowchart-B2-4\" data-look=\"classic\" transform=\"translate(1134.1328125, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-93.2734375\" y=\"-24.75\" width=\"186.546875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-63.2734375, -9.75)\"><rect></rect><foreignObject width=\"126.546875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-B#1 (0x8A10)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-cd6c594e1159caff-dark-flowchart-B3-5\" data-look=\"classic\" transform=\"translate(1373.015625, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.609375\" y=\"-24.75\" width=\"191.21875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.609375, -9.75)\"><rect></rect><foreignObject width=\"131.21875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Server-B#2 (0xE880)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-cd6c594e1159caff-dark-flowchart-RING-7\" data-look=\"classic\" transform=\"translate(753.5859375, 182.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-115.0703125\" y=\"-24.75\" width=\"230.140625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-85.0703125, -9.75)\"><rect></rect><foreignObject width=\"170.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Distributed Interleaved Ring</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-cd6c594e1159caff-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-cd6c594e1159caff-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-cd6c594e1159caff-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"go-implementation-with-binary-search\">Go Implementation with Binary Search<a class=\"h-anchor\" href=\"#go-implementation-with-binary-search\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Here is a complete, concurrency-safe consistent hash ring in Go utilizing <code>sort.Search</code> for <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>O</mi><mo stretchy=\"false\">(</mo><mi>log</mi><mo>⁡</mo><mo stretchy=\"false\">(</mo><mi>N</mi><mo>⋅</mo><mi>V</mi><mo stretchy=\"false\">)</mo><mo stretchy=\"false\">)</mo></mrow><annotation encoding=\"application/x-tex\">O(\\log(N \\cdot V))</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0278em;\">O</span><span class=\"mopen\">(</span><span class=\"mop\">lo<span style=\"margin-right:0.0139em;\">g</span></span><span class=\"mopen\">(</span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">⋅</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.2222em;\">V</span><span class=\"mclose\">))</span></span></span></span></span></p> lookups:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> consistenthash</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">errors</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">hash/fnv</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">slices</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sort</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">strconv</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> HashFunc</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">data</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint32</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Ring</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    mu       </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">RWMutex</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    hashFunc </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">HashFunc</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    vnodes   </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">               // virtual nodes per physical node</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ring     []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint32</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">          // sorted slice of virtual node hashes</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    nodeMap  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // map from virtual hash to physical node name</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrEmptyRing </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"empty hash ring: no nodes configured\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> NewRing</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">vnodes</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fn</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> HashFunc</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Ring</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fn </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fn </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">data</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            h </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fnv.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New32a</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            h.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Write</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(data)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> h.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sum32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Ring</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        hashFunc: fn,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        vnodes:   vnodes,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        nodeMap:  </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Add inserts physical nodes with their virtual replicas</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">r </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Ring</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Add</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">nodes</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ...</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    r.mu.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Lock</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    defer</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.mu.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Unlock</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, node </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> nodes {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.vnodes; i</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">++</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            vnodeKey </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(node </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">+</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"#\"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> +</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> strconv.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Itoa</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(i))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            hash </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">hashFunc</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(vnodeKey)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            r.ring </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> append</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(r.ring, hash)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            r.nodeMap[hash] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> node</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    slices.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sort</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(r.ring)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Get locates the owning physical node for a given cache key</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">r </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Ring</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Get</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">key</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) (</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    r.mu.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">RLock</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    defer</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.mu.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">RUnlock</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(r.ring) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, ErrEmptyRing</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    hash </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">hashFunc</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">([]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(key))</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Binary search for first virtual node with hash &gt;= key hash</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    idx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> sort.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Search</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(r.ring), </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">i</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.ring[i] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> hash</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    })</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Wrap-around to index 0 if key exceeds all points on ring</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> idx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(r.ring) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        idx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r.nodeMap[r.ring[idx]], </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"replication-across-distinct-physical-nodes\">Replication Across Distinct Physical Nodes<a class=\"h-anchor\" href=\"#replication-across-distinct-physical-nodes\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In systems requiring replication (such as DynamoDB with replication factor <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>R</mi><mo>=</mo><mn>3</mn></mrow><annotation encoding=\"application/x-tex\">R = 3</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0077em;\">R</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">3</span></span></span></span></span></p>), the ring walker must find <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>R</mi></mrow><annotation encoding=\"application/x-tex\">R</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.0077em;\">R</span></span></span></span></span></p> <strong>distinct physical nodes</strong>. If two consecutive virtual nodes on the ring belong to <code>Server-A</code>, the walker skips the duplicate and continues clockwise to ensure replicas reside on distinct physical hardware.</p>\n<h2 id=\"key-operational-properties\">Key Operational Properties<a class=\"h-anchor\" href=\"#key-operational-properties\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Deterministic Lookups</strong>: Every client with the same node list and hash function independently computes identical key-to-node assignments without centralized routing coordination.</li>\n<li><strong>Minimal Resharding</strong>: Adding a node moves exactly <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>1</mn><mi mathvariant=\"normal\">/</mi><mo stretchy=\"false\">(</mo><mi>N</mi><mo>+</mo><mn>1</mn><mo stretchy=\"false\">)</mo></mrow><annotation encoding=\"application/x-tex\">1/(N+1)</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord\">1/</span><span class=\"mopen\">(</span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">+</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord\">1</span><span class=\"mclose\">)</span></span></span></span></span></p> of the keys, preserving 80-90% of warm cache entries across deployment scale-outs.</li>\n<li><strong>Weight Allocation</strong>: Heterogeneous hardware can be weighted proportionally by giving larger servers more virtual nodes (e.g. 300 vnodes for 64GB instances, 150 vnodes for 32GB instances).</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/slog-structured-logging/",
      "url": "https://ashwingopalsamy.in/blog/slog-structured-logging/",
      "title": "Why slog Over zerolog",
      "content_text": "Why log/slog is the standard for modern Go services: handler architecture, LogValuer PII masking, and zero-alloc patterns.",
      "date_published": "2026-03-10T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Since Go 1.21 introduced <code>log/slog</code> to the standard library, third-party structured loggers like <code>zerolog</code> and <code>uber-go/zap</code> are no longer strict requirements for high-throughput production services.</p>\n<p><code>slog</code> decouples the front-end logging API from the backend formatting layer, standardizes logging across library ecosystems, and provides type-safe value masking.</p>\n<h2 id=\"the-handler-architecture\">The Handler Architecture<a class=\"h-anchor\" href=\"#the-handler-architecture\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The central architectural pattern in <code>slog</code> is the <code>slog.Handler</code> interface:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Handler</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> interface</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">    Enabled</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Level</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">    Handle</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Record</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">    WithAttrs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">attrs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Attr</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Handler</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">    WithGroup</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">name</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Handler</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"197ccb94064ff270\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-197ccb94064ff270-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 558.09375px;\" viewBox=\"0 0 558.09375 772.203125\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-197ccb94064ff270-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-197ccb94064ff270-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-197ccb94064ff270-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-197ccb94064ff270-light .error-icon{fill:rgb(255, 255, 255);}#d-197ccb94064ff270-light .error-text{fill:#000000;stroke:#000000;}#d-197ccb94064ff270-light .edge-thickness-normal{stroke-width:1px;}#d-197ccb94064ff270-light .edge-thickness-thick{stroke-width:3.5px;}#d-197ccb94064ff270-light .edge-pattern-solid{stroke-dasharray:0;}#d-197ccb94064ff270-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-197ccb94064ff270-light .edge-pattern-dashed{stroke-dasharray:3;}#d-197ccb94064ff270-light .edge-pattern-dotted{stroke-dasharray:2;}#d-197ccb94064ff270-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-197ccb94064ff270-light .marker.cross{stroke:rgb(44, 46, 48);}#d-197ccb94064ff270-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-197ccb94064ff270-light p{margin:0;}#d-197ccb94064ff270-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-197ccb94064ff270-light .cluster-label text{fill:#000000;}#d-197ccb94064ff270-light .cluster-label span{color:#000000;}#d-197ccb94064ff270-light .cluster-label span p{background-color:transparent;}#d-197ccb94064ff270-light .label text,#d-197ccb94064ff270-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-197ccb94064ff270-light .node rect,#d-197ccb94064ff270-light .node circle,#d-197ccb94064ff270-light .node ellipse,#d-197ccb94064ff270-light .node polygon,#d-197ccb94064ff270-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-197ccb94064ff270-light .rough-node .label text,#d-197ccb94064ff270-light .node .label text,#d-197ccb94064ff270-light .image-shape .label,#d-197ccb94064ff270-light .icon-shape .label{text-anchor:middle;}#d-197ccb94064ff270-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-197ccb94064ff270-light .rough-node .label,#d-197ccb94064ff270-light .node .label,#d-197ccb94064ff270-light .image-shape .label,#d-197ccb94064ff270-light .icon-shape .label{text-align:center;}#d-197ccb94064ff270-light .node.clickable{cursor:pointer;}#d-197ccb94064ff270-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-197ccb94064ff270-light .arrowheadPath{fill:#000000;}#d-197ccb94064ff270-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-197ccb94064ff270-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-197ccb94064ff270-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-197ccb94064ff270-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-197ccb94064ff270-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-197ccb94064ff270-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-197ccb94064ff270-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-197ccb94064ff270-light .cluster text{fill:#000000;}#d-197ccb94064ff270-light .cluster span{color:#000000;}#d-197ccb94064ff270-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-197ccb94064ff270-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-197ccb94064ff270-light rect.text{fill:none;stroke-width:0;}#d-197ccb94064ff270-light .icon-shape,#d-197ccb94064ff270-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-197ccb94064ff270-light .icon-shape p,#d-197ccb94064ff270-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-197ccb94064ff270-light .icon-shape .label rect,#d-197ccb94064ff270-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-197ccb94064ff270-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-197ccb94064ff270-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-197ccb94064ff270-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-197ccb94064ff270-light [data-look=\"neo\"].node rect,#d-197ccb94064ff270-light [data-look=\"neo\"].cluster rect,#d-197ccb94064ff270-light [data-look=\"neo\"].node polygon{stroke:url(#d-197ccb94064ff270-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-197ccb94064ff270-light [data-look=\"neo\"].node path{stroke:url(#d-197ccb94064ff270-light-gradient);stroke-width:1px;}#d-197ccb94064ff270-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-197ccb94064ff270-light [data-look=\"neo\"].node circle{stroke:url(#d-197ccb94064ff270-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-197ccb94064ff270-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-197ccb94064ff270-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-197ccb94064ff270-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-197ccb94064ff270-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-197ccb94064ff270-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M279.047,57.5L279.047,63.292C279.047,69.083,279.047,80.667,279.047,91.583C279.047,102.5,279.047,112.75,279.047,117.875L279.047,123\" id=\"d-197ccb94064ff270-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6Mjc5LjA0Njg3NSwieSI6NTcuNX0seyJ4IjoyNzkuMDQ2ODc1LCJ5Ijo5Mi4yNX0seyJ4IjoyNzkuMDQ2ODc1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-light_flowchart-v2-pointEnd)\"></path><path d=\"M279.047,176.5L279.047,182.292C279.047,188.083,279.047,199.667,279.047,210.583C279.047,221.5,279.047,231.75,279.047,236.875L279.047,242\" id=\"d-197ccb94064ff270-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6Mjc5LjA0Njg3NSwieSI6MTc2LjV9LHsieCI6Mjc5LjA0Njg3NSwieSI6MjExLjI1fSx7IngiOjI3OS4wNDY4NzUsInkiOjI0Nn1d\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-light_flowchart-v2-pointEnd)\"></path><path d=\"M238.53,347.186L221.775,359.731C205.02,372.275,171.51,397.364,154.755,415.034C138,432.703,138,442.953,138,448.078L138,453.203\" id=\"d-197ccb94064ff270-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjM4LjUzMDEzMTQ4OTM0MTQ3LCJ5IjozNDcuMTg2MzgxNDg5MzQxNX0seyJ4IjoxMzgsInkiOjQyMi40NTMxMjV9LHsieCI6MTM4LCJ5Ijo0NTcuMjAzMTI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-light_flowchart-v2-pointEnd)\"></path><path d=\"M319.564,347.186L336.319,359.731C353.074,372.275,386.584,397.364,403.339,416.659C420.094,435.953,420.094,449.453,420.094,456.203L420.094,462.953\" id=\"d-197ccb94064ff270-light-L_C_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6MzE5LjU2MzYxODUxMDY1ODUsInkiOjM0Ny4xODYzODE0ODkzNDE1fSx7IngiOjQyMC4wOTM3NSwieSI6NDIyLjQ1MzEyNX0seyJ4Ijo0MjAuMDkzNzUsInkiOjQ2Ni45NTMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-light_flowchart-v2-pointEnd)\"></path><path d=\"M420.094,516.453L420.094,522.245C420.094,528.036,420.094,539.62,420.094,548.911C420.094,558.203,420.094,565.203,420.094,568.703L420.094,572.203\" id=\"d-197ccb94064ff270-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6NDIwLjA5Mzc1LCJ5Ijo1MTYuNDUzMTI1fSx7IngiOjQyMC4wOTM3NSwieSI6NTUxLjIwMzEyNX0seyJ4Ijo0MjAuMDkzNzUsInkiOjU3Ni4yMDMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-light_flowchart-v2-pointEnd)\"></path><path d=\"M420.094,645.203L420.094,649.37C420.094,653.536,420.094,661.87,420.094,669.536C420.094,677.203,420.094,684.203,420.094,687.703L420.094,691.203\" id=\"d-197ccb94064ff270-light-L_F_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6NDIwLjA5Mzc1LCJ5Ijo2NDUuMjAzMTI1fSx7IngiOjQyMC4wOTM3NSwieSI6NjcwLjIwMzEyNX0seyJ4Ijo0MjAuMDkzNzUsInkiOjY5NS4yMDMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(279.046875, 92.25)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-73.8359375, -9.75)\"><foreignObject width=\"147.671875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>slog.InfoContext(ctx, ...)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(279.046875, 211.25)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-57.3828125, -9.75)\"><foreignObject width=\"114.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Filter via Enabled()</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(138, 422.453125)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(420.09375, 422.453125)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-197ccb94064ff270-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(279.046875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.703125\" y=\"-24.75\" width=\"165.40625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.703125, -9.75)\"><rect></rect><foreignObject width=\"105.40625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Application Code</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-197ccb94064ff270-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(279.046875, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.515625\" y=\"-24.75\" width=\"201.03125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.515625, -9.75)\"><rect></rect><foreignObject width=\"141.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>slog.Logger (Frontend)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-197ccb94064ff270-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(279.046875, 316.8515625)\"><polygon points=\"70.8515625,0 141.703125,-70.8515625 70.8515625,-141.703125 0,-70.8515625\" class=\"label-container\" transform=\"translate(-70.3515625, 70.8515625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-46.1015625, -9.75)\"><rect></rect><foreignObject width=\"92.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Level Enabled?</p></span></div></foreignObject></g></g><g class=\"node default diag-slow \" id=\"d-197ccb94064ff270-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(138, 491.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Drop immediately (Zero allocation)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-197ccb94064ff270-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(420.09375, 491.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.09375\" y=\"-24.75\" width=\"204.1875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.09375, -9.75)\"><rect></rect><foreignObject width=\"144.1875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>slog.Handler (Backend)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-197ccb94064ff270-light-flowchart-F-9\" data-look=\"classic\" transform=\"translate(420.09375, 610.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>JSONHandler / TextHandler / Custom</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-197ccb94064ff270-light-flowchart-G-11\" data-look=\"classic\" transform=\"translate(420.09375, 729.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>stdout / stderr / OpenTelemetry / Kafka</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-197ccb94064ff270-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-197ccb94064ff270-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-197ccb94064ff270-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-197ccb94064ff270-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 558.09375px;\" viewBox=\"0 0 558.09375 772.203125\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-197ccb94064ff270-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-197ccb94064ff270-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-197ccb94064ff270-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-197ccb94064ff270-dark .error-icon{fill:rgb(21, 22, 23);}#d-197ccb94064ff270-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-197ccb94064ff270-dark .edge-thickness-normal{stroke-width:1px;}#d-197ccb94064ff270-dark .edge-thickness-thick{stroke-width:3.5px;}#d-197ccb94064ff270-dark .edge-pattern-solid{stroke-dasharray:0;}#d-197ccb94064ff270-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-197ccb94064ff270-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-197ccb94064ff270-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-197ccb94064ff270-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-197ccb94064ff270-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-197ccb94064ff270-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-197ccb94064ff270-dark p{margin:0;}#d-197ccb94064ff270-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-197ccb94064ff270-dark .cluster-label text{fill:#eae9e8;}#d-197ccb94064ff270-dark .cluster-label span{color:#eae9e8;}#d-197ccb94064ff270-dark .cluster-label span p{background-color:transparent;}#d-197ccb94064ff270-dark .label text,#d-197ccb94064ff270-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-197ccb94064ff270-dark .node rect,#d-197ccb94064ff270-dark .node circle,#d-197ccb94064ff270-dark .node ellipse,#d-197ccb94064ff270-dark .node polygon,#d-197ccb94064ff270-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-197ccb94064ff270-dark .rough-node .label text,#d-197ccb94064ff270-dark .node .label text,#d-197ccb94064ff270-dark .image-shape .label,#d-197ccb94064ff270-dark .icon-shape .label{text-anchor:middle;}#d-197ccb94064ff270-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-197ccb94064ff270-dark .rough-node .label,#d-197ccb94064ff270-dark .node .label,#d-197ccb94064ff270-dark .image-shape .label,#d-197ccb94064ff270-dark .icon-shape .label{text-align:center;}#d-197ccb94064ff270-dark .node.clickable{cursor:pointer;}#d-197ccb94064ff270-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-197ccb94064ff270-dark .arrowheadPath{fill:#eae9e8;}#d-197ccb94064ff270-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-197ccb94064ff270-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-197ccb94064ff270-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-197ccb94064ff270-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-197ccb94064ff270-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-197ccb94064ff270-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-197ccb94064ff270-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-197ccb94064ff270-dark .cluster text{fill:#eae9e8;}#d-197ccb94064ff270-dark .cluster span{color:#eae9e8;}#d-197ccb94064ff270-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-197ccb94064ff270-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-197ccb94064ff270-dark rect.text{fill:none;stroke-width:0;}#d-197ccb94064ff270-dark .icon-shape,#d-197ccb94064ff270-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-197ccb94064ff270-dark .icon-shape p,#d-197ccb94064ff270-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-197ccb94064ff270-dark .icon-shape .label rect,#d-197ccb94064ff270-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-197ccb94064ff270-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-197ccb94064ff270-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-197ccb94064ff270-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-197ccb94064ff270-dark [data-look=\"neo\"].node rect,#d-197ccb94064ff270-dark [data-look=\"neo\"].cluster rect,#d-197ccb94064ff270-dark [data-look=\"neo\"].node polygon{stroke:url(#d-197ccb94064ff270-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-197ccb94064ff270-dark [data-look=\"neo\"].node path{stroke:url(#d-197ccb94064ff270-dark-gradient);stroke-width:1px;}#d-197ccb94064ff270-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-197ccb94064ff270-dark [data-look=\"neo\"].node circle{stroke:url(#d-197ccb94064ff270-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-197ccb94064ff270-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-197ccb94064ff270-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-197ccb94064ff270-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-197ccb94064ff270-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-197ccb94064ff270-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M279.047,57.5L279.047,63.292C279.047,69.083,279.047,80.667,279.047,91.583C279.047,102.5,279.047,112.75,279.047,117.875L279.047,123\" id=\"d-197ccb94064ff270-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6Mjc5LjA0Njg3NSwieSI6NTcuNX0seyJ4IjoyNzkuMDQ2ODc1LCJ5Ijo5Mi4yNX0seyJ4IjoyNzkuMDQ2ODc1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-dark_flowchart-v2-pointEnd)\"></path><path d=\"M279.047,176.5L279.047,182.292C279.047,188.083,279.047,199.667,279.047,210.583C279.047,221.5,279.047,231.75,279.047,236.875L279.047,242\" id=\"d-197ccb94064ff270-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6Mjc5LjA0Njg3NSwieSI6MTc2LjV9LHsieCI6Mjc5LjA0Njg3NSwieSI6MjExLjI1fSx7IngiOjI3OS4wNDY4NzUsInkiOjI0Nn1d\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-dark_flowchart-v2-pointEnd)\"></path><path d=\"M238.53,347.186L221.775,359.731C205.02,372.275,171.51,397.364,154.755,415.034C138,432.703,138,442.953,138,448.078L138,453.203\" id=\"d-197ccb94064ff270-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjM4LjUzMDEzMTQ4OTM0MTQ3LCJ5IjozNDcuMTg2MzgxNDg5MzQxNX0seyJ4IjoxMzgsInkiOjQyMi40NTMxMjV9LHsieCI6MTM4LCJ5Ijo0NTcuMjAzMTI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-dark_flowchart-v2-pointEnd)\"></path><path d=\"M319.564,347.186L336.319,359.731C353.074,372.275,386.584,397.364,403.339,416.659C420.094,435.953,420.094,449.453,420.094,456.203L420.094,462.953\" id=\"d-197ccb94064ff270-dark-L_C_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_E_0\" data-points=\"W3sieCI6MzE5LjU2MzYxODUxMDY1ODUsInkiOjM0Ny4xODYzODE0ODkzNDE1fSx7IngiOjQyMC4wOTM3NSwieSI6NDIyLjQ1MzEyNX0seyJ4Ijo0MjAuMDkzNzUsInkiOjQ2Ni45NTMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-dark_flowchart-v2-pointEnd)\"></path><path d=\"M420.094,516.453L420.094,522.245C420.094,528.036,420.094,539.62,420.094,548.911C420.094,558.203,420.094,565.203,420.094,568.703L420.094,572.203\" id=\"d-197ccb94064ff270-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6NDIwLjA5Mzc1LCJ5Ijo1MTYuNDUzMTI1fSx7IngiOjQyMC4wOTM3NSwieSI6NTUxLjIwMzEyNX0seyJ4Ijo0MjAuMDkzNzUsInkiOjU3Ni4yMDMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-dark_flowchart-v2-pointEnd)\"></path><path d=\"M420.094,645.203L420.094,649.37C420.094,653.536,420.094,661.87,420.094,669.536C420.094,677.203,420.094,684.203,420.094,687.703L420.094,691.203\" id=\"d-197ccb94064ff270-dark-L_F_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6NDIwLjA5Mzc1LCJ5Ijo2NDUuMjAzMTI1fSx7IngiOjQyMC4wOTM3NSwieSI6NjcwLjIwMzEyNX0seyJ4Ijo0MjAuMDkzNzUsInkiOjY5NS4yMDMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-197ccb94064ff270-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(279.046875, 92.25)\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(-73.8359375, -9.75)\"><foreignObject width=\"147.671875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>slog.InfoContext(ctx, ...)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(279.046875, 211.25)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-57.3828125, -9.75)\"><foreignObject width=\"114.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Filter via Enabled()</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(138, 422.453125)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(420.09375, 422.453125)\"><g class=\"label\" data-id=\"L_C_E_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-197ccb94064ff270-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(279.046875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.703125\" y=\"-24.75\" width=\"165.40625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.703125, -9.75)\"><rect></rect><foreignObject width=\"105.40625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Application Code</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-197ccb94064ff270-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(279.046875, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.515625\" y=\"-24.75\" width=\"201.03125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.515625, -9.75)\"><rect></rect><foreignObject width=\"141.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>slog.Logger (Frontend)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-197ccb94064ff270-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(279.046875, 316.8515625)\"><polygon points=\"70.8515625,0 141.703125,-70.8515625 70.8515625,-141.703125 0,-70.8515625\" class=\"label-container\" transform=\"translate(-70.3515625, 70.8515625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-46.1015625, -9.75)\"><rect></rect><foreignObject width=\"92.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Level Enabled?</p></span></div></foreignObject></g></g><g class=\"node default diag-slow \" id=\"d-197ccb94064ff270-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(138, 491.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Drop immediately (Zero allocation)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-197ccb94064ff270-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(420.09375, 491.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.09375\" y=\"-24.75\" width=\"204.1875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.09375, -9.75)\"><rect></rect><foreignObject width=\"144.1875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>slog.Handler (Backend)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-197ccb94064ff270-dark-flowchart-F-9\" data-look=\"classic\" transform=\"translate(420.09375, 610.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>JSONHandler / TextHandler / Custom</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-197ccb94064ff270-dark-flowchart-G-11\" data-look=\"classic\" transform=\"translate(420.09375, 729.703125)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>stdout / stderr / OpenTelemetry / Kafka</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-197ccb94064ff270-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-197ccb94064ff270-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-197ccb94064ff270-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>Because third-party libraries and framework middlewares can accept a <code>*slog.Logger</code> or <code>slog.Handler</code>, your entire stack converges on a single logging pipeline without translation layers between competing logger interfaces.</p>\n<h2 id=\"masking-sensitive-data-with-sloglogvaluer\">Masking Sensitive Data with <code>slog.LogValuer</code><a class=\"h-anchor\" href=\"#masking-sensitive-data-with-sloglogvaluer\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In payment and security-critical systems, accidental logging of personally identifiable information (PII) or Primary Account Numbers (PAN) is a major compliance risk.</p>\n<p><code>slog</code> solves this via the <code>slog.LogValuer</code> interface. Any type implementing <code>LogValue() slog.Value</code> automatically masks itself when passed to any <code>slog</code> logger:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> payments</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">log/slog</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">strings</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> CreditCard</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    PAN    </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // e.g. \"4111222233334444\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    CVV    </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Expiry </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// LogValue implements slog.LogValuer to prevent raw PAN leakage in logs</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">cc CreditCard</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">LogValue</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">slog</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Value</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(cc.PAN) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> slog.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">StringValue</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"REDACTED\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    masked </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> strings.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Repeat</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"*\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(cc.PAN)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">+</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> cc.PAN[</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(cc.PAN)</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> slog.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">GroupValue</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        slog.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">String</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"pan\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, masked),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        slog.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">String</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"expiry\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, cc.Expiry),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // CVV is omitted entirely</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>When logged with <code>slog.Info(\"authorization request\", \"card\", card)</code>, the output safely outputs masked fields:</p>\n<div class=\"code-figure\" data-language=\"json\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"json\"><code><span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span><span style=\"--shiki-light:#116329;--shiki-dark:#7EE787\">\"time\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"2026-03-10T12:00:00Z\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span><span style=\"--shiki-light:#116329;--shiki-dark:#7EE787\">\"level\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"INFO\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span><span style=\"--shiki-light:#116329;--shiki-dark:#7EE787\">\"msg\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"authorization request\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span><span style=\"--shiki-light:#116329;--shiki-dark:#7EE787\">\"card\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:{</span><span style=\"--shiki-light:#116329;--shiki-dark:#7EE787\">\"pan\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"************4444\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span><span style=\"--shiki-light:#116329;--shiki-dark:#7EE787\">\"expiry\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"12/28\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}}</span></span></code></pre></div>\n<h2 id=\"performance-loosely-typed-vs-typed-slogattr\">Performance: Loosely Typed vs Typed <code>slog.Attr</code><a class=\"h-anchor\" href=\"#performance-loosely-typed-vs-typed-slogattr\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p><code>slog</code> offers two calling conventions:</p>\n<ol>\n<li><strong>Loosely typed key-value pairs</strong>: <code>slog.Info(\"msg\", \"key\", val)</code></li>\n<li><strong>Strongly typed attributes</strong>: <code>slog.Info(\"msg\", slog.String(\"key\", val))</code></li>\n</ol>\n<p>In hot paths (e.g. payment authorization ingress), loose key-value pairs cause each value to be boxed into <code>any</code>, triggering heap allocations. Strongly typed <code>slog.Attr</code> constructors (<code>slog.String</code>, <code>slog.Int64</code>, <code>slog.Duration</code>) store values directly in stack-friendly value structs:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Allocation-heavy: 2 interface{} boxing allocations</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">logger.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">InfoContext</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(ctx, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"transaction processed\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"account_id\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, accID, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"amount_cents\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, amount)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Zero boxing allocations: stack-allocated Attr structs</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">logger.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">LogAttrs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(ctx, slog.LevelInfo, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"transaction processed\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    slog.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">String</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"account_id\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, accID),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    slog.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Int64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"amount_cents\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, amount),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span></code></pre></div>\n<h2 id=\"when-to-use-slog-vs-zerolog\">When to Use <code>slog</code> vs <code>zerolog</code><a class=\"h-anchor\" href=\"#when-to-use-slog-vs-zerolog\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Metric / Feature</th>\n<th><code>log/slog</code></th>\n<th><code>zerolog</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Ecosystem Standard</strong></td>\n<td>Standard library (built-in Go 1.21+)</td>\n<td>Third-party dependency</td>\n</tr>\n<tr>\n<td><strong>Interface Composability</strong></td>\n<td>Clean <code>Handler</code> middleware chain</td>\n<td>Custom <code>io.Writer</code> pipeline</td>\n</tr>\n<tr>\n<td><strong>PII / Secret Masking</strong></td>\n<td>First-class <code>LogValuer</code> interface</td>\n<td>Custom event hooks</td>\n</tr>\n<tr>\n<td><strong>Allocation Profile</strong></td>\n<td>Low (zero-alloc with <code>LogAttrs</code>)</td>\n<td>Zero-alloc (writes directly to JSON byte buffer)</td>\n</tr>\n<tr>\n<td><strong>API Style</strong></td>\n<td>Standard Go idioms (<code>context.Context</code> first)</td>\n<td>Fluent chaining (<code>log.Info().Str(...).Msg()</code>)</td>\n</tr>\n</tbody>\n</table></div>\n<p>For greenfield services and shared libraries, <code>log/slog</code> is the correct default. The slight raw throughput advantage of <code>zerolog</code> rarely outweighs the maintainability, security, and ecosystem compatibility of the standard library.</p>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/uuids-for-idempotency/",
      "url": "https://ashwingopalsamy.in/blog/uuids-for-idempotency/",
      "title": "Why UUIDs Matter for Idempotency",
      "content_text": "Why idempotency keys prevent duplicate payments: UUIDv7 index locality, in-flight race conditions, and payload hashing.",
      "date_published": "2026-02-20T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>In payment processing, executing the same transaction twice is worse than dropping a request. A duplicate debit drains customer accounts, triggers chargebacks, and violates card network settlement rules.</p>\n<p>Because network transport over WAN is inherently unreliable (the two-generals problem), client retries are inevitable. Idempotency guarantees that retrying an authorization request <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> times produces the exact same side effects and response as executing it once.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"2a0bc4ecd88b4033\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-2a0bc4ecd88b4033-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 957px;\" viewBox=\"-50 -10 957 551\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"691\" y=\"465\" fill=\"#eaeaea\" stroke=\"#666\" width=\"166\" height=\"65\" name=\"Ledger\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"774\" y=\"497.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"774\" dy=\"0\">Transaction Ledger</tspan></text></g><g><rect x=\"475\" y=\"465\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Ingress\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"550\" y=\"497.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"550\" dy=\"0\">Ingress API</tspan></text></g><g><rect x=\"0\" y=\"465\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"497.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g><g><line id=\"d-2a0bc4ecd88b4033-light-actor2\" x1=\"774\" y1=\"65\" x2=\"774\" y2=\"465\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Ledger\" data-et=\"life-line\" data-id=\"Ledger\"></line><g id=\"d-2a0bc4ecd88b4033-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Ledger\"><rect x=\"691\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"166\" height=\"65\" name=\"Ledger\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"774\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"774\" dy=\"0\">Transaction Ledger</tspan></text></g></g><g><line id=\"d-2a0bc4ecd88b4033-light-actor1\" x1=\"550\" y1=\"65\" x2=\"550\" y2=\"465\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Ingress\" data-et=\"life-line\" data-id=\"Ingress\"></line><g id=\"d-2a0bc4ecd88b4033-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Ingress\"><rect x=\"475\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Ingress\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"550\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"550\" dy=\"0\">Ingress API</tspan></text></g></g><g><line id=\"d-2a0bc4ecd88b4033-light-actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"465\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Client\" data-et=\"life-line\" data-id=\"Client\"></line><g id=\"d-2a0bc4ecd88b4033-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Client\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g></g><style>#d-2a0bc4ecd88b4033-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-2a0bc4ecd88b4033-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-2a0bc4ecd88b4033-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-2a0bc4ecd88b4033-light .error-icon{fill:rgb(255, 255, 255);}#d-2a0bc4ecd88b4033-light .error-text{fill:#000000;stroke:#000000;}#d-2a0bc4ecd88b4033-light .edge-thickness-normal{stroke-width:1px;}#d-2a0bc4ecd88b4033-light .edge-thickness-thick{stroke-width:3.5px;}#d-2a0bc4ecd88b4033-light .edge-pattern-solid{stroke-dasharray:0;}#d-2a0bc4ecd88b4033-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-2a0bc4ecd88b4033-light .edge-pattern-dashed{stroke-dasharray:3;}#d-2a0bc4ecd88b4033-light .edge-pattern-dotted{stroke-dasharray:2;}#d-2a0bc4ecd88b4033-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light .marker.cross{stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-2a0bc4ecd88b4033-light p{margin:0;}#d-2a0bc4ecd88b4033-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-2a0bc4ecd88b4033-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-2a0bc4ecd88b4033-light .actor-line{stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-2a0bc4ecd88b4033-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-2a0bc4ecd88b4033-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-2a0bc4ecd88b4033-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-2a0bc4ecd88b4033-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-2a0bc4ecd88b4033-light .labelText,#d-2a0bc4ecd88b4033-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-2a0bc4ecd88b4033-light .loopText,#d-2a0bc4ecd88b4033-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-2a0bc4ecd88b4033-light .sectionTitle,#d-2a0bc4ecd88b4033-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-2a0bc4ecd88b4033-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-2a0bc4ecd88b4033-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-light .noteText,#d-2a0bc4ecd88b4033-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-2a0bc4ecd88b4033-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-2a0bc4ecd88b4033-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-2a0bc4ecd88b4033-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-2a0bc4ecd88b4033-light .actorPopupMenu{position:absolute;}#d-2a0bc4ecd88b4033-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-2a0bc4ecd88b4033-light .actor-man circle,#d-2a0bc4ecd88b4033-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-2a0bc4ecd88b4033-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-2a0bc4ecd88b4033-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node rect,#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].cluster rect,#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-2a0bc4ecd88b4033-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-2a0bc4ecd88b4033-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-2a0bc4ecd88b4033-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i3\"><rect x=\"50\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"525\" height=\"40\" class=\"note\"></rect><text x=\"313\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"313\">Network drops TCP connection before ACK</tspan></text></g><text x=\"311\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">POST /v1/charges (Idempotency-Key: k_9912)</text><line x1=\"76\" y1=\"115\" x2=\"546\" y2=\"115\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"Client\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"661\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Debit $50.00</text><line x1=\"551\" y1=\"165\" x2=\"770\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Ingress\" data-to=\"Ledger\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"664\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">200 OK (Charged)</text><line x1=\"773\" y1=\"215\" x2=\"554\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Ledger\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"311\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">RETRY: POST /v1/charges (Idempotency-Key: k_9912)</text><line x1=\"76\" y1=\"315\" x2=\"546\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Client\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"551\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Detect seen key &amp; replay cached 200 OK</text><path d=\"M 551,365 C 611,355 611,395 551,385\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Ingress\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"314\" y=\"410\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">200 OK (Charged) (Zero double debit)</text><line x1=\"549\" y1=\"445\" x2=\"79\" y2=\"445\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"Ingress\" data-to=\"Client\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-2a0bc4ecd88b4033-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 957px;\" viewBox=\"-50 -10 957 551\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"691\" y=\"465\" fill=\"#eaeaea\" stroke=\"#666\" width=\"166\" height=\"65\" name=\"Ledger\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"774\" y=\"497.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"774\" dy=\"0\">Transaction Ledger</tspan></text></g><g><rect x=\"475\" y=\"465\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Ingress\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"550\" y=\"497.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"550\" dy=\"0\">Ingress API</tspan></text></g><g><rect x=\"0\" y=\"465\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"497.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g><g><line id=\"d-2a0bc4ecd88b4033-dark-actor2\" x1=\"774\" y1=\"65\" x2=\"774\" y2=\"465\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Ledger\" data-et=\"life-line\" data-id=\"Ledger\"></line><g id=\"d-2a0bc4ecd88b4033-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Ledger\"><rect x=\"691\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"166\" height=\"65\" name=\"Ledger\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"774\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"774\" dy=\"0\">Transaction Ledger</tspan></text></g></g><g><line id=\"d-2a0bc4ecd88b4033-dark-actor1\" x1=\"550\" y1=\"65\" x2=\"550\" y2=\"465\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Ingress\" data-et=\"life-line\" data-id=\"Ingress\"></line><g id=\"d-2a0bc4ecd88b4033-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Ingress\"><rect x=\"475\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Ingress\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"550\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"550\" dy=\"0\">Ingress API</tspan></text></g></g><g><line id=\"d-2a0bc4ecd88b4033-dark-actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"465\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Client\" data-et=\"life-line\" data-id=\"Client\"></line><g id=\"d-2a0bc4ecd88b4033-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Client\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Client\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g></g><style>#d-2a0bc4ecd88b4033-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-2a0bc4ecd88b4033-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-2a0bc4ecd88b4033-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-2a0bc4ecd88b4033-dark .error-icon{fill:rgb(21, 22, 23);}#d-2a0bc4ecd88b4033-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-2a0bc4ecd88b4033-dark .edge-thickness-normal{stroke-width:1px;}#d-2a0bc4ecd88b4033-dark .edge-thickness-thick{stroke-width:3.5px;}#d-2a0bc4ecd88b4033-dark .edge-pattern-solid{stroke-dasharray:0;}#d-2a0bc4ecd88b4033-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-2a0bc4ecd88b4033-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-2a0bc4ecd88b4033-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-2a0bc4ecd88b4033-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-2a0bc4ecd88b4033-dark p{margin:0;}#d-2a0bc4ecd88b4033-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-2a0bc4ecd88b4033-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-2a0bc4ecd88b4033-dark .actor-line{stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-2a0bc4ecd88b4033-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-2a0bc4ecd88b4033-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-2a0bc4ecd88b4033-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-2a0bc4ecd88b4033-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-2a0bc4ecd88b4033-dark .labelText,#d-2a0bc4ecd88b4033-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-2a0bc4ecd88b4033-dark .loopText,#d-2a0bc4ecd88b4033-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-2a0bc4ecd88b4033-dark .sectionTitle,#d-2a0bc4ecd88b4033-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-2a0bc4ecd88b4033-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-2a0bc4ecd88b4033-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-2a0bc4ecd88b4033-dark .noteText,#d-2a0bc4ecd88b4033-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-2a0bc4ecd88b4033-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-2a0bc4ecd88b4033-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-2a0bc4ecd88b4033-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-2a0bc4ecd88b4033-dark .actorPopupMenu{position:absolute;}#d-2a0bc4ecd88b4033-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-2a0bc4ecd88b4033-dark .actor-man circle,#d-2a0bc4ecd88b4033-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-2a0bc4ecd88b4033-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-2a0bc4ecd88b4033-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node rect,#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].cluster rect,#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-2a0bc4ecd88b4033-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-2a0bc4ecd88b4033-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-2a0bc4ecd88b4033-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-2a0bc4ecd88b4033-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-2a0bc4ecd88b4033-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i3\"><rect x=\"50\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"525\" height=\"40\" class=\"note\"></rect><text x=\"313\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"313\">Network drops TCP connection before ACK</tspan></text></g><text x=\"311\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">POST /v1/charges (Idempotency-Key: k_9912)</text><line x1=\"76\" y1=\"115\" x2=\"546\" y2=\"115\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"Client\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"661\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Debit $50.00</text><line x1=\"551\" y1=\"165\" x2=\"770\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Ingress\" data-to=\"Ledger\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"664\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">200 OK (Charged)</text><line x1=\"773\" y1=\"215\" x2=\"554\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Ledger\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"311\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">RETRY: POST /v1/charges (Idempotency-Key: k_9912)</text><line x1=\"76\" y1=\"315\" x2=\"546\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Client\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"551\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Detect seen key &amp; replay cached 200 OK</text><path d=\"M 551,365 C 611,355 611,395 551,385\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Ingress\" data-to=\"Ingress\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"314\" y=\"410\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">200 OK (Charged) (Zero double debit)</text><line x1=\"549\" y1=\"445\" x2=\"79\" y2=\"445\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"Ingress\" data-to=\"Client\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-2a0bc4ecd88b4033-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"why-uuidv7-over-uuidv4-for-idempotency-keys\">Why UUIDv7 Over UUIDv4 for Idempotency Keys<a class=\"h-anchor\" href=\"#why-uuidv7-over-uuidv4-for-idempotency-keys\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Clients must generate idempotency keys before sending the initial request. While arbitrary strings or UUIDv4 are common, <strong>UUIDv7</strong> (RFC 9562) is the superior standard for database-backed idempotency layers.</p>\n<p>UUIDv7 embeds a 48-bit millisecond Unix timestamp in the most significant bits, followed by 74 bits of cryptographically secure pseudo-random entropy:</p>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span> 0                   1                   2                   3</span></span>\n<span class=\"line\"><span> 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1</span></span>\n<span class=\"line\"><span>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span></span>\n<span class=\"line\"><span>|                           unix_ts_ms                          |</span></span>\n<span class=\"line\"><span>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span></span>\n<span class=\"line\"><span>|          unix_ts_ms           |  ver  |       rand_a          |</span></span>\n<span class=\"line\"><span>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span></span>\n<span class=\"line\"><span>|var|                        rand_b                             |</span></span>\n<span class=\"line\"><span>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span></span>\n<span class=\"line\"><span>|                            rand_b                             |</span></span>\n<span class=\"line\"><span>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span></span></code></pre></div>\n<h3 id=\"1-b-tree-index-locality\">1. B-Tree Index Locality<a class=\"h-anchor\" href=\"#1-b-tree-index-locality\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Random UUIDv4 strings scatter index writes randomly across the entire database B-tree, causing continuous page splits and cache eviction in the database buffer pool. UUIDv7 is monotonic; new records append naturally to the right-hand edge of the B-tree index.</p>\n<h3 id=\"2-time-range-expiration-without-secondary-indexes\">2. Time-Range Expiration Without Secondary Indexes<a class=\"h-anchor\" href=\"#2-time-range-expiration-without-secondary-indexes\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Idempotency records are typically retained for 24 to 72 hours. Because UUIDv7 keys are time-ordered, background workers can prune expired records via simple range scans on the primary key without requiring a separate <code>created_at</code> index:</p>\n<div class=\"code-figure\" data-language=\"sql\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"sql\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">DELETE</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> FROM</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> idempotency_keys </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">WHERE</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> id </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> '018d0000-0000-7000-8000-000000000000'</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">-- Timestamp cutoff</span></span></code></pre></div>\n<h2 id=\"the-concurrent-in-flight-race-condition\">The Concurrent In-Flight Race Condition<a class=\"h-anchor\" href=\"#the-concurrent-in-flight-race-condition\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A common failure in naive idempotency implementations occurs when a client times out after 2 seconds and fires a retry <strong>while the first request is still executing in the database</strong>.</p>\n<p>If the second request checks the database and sees no completed record, both requests execute concurrently, causing a race condition and a double debit.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"baa36afeab19e908\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-baa36afeab19e908-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"statediagram\" style=\"max-width: 756.765625px;\" viewBox=\"0 0 756.765625 384\" role=\"graphics-document document\" aria-roledescription=\"stateDiagram\"><style>#d-baa36afeab19e908-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-baa36afeab19e908-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-baa36afeab19e908-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-baa36afeab19e908-light .error-icon{fill:rgb(255, 255, 255);}#d-baa36afeab19e908-light .error-text{fill:#000000;stroke:#000000;}#d-baa36afeab19e908-light .edge-thickness-normal{stroke-width:1px;}#d-baa36afeab19e908-light .edge-thickness-thick{stroke-width:3.5px;}#d-baa36afeab19e908-light .edge-pattern-solid{stroke-dasharray:0;}#d-baa36afeab19e908-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-baa36afeab19e908-light .edge-pattern-dashed{stroke-dasharray:3;}#d-baa36afeab19e908-light .edge-pattern-dotted{stroke-dasharray:2;}#d-baa36afeab19e908-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-baa36afeab19e908-light .marker.cross{stroke:rgb(44, 46, 48);}#d-baa36afeab19e908-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-baa36afeab19e908-light p{margin:0;}#d-baa36afeab19e908-light defs [id$=\"-barbEnd\"]{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-baa36afeab19e908-light g.stateGroup text{fill:rgb(203, 206, 208);stroke:none;font-size:10px;}#d-baa36afeab19e908-light g.stateGroup text{fill:rgb(21, 22, 23);stroke:none;font-size:10px;}#d-baa36afeab19e908-light g.stateGroup .state-title{font-weight:bolder;fill:rgb(21, 22, 23);}#d-baa36afeab19e908-light g.stateGroup rect{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);}#d-baa36afeab19e908-light g.stateGroup line{stroke:rgb(44, 46, 48);stroke-width:1;}#d-baa36afeab19e908-light .transition{stroke:rgb(44, 46, 48);stroke-width:1;fill:none;}#d-baa36afeab19e908-light .stateGroup .composit{fill:rgb(255, 255, 255);border-bottom:1px;}#d-baa36afeab19e908-light .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#d-baa36afeab19e908-light .state-note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-baa36afeab19e908-light .state-note text{fill:rgb(21, 22, 23);stroke:none;font-size:10px;}#d-baa36afeab19e908-light .stateLabel .box{stroke:none;stroke-width:0;fill:rgb(255, 255, 255);opacity:0.5;}#d-baa36afeab19e908-light .edgeLabel .label rect{fill:rgb(255, 255, 255);opacity:0.5;}#d-baa36afeab19e908-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-baa36afeab19e908-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-baa36afeab19e908-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-baa36afeab19e908-light .edgeLabel .label text{fill:rgb(21, 22, 23);}#d-baa36afeab19e908-light .label div .edgeLabel{color:rgb(21, 22, 23);}#d-baa36afeab19e908-light .stateLabel text{fill:rgb(21, 22, 23);font-size:10px;font-weight:bold;}#d-baa36afeab19e908-light .node circle.state-start{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-baa36afeab19e908-light .node .fork-join{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-baa36afeab19e908-light .node circle.state-end{fill:rgb(203, 206, 208);stroke:rgb(255, 255, 255);stroke-width:1.5;}#d-baa36afeab19e908-light .end-state-inner{fill:rgb(255, 255, 255);stroke-width:1.5;}#d-baa36afeab19e908-light .node rect{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-baa36afeab19e908-light .node polygon{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-baa36afeab19e908-light [id$=\"-barbEnd\"]{fill:rgb(44, 46, 48);}#d-baa36afeab19e908-light .statediagram-cluster rect{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-baa36afeab19e908-light .cluster-label,#d-baa36afeab19e908-light .nodeLabel{color:rgb(21, 22, 23);}#d-baa36afeab19e908-light .statediagram-cluster rect.outer{rx:5px;ry:5px;}#d-baa36afeab19e908-light .statediagram-state .divider{stroke:rgb(203, 206, 208);}#d-baa36afeab19e908-light .statediagram-state .title-state{rx:5px;ry:5px;}#d-baa36afeab19e908-light .statediagram-cluster.statediagram-cluster .inner{fill:rgb(255, 255, 255);}#d-baa36afeab19e908-light .statediagram-cluster.statediagram-cluster-alt .inner{fill:rgb(255, 255, 255);}#d-baa36afeab19e908-light .statediagram-cluster .inner{rx:0;ry:0;}#d-baa36afeab19e908-light .statediagram-state rect.basic{rx:5px;ry:5px;}#d-baa36afeab19e908-light .statediagram-state rect.divider{stroke-dasharray:10,10;fill:rgb(255, 255, 255);}#d-baa36afeab19e908-light .note-edge{stroke-dasharray:5;}#d-baa36afeab19e908-light .statediagram-note rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;rx:0;ry:0;}#d-baa36afeab19e908-light .statediagram-note rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;rx:0;ry:0;}#d-baa36afeab19e908-light .statediagram-note text{fill:rgb(21, 22, 23);}#d-baa36afeab19e908-light .statediagram-note .nodeLabel{color:rgb(21, 22, 23);}#d-baa36afeab19e908-light .statediagram .edgeLabel{color:red;}#d-baa36afeab19e908-light [id$=\"-dependencyStart\"],#d-baa36afeab19e908-light [id$=\"-dependencyEnd\"]{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);stroke-width:1;}#d-baa36afeab19e908-light .statediagramTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-baa36afeab19e908-light [data-look=\"neo\"].statediagram-cluster rect{fill:rgb(255, 255, 255);stroke:url(#d-baa36afeab19e908-light-gradient);stroke-width:1;}#d-baa36afeab19e908-light [data-look=\"neo\"].statediagram-cluster rect.outer{rx:5px;ry:5px;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-baa36afeab19e908-light [data-look=\"neo\"].node rect,#d-baa36afeab19e908-light [data-look=\"neo\"].cluster rect,#d-baa36afeab19e908-light [data-look=\"neo\"].node polygon{stroke:url(#d-baa36afeab19e908-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-baa36afeab19e908-light [data-look=\"neo\"].node path{stroke:url(#d-baa36afeab19e908-light-gradient);stroke-width:1px;}#d-baa36afeab19e908-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-baa36afeab19e908-light [data-look=\"neo\"].node circle{stroke:url(#d-baa36afeab19e908-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-baa36afeab19e908-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-baa36afeab19e908-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-baa36afeab19e908-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><defs><marker id=\"d-baa36afeab19e908-light_stateDiagram-barbEnd\" refX=\"19\" refY=\"7\" markerWidth=\"20\" markerHeight=\"14\" markerUnits=\"userSpaceOnUse\" orient=\"auto\"><path d=\"M 19,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M406.152,22L406.152,27.792C406.152,33.583,406.152,45.167,406.152,56.75C406.152,68.333,406.152,79.917,406.152,85.708L406.152,91.5\" id=\"d-baa36afeab19e908-light-edge0\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge0\" data-points=\"W3sieCI6NDA2LjE1MjM0Mzc1LCJ5IjoyMn0seyJ4Ijo0MDYuMTUyMzQzNzUsInkiOjU2Ljc1fSx7IngiOjQwNi4xNTIzNDM3NSwieSI6OTEuNX1d\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-light_stateDiagram-barbEnd)\"></path><path d=\"M365.199,117.8L322.333,126.75C279.466,135.7,193.733,153.6,150.867,169.967C108,186.333,108,201.167,108,208.583L108,216\" id=\"d-baa36afeab19e908-light-edge1\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge1\" data-points=\"W3sieCI6MzY1LjE5OTIxODc1LCJ5IjoxMTcuODAwNDM0MzE1NTEwOX0seyJ4IjoxMDgsInkiOjE3MS41fSx7IngiOjEwOCwieSI6MjE2fV0=\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-light_stateDiagram-barbEnd)\"></path><path d=\"M383.287,127L373.732,134.417C364.178,141.833,345.069,156.667,345.069,171.5C345.069,186.333,364.178,201.167,373.732,208.583L383.287,216\" id=\"d-baa36afeab19e908-light-edge2\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge2\" data-points=\"W3sieCI6MzgzLjI4NjUyMTA4NDMzNzMsInkiOjEyN30seyJ4IjozMjUuOTYwOTM3NSwieSI6MTcxLjV9LHsieCI6MzgzLjI4NjUyMTA4NDMzNzMsInkiOjIxNn1d\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-light_stateDiagram-barbEnd)\"></path><path d=\"M447.105,119.758L480.715,128.382C514.326,137.005,581.546,154.253,615.156,170.293C648.766,186.333,648.766,201.167,648.766,208.583L648.766,216\" id=\"d-baa36afeab19e908-light-edge3\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge3\" data-points=\"W3sieCI6NDQ3LjEwNTQ2ODc1LCJ5IjoxMTkuNzU3ODAwODAxODE2MTZ9LHsieCI6NjQ4Ljc2NTYyNSwieSI6MTcxLjV9LHsieCI6NjQ4Ljc2NTYyNSwieSI6MjE2fV0=\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-light_stateDiagram-barbEnd)\"></path><path d=\"M108,251.5L108,258.917C108,266.333,108,281.167,108,296C108,310.833,108,325.667,108,333.083L108,340.5\" id=\"d-baa36afeab19e908-light-edge4\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge4\" data-points=\"W3sieCI6MTA4LCJ5IjoyNTEuNX0seyJ4IjoxMDgsInkiOjI5Nn0seyJ4IjoxMDgsInkiOjM0MC41fV0=\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-light_stateDiagram-barbEnd)\"></path><path d=\"M429.018,216L438.572,208.583C448.127,201.167,467.235,186.333,467.235,171.5C467.235,156.667,448.127,141.833,438.572,134.417L429.018,127\" id=\"d-baa36afeab19e908-light-edge5\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge5\" data-points=\"W3sieCI6NDI5LjAxODE2NjQxNTY2MjcsInkiOjIxNn0seyJ4Ijo0ODYuMzQzNzUsInkiOjE3MS41fSx7IngiOjQyOS4wMTgxNjY0MTU2NjI3LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-light_stateDiagram-barbEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(406.15234375, 56.75)\"><g class=\"label\" data-id=\"edge0\" transform=\"translate(-90.7421875, -9.75)\"><foreignObject width=\"181.484375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>First Request (Acquire Lease)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(108, 171.5)\"><g class=\"label\" data-id=\"edge1\" transform=\"translate(-100, -19.5)\"><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel \"><p>Execution Success (Store Response)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(325.9609375, 171.5)\"><g class=\"label\" data-id=\"edge2\" transform=\"translate(-97.9609375, -9.75)\"><foreignObject width=\"195.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Execution Error (Release Lease)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(648.765625, 171.5)\"><g class=\"label\" data-id=\"edge3\" transform=\"translate(-100, -19.5)\"><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel \"><p>Concurrent Retry Arrives (409 Conflict / Wait)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(108, 296)\"><g class=\"label\" data-id=\"edge4\" transform=\"translate(-100, -19.5)\"><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel \"><p>Retry Arrives (Return Cached 200 OK)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(486.34375, 171.5)\"><g class=\"label\" data-id=\"edge5\" transform=\"translate(-42.421875, -9.75)\"><foreignObject width=\"84.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Retry Allowed</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"d-baa36afeab19e908-light-state-root_start-0\" data-look=\"classic\" transform=\"translate(406.15234375, 15)\"><circle class=\"state-start\" r=\"7\" width=\"14\" height=\"14\"></circle></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-light-state-InProgress-5\" data-look=\"classic\" transform=\"translate(406.15234375, 109.25)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-40.953125\" y=\"-17.75\" width=\"81.90625\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.953125, -9.75)\"><rect></rect><foreignObject width=\"65.90625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>InProgress</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-light-state-Completed-4\" data-look=\"classic\" transform=\"translate(108, 233.75)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-41.515625\" y=\"-17.75\" width=\"83.03125\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-33.515625, -9.75)\"><rect></rect><foreignObject width=\"67.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Completed</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-light-state-Failed-5\" data-look=\"classic\" transform=\"translate(406.15234375, 233.75)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-26.25\" y=\"-17.75\" width=\"52.5\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-18.25, -9.75)\"><rect></rect><foreignObject width=\"36.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Failed</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-light-state-Conflict-3\" data-look=\"classic\" transform=\"translate(648.765625, 233.75)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-31.8828125\" y=\"-17.75\" width=\"63.765625\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.8828125, -9.75)\"><rect></rect><foreignObject width=\"47.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Conflict</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-light-state-Replay-4\" data-look=\"classic\" transform=\"translate(108, 358.25)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-28.640625\" y=\"-17.75\" width=\"57.28125\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-20.640625, -9.75)\"><rect></rect><foreignObject width=\"41.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Replay</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-baa36afeab19e908-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-baa36afeab19e908-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-baa36afeab19e908-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-baa36afeab19e908-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"statediagram\" style=\"max-width: 756.765625px;\" viewBox=\"0 0 756.765625 384\" role=\"graphics-document document\" aria-roledescription=\"stateDiagram\"><style>#d-baa36afeab19e908-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-baa36afeab19e908-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-baa36afeab19e908-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-baa36afeab19e908-dark .error-icon{fill:rgb(21, 22, 23);}#d-baa36afeab19e908-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-baa36afeab19e908-dark .edge-thickness-normal{stroke-width:1px;}#d-baa36afeab19e908-dark .edge-thickness-thick{stroke-width:3.5px;}#d-baa36afeab19e908-dark .edge-pattern-solid{stroke-dasharray:0;}#d-baa36afeab19e908-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-baa36afeab19e908-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-baa36afeab19e908-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-baa36afeab19e908-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-baa36afeab19e908-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-baa36afeab19e908-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-baa36afeab19e908-dark p{margin:0;}#d-baa36afeab19e908-dark defs [id$=\"-barbEnd\"]{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-baa36afeab19e908-dark g.stateGroup text{fill:rgb(108, 111, 114);stroke:none;font-size:10px;}#d-baa36afeab19e908-dark g.stateGroup text{fill:rgb(255, 255, 255);stroke:none;font-size:10px;}#d-baa36afeab19e908-dark g.stateGroup .state-title{font-weight:bolder;fill:rgb(255, 255, 255);}#d-baa36afeab19e908-dark g.stateGroup rect{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);}#d-baa36afeab19e908-dark g.stateGroup line{stroke:rgb(220, 222, 224);stroke-width:1;}#d-baa36afeab19e908-dark .transition{stroke:rgb(220, 222, 224);stroke-width:1;fill:none;}#d-baa36afeab19e908-dark .stateGroup .composit{fill:rgb(21, 22, 23);border-bottom:1px;}#d-baa36afeab19e908-dark .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#d-baa36afeab19e908-dark .state-note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-baa36afeab19e908-dark .state-note text{fill:rgb(255, 255, 255);stroke:none;font-size:10px;}#d-baa36afeab19e908-dark .stateLabel .box{stroke:none;stroke-width:0;fill:rgb(21, 22, 23);opacity:0.5;}#d-baa36afeab19e908-dark .edgeLabel .label rect{fill:rgb(21, 22, 23);opacity:0.5;}#d-baa36afeab19e908-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-baa36afeab19e908-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-baa36afeab19e908-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-baa36afeab19e908-dark .edgeLabel .label text{fill:rgb(255, 255, 255);}#d-baa36afeab19e908-dark .label div .edgeLabel{color:rgb(255, 255, 255);}#d-baa36afeab19e908-dark .stateLabel text{fill:rgb(255, 255, 255);font-size:10px;font-weight:bold;}#d-baa36afeab19e908-dark .node circle.state-start{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-baa36afeab19e908-dark .node .fork-join{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-baa36afeab19e908-dark .node circle.state-end{fill:rgb(108, 111, 114);stroke:rgb(21, 22, 23);stroke-width:1.5;}#d-baa36afeab19e908-dark .end-state-inner{fill:rgb(21, 22, 23);stroke-width:1.5;}#d-baa36afeab19e908-dark .node rect{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-baa36afeab19e908-dark .node polygon{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-baa36afeab19e908-dark [id$=\"-barbEnd\"]{fill:rgb(220, 222, 224);}#d-baa36afeab19e908-dark .statediagram-cluster rect{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-baa36afeab19e908-dark .cluster-label,#d-baa36afeab19e908-dark .nodeLabel{color:rgb(255, 255, 255);}#d-baa36afeab19e908-dark .statediagram-cluster rect.outer{rx:5px;ry:5px;}#d-baa36afeab19e908-dark .statediagram-state .divider{stroke:rgb(108, 111, 114);}#d-baa36afeab19e908-dark .statediagram-state .title-state{rx:5px;ry:5px;}#d-baa36afeab19e908-dark .statediagram-cluster.statediagram-cluster .inner{fill:rgb(21, 22, 23);}#d-baa36afeab19e908-dark .statediagram-cluster.statediagram-cluster-alt .inner{fill:rgb(21, 22, 23);}#d-baa36afeab19e908-dark .statediagram-cluster .inner{rx:0;ry:0;}#d-baa36afeab19e908-dark .statediagram-state rect.basic{rx:5px;ry:5px;}#d-baa36afeab19e908-dark .statediagram-state rect.divider{stroke-dasharray:10,10;fill:rgb(21, 22, 23);}#d-baa36afeab19e908-dark .note-edge{stroke-dasharray:5;}#d-baa36afeab19e908-dark .statediagram-note rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;rx:0;ry:0;}#d-baa36afeab19e908-dark .statediagram-note rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;rx:0;ry:0;}#d-baa36afeab19e908-dark .statediagram-note text{fill:rgb(255, 255, 255);}#d-baa36afeab19e908-dark .statediagram-note .nodeLabel{color:rgb(255, 255, 255);}#d-baa36afeab19e908-dark .statediagram .edgeLabel{color:red;}#d-baa36afeab19e908-dark [id$=\"-dependencyStart\"],#d-baa36afeab19e908-dark [id$=\"-dependencyEnd\"]{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);stroke-width:1;}#d-baa36afeab19e908-dark .statediagramTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-baa36afeab19e908-dark [data-look=\"neo\"].statediagram-cluster rect{fill:rgb(21, 22, 23);stroke:url(#d-baa36afeab19e908-dark-gradient);stroke-width:1;}#d-baa36afeab19e908-dark [data-look=\"neo\"].statediagram-cluster rect.outer{rx:5px;ry:5px;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-baa36afeab19e908-dark [data-look=\"neo\"].node rect,#d-baa36afeab19e908-dark [data-look=\"neo\"].cluster rect,#d-baa36afeab19e908-dark [data-look=\"neo\"].node polygon{stroke:url(#d-baa36afeab19e908-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-baa36afeab19e908-dark [data-look=\"neo\"].node path{stroke:url(#d-baa36afeab19e908-dark-gradient);stroke-width:1px;}#d-baa36afeab19e908-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-baa36afeab19e908-dark [data-look=\"neo\"].node circle{stroke:url(#d-baa36afeab19e908-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-baa36afeab19e908-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-baa36afeab19e908-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-baa36afeab19e908-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-baa36afeab19e908-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><defs><marker id=\"d-baa36afeab19e908-dark_stateDiagram-barbEnd\" refX=\"19\" refY=\"7\" markerWidth=\"20\" markerHeight=\"14\" markerUnits=\"userSpaceOnUse\" orient=\"auto\"><path d=\"M 19,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M406.152,22L406.152,27.792C406.152,33.583,406.152,45.167,406.152,56.75C406.152,68.333,406.152,79.917,406.152,85.708L406.152,91.5\" id=\"d-baa36afeab19e908-dark-edge0\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge0\" data-points=\"W3sieCI6NDA2LjE1MjM0Mzc1LCJ5IjoyMn0seyJ4Ijo0MDYuMTUyMzQzNzUsInkiOjU2Ljc1fSx7IngiOjQwNi4xNTIzNDM3NSwieSI6OTEuNX1d\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-dark_stateDiagram-barbEnd)\"></path><path d=\"M365.199,117.8L322.333,126.75C279.466,135.7,193.733,153.6,150.867,169.967C108,186.333,108,201.167,108,208.583L108,216\" id=\"d-baa36afeab19e908-dark-edge1\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge1\" data-points=\"W3sieCI6MzY1LjE5OTIxODc1LCJ5IjoxMTcuODAwNDM0MzE1NTEwOX0seyJ4IjoxMDgsInkiOjE3MS41fSx7IngiOjEwOCwieSI6MjE2fV0=\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-dark_stateDiagram-barbEnd)\"></path><path d=\"M383.287,127L373.732,134.417C364.178,141.833,345.069,156.667,345.069,171.5C345.069,186.333,364.178,201.167,373.732,208.583L383.287,216\" id=\"d-baa36afeab19e908-dark-edge2\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge2\" data-points=\"W3sieCI6MzgzLjI4NjUyMTA4NDMzNzMsInkiOjEyN30seyJ4IjozMjUuOTYwOTM3NSwieSI6MTcxLjV9LHsieCI6MzgzLjI4NjUyMTA4NDMzNzMsInkiOjIxNn1d\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-dark_stateDiagram-barbEnd)\"></path><path d=\"M447.105,119.758L480.715,128.382C514.326,137.005,581.546,154.253,615.156,170.293C648.766,186.333,648.766,201.167,648.766,208.583L648.766,216\" id=\"d-baa36afeab19e908-dark-edge3\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge3\" data-points=\"W3sieCI6NDQ3LjEwNTQ2ODc1LCJ5IjoxMTkuNzU3ODAwODAxODE2MTZ9LHsieCI6NjQ4Ljc2NTYyNSwieSI6MTcxLjV9LHsieCI6NjQ4Ljc2NTYyNSwieSI6MjE2fV0=\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-dark_stateDiagram-barbEnd)\"></path><path d=\"M108,251.5L108,258.917C108,266.333,108,281.167,108,296C108,310.833,108,325.667,108,333.083L108,340.5\" id=\"d-baa36afeab19e908-dark-edge4\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge4\" data-points=\"W3sieCI6MTA4LCJ5IjoyNTEuNX0seyJ4IjoxMDgsInkiOjI5Nn0seyJ4IjoxMDgsInkiOjM0MC41fV0=\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-dark_stateDiagram-barbEnd)\"></path><path d=\"M429.018,216L438.572,208.583C448.127,201.167,467.235,186.333,467.235,171.5C467.235,156.667,448.127,141.833,438.572,134.417L429.018,127\" id=\"d-baa36afeab19e908-dark-edge5\" class=\" edge-thickness-normal edge-pattern-solid transition\" style=\"fill:none;;;fill:none\" data-edge=\"true\" data-et=\"edge\" data-id=\"edge5\" data-points=\"W3sieCI6NDI5LjAxODE2NjQxNTY2MjcsInkiOjIxNn0seyJ4Ijo0ODYuMzQzNzUsInkiOjE3MS41fSx7IngiOjQyOS4wMTgxNjY0MTU2NjI3LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-baa36afeab19e908-dark_stateDiagram-barbEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(406.15234375, 56.75)\"><g class=\"label\" data-id=\"edge0\" transform=\"translate(-90.7421875, -9.75)\"><foreignObject width=\"181.484375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>First Request (Acquire Lease)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(108, 171.5)\"><g class=\"label\" data-id=\"edge1\" transform=\"translate(-100, -19.5)\"><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel \"><p>Execution Success (Store Response)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(325.9609375, 171.5)\"><g class=\"label\" data-id=\"edge2\" transform=\"translate(-97.9609375, -9.75)\"><foreignObject width=\"195.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Execution Error (Release Lease)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(648.765625, 171.5)\"><g class=\"label\" data-id=\"edge3\" transform=\"translate(-100, -19.5)\"><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel \"><p>Concurrent Retry Arrives (409 Conflict / Wait)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(108, 296)\"><g class=\"label\" data-id=\"edge4\" transform=\"translate(-100, -19.5)\"><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"edgeLabel \"><p>Retry Arrives (Return Cached 200 OK)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(486.34375, 171.5)\"><g class=\"label\" data-id=\"edge5\" transform=\"translate(-42.421875, -9.75)\"><foreignObject width=\"84.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Retry Allowed</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"d-baa36afeab19e908-dark-state-root_start-0\" data-look=\"classic\" transform=\"translate(406.15234375, 15)\"><circle class=\"state-start\" r=\"7\" width=\"14\" height=\"14\"></circle></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-dark-state-InProgress-5\" data-look=\"classic\" transform=\"translate(406.15234375, 109.25)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-40.953125\" y=\"-17.75\" width=\"81.90625\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-32.953125, -9.75)\"><rect></rect><foreignObject width=\"65.90625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>InProgress</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-dark-state-Completed-4\" data-look=\"classic\" transform=\"translate(108, 233.75)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-41.515625\" y=\"-17.75\" width=\"83.03125\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-33.515625, -9.75)\"><rect></rect><foreignObject width=\"67.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Completed</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-dark-state-Failed-5\" data-look=\"classic\" transform=\"translate(406.15234375, 233.75)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-26.25\" y=\"-17.75\" width=\"52.5\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-18.25, -9.75)\"><rect></rect><foreignObject width=\"36.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Failed</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-dark-state-Conflict-3\" data-look=\"classic\" transform=\"translate(648.765625, 233.75)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-31.8828125\" y=\"-17.75\" width=\"63.765625\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.8828125, -9.75)\"><rect></rect><foreignObject width=\"47.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Conflict</p></span></div></foreignObject></g></g><g class=\"node  statediagram-state \" id=\"d-baa36afeab19e908-dark-state-Replay-4\" data-look=\"classic\" transform=\"translate(108, 358.25)\"><rect class=\"basic label-container\" style=\"\" rx=\"5\" ry=\"5\" x=\"-28.640625\" y=\"-17.75\" width=\"57.28125\" height=\"35.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-20.640625, -9.75)\"><rect></rect><foreignObject width=\"41.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel markdown-node-label\"><p>Replay</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-baa36afeab19e908-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-baa36afeab19e908-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-baa36afeab19e908-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>To solve this, the idempotency layer must implement a three-phase state machine:</p>\n<ol>\n<li><strong><code>IN_PROGRESS</code></strong>: When request 1 arrives, insert an atomic record with a short lease (e.g. 30 seconds).</li>\n<li><strong>Concurrent Request Handling</strong>: If request 2 arrives while the state is <code>IN_PROGRESS</code>, return <code>409 Conflict</code> (or block on a distributed pub/sub channel until request 1 completes).</li>\n<li><strong><code>COMPLETED</code></strong>: Once request 1 commits, save the HTTP status code, response headers, and response body. Subsequent retries instantly replay this cached payload.</li>\n</ol>\n<h2 id=\"request-payload-fingerprinting-sha-256\">Request Payload Fingerprinting (SHA-256)<a class=\"h-anchor\" href=\"#request-payload-fingerprinting-sha-256\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>What happens if a malicious or buggy client sends an idempotency key with a charge of $10, and then reuses the <strong>same key</strong> with a charge of $1,000?</p>\n<p>Under the IETF standard specification (<code>draft-ietf-httpapi-idempotency-key-header</code>), the server must compute a SHA-256 hash of the incoming request body and HTTP path:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> idempotency</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">crypto/sha256</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">encoding/hex</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">errors</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Record</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Key          </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    PayloadHash  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    StatusCode   </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    ResponseBody []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    State        </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // \"IN_PROGRESS\" | \"COMPLETED\" | \"FAILED\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrPayloadMismatch </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> errors.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">New</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"idempotency key reused with altered payload\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> ValidatePayload</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">rec</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Record</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">rawBody</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">error</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    h </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> sha256.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sum256</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(rawBody)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    currentHash </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> hex.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">EncodeToString</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(h[:])</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> rec.PayloadHash </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> currentHash {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ErrPayloadMismatch</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>If the payload hash does not match the stored hash for that key, reject the request immediately with <code>422 Unprocessable Entity</code> or <code>400 Bad Request</code>.</p>\n<h2 id=\"core-architectural-invariants\">Core Architectural Invariants<a class=\"h-anchor\" href=\"#core-architectural-invariants\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Client-Side Generation</strong>: The client must generate the UUID before initiating the HTTP request. If the server generates the key, dropped requests cannot be correlated on retry.</li>\n<li><strong>Atomic Lease Acquisition</strong>: Use database <code>INSERT ... ON CONFLICT DO NOTHING</code> or Redis <code>SET key in_progress NX EX 30</code> to guarantee only one worker executes the transaction.</li>\n<li><strong>Payload Binding</strong>: Always store and verify the SHA-256 digest of the request payload to prevent key collision tampering.</li>\n</ol>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2026-01-05:books/cloud-native-go",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Cloud Native Go",
      "content_text": "",
      "date_published": "2026-01-05T00:00:00.000Z",
      "tags": [
        "books"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://www.alexedwards.net/blog",
      "url": "https://www.alexedwards.net/blog",
      "title": "Alex Edwards - Let's Go",
      "content_text": "alexedwards.net",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://www.alexedwards.net/blog"
    },
    {
      "id": "https://antonz.org/all/",
      "url": "https://antonz.org/all/",
      "title": "Anton Zaides - All Articles",
      "content_text": "antonz.org",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://antonz.org/all/"
    },
    {
      "id": "https://mitchellh.com/writing/building-large-technical-projects",
      "url": "https://mitchellh.com/writing/building-large-technical-projects",
      "title": "Building Large Technical Projects",
      "content_text": "mitchellh.com",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://mitchellh.com/writing/building-large-technical-projects"
    },
    {
      "id": "https://blog.cloudflare.com/",
      "url": "https://blog.cloudflare.com/",
      "title": "Cloudflare Blog",
      "content_text": "blog.cloudflare.com",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://blog.cloudflare.com/"
    },
    {
      "id": "https://dave.cheney.net/",
      "url": "https://dave.cheney.net/",
      "title": "Dave Cheney's Blog",
      "content_text": "dave.cheney.net",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://dave.cheney.net/"
    },
    {
      "id": "https://go.dev/doc/effective_go",
      "url": "https://go.dev/doc/effective_go",
      "title": "Effective Go",
      "content_text": "go.dev",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://go.dev/doc/effective_go"
    },
    {
      "id": "https://benhoyt.com/writings/go-1brc/",
      "url": "https://benhoyt.com/writings/go-1brc/",
      "title": "How I Solved the 1BRC in Go",
      "content_text": "benhoyt.com",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://benhoyt.com/writings/go-1brc/"
    },
    {
      "id": "https://divan.dev/posts/go_concurrency_visualize/",
      "url": "https://divan.dev/posts/go_concurrency_visualize/",
      "title": "Visualizing Go Concurrency",
      "content_text": "divan.dev",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://divan.dev/posts/go_concurrency_visualize/"
    },
    {
      "id": "https://peter.bourgon.org/go-for-industrial-programming/",
      "url": "https://peter.bourgon.org/go-for-industrial-programming/",
      "title": "Go for Industrial Programming",
      "content_text": "peter.bourgon.org",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://peter.bourgon.org/go-for-industrial-programming/"
    },
    {
      "id": "https://grafana.com/blog/how-i-write-http-services-in-go-after-13-years/",
      "url": "https://grafana.com/blog/how-i-write-http-services-in-go-after-13-years/",
      "title": "How I Write HTTP Services in Go After 13 Years",
      "content_text": "grafana.com",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://grafana.com/blog/how-i-write-http-services-in-go-after-13-years/"
    },
    {
      "id": "https://blog.pragmaticengineer.com/",
      "url": "https://blog.pragmaticengineer.com/",
      "title": "The Pragmatic Engineer",
      "content_text": "blog.pragmaticengineer.com",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://blog.pragmaticengineer.com/"
    },
    {
      "id": "https://www.uber.com/in/en/blog/engineering/",
      "url": "https://www.uber.com/in/en/blog/engineering/",
      "title": "Uber Engineering Blog",
      "content_text": "uber.com",
      "date_published": "2026-01-01T00:00:00.000Z",
      "tags": [
        "articles"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "external_url": "https://www.uber.com/in/en/blog/engineering/"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-maps-iteration-order/",
      "url": "https://ashwingopalsamy.in/blog/go-maps-iteration-order/",
      "title": "Go Maps Iteration Order",
      "content_text": "Why Go map iteration is intentionally randomized by the runtime, and how to write deterministic key iteration.",
      "date_published": "2025-12-25T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>The Go language specification is explicit about map iteration:</p>\n<blockquote>\n<p>The iteration order over maps is not specified and is not guaranteed to be the same from one iteration to the next.</p>\n</blockquote>\n<p>This is not just a disclaimer in the specification. The Go runtime actively enforces non-deterministic iteration to prevent programs from depending on hash table layout.</p>\n<h2 id=\"the-deliberate-randomization-in-mapiterinit\">The Deliberate Randomization in <code>mapiterinit</code><a class=\"h-anchor\" href=\"#the-deliberate-randomization-in-mapiterinit\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When you write <code>for k, v := range m</code>, the compiler lowers this to a call to <code>runtime.mapiterinit</code>. Inside the runtime, Go picks a randomized starting bucket and a randomized slot offset within that bucket:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// From Go runtime/map.go (traditional map implementation):</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> mapiterinit</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">t</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">maptype</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">h</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">hmap</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">it</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">hiter</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // decide where to start</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    r </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> uintptr</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">fastrandn</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uint32</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &lt;&lt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> h.B)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    it.startBucket </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> r</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    it.offset </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> uint8</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">fastrandn</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(abi.MapBucketCount))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"5e3c4faa11013504\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-5e3c4faa11013504-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 869px;\" viewBox=\"-50 -10 869 481\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"619\" y=\"395\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Buckets\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"694\" y=\"427.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"694\" dy=\"0\">Hash Buckets</tspan></text></g><g><rect x=\"209\" y=\"395\" fill=\"#eaeaea\" stroke=\"#666\" width=\"162\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"290\" y=\"427.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"290\" dy=\"0\">runtime.mapiterinit</tspan></text></g><g><rect x=\"0\" y=\"395\" fill=\"#eaeaea\" stroke=\"#666\" width=\"159\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"79.5\" y=\"427.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"79.5\" dy=\"0\">for k, v := range m</tspan></text></g><g><line id=\"d-5e3c4faa11013504-light-actor2\" x1=\"694\" y1=\"65\" x2=\"694\" y2=\"395\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Buckets\" data-et=\"life-line\" data-id=\"Buckets\"></line><g id=\"d-5e3c4faa11013504-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Buckets\"><rect x=\"619\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Buckets\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"694\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"694\" dy=\"0\">Hash Buckets</tspan></text></g></g><g><line id=\"d-5e3c4faa11013504-light-actor1\" x1=\"290\" y1=\"65\" x2=\"290\" y2=\"395\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Runtime\" data-et=\"life-line\" data-id=\"Runtime\"></line><g id=\"d-5e3c4faa11013504-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Runtime\"><rect x=\"209\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"162\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"290\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"290\" dy=\"0\">runtime.mapiterinit</tspan></text></g></g><g><line id=\"d-5e3c4faa11013504-light-actor0\" x1=\"79.5\" y1=\"65\" x2=\"79.5\" y2=\"395\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"User\" data-et=\"life-line\" data-id=\"User\"></line><g id=\"d-5e3c4faa11013504-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"User\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"159\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"79.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"79.5\" dy=\"0\">for k, v := range m</tspan></text></g></g><style>#d-5e3c4faa11013504-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-5e3c4faa11013504-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-5e3c4faa11013504-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-5e3c4faa11013504-light .error-icon{fill:rgb(255, 255, 255);}#d-5e3c4faa11013504-light .error-text{fill:#000000;stroke:#000000;}#d-5e3c4faa11013504-light .edge-thickness-normal{stroke-width:1px;}#d-5e3c4faa11013504-light .edge-thickness-thick{stroke-width:3.5px;}#d-5e3c4faa11013504-light .edge-pattern-solid{stroke-dasharray:0;}#d-5e3c4faa11013504-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-5e3c4faa11013504-light .edge-pattern-dashed{stroke-dasharray:3;}#d-5e3c4faa11013504-light .edge-pattern-dotted{stroke-dasharray:2;}#d-5e3c4faa11013504-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light .marker.cross{stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-5e3c4faa11013504-light p{margin:0;}#d-5e3c4faa11013504-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-5e3c4faa11013504-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-5e3c4faa11013504-light .actor-line{stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-5e3c4faa11013504-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-5e3c4faa11013504-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-5e3c4faa11013504-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-5e3c4faa11013504-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-5e3c4faa11013504-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-5e3c4faa11013504-light .labelText,#d-5e3c4faa11013504-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-5e3c4faa11013504-light .loopText,#d-5e3c4faa11013504-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-5e3c4faa11013504-light .sectionTitle,#d-5e3c4faa11013504-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-5e3c4faa11013504-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-5e3c4faa11013504-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-5e3c4faa11013504-light .noteText,#d-5e3c4faa11013504-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-5e3c4faa11013504-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-5e3c4faa11013504-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-5e3c4faa11013504-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-5e3c4faa11013504-light .actorPopupMenu{position:absolute;}#d-5e3c4faa11013504-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-5e3c4faa11013504-light .actor-man circle,#d-5e3c4faa11013504-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-5e3c4faa11013504-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-5e3c4faa11013504-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-5e3c4faa11013504-light [data-look=\"neo\"].node rect,#d-5e3c4faa11013504-light [data-look=\"neo\"].cluster rect,#d-5e3c4faa11013504-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-5e3c4faa11013504-light [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-5e3c4faa11013504-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-5e3c4faa11013504-light [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-5e3c4faa11013504-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-5e3c4faa11013504-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-5e3c4faa11013504-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-5e3c4faa11013504-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-5e3c4faa11013504-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"183\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Initialize iterator</text><line x1=\"80.5\" y1=\"115\" x2=\"286\" y2=\"115\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"User\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"291\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">fastrandn() -&gt; startBucket</text><path d=\"M 291,165 C 351,155 351,195 291,185\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Runtime\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"291\" y=\"210\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">fastrandn() -&gt; slotOffset</text><path d=\"M 291,245 C 351,235 351,275 291,265\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"Runtime\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"491\" y=\"290\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Begin iteration from (startBucket, slotOffset)</text><line x1=\"291\" y1=\"325\" x2=\"690\" y2=\"325\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"Runtime\" data-to=\"Buckets\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"388\" y=\"340\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Keys yielded in randomized sequence</text><line x1=\"693\" y1=\"375\" x2=\"83.5\" y2=\"375\" class=\"messageLine1\" data-et=\"message\" data-id=\"i4\" data-from=\"Buckets\" data-to=\"User\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-5e3c4faa11013504-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 869px;\" viewBox=\"-50 -10 869 481\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"619\" y=\"395\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Buckets\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"694\" y=\"427.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"694\" dy=\"0\">Hash Buckets</tspan></text></g><g><rect x=\"209\" y=\"395\" fill=\"#eaeaea\" stroke=\"#666\" width=\"162\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"290\" y=\"427.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"290\" dy=\"0\">runtime.mapiterinit</tspan></text></g><g><rect x=\"0\" y=\"395\" fill=\"#eaeaea\" stroke=\"#666\" width=\"159\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"79.5\" y=\"427.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"79.5\" dy=\"0\">for k, v := range m</tspan></text></g><g><line id=\"d-5e3c4faa11013504-dark-actor2\" x1=\"694\" y1=\"65\" x2=\"694\" y2=\"395\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Buckets\" data-et=\"life-line\" data-id=\"Buckets\"></line><g id=\"d-5e3c4faa11013504-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Buckets\"><rect x=\"619\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Buckets\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"694\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"694\" dy=\"0\">Hash Buckets</tspan></text></g></g><g><line id=\"d-5e3c4faa11013504-dark-actor1\" x1=\"290\" y1=\"65\" x2=\"290\" y2=\"395\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Runtime\" data-et=\"life-line\" data-id=\"Runtime\"></line><g id=\"d-5e3c4faa11013504-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Runtime\"><rect x=\"209\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"162\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"290\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"290\" dy=\"0\">runtime.mapiterinit</tspan></text></g></g><g><line id=\"d-5e3c4faa11013504-dark-actor0\" x1=\"79.5\" y1=\"65\" x2=\"79.5\" y2=\"395\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"User\" data-et=\"life-line\" data-id=\"User\"></line><g id=\"d-5e3c4faa11013504-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"User\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"159\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"79.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"79.5\" dy=\"0\">for k, v := range m</tspan></text></g></g><style>#d-5e3c4faa11013504-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-5e3c4faa11013504-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-5e3c4faa11013504-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-5e3c4faa11013504-dark .error-icon{fill:rgb(21, 22, 23);}#d-5e3c4faa11013504-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-5e3c4faa11013504-dark .edge-thickness-normal{stroke-width:1px;}#d-5e3c4faa11013504-dark .edge-thickness-thick{stroke-width:3.5px;}#d-5e3c4faa11013504-dark .edge-pattern-solid{stroke-dasharray:0;}#d-5e3c4faa11013504-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-5e3c4faa11013504-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-5e3c4faa11013504-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-5e3c4faa11013504-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-5e3c4faa11013504-dark p{margin:0;}#d-5e3c4faa11013504-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-5e3c4faa11013504-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-5e3c4faa11013504-dark .actor-line{stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-5e3c4faa11013504-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-5e3c4faa11013504-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-5e3c4faa11013504-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-5e3c4faa11013504-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-5e3c4faa11013504-dark .labelText,#d-5e3c4faa11013504-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-5e3c4faa11013504-dark .loopText,#d-5e3c4faa11013504-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-5e3c4faa11013504-dark .sectionTitle,#d-5e3c4faa11013504-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-5e3c4faa11013504-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-5e3c4faa11013504-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-5e3c4faa11013504-dark .noteText,#d-5e3c4faa11013504-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-5e3c4faa11013504-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-5e3c4faa11013504-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-5e3c4faa11013504-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-5e3c4faa11013504-dark .actorPopupMenu{position:absolute;}#d-5e3c4faa11013504-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-5e3c4faa11013504-dark .actor-man circle,#d-5e3c4faa11013504-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-5e3c4faa11013504-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-5e3c4faa11013504-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-5e3c4faa11013504-dark [data-look=\"neo\"].node rect,#d-5e3c4faa11013504-dark [data-look=\"neo\"].cluster rect,#d-5e3c4faa11013504-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-5e3c4faa11013504-dark [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-5e3c4faa11013504-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-5e3c4faa11013504-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-5e3c4faa11013504-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-5e3c4faa11013504-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-5e3c4faa11013504-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-5e3c4faa11013504-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-5e3c4faa11013504-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-5e3c4faa11013504-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-5e3c4faa11013504-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"183\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Initialize iterator</text><line x1=\"80.5\" y1=\"115\" x2=\"286\" y2=\"115\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"User\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"291\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">fastrandn() -&gt; startBucket</text><path d=\"M 291,165 C 351,155 351,195 291,185\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Runtime\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"291\" y=\"210\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">fastrandn() -&gt; slotOffset</text><path d=\"M 291,245 C 351,235 351,275 291,265\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"Runtime\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"491\" y=\"290\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Begin iteration from (startBucket, slotOffset)</text><line x1=\"291\" y1=\"325\" x2=\"690\" y2=\"325\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"Runtime\" data-to=\"Buckets\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"388\" y=\"340\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Keys yielded in randomized sequence</text><line x1=\"693\" y1=\"375\" x2=\"83.5\" y2=\"375\" class=\"messageLine1\" data-et=\"message\" data-id=\"i4\" data-from=\"Buckets\" data-to=\"User\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-5e3c4faa11013504-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>Because <code>fastrandn</code> produces a new starting point on every loop invocation, two consecutive <code>for ... range</code> loops over the exact same map in the same process can yield keys in completely different sequences.</p>\n<p>In modern Go runtimes using Swiss Tables, the same principle holds: the iterator seeds a random group and slot offset before probing control bytes.</p>\n<h2 id=\"why-the-runtime-does-this\">Why the Runtime Does This<a class=\"h-anchor\" href=\"#why-the-runtime-does-this\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Before Go 1.0, map iteration walked buckets sequentially from bucket 0. The order was not technically guaranteed, but it was deterministic for identical insertion patterns.</p>\n<p>This created a widespread failure mode: developers wrote unit tests that accidentally relied on hash layout order. When the hash seed changed, when map capacity resized, or when code ran on a different CPU architecture, tests failed unpredictably across environments.</p>\n<p>The Go authors added deliberate iteration randomization so that code depending on map order fails immediately and visibly in local development rather than in production.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"ed2898a8787905dc\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-ed2898a8787905dc-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 586px;\" viewBox=\"0 0 586 323\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-ed2898a8787905dc-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-ed2898a8787905dc-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-ed2898a8787905dc-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-ed2898a8787905dc-light .error-icon{fill:rgb(255, 255, 255);}#d-ed2898a8787905dc-light .error-text{fill:#000000;stroke:#000000;}#d-ed2898a8787905dc-light .edge-thickness-normal{stroke-width:1px;}#d-ed2898a8787905dc-light .edge-thickness-thick{stroke-width:3.5px;}#d-ed2898a8787905dc-light .edge-pattern-solid{stroke-dasharray:0;}#d-ed2898a8787905dc-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-ed2898a8787905dc-light .edge-pattern-dashed{stroke-dasharray:3;}#d-ed2898a8787905dc-light .edge-pattern-dotted{stroke-dasharray:2;}#d-ed2898a8787905dc-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-ed2898a8787905dc-light .marker.cross{stroke:rgb(44, 46, 48);}#d-ed2898a8787905dc-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-ed2898a8787905dc-light p{margin:0;}#d-ed2898a8787905dc-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-ed2898a8787905dc-light .cluster-label text{fill:#000000;}#d-ed2898a8787905dc-light .cluster-label span{color:#000000;}#d-ed2898a8787905dc-light .cluster-label span p{background-color:transparent;}#d-ed2898a8787905dc-light .label text,#d-ed2898a8787905dc-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-ed2898a8787905dc-light .node rect,#d-ed2898a8787905dc-light .node circle,#d-ed2898a8787905dc-light .node ellipse,#d-ed2898a8787905dc-light .node polygon,#d-ed2898a8787905dc-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-ed2898a8787905dc-light .rough-node .label text,#d-ed2898a8787905dc-light .node .label text,#d-ed2898a8787905dc-light .image-shape .label,#d-ed2898a8787905dc-light .icon-shape .label{text-anchor:middle;}#d-ed2898a8787905dc-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-ed2898a8787905dc-light .rough-node .label,#d-ed2898a8787905dc-light .node .label,#d-ed2898a8787905dc-light .image-shape .label,#d-ed2898a8787905dc-light .icon-shape .label{text-align:center;}#d-ed2898a8787905dc-light .node.clickable{cursor:pointer;}#d-ed2898a8787905dc-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-ed2898a8787905dc-light .arrowheadPath{fill:#000000;}#d-ed2898a8787905dc-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-ed2898a8787905dc-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-ed2898a8787905dc-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-ed2898a8787905dc-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-ed2898a8787905dc-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-ed2898a8787905dc-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-ed2898a8787905dc-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-ed2898a8787905dc-light .cluster text{fill:#000000;}#d-ed2898a8787905dc-light .cluster span{color:#000000;}#d-ed2898a8787905dc-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-ed2898a8787905dc-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-ed2898a8787905dc-light rect.text{fill:none;stroke-width:0;}#d-ed2898a8787905dc-light .icon-shape,#d-ed2898a8787905dc-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-ed2898a8787905dc-light .icon-shape p,#d-ed2898a8787905dc-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-ed2898a8787905dc-light .icon-shape .label rect,#d-ed2898a8787905dc-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-ed2898a8787905dc-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-ed2898a8787905dc-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-ed2898a8787905dc-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-ed2898a8787905dc-light [data-look=\"neo\"].node rect,#d-ed2898a8787905dc-light [data-look=\"neo\"].cluster rect,#d-ed2898a8787905dc-light [data-look=\"neo\"].node polygon{stroke:url(#d-ed2898a8787905dc-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-ed2898a8787905dc-light [data-look=\"neo\"].node path{stroke:url(#d-ed2898a8787905dc-light-gradient);stroke-width:1px;}#d-ed2898a8787905dc-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-ed2898a8787905dc-light [data-look=\"neo\"].node circle{stroke:url(#d-ed2898a8787905dc-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-ed2898a8787905dc-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-ed2898a8787905dc-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-ed2898a8787905dc-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-ed2898a8787905dc-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,77L138,81.167C138,85.333,138,93.667,138,101.333C138,109,138,116,138,119.5L138,123\" id=\"d-ed2898a8787905dc-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo3N30seyJ4IjoxMzgsInkiOjEwMn0seyJ4IjoxMzgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-light_flowchart-v2-pointEnd)\"></path><path d=\"M138,196L138,200.167C138,204.333,138,212.667,138,220.333C138,228,138,235,138,238.5L138,242\" id=\"d-ed2898a8787905dc-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxOTZ9LHsieCI6MTM4LCJ5IjoyMjF9LHsieCI6MTM4LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-light_flowchart-v2-pointEnd)\"></path><path d=\"M448,77L448,81.167C448,85.333,448,93.667,448,101.333C448,109,448,116,448,119.5L448,123\" id=\"d-ed2898a8787905dc-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NDQ4LCJ5Ijo3N30seyJ4Ijo0NDgsInkiOjEwMn0seyJ4Ijo0NDgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-light_flowchart-v2-pointEnd)\"></path><path d=\"M448,196L448,200.167C448,204.333,448,212.667,448,220.333C448,228,448,235,448,238.5L448,242\" id=\"d-ed2898a8787905dc-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6NDQ4LCJ5IjoxOTZ9LHsieCI6NDQ4LCJ5IjoyMjF9LHsieCI6NDQ4LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-ed2898a8787905dc-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Deterministic hash iteration (pre-Go 1.0)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-ed2898a8787905dc-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Tests accidentally rely on hash layout</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-ed2898a8787905dc-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(138, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Silent breakages on map resize or architecture changes</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-ed2898a8787905dc-light-flowchart-D-4\" data-look=\"classic\" transform=\"translate(448, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Runtime randomization (mapiterinit fastrandn)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-ed2898a8787905dc-light-flowchart-E-5\" data-look=\"classic\" transform=\"translate(448, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Order dependencies break immediately in dev</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-ed2898a8787905dc-light-flowchart-F-7\" data-look=\"classic\" transform=\"translate(448, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Resilient, deterministic application code</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-ed2898a8787905dc-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-ed2898a8787905dc-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-ed2898a8787905dc-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-ed2898a8787905dc-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 586px;\" viewBox=\"0 0 586 323\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-ed2898a8787905dc-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-ed2898a8787905dc-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-ed2898a8787905dc-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-ed2898a8787905dc-dark .error-icon{fill:rgb(21, 22, 23);}#d-ed2898a8787905dc-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-ed2898a8787905dc-dark .edge-thickness-normal{stroke-width:1px;}#d-ed2898a8787905dc-dark .edge-thickness-thick{stroke-width:3.5px;}#d-ed2898a8787905dc-dark .edge-pattern-solid{stroke-dasharray:0;}#d-ed2898a8787905dc-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-ed2898a8787905dc-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-ed2898a8787905dc-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-ed2898a8787905dc-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-ed2898a8787905dc-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-ed2898a8787905dc-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-ed2898a8787905dc-dark p{margin:0;}#d-ed2898a8787905dc-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-ed2898a8787905dc-dark .cluster-label text{fill:#eae9e8;}#d-ed2898a8787905dc-dark .cluster-label span{color:#eae9e8;}#d-ed2898a8787905dc-dark .cluster-label span p{background-color:transparent;}#d-ed2898a8787905dc-dark .label text,#d-ed2898a8787905dc-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-ed2898a8787905dc-dark .node rect,#d-ed2898a8787905dc-dark .node circle,#d-ed2898a8787905dc-dark .node ellipse,#d-ed2898a8787905dc-dark .node polygon,#d-ed2898a8787905dc-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-ed2898a8787905dc-dark .rough-node .label text,#d-ed2898a8787905dc-dark .node .label text,#d-ed2898a8787905dc-dark .image-shape .label,#d-ed2898a8787905dc-dark .icon-shape .label{text-anchor:middle;}#d-ed2898a8787905dc-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-ed2898a8787905dc-dark .rough-node .label,#d-ed2898a8787905dc-dark .node .label,#d-ed2898a8787905dc-dark .image-shape .label,#d-ed2898a8787905dc-dark .icon-shape .label{text-align:center;}#d-ed2898a8787905dc-dark .node.clickable{cursor:pointer;}#d-ed2898a8787905dc-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-ed2898a8787905dc-dark .arrowheadPath{fill:#eae9e8;}#d-ed2898a8787905dc-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-ed2898a8787905dc-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-ed2898a8787905dc-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-ed2898a8787905dc-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-ed2898a8787905dc-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-ed2898a8787905dc-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-ed2898a8787905dc-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-ed2898a8787905dc-dark .cluster text{fill:#eae9e8;}#d-ed2898a8787905dc-dark .cluster span{color:#eae9e8;}#d-ed2898a8787905dc-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-ed2898a8787905dc-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-ed2898a8787905dc-dark rect.text{fill:none;stroke-width:0;}#d-ed2898a8787905dc-dark .icon-shape,#d-ed2898a8787905dc-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-ed2898a8787905dc-dark .icon-shape p,#d-ed2898a8787905dc-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-ed2898a8787905dc-dark .icon-shape .label rect,#d-ed2898a8787905dc-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-ed2898a8787905dc-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-ed2898a8787905dc-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-ed2898a8787905dc-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-ed2898a8787905dc-dark [data-look=\"neo\"].node rect,#d-ed2898a8787905dc-dark [data-look=\"neo\"].cluster rect,#d-ed2898a8787905dc-dark [data-look=\"neo\"].node polygon{stroke:url(#d-ed2898a8787905dc-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-ed2898a8787905dc-dark [data-look=\"neo\"].node path{stroke:url(#d-ed2898a8787905dc-dark-gradient);stroke-width:1px;}#d-ed2898a8787905dc-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-ed2898a8787905dc-dark [data-look=\"neo\"].node circle{stroke:url(#d-ed2898a8787905dc-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-ed2898a8787905dc-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-ed2898a8787905dc-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-ed2898a8787905dc-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ed2898a8787905dc-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-ed2898a8787905dc-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,77L138,81.167C138,85.333,138,93.667,138,101.333C138,109,138,116,138,119.5L138,123\" id=\"d-ed2898a8787905dc-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo3N30seyJ4IjoxMzgsInkiOjEwMn0seyJ4IjoxMzgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-dark_flowchart-v2-pointEnd)\"></path><path d=\"M138,196L138,200.167C138,204.333,138,212.667,138,220.333C138,228,138,235,138,238.5L138,242\" id=\"d-ed2898a8787905dc-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxOTZ9LHsieCI6MTM4LCJ5IjoyMjF9LHsieCI6MTM4LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-dark_flowchart-v2-pointEnd)\"></path><path d=\"M448,77L448,81.167C448,85.333,448,93.667,448,101.333C448,109,448,116,448,119.5L448,123\" id=\"d-ed2898a8787905dc-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NDQ4LCJ5Ijo3N30seyJ4Ijo0NDgsInkiOjEwMn0seyJ4Ijo0NDgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-dark_flowchart-v2-pointEnd)\"></path><path d=\"M448,196L448,200.167C448,204.333,448,212.667,448,220.333C448,228,448,235,448,238.5L448,242\" id=\"d-ed2898a8787905dc-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6NDQ4LCJ5IjoxOTZ9LHsieCI6NDQ4LCJ5IjoyMjF9LHsieCI6NDQ4LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-ed2898a8787905dc-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-ed2898a8787905dc-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Deterministic hash iteration (pre-Go 1.0)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-ed2898a8787905dc-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Tests accidentally rely on hash layout</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-ed2898a8787905dc-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(138, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Silent breakages on map resize or architecture changes</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-ed2898a8787905dc-dark-flowchart-D-4\" data-look=\"classic\" transform=\"translate(448, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Runtime randomization (mapiterinit fastrandn)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-ed2898a8787905dc-dark-flowchart-E-5\" data-look=\"classic\" transform=\"translate(448, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Order dependencies break immediately in dev</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-ed2898a8787905dc-dark-flowchart-F-7\" data-look=\"classic\" transform=\"translate(448, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Resilient, deterministic application code</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-ed2898a8787905dc-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-ed2898a8787905dc-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-ed2898a8787905dc-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"how-to-iterate-deterministically\">How to Iterate Deterministically<a class=\"h-anchor\" href=\"#how-to-iterate-deterministically\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When you require stable iteration (for example, generating JSON payloads, writing deterministic serialization formats, or creating reproducible test assertions), extract the keys, sort them, and iterate over the sorted slice:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">slices</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    counts </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">        \"amber\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:  </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">12</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">        \"cobalt\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">        \"bronze\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">9</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">        \"zinc\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:   </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Allocate exact capacity to avoid slice reallocation</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    keys </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">([]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(counts))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> k </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> counts {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        keys </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> append</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(keys, k)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Sort keys in place with slices.Sort</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    slices.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sort</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(keys)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, k </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> keys {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%d\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, k, counts[k])</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>In Go 1.23 and later, you can also collect keys using the standard <code>maps.Keys</code> iterator helper:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">keys </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> slices.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Collect</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(maps.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Keys</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(counts))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">slices.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sort</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(keys)</span></span></code></pre></div>\n<h2 id=\"implementation-rules\">Implementation Rules<a class=\"h-anchor\" href=\"#implementation-rules\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Never assert on map output directly in tests</strong>: Comparing <code>fmt.Sprint(m)</code> against an expected string will produce flaky tests. Use <code>reflect.DeepEqual</code> or <code>google/go-cmp</code> for map equality.</li>\n<li><strong>Pre-allocate key slices</strong>: When collecting map keys for sorting, pass <code>len(m)</code> as slice capacity (<code>make([]K, 0, len(m))</code>) to eliminate heap reallocations during collection.</li>\n<li><strong>Map hashing is per-process seeded</strong>: The runtime initializes a global hash seed at startup via AES-NI / hardware entropy. You cannot reproduce map hash distributions across separate program runs.</li>\n</ol>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2025-11-20:books/database-internals",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Database Internals",
      "content_text": "",
      "date_published": "2025-11-20T00:00:00.000Z",
      "tags": [
        "books"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-floating-point-tolerance-testing/",
      "url": "https://ashwingopalsamy.in/blog/go-floating-point-tolerance-testing/",
      "title": "Floating-Point Tolerance Testing in Go",
      "content_text": "Why IEEE-754 binary floating point requires relative and absolute tolerance in tests, and how to assert floats cleanly in Go.",
      "date_published": "2025-08-17T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>In Go, comparing floating-point numbers (<code>float32</code>, <code>float64</code>) with <code>==</code> in unit tests is a common source of non-deterministic test failures.</p>\n<p>Because IEEE-754 floating-point numbers represent values using base-2 fractions (<p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>1</mn><mi mathvariant=\"normal\">/</mi><mn>2</mn><mo separator=\"true\">,</mo><mn>1</mn><mi mathvariant=\"normal\">/</mi><mn>4</mn><mo separator=\"true\">,</mo><mn>1</mn><mi mathvariant=\"normal\">/</mi><mn>8</mn><mo separator=\"true\">,</mo><mo>…</mo></mrow><annotation encoding=\"application/x-tex\">1/2, 1/4, 1/8, \\dots</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord\">1/2</span><span class=\"mpunct\">,</span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"mord\">1/4</span><span class=\"mpunct\">,</span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"mord\">1/8</span><span class=\"mpunct\">,</span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"minner\">…</span></span></span></span></span></p>), common decimal fractions like <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>0.1</mn></mrow><annotation encoding=\"application/x-tex\">0.1</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">0.1</span></span></span></span></span></p> and <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>0.2</mn></mrow><annotation encoding=\"application/x-tex\">0.2</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">0.2</span></span></span></span></span></p> cannot be represented exactly in finite binary. They become repeating binary expansions:</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><msub><mn>0.1</mn><mn>10</mn></msub><mo>=</mo><mn>0.0001100110011</mn><msub><mo>…</mo><mn>2</mn></msub></mrow><annotation encoding=\"application/x-tex\">0.1_{10} = 0.0001100110011\\dots_2</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.7944em;vertical-align:-0.15em;\"></span><span class=\"mord\">0.</span><span class=\"mord\"><span class=\"mord\">1</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">10</span></span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em;\"><span></span></span></span></span></span></span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.7944em;vertical-align:-0.15em;\"></span><span class=\"mord\">0.0001100110011</span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"minner\"><span class=\"minner\">…</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em;\"><span></span></span></span></span></span></span></span></span></span></span></div>\n<p>Evaluating <code>0.1 + 0.2</code> in 64-bit IEEE-754 yields <code>0.300000000000000044408920985006...</code>, while <code>0.3</code> is stored as <code>0.299999999999999988897769753748...</code>. Direct equality <code>0.1 + 0.2 == 0.3</code> evaluates to <code>false</code>.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"89d997b55c309d8e\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-89d997b55c309d8e-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 957.734375px;\" viewBox=\"0 0 957.734375 165\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-89d997b55c309d8e-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-89d997b55c309d8e-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-89d997b55c309d8e-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-89d997b55c309d8e-light .error-icon{fill:rgb(255, 255, 255);}#d-89d997b55c309d8e-light .error-text{fill:#000000;stroke:#000000;}#d-89d997b55c309d8e-light .edge-thickness-normal{stroke-width:1px;}#d-89d997b55c309d8e-light .edge-thickness-thick{stroke-width:3.5px;}#d-89d997b55c309d8e-light .edge-pattern-solid{stroke-dasharray:0;}#d-89d997b55c309d8e-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-89d997b55c309d8e-light .edge-pattern-dashed{stroke-dasharray:3;}#d-89d997b55c309d8e-light .edge-pattern-dotted{stroke-dasharray:2;}#d-89d997b55c309d8e-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-89d997b55c309d8e-light .marker.cross{stroke:rgb(44, 46, 48);}#d-89d997b55c309d8e-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-89d997b55c309d8e-light p{margin:0;}#d-89d997b55c309d8e-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-89d997b55c309d8e-light .cluster-label text{fill:#000000;}#d-89d997b55c309d8e-light .cluster-label span{color:#000000;}#d-89d997b55c309d8e-light .cluster-label span p{background-color:transparent;}#d-89d997b55c309d8e-light .label text,#d-89d997b55c309d8e-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-89d997b55c309d8e-light .node rect,#d-89d997b55c309d8e-light .node circle,#d-89d997b55c309d8e-light .node ellipse,#d-89d997b55c309d8e-light .node polygon,#d-89d997b55c309d8e-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-89d997b55c309d8e-light .rough-node .label text,#d-89d997b55c309d8e-light .node .label text,#d-89d997b55c309d8e-light .image-shape .label,#d-89d997b55c309d8e-light .icon-shape .label{text-anchor:middle;}#d-89d997b55c309d8e-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-89d997b55c309d8e-light .rough-node .label,#d-89d997b55c309d8e-light .node .label,#d-89d997b55c309d8e-light .image-shape .label,#d-89d997b55c309d8e-light .icon-shape .label{text-align:center;}#d-89d997b55c309d8e-light .node.clickable{cursor:pointer;}#d-89d997b55c309d8e-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-89d997b55c309d8e-light .arrowheadPath{fill:#000000;}#d-89d997b55c309d8e-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-89d997b55c309d8e-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-89d997b55c309d8e-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-89d997b55c309d8e-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-89d997b55c309d8e-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-89d997b55c309d8e-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-89d997b55c309d8e-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-89d997b55c309d8e-light .cluster text{fill:#000000;}#d-89d997b55c309d8e-light .cluster span{color:#000000;}#d-89d997b55c309d8e-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-89d997b55c309d8e-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-89d997b55c309d8e-light rect.text{fill:none;stroke-width:0;}#d-89d997b55c309d8e-light .icon-shape,#d-89d997b55c309d8e-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-89d997b55c309d8e-light .icon-shape p,#d-89d997b55c309d8e-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-89d997b55c309d8e-light .icon-shape .label rect,#d-89d997b55c309d8e-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-89d997b55c309d8e-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-89d997b55c309d8e-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-89d997b55c309d8e-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-89d997b55c309d8e-light [data-look=\"neo\"].node rect,#d-89d997b55c309d8e-light [data-look=\"neo\"].cluster rect,#d-89d997b55c309d8e-light [data-look=\"neo\"].node polygon{stroke:url(#d-89d997b55c309d8e-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-89d997b55c309d8e-light [data-look=\"neo\"].node path{stroke:url(#d-89d997b55c309d8e-light-gradient);stroke-width:1px;}#d-89d997b55c309d8e-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-89d997b55c309d8e-light [data-look=\"neo\"].node circle{stroke:url(#d-89d997b55c309d8e-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-89d997b55c309d8e-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-89d997b55c309d8e-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-89d997b55c309d8e-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-89d997b55c309d8e-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M221.844,32.75L226.01,32.75C230.177,32.75,238.51,32.75,246.177,32.75C253.844,32.75,260.844,32.75,264.344,32.75L267.844,32.75\" id=\"d-89d997b55c309d8e-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjIxLjg0Mzc1LCJ5IjozMi43NX0seyJ4IjoyNDYuODQzNzUsInkiOjMyLjc1fSx7IngiOjI3MS44NDM3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-light_flowchart-v2-pointEnd)\"></path><path d=\"M205.867,132.25L212.697,132.25C219.526,132.25,233.185,132.25,243.716,132.25C254.247,132.25,261.651,132.25,265.353,132.25L269.055,132.25\" id=\"d-89d997b55c309d8e-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjA1Ljg2NzE4NzUsInkiOjEzMi4yNX0seyJ4IjoyNDYuODQzNzUsInkiOjEzMi4yNX0seyJ4IjoyNzMuMDU0Njg3NSwieSI6MTMyLjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-light_flowchart-v2-pointEnd)\"></path><path d=\"M501.766,32.75L505.932,32.75C510.099,32.75,518.432,32.75,530.253,36.657C542.075,40.564,557.383,48.378,565.038,52.285L572.692,56.192\" id=\"d-89d997b55c309d8e-light-L_B_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_E_0\" data-points=\"W3sieCI6NTAxLjc2NTYyNSwieSI6MzIuNzV9LHsieCI6NTI2Ljc2NTYyNSwieSI6MzIuNzV9LHsieCI6NTc2LjI1NTE3MDc0NDAwMzQsInkiOjU4LjAxMDQ1NDI1NTk5NjYwNn1d\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-light_flowchart-v2-pointEnd)\"></path><path d=\"M500.555,132.25L504.923,132.25C509.292,132.25,518.029,132.25,530.052,128.343C542.075,124.436,557.383,116.622,565.038,112.715L572.692,108.808\" id=\"d-89d997b55c309d8e-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NTAwLjU1NDY4NzUsInkiOjEzMi4yNX0seyJ4Ijo1MjYuNzY1NjI1LCJ5IjoxMzIuMjV9LHsieCI6NTc2LjI1NTE3MDc0NDAwMzQsInkiOjEwNi45ODk1NDU3NDQwMDM0fV0=\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-light_flowchart-v2-pointEnd)\"></path><path d=\"M696.703,82.5L700.87,82.5C705.036,82.5,713.37,82.5,721.036,82.5C728.703,82.5,735.703,82.5,739.203,82.5L742.703,82.5\" id=\"d-89d997b55c309d8e-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6Njk2LjcwMzEyNSwieSI6ODIuNX0seyJ4Ijo3MjEuNzAzMTI1LCJ5Ijo4Mi41fSx7IngiOjc0Ni43MDMxMjUsInkiOjgyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-89d997b55c309d8e-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(114.921875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-106.921875\" y=\"-24.75\" width=\"213.84375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-76.921875, -9.75)\"><rect></rect><foreignObject width=\"153.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.1 + 0.2 (Binary Float64)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-89d997b55c309d8e-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(386.8046875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.9609375\" y=\"-24.75\" width=\"229.921875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.9609375, -9.75)\"><rect></rect><foreignObject width=\"169.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.300000000000000044...</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-89d997b55c309d8e-light-flowchart-C-2\" data-look=\"classic\" transform=\"translate(114.921875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.9453125\" y=\"-24.75\" width=\"181.890625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.9453125, -9.75)\"><rect></rect><foreignObject width=\"121.890625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.3 (Binary Float64)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-89d997b55c309d8e-light-flowchart-D-3\" data-look=\"classic\" transform=\"translate(386.8046875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.75\" y=\"-24.75\" width=\"227.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.75, -9.75)\"><rect></rect><foreignObject width=\"167.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.299999999999999988...</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-89d997b55c309d8e-light-flowchart-E-5\" data-look=\"classic\" transform=\"translate(624.234375, 82.5)\"><polygon points=\"72.46875,0 144.9375,-72.46875 72.46875,-144.9375 0,-72.46875\" class=\"label-container\" transform=\"translate(-71.96875, 72.46875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-47.71875, -9.75)\"><rect></rect><foreignObject width=\"95.4375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>== Comparison</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-89d997b55c309d8e-light-flowchart-F-9\" data-look=\"classic\" transform=\"translate(848.21875, 82.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.515625\" y=\"-24.75\" width=\"203.03125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.515625, -9.75)\"><rect></rect><foreignObject width=\"143.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>false (Delta = 5.55e-17)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-89d997b55c309d8e-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-89d997b55c309d8e-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-89d997b55c309d8e-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-89d997b55c309d8e-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 957.734375px;\" viewBox=\"0 0 957.734375 165\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-89d997b55c309d8e-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-89d997b55c309d8e-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-89d997b55c309d8e-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-89d997b55c309d8e-dark .error-icon{fill:rgb(21, 22, 23);}#d-89d997b55c309d8e-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-89d997b55c309d8e-dark .edge-thickness-normal{stroke-width:1px;}#d-89d997b55c309d8e-dark .edge-thickness-thick{stroke-width:3.5px;}#d-89d997b55c309d8e-dark .edge-pattern-solid{stroke-dasharray:0;}#d-89d997b55c309d8e-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-89d997b55c309d8e-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-89d997b55c309d8e-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-89d997b55c309d8e-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-89d997b55c309d8e-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-89d997b55c309d8e-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-89d997b55c309d8e-dark p{margin:0;}#d-89d997b55c309d8e-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-89d997b55c309d8e-dark .cluster-label text{fill:#eae9e8;}#d-89d997b55c309d8e-dark .cluster-label span{color:#eae9e8;}#d-89d997b55c309d8e-dark .cluster-label span p{background-color:transparent;}#d-89d997b55c309d8e-dark .label text,#d-89d997b55c309d8e-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-89d997b55c309d8e-dark .node rect,#d-89d997b55c309d8e-dark .node circle,#d-89d997b55c309d8e-dark .node ellipse,#d-89d997b55c309d8e-dark .node polygon,#d-89d997b55c309d8e-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-89d997b55c309d8e-dark .rough-node .label text,#d-89d997b55c309d8e-dark .node .label text,#d-89d997b55c309d8e-dark .image-shape .label,#d-89d997b55c309d8e-dark .icon-shape .label{text-anchor:middle;}#d-89d997b55c309d8e-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-89d997b55c309d8e-dark .rough-node .label,#d-89d997b55c309d8e-dark .node .label,#d-89d997b55c309d8e-dark .image-shape .label,#d-89d997b55c309d8e-dark .icon-shape .label{text-align:center;}#d-89d997b55c309d8e-dark .node.clickable{cursor:pointer;}#d-89d997b55c309d8e-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-89d997b55c309d8e-dark .arrowheadPath{fill:#eae9e8;}#d-89d997b55c309d8e-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-89d997b55c309d8e-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-89d997b55c309d8e-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-89d997b55c309d8e-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-89d997b55c309d8e-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-89d997b55c309d8e-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-89d997b55c309d8e-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-89d997b55c309d8e-dark .cluster text{fill:#eae9e8;}#d-89d997b55c309d8e-dark .cluster span{color:#eae9e8;}#d-89d997b55c309d8e-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-89d997b55c309d8e-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-89d997b55c309d8e-dark rect.text{fill:none;stroke-width:0;}#d-89d997b55c309d8e-dark .icon-shape,#d-89d997b55c309d8e-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-89d997b55c309d8e-dark .icon-shape p,#d-89d997b55c309d8e-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-89d997b55c309d8e-dark .icon-shape .label rect,#d-89d997b55c309d8e-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-89d997b55c309d8e-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-89d997b55c309d8e-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-89d997b55c309d8e-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-89d997b55c309d8e-dark [data-look=\"neo\"].node rect,#d-89d997b55c309d8e-dark [data-look=\"neo\"].cluster rect,#d-89d997b55c309d8e-dark [data-look=\"neo\"].node polygon{stroke:url(#d-89d997b55c309d8e-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-89d997b55c309d8e-dark [data-look=\"neo\"].node path{stroke:url(#d-89d997b55c309d8e-dark-gradient);stroke-width:1px;}#d-89d997b55c309d8e-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-89d997b55c309d8e-dark [data-look=\"neo\"].node circle{stroke:url(#d-89d997b55c309d8e-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-89d997b55c309d8e-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-89d997b55c309d8e-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-89d997b55c309d8e-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-89d997b55c309d8e-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-89d997b55c309d8e-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M221.844,32.75L226.01,32.75C230.177,32.75,238.51,32.75,246.177,32.75C253.844,32.75,260.844,32.75,264.344,32.75L267.844,32.75\" id=\"d-89d997b55c309d8e-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjIxLjg0Mzc1LCJ5IjozMi43NX0seyJ4IjoyNDYuODQzNzUsInkiOjMyLjc1fSx7IngiOjI3MS44NDM3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-dark_flowchart-v2-pointEnd)\"></path><path d=\"M205.867,132.25L212.697,132.25C219.526,132.25,233.185,132.25,243.716,132.25C254.247,132.25,261.651,132.25,265.353,132.25L269.055,132.25\" id=\"d-89d997b55c309d8e-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjA1Ljg2NzE4NzUsInkiOjEzMi4yNX0seyJ4IjoyNDYuODQzNzUsInkiOjEzMi4yNX0seyJ4IjoyNzMuMDU0Njg3NSwieSI6MTMyLjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-dark_flowchart-v2-pointEnd)\"></path><path d=\"M501.766,32.75L505.932,32.75C510.099,32.75,518.432,32.75,530.253,36.657C542.075,40.564,557.383,48.378,565.038,52.285L572.692,56.192\" id=\"d-89d997b55c309d8e-dark-L_B_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_E_0\" data-points=\"W3sieCI6NTAxLjc2NTYyNSwieSI6MzIuNzV9LHsieCI6NTI2Ljc2NTYyNSwieSI6MzIuNzV9LHsieCI6NTc2LjI1NTE3MDc0NDAwMzQsInkiOjU4LjAxMDQ1NDI1NTk5NjYwNn1d\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-dark_flowchart-v2-pointEnd)\"></path><path d=\"M500.555,132.25L504.923,132.25C509.292,132.25,518.029,132.25,530.052,128.343C542.075,124.436,557.383,116.622,565.038,112.715L572.692,108.808\" id=\"d-89d997b55c309d8e-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NTAwLjU1NDY4NzUsInkiOjEzMi4yNX0seyJ4Ijo1MjYuNzY1NjI1LCJ5IjoxMzIuMjV9LHsieCI6NTc2LjI1NTE3MDc0NDAwMzQsInkiOjEwNi45ODk1NDU3NDQwMDM0fV0=\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-dark_flowchart-v2-pointEnd)\"></path><path d=\"M696.703,82.5L700.87,82.5C705.036,82.5,713.37,82.5,721.036,82.5C728.703,82.5,735.703,82.5,739.203,82.5L742.703,82.5\" id=\"d-89d997b55c309d8e-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6Njk2LjcwMzEyNSwieSI6ODIuNX0seyJ4Ijo3MjEuNzAzMTI1LCJ5Ijo4Mi41fSx7IngiOjc0Ni43MDMxMjUsInkiOjgyLjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-89d997b55c309d8e-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-89d997b55c309d8e-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(114.921875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-106.921875\" y=\"-24.75\" width=\"213.84375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-76.921875, -9.75)\"><rect></rect><foreignObject width=\"153.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.1 + 0.2 (Binary Float64)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-89d997b55c309d8e-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(386.8046875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.9609375\" y=\"-24.75\" width=\"229.921875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.9609375, -9.75)\"><rect></rect><foreignObject width=\"169.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.300000000000000044...</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-89d997b55c309d8e-dark-flowchart-C-2\" data-look=\"classic\" transform=\"translate(114.921875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-90.9453125\" y=\"-24.75\" width=\"181.890625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-60.9453125, -9.75)\"><rect></rect><foreignObject width=\"121.890625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.3 (Binary Float64)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-89d997b55c309d8e-dark-flowchart-D-3\" data-look=\"classic\" transform=\"translate(386.8046875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.75\" y=\"-24.75\" width=\"227.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.75, -9.75)\"><rect></rect><foreignObject width=\"167.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>0.299999999999999988...</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-89d997b55c309d8e-dark-flowchart-E-5\" data-look=\"classic\" transform=\"translate(624.234375, 82.5)\"><polygon points=\"72.46875,0 144.9375,-72.46875 72.46875,-144.9375 0,-72.46875\" class=\"label-container\" transform=\"translate(-71.96875, 72.46875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-47.71875, -9.75)\"><rect></rect><foreignObject width=\"95.4375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>== Comparison</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-89d997b55c309d8e-dark-flowchart-F-9\" data-look=\"classic\" transform=\"translate(848.21875, 82.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.515625\" y=\"-24.75\" width=\"203.03125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.515625, -9.75)\"><rect></rect><foreignObject width=\"143.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>false (Delta = 5.55e-17)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-89d997b55c309d8e-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-89d997b55c309d8e-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-89d997b55c309d8e-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<blockquote class=\"callout callout-warning\" role=\"note\" aria-label=\"Warning\" data-callout=\"warning\"><p class=\"callout-head\"><span class=\"callout-icon\"><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"></path><path d=\"M12 9v4\"></path><path d=\"M12 17h.01\"></path></svg></span><span class=\"callout-label\">Warning</span></p>\n<p>Never use floating-point types (<code>float32</code> or <code>float64</code>) for currency or financial transactions. In financial systems, use integer cents, micros, or fixed-point decimal packages like <code>shopspring/decimal</code> to prevent cumulative rounding losses.</p>\n</blockquote>\n<h2 id=\"the-flaw-of-purely-absolute-tolerance\">The Flaw of Purely Absolute Tolerance<a class=\"h-anchor\" href=\"#the-flaw-of-purely-absolute-tolerance\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A naive approach to floating-point assertions is checking whether the absolute difference is below a fixed epsilon:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Flawed: purely absolute tolerance</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> almostEqual</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">a</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">b</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">epsilon</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> float64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Abs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">b) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> epsilon</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>This breaks at extreme scales:</p>\n<ol>\n<li><strong>For very large numbers</strong> (e.g. <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><msup><mn>10</mn><mn>15</mn></msup></mrow><annotation encoding=\"application/x-tex\">10^{15}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">15</span></span></span></span></span></span></span></span></span></span></span></span></span></p>): The spacing between representable <code>float64</code> values (the unit in the last place, or ULP) exceeds <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><msup><mn>10</mn><mrow><mo>−</mo><mn>9</mn></mrow></msup></mrow><annotation encoding=\"application/x-tex\">10^{-9}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">9</span></span></span></span></span></span></span></span></span></span></span></span></span></p>. Even a 1-ULP arithmetic difference will fail an absolute threshold of <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><msup><mn>10</mn><mrow><mo>−</mo><mn>9</mn></mrow></msup></mrow><annotation encoding=\"application/x-tex\">10^{-9}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">9</span></span></span></span></span></span></span></span></span></span></span></span></span></p>.</li>\n<li><strong>For very small numbers</strong> (e.g. <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><msup><mn>10</mn><mrow><mo>−</mo><mn>12</mn></mrow></msup></mrow><annotation encoding=\"application/x-tex\">10^{-12}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">12</span></span></span></span></span></span></span></span></span></span></span></span></span></p>): Two values like <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><msup><mn>10</mn><mrow><mo>−</mo><mn>12</mn></mrow></msup></mrow><annotation encoding=\"application/x-tex\">10^{-12}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">12</span></span></span></span></span></span></span></span></span></span></span></span></span></p> and <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>2</mn><mo>×</mo><msup><mn>10</mn><mrow><mo>−</mo><mn>12</mn></mrow></msup></mrow><annotation encoding=\"application/x-tex\">2 \\times 10^{-12}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.7278em;vertical-align:-0.0833em;\"></span><span class=\"mord\">2</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">×</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">12</span></span></span></span></span></span></span></span></span></span></span></span></span></p> differ by <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mn>100</mn><mi mathvariant=\"normal\">%</mi></mrow><annotation encoding=\"application/x-tex\">100%</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8056em;vertical-align:-0.0556em;\"></span><span class=\"mord\">100%</span></span></span></span></span></p>, yet their absolute difference is <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><msup><mn>10</mn><mrow><mo>−</mo><mn>12</mn></mrow></msup><mo>≤</mo><msup><mn>10</mn><mrow><mo>−</mo><mn>9</mn></mrow></msup></mrow><annotation encoding=\"application/x-tex\">10^{-12} \\le 10^{-9}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.9501em;vertical-align:-0.136em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">12</span></span></span></span></span></span></span></span></span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">≤</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.8141em;\"></span><span class=\"mord\">1</span><span class=\"mord\"><span class=\"mord\">0</span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em;\"><span style=\"top:-3.063em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">−</span><span class=\"mord mtight\">9</span></span></span></span></span></span></span></span></span></span></span></span></span></p>, causing the test to incorrectly pass.</li>\n</ol>\n<h2 id=\"robust-comparison-combining-absolute-and-relative-tolerances\">Robust Comparison: Combining Absolute and Relative Tolerances<a class=\"h-anchor\" href=\"#robust-comparison-combining-absolute-and-relative-tolerances\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A robust floating-point comparison combines an absolute epsilon (for values near zero) with a relative tolerance (for scaled magnitudes):</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mi mathvariant=\"normal\">∣</mi><mi>a</mi><mo>−</mo><mi>b</mi><mi mathvariant=\"normal\">∣</mi><mo>≤</mo><mi>max</mi><mo>⁡</mo><mrow><mo fence=\"true\">(</mo><msub><mi>ε</mi><mtext>abs</mtext></msub><mo separator=\"true\">,</mo><mtext> </mtext><msub><mi>ε</mi><mtext>rel</mtext></msub><mo>⋅</mo><mi>max</mi><mo>⁡</mo><mo stretchy=\"false\">(</mo><mi mathvariant=\"normal\">∣</mi><mi>a</mi><mi mathvariant=\"normal\">∣</mi><mo separator=\"true\">,</mo><mtext> </mtext><mi mathvariant=\"normal\">∣</mi><mi>b</mi><mi mathvariant=\"normal\">∣</mi><mo stretchy=\"false\">)</mo><mo fence=\"true\">)</mo></mrow></mrow><annotation encoding=\"application/x-tex\">|a - b| \\le \\max\\left(\\varepsilon_{\\text{abs}},\\ \\varepsilon_{\\text{rel}} \\cdot \\max(|a|,\\ |b|)\\right)</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord\">∣</span><span class=\"mord mathnormal\">a</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">−</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord mathnormal\">b</span><span class=\"mord\">∣</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">≤</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mop\">max</span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"minner\"><span class=\"mopen delimcenter\" style=\"top:0em;\">(</span><span class=\"mord\"><span class=\"mord mathnormal\">ε</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3361em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord text mtight\"><span class=\"mord mtight\">abs</span></span></span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em;\"><span></span></span></span></span></span></span><span class=\"mpunct\">,</span><span class=\"mspace\"> </span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"mord\"><span class=\"mord mathnormal\">ε</span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3361em;\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord text mtight\"><span class=\"mord mtight\">rel</span></span></span></span></span></span><span class=\"vlist-s\">​</span></span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em;\"><span></span></span></span></span></span></span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">⋅</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mop\">max</span><span class=\"mopen\">(</span><span class=\"mord\">∣</span><span class=\"mord mathnormal\">a</span><span class=\"mord\">∣</span><span class=\"mpunct\">,</span><span class=\"mspace\"> </span><span class=\"mspace\" style=\"margin-right:0.1667em;\"></span><span class=\"mord\">∣</span><span class=\"mord mathnormal\">b</span><span class=\"mord\">∣</span><span class=\"mclose\">)</span><span class=\"mclose delimcenter\" style=\"top:0em;\">)</span></span></span></span></span></span></div>\n<p>Here is an allocation-free Go implementation handling <code>NaN</code>, infinities, and signed zeros:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> floatcheck</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">math</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    DefaultAbsTolerance</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">e-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">9</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    DefaultRelTolerance</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">e-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">7</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// InDelta asserts that a and b are within combined relative and absolute bounds</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> InDelta</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">a</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">b</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">absTol</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">relTol</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> float64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> a </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> b {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsNaN</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">||</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsNaN</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(b) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsInf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">||</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">IsInf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(b, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> a </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    diff </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Abs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> b)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> diff </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> absTol {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    maxVal </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Max</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Abs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a), math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Abs</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(b))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> diff </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> relTol</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">maxVal</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"testing-with-googlego-cmp\">Testing with <code>google/go-cmp</code><a class=\"h-anchor\" href=\"#testing-with-googlego-cmp\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In production test suites, avoid writing ad-hoc float equality assertions inside every test loop. Use <code>google/go-cmp</code> with <code>cmpopts.EquateApprox</code>:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> service_test</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">testing</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">github.com/google/go-cmp/cmp</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">github.com/google/go-cmp/cmp/cmpopts</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> SensorReading</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Latitude  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Longitude </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Altitude  </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> TestSensorCalibration</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">t</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">testing</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    got </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> CalculatePosition</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">120.4</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">45.2</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    want </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> SensorReading</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        Latitude:  </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">37.774929</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        Longitude: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">122.419416</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        Altitude:  </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">14.25</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // EquateApprox(fraction, margin) checks:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // |got - want| &lt;= max(margin, fraction * min(|got|, |want|))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    opt </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> cmpopts.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">EquateApprox</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">e-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">6</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">e-</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">9</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> diff </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> cmp.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Diff</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(want, got, opt); diff </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        t.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"CalculatePosition() mismatch (-want +got):</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">\\n%s</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, diff)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"when-direct-equality-is-safe\">When Direct Equality Is Safe<a class=\"h-anchor\" href=\"#when-direct-equality-is-safe\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Direct comparison (<code>a == b</code>) is safe in Go only when:</p>\n<ul>\n<li>Checking against exact bitwise constants without intervening arithmetic (e.g. <code>val == 0.0</code> or checking sentinel constants).</li>\n<li>Checking IEEE special values using standard library guards: <code>math.IsNaN(x)</code> or <code>math.IsInf(x, sign)</code>.</li>\n<li>Replaying identical, deterministic bitwise values copied directly without cross-platform FMA (fused multiply-add) instruction variance.</li>\n</ul>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2025-08-15:books/designing-data-intensive-applications",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Designing Data-Intensive Applications",
      "content_text": "",
      "date_published": "2025-08-15T00:00:00.000Z",
      "tags": [
        "books"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://ashwingopalsamy.in/blog/runes-bytes-and-graphemes-in-go/",
      "url": "https://ashwingopalsamy.in/blog/runes-bytes-and-graphemes-in-go/",
      "title": "Runes, Bytes, and Graphemes in Go",
      "content_text": "Bytes, runes, and grapheme clusters are not the same length: handling Tamil, ZWJ emoji, and text reversal correctly.",
      "date_published": "2025-08-09T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Text processing in Go operates across three distinct layers of abstraction: <strong>bytes</strong>, <strong>runes</strong> (Unicode code points), and <strong>extended grapheme clusters</strong> (user-perceived characters).</p>\n<p>Treating code points or bytes as visible characters corrupts non-Latin scripts (like Tamil, Hindi, or Arabic) and multi-code-point emoji sequences.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"db5326905c0e8553\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-db5326905c0e8553-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 808.25px;\" viewBox=\"0 0 808.25 303.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-db5326905c0e8553-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-db5326905c0e8553-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-db5326905c0e8553-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-db5326905c0e8553-light .error-icon{fill:rgb(255, 255, 255);}#d-db5326905c0e8553-light .error-text{fill:#000000;stroke:#000000;}#d-db5326905c0e8553-light .edge-thickness-normal{stroke-width:1px;}#d-db5326905c0e8553-light .edge-thickness-thick{stroke-width:3.5px;}#d-db5326905c0e8553-light .edge-pattern-solid{stroke-dasharray:0;}#d-db5326905c0e8553-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-db5326905c0e8553-light .edge-pattern-dashed{stroke-dasharray:3;}#d-db5326905c0e8553-light .edge-pattern-dotted{stroke-dasharray:2;}#d-db5326905c0e8553-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-db5326905c0e8553-light .marker.cross{stroke:rgb(44, 46, 48);}#d-db5326905c0e8553-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-db5326905c0e8553-light p{margin:0;}#d-db5326905c0e8553-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-db5326905c0e8553-light .cluster-label text{fill:#000000;}#d-db5326905c0e8553-light .cluster-label span{color:#000000;}#d-db5326905c0e8553-light .cluster-label span p{background-color:transparent;}#d-db5326905c0e8553-light .label text,#d-db5326905c0e8553-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-db5326905c0e8553-light .node rect,#d-db5326905c0e8553-light .node circle,#d-db5326905c0e8553-light .node ellipse,#d-db5326905c0e8553-light .node polygon,#d-db5326905c0e8553-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-db5326905c0e8553-light .rough-node .label text,#d-db5326905c0e8553-light .node .label text,#d-db5326905c0e8553-light .image-shape .label,#d-db5326905c0e8553-light .icon-shape .label{text-anchor:middle;}#d-db5326905c0e8553-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-db5326905c0e8553-light .rough-node .label,#d-db5326905c0e8553-light .node .label,#d-db5326905c0e8553-light .image-shape .label,#d-db5326905c0e8553-light .icon-shape .label{text-align:center;}#d-db5326905c0e8553-light .node.clickable{cursor:pointer;}#d-db5326905c0e8553-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-db5326905c0e8553-light .arrowheadPath{fill:#000000;}#d-db5326905c0e8553-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-db5326905c0e8553-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-db5326905c0e8553-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-db5326905c0e8553-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-db5326905c0e8553-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-db5326905c0e8553-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-db5326905c0e8553-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-db5326905c0e8553-light .cluster text{fill:#000000;}#d-db5326905c0e8553-light .cluster span{color:#000000;}#d-db5326905c0e8553-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-db5326905c0e8553-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-db5326905c0e8553-light rect.text{fill:none;stroke-width:0;}#d-db5326905c0e8553-light .icon-shape,#d-db5326905c0e8553-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-db5326905c0e8553-light .icon-shape p,#d-db5326905c0e8553-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-db5326905c0e8553-light .icon-shape .label rect,#d-db5326905c0e8553-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-db5326905c0e8553-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-db5326905c0e8553-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-db5326905c0e8553-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-db5326905c0e8553-light [data-look=\"neo\"].node rect,#d-db5326905c0e8553-light [data-look=\"neo\"].cluster rect,#d-db5326905c0e8553-light [data-look=\"neo\"].node polygon{stroke:url(#d-db5326905c0e8553-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-db5326905c0e8553-light [data-look=\"neo\"].node path{stroke:url(#d-db5326905c0e8553-light-gradient);stroke-width:1px;}#d-db5326905c0e8553-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-db5326905c0e8553-light [data-look=\"neo\"].node circle{stroke:url(#d-db5326905c0e8553-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-db5326905c0e8553-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-db5326905c0e8553-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-db5326905c0e8553-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-db5326905c0e8553-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-db5326905c0e8553-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M272.906,69.409L246.664,74.841C220.422,80.272,167.938,91.136,141.695,101.693C115.453,112.25,115.453,122.5,115.453,127.625L115.453,132.75\" id=\"d-db5326905c0e8553-light-L_G_R1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_R1_0\" data-points=\"W3sieCI6MjcyLjkwNjI1LCJ5Ijo2OS40MDg3MzUxMTk4NTY1fSx7IngiOjExNS40NTMxMjUsInkiOjEwMn0seyJ4IjoxMTUuNDUzMTI1LCJ5IjoxMzYuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-light_flowchart-v2-pointEnd)\"></path><path d=\"M402.906,77L402.906,81.167C402.906,85.333,402.906,93.667,402.906,101.333C402.906,109,402.906,116,402.906,119.5L402.906,123\" id=\"d-db5326905c0e8553-light-L_G_R2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_R2_0\" data-points=\"W3sieCI6NDAyLjkwNjI1LCJ5Ijo3N30seyJ4Ijo0MDIuOTA2MjUsInkiOjEwMn0seyJ4Ijo0MDIuOTA2MjUsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-light_flowchart-v2-pointEnd)\"></path><path d=\"M532.906,69.295L559.352,74.746C585.797,80.197,638.688,91.098,665.133,101.674C691.578,112.25,691.578,122.5,691.578,127.625L691.578,132.75\" id=\"d-db5326905c0e8553-light-L_G_R3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_R3_0\" data-points=\"W3sieCI6NTMyLjkwNjI1LCJ5Ijo2OS4yOTUxMjg1NTIwOTc0Mn0seyJ4Ijo2OTEuNTc4MTI1LCJ5IjoxMDJ9LHsieCI6NjkxLjU3ODEyNSwieSI6MTM2Ljc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-light_flowchart-v2-pointEnd)\"></path><path d=\"M115.453,186.25L115.453,192.042C115.453,197.833,115.453,209.417,115.453,218.708C115.453,228,115.453,235,115.453,238.5L115.453,242\" id=\"d-db5326905c0e8553-light-L_R1_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R1_B1_0\" data-points=\"W3sieCI6MTE1LjQ1MzEyNSwieSI6MTg2LjI1fSx7IngiOjExNS40NTMxMjUsInkiOjIyMX0seyJ4IjoxMTUuNDUzMTI1LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-light_flowchart-v2-pointEnd)\"></path><path d=\"M402.906,196L402.906,200.167C402.906,204.333,402.906,212.667,402.906,220.333C402.906,228,402.906,235,402.906,238.5L402.906,242\" id=\"d-db5326905c0e8553-light-L_R2_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R2_B2_0\" data-points=\"W3sieCI6NDAyLjkwNjI1LCJ5IjoxOTZ9LHsieCI6NDAyLjkwNjI1LCJ5IjoyMjF9LHsieCI6NDAyLjkwNjI1LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-light_flowchart-v2-pointEnd)\"></path><path d=\"M691.578,186.25L691.578,192.042C691.578,197.833,691.578,209.417,691.578,218.708C691.578,228,691.578,235,691.578,238.5L691.578,242\" id=\"d-db5326905c0e8553-light-L_R3_B3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R3_B3_0\" data-points=\"W3sieCI6NjkxLjU3ODEyNSwieSI6MTg2LjI1fSx7IngiOjY5MS41NzgxMjUsInkiOjIyMX0seyJ4Ijo2OTEuNTc4MTI1LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_R1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_R2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_R3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R1_B1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R2_B2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R3_B3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-db5326905c0e8553-light-flowchart-G-0\" data-look=\"classic\" transform=\"translate(402.90625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Grapheme Cluster (User-Perceived Character)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-db5326905c0e8553-light-flowchart-R1-1\" data-look=\"classic\" transform=\"translate(115.453125, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.453125\" y=\"-24.75\" width=\"214.90625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.453125, -9.75)\"><rect></rect><foreignObject width=\"154.90625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Rune 1 (Base Code Point)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-db5326905c0e8553-light-flowchart-R2-2\" data-look=\"classic\" transform=\"translate(402.90625, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Rune 2 (Zero-Width Joiner / Modifier)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-db5326905c0e8553-light-flowchart-R3-3\" data-look=\"classic\" transform=\"translate(691.578125, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.671875\" y=\"-24.75\" width=\"217.34375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.671875, -9.75)\"><rect></rect><foreignObject width=\"157.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Rune 3 (Combining Mark)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-db5326905c0e8553-light-flowchart-B1-4\" data-look=\"classic\" transform=\"translate(115.453125, 270.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.484375\" y=\"-24.75\" width=\"182.96875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.484375, -9.75)\"><rect></rect><foreignObject width=\"122.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>UTF-8 Bytes (1-4 B)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-db5326905c0e8553-light-flowchart-B2-5\" data-look=\"classic\" transform=\"translate(402.90625, 270.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.484375\" y=\"-24.75\" width=\"182.96875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.484375, -9.75)\"><rect></rect><foreignObject width=\"122.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>UTF-8 Bytes (1-4 B)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-db5326905c0e8553-light-flowchart-B3-6\" data-look=\"classic\" transform=\"translate(691.578125, 270.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.484375\" y=\"-24.75\" width=\"182.96875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.484375, -9.75)\"><rect></rect><foreignObject width=\"122.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>UTF-8 Bytes (1-4 B)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-db5326905c0e8553-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-db5326905c0e8553-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-db5326905c0e8553-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-db5326905c0e8553-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 808.25px;\" viewBox=\"0 0 808.25 303.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-db5326905c0e8553-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-db5326905c0e8553-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-db5326905c0e8553-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-db5326905c0e8553-dark .error-icon{fill:rgb(21, 22, 23);}#d-db5326905c0e8553-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-db5326905c0e8553-dark .edge-thickness-normal{stroke-width:1px;}#d-db5326905c0e8553-dark .edge-thickness-thick{stroke-width:3.5px;}#d-db5326905c0e8553-dark .edge-pattern-solid{stroke-dasharray:0;}#d-db5326905c0e8553-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-db5326905c0e8553-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-db5326905c0e8553-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-db5326905c0e8553-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-db5326905c0e8553-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-db5326905c0e8553-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-db5326905c0e8553-dark p{margin:0;}#d-db5326905c0e8553-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-db5326905c0e8553-dark .cluster-label text{fill:#eae9e8;}#d-db5326905c0e8553-dark .cluster-label span{color:#eae9e8;}#d-db5326905c0e8553-dark .cluster-label span p{background-color:transparent;}#d-db5326905c0e8553-dark .label text,#d-db5326905c0e8553-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-db5326905c0e8553-dark .node rect,#d-db5326905c0e8553-dark .node circle,#d-db5326905c0e8553-dark .node ellipse,#d-db5326905c0e8553-dark .node polygon,#d-db5326905c0e8553-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-db5326905c0e8553-dark .rough-node .label text,#d-db5326905c0e8553-dark .node .label text,#d-db5326905c0e8553-dark .image-shape .label,#d-db5326905c0e8553-dark .icon-shape .label{text-anchor:middle;}#d-db5326905c0e8553-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-db5326905c0e8553-dark .rough-node .label,#d-db5326905c0e8553-dark .node .label,#d-db5326905c0e8553-dark .image-shape .label,#d-db5326905c0e8553-dark .icon-shape .label{text-align:center;}#d-db5326905c0e8553-dark .node.clickable{cursor:pointer;}#d-db5326905c0e8553-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-db5326905c0e8553-dark .arrowheadPath{fill:#eae9e8;}#d-db5326905c0e8553-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-db5326905c0e8553-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-db5326905c0e8553-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-db5326905c0e8553-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-db5326905c0e8553-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-db5326905c0e8553-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-db5326905c0e8553-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-db5326905c0e8553-dark .cluster text{fill:#eae9e8;}#d-db5326905c0e8553-dark .cluster span{color:#eae9e8;}#d-db5326905c0e8553-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-db5326905c0e8553-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-db5326905c0e8553-dark rect.text{fill:none;stroke-width:0;}#d-db5326905c0e8553-dark .icon-shape,#d-db5326905c0e8553-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-db5326905c0e8553-dark .icon-shape p,#d-db5326905c0e8553-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-db5326905c0e8553-dark .icon-shape .label rect,#d-db5326905c0e8553-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-db5326905c0e8553-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-db5326905c0e8553-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-db5326905c0e8553-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-db5326905c0e8553-dark [data-look=\"neo\"].node rect,#d-db5326905c0e8553-dark [data-look=\"neo\"].cluster rect,#d-db5326905c0e8553-dark [data-look=\"neo\"].node polygon{stroke:url(#d-db5326905c0e8553-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-db5326905c0e8553-dark [data-look=\"neo\"].node path{stroke:url(#d-db5326905c0e8553-dark-gradient);stroke-width:1px;}#d-db5326905c0e8553-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-db5326905c0e8553-dark [data-look=\"neo\"].node circle{stroke:url(#d-db5326905c0e8553-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-db5326905c0e8553-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-db5326905c0e8553-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-db5326905c0e8553-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-db5326905c0e8553-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-db5326905c0e8553-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M272.906,69.409L246.664,74.841C220.422,80.272,167.938,91.136,141.695,101.693C115.453,112.25,115.453,122.5,115.453,127.625L115.453,132.75\" id=\"d-db5326905c0e8553-dark-L_G_R1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_R1_0\" data-points=\"W3sieCI6MjcyLjkwNjI1LCJ5Ijo2OS40MDg3MzUxMTk4NTY1fSx7IngiOjExNS40NTMxMjUsInkiOjEwMn0seyJ4IjoxMTUuNDUzMTI1LCJ5IjoxMzYuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-dark_flowchart-v2-pointEnd)\"></path><path d=\"M402.906,77L402.906,81.167C402.906,85.333,402.906,93.667,402.906,101.333C402.906,109,402.906,116,402.906,119.5L402.906,123\" id=\"d-db5326905c0e8553-dark-L_G_R2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_R2_0\" data-points=\"W3sieCI6NDAyLjkwNjI1LCJ5Ijo3N30seyJ4Ijo0MDIuOTA2MjUsInkiOjEwMn0seyJ4Ijo0MDIuOTA2MjUsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-dark_flowchart-v2-pointEnd)\"></path><path d=\"M532.906,69.295L559.352,74.746C585.797,80.197,638.688,91.098,665.133,101.674C691.578,112.25,691.578,122.5,691.578,127.625L691.578,132.75\" id=\"d-db5326905c0e8553-dark-L_G_R3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_R3_0\" data-points=\"W3sieCI6NTMyLjkwNjI1LCJ5Ijo2OS4yOTUxMjg1NTIwOTc0Mn0seyJ4Ijo2OTEuNTc4MTI1LCJ5IjoxMDJ9LHsieCI6NjkxLjU3ODEyNSwieSI6MTM2Ljc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-dark_flowchart-v2-pointEnd)\"></path><path d=\"M115.453,186.25L115.453,192.042C115.453,197.833,115.453,209.417,115.453,218.708C115.453,228,115.453,235,115.453,238.5L115.453,242\" id=\"d-db5326905c0e8553-dark-L_R1_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R1_B1_0\" data-points=\"W3sieCI6MTE1LjQ1MzEyNSwieSI6MTg2LjI1fSx7IngiOjExNS40NTMxMjUsInkiOjIyMX0seyJ4IjoxMTUuNDUzMTI1LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-dark_flowchart-v2-pointEnd)\"></path><path d=\"M402.906,196L402.906,200.167C402.906,204.333,402.906,212.667,402.906,220.333C402.906,228,402.906,235,402.906,238.5L402.906,242\" id=\"d-db5326905c0e8553-dark-L_R2_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R2_B2_0\" data-points=\"W3sieCI6NDAyLjkwNjI1LCJ5IjoxOTZ9LHsieCI6NDAyLjkwNjI1LCJ5IjoyMjF9LHsieCI6NDAyLjkwNjI1LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-dark_flowchart-v2-pointEnd)\"></path><path d=\"M691.578,186.25L691.578,192.042C691.578,197.833,691.578,209.417,691.578,218.708C691.578,228,691.578,235,691.578,238.5L691.578,242\" id=\"d-db5326905c0e8553-dark-L_R3_B3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_R3_B3_0\" data-points=\"W3sieCI6NjkxLjU3ODEyNSwieSI6MTg2LjI1fSx7IngiOjY5MS41NzgxMjUsInkiOjIyMX0seyJ4Ijo2OTEuNTc4MTI1LCJ5IjoyNDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-db5326905c0e8553-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_R1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_R2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_R3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R1_B1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R2_B2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_R3_B3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-db5326905c0e8553-dark-flowchart-G-0\" data-look=\"classic\" transform=\"translate(402.90625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Grapheme Cluster (User-Perceived Character)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-db5326905c0e8553-dark-flowchart-R1-1\" data-look=\"classic\" transform=\"translate(115.453125, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.453125\" y=\"-24.75\" width=\"214.90625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.453125, -9.75)\"><rect></rect><foreignObject width=\"154.90625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Rune 1 (Base Code Point)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-db5326905c0e8553-dark-flowchart-R2-2\" data-look=\"classic\" transform=\"translate(402.90625, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Rune 2 (Zero-Width Joiner / Modifier)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-db5326905c0e8553-dark-flowchart-R3-3\" data-look=\"classic\" transform=\"translate(691.578125, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.671875\" y=\"-24.75\" width=\"217.34375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.671875, -9.75)\"><rect></rect><foreignObject width=\"157.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Rune 3 (Combining Mark)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-db5326905c0e8553-dark-flowchart-B1-4\" data-look=\"classic\" transform=\"translate(115.453125, 270.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.484375\" y=\"-24.75\" width=\"182.96875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.484375, -9.75)\"><rect></rect><foreignObject width=\"122.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>UTF-8 Bytes (1-4 B)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-db5326905c0e8553-dark-flowchart-B2-5\" data-look=\"classic\" transform=\"translate(402.90625, 270.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.484375\" y=\"-24.75\" width=\"182.96875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.484375, -9.75)\"><rect></rect><foreignObject width=\"122.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>UTF-8 Bytes (1-4 B)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-db5326905c0e8553-dark-flowchart-B3-6\" data-look=\"classic\" transform=\"translate(691.578125, 270.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.484375\" y=\"-24.75\" width=\"182.96875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.484375, -9.75)\"><rect></rect><foreignObject width=\"122.96875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>UTF-8 Bytes (1-4 B)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-db5326905c0e8553-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-db5326905c0e8553-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-db5326905c0e8553-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"1-bytes-utf-8-storage-layer\">1. Bytes: UTF-8 Storage Layer<a class=\"h-anchor\" href=\"#1-bytes-utf-8-storage-layer\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In Go, a <code>string</code> is an immutable, read-only slice of arbitrary bytes. The built-in <code>len(s)</code> function returns the number of <strong>bytes</strong>, not characters:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">s </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"வணக்கம்\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(s)) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 21 bytes (3 bytes per Tamil code point)</span></span></code></pre></div>\n<p>Direct indexing <code>s[0]</code> extracts a raw <code>uint8</code> byte. If you slice a multi-byte UTF-8 sequence halfway through (<code>s[:2]</code>), you produce invalid, corrupted UTF-8.</p>\n<h2 id=\"2-runes-unicode-code-points\">2. Runes: Unicode Code Points<a class=\"h-anchor\" href=\"#2-runes-unicode-code-points\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A <code>rune</code> in Go is an alias for <code>int32</code>, representing a single Unicode Code Point:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">rs </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">rune</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(s)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(rs)) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 7 runes</span></span></code></pre></div>\n<p>While <code>[]rune(s)</code> converts a string to code points, it allocates a new slice on the heap. For zero-allocation iteration, use a <code>range</code> loop or the standard library <code>unicode/utf8</code> package:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">unicode/utf8</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Zero heap allocation</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">count </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> utf8.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">RuneCountInString</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(s) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 7</span></span></code></pre></div>\n<h2 id=\"3-grapheme-clusters-user-perceived-characters\">3. Grapheme Clusters: User-Perceived Characters<a class=\"h-anchor\" href=\"#3-grapheme-clusters-user-perceived-characters\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A single visible character often consists of multiple Unicode code points joined together.</p>\n<h3 id=\"example-a-tamil-syllables-with-virama\">Example A: Tamil Syllables with Virama<a class=\"h-anchor\" href=\"#example-a-tamil-syllables-with-virama\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>In the word <code>\"வணக்கம்\"</code>, the syllable <code>\"க்\"</code> combines two independent code points:</p>\n<ul>\n<li>Base consonant: <code>க</code> (<code>U+0B95</code>)</li>\n<li>Pulli / Virama combining mark: <code>்</code> (<code>U+0BCD</code>)</li>\n</ul>\n<p>To a human reader, <code>\"க்\"</code> is 1 character, but to Go’s <code>[]rune</code>, it is 2 runes.</p>\n<h3 id=\"example-b-zero-width-joiner-zwj-emoji\">Example B: Zero-Width Joiner (ZWJ) Emoji<a class=\"h-anchor\" href=\"#example-b-zero-width-joiner-zwj-emoji\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Consider the family emoji sequence: <code>👨‍👩‍👧‍👦</code></p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">emoji </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"👨‍👩‍👧‍👦\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(emoji))                    </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 25 bytes</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(utf8.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">RuneCountInString</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(emoji)) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 7 runes (Man + ZWJ + Woman + ZWJ + Girl + ZWJ + Boy)</span></span></code></pre></div>\n<p>If you slice this emoji by rune or reverse it with a naive rune loop, the family breaks apart into four separate individuals separated by invisible joiners.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"6c652ad209d377e4\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-6c652ad209d377e4-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 565.890625px;\" viewBox=\"0 0 565.890625 563\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-6c652ad209d377e4-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-6c652ad209d377e4-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-6c652ad209d377e4-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-6c652ad209d377e4-light .error-icon{fill:rgb(255, 255, 255);}#d-6c652ad209d377e4-light .error-text{fill:#000000;stroke:#000000;}#d-6c652ad209d377e4-light .edge-thickness-normal{stroke-width:1px;}#d-6c652ad209d377e4-light .edge-thickness-thick{stroke-width:3.5px;}#d-6c652ad209d377e4-light .edge-pattern-solid{stroke-dasharray:0;}#d-6c652ad209d377e4-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-6c652ad209d377e4-light .edge-pattern-dashed{stroke-dasharray:3;}#d-6c652ad209d377e4-light .edge-pattern-dotted{stroke-dasharray:2;}#d-6c652ad209d377e4-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-6c652ad209d377e4-light .marker.cross{stroke:rgb(44, 46, 48);}#d-6c652ad209d377e4-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-6c652ad209d377e4-light p{margin:0;}#d-6c652ad209d377e4-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-6c652ad209d377e4-light .cluster-label text{fill:#000000;}#d-6c652ad209d377e4-light .cluster-label span{color:#000000;}#d-6c652ad209d377e4-light .cluster-label span p{background-color:transparent;}#d-6c652ad209d377e4-light .label text,#d-6c652ad209d377e4-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-6c652ad209d377e4-light .node rect,#d-6c652ad209d377e4-light .node circle,#d-6c652ad209d377e4-light .node ellipse,#d-6c652ad209d377e4-light .node polygon,#d-6c652ad209d377e4-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-6c652ad209d377e4-light .rough-node .label text,#d-6c652ad209d377e4-light .node .label text,#d-6c652ad209d377e4-light .image-shape .label,#d-6c652ad209d377e4-light .icon-shape .label{text-anchor:middle;}#d-6c652ad209d377e4-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-6c652ad209d377e4-light .rough-node .label,#d-6c652ad209d377e4-light .node .label,#d-6c652ad209d377e4-light .image-shape .label,#d-6c652ad209d377e4-light .icon-shape .label{text-align:center;}#d-6c652ad209d377e4-light .node.clickable{cursor:pointer;}#d-6c652ad209d377e4-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-6c652ad209d377e4-light .arrowheadPath{fill:#000000;}#d-6c652ad209d377e4-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-6c652ad209d377e4-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-6c652ad209d377e4-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-6c652ad209d377e4-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-6c652ad209d377e4-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-6c652ad209d377e4-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-6c652ad209d377e4-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-6c652ad209d377e4-light .cluster text{fill:#000000;}#d-6c652ad209d377e4-light .cluster span{color:#000000;}#d-6c652ad209d377e4-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-6c652ad209d377e4-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-6c652ad209d377e4-light rect.text{fill:none;stroke-width:0;}#d-6c652ad209d377e4-light .icon-shape,#d-6c652ad209d377e4-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-6c652ad209d377e4-light .icon-shape p,#d-6c652ad209d377e4-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-6c652ad209d377e4-light .icon-shape .label rect,#d-6c652ad209d377e4-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-6c652ad209d377e4-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-6c652ad209d377e4-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-6c652ad209d377e4-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-6c652ad209d377e4-light [data-look=\"neo\"].node rect,#d-6c652ad209d377e4-light [data-look=\"neo\"].cluster rect,#d-6c652ad209d377e4-light [data-look=\"neo\"].node polygon{stroke:url(#d-6c652ad209d377e4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-6c652ad209d377e4-light [data-look=\"neo\"].node path{stroke:url(#d-6c652ad209d377e4-light-gradient);stroke-width:1px;}#d-6c652ad209d377e4-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-6c652ad209d377e4-light [data-look=\"neo\"].node circle{stroke:url(#d-6c652ad209d377e4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-6c652ad209d377e4-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-6c652ad209d377e4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-6c652ad209d377e4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-6c652ad209d377e4-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M129.706,107.5L149.237,95.042C168.768,82.583,207.829,57.667,249.412,45.208C290.995,32.75,335.099,32.75,357.151,32.75L379.203,32.75\" id=\"d-6c652ad209d377e4-light-L_T_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_B1_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjEwNy41fSx7IngiOjI0Ni44OTA2MjUsInkiOjMyLjc1fSx7IngiOjM4My4yMDMxMjUsInkiOjMyLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-light_flowchart-v2-pointEnd)\"></path><path d=\"M169.664,132.25L182.535,132.25C195.406,132.25,221.148,132.25,256.259,132.25C291.37,132.25,335.849,132.25,358.089,132.25L380.328,132.25\" id=\"d-6c652ad209d377e4-light-L_T_R1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_R1_0\" data-points=\"W3sieCI6MTY5LjY2NDA2MjUsInkiOjEzMi4yNX0seyJ4IjoyNDYuODkwNjI1LCJ5IjoxMzIuMjV9LHsieCI6Mzg0LjMyODEyNSwieSI6MTMyLjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-light_flowchart-v2-pointEnd)\"></path><path d=\"M129.706,157L149.237,169.458C168.768,181.917,207.829,206.833,238.873,219.292C269.917,231.75,292.943,231.75,304.456,231.75L315.969,231.75\" id=\"d-6c652ad209d377e4-light-L_T_G1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_G1_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjE1N30seyJ4IjoyNDYuODkwNjI1LCJ5IjoyMzEuNzV9LHsieCI6MzE5Ljk2ODc1LCJ5IjoyMzEuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-light_flowchart-v2-pointEnd)\"></path><path d=\"M129.706,406L149.237,393.542C168.768,381.083,207.829,356.167,249.21,343.708C290.591,331.25,334.292,331.25,356.142,331.25L377.992,331.25\" id=\"d-6c652ad209d377e4-light-L_E_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_B2_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjQwNn0seyJ4IjoyNDYuODkwNjI1LCJ5IjozMzEuMjV9LHsieCI6MzgxLjk5MjE4NzUsInkiOjMzMS4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-light_flowchart-v2-pointEnd)\"></path><path d=\"M173.813,430.75L185.992,430.75C198.172,430.75,222.531,430.75,256.951,430.75C291.37,430.75,335.849,430.75,358.089,430.75L380.328,430.75\" id=\"d-6c652ad209d377e4-light-L_E_R2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_R2_0\" data-points=\"W3sieCI6MTczLjgxMjUsInkiOjQzMC43NX0seyJ4IjoyNDYuODkwNjI1LCJ5Ijo0MzAuNzV9LHsieCI6Mzg0LjMyODEyNSwieSI6NDMwLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-light_flowchart-v2-pointEnd)\"></path><path d=\"M129.706,455.5L149.237,467.958C168.768,480.417,207.829,505.333,247.614,517.792C287.398,530.25,327.906,530.25,348.16,530.25L368.414,530.25\" id=\"d-6c652ad209d377e4-light-L_E_G2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G2_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjQ1NS41fSx7IngiOjI0Ni44OTA2MjUsInkiOjUzMC4yNX0seyJ4IjozNzIuNDE0MDYyNSwieSI6NTMwLjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(246.890625, 32.75)\"><g class=\"label\" data-id=\"L_T_B1_0\" transform=\"translate(-9.2109375, -9.75)\"><foreignObject width=\"18.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>len</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 132.25)\"><g class=\"label\" data-id=\"L_T_R1_0\" transform=\"translate(-48.078125, -9.75)\"><foreignObject width=\"96.15625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>utf8.RuneCount</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 231.75)\"><g class=\"label\" data-id=\"L_T_G1_0\" transform=\"translate(-20.46875, -9.75)\"><foreignObject width=\"40.9375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>uniseg</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 331.25)\"><g class=\"label\" data-id=\"L_E_B2_0\" transform=\"translate(-9.2109375, -9.75)\"><foreignObject width=\"18.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>len</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 430.75)\"><g class=\"label\" data-id=\"L_E_R2_0\" transform=\"translate(-48.078125, -9.75)\"><foreignObject width=\"96.15625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>utf8.RuneCount</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 530.25)\"><g class=\"label\" data-id=\"L_E_G2_0\" transform=\"translate(-20.46875, -9.75)\"><foreignObject width=\"40.9375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>uniseg</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-6c652ad209d377e4-light-flowchart-T-0\" data-look=\"classic\" transform=\"translate(90.90625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-78.7578125\" y=\"-24.75\" width=\"157.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48.7578125, -9.75)\"><rect></rect><foreignObject width=\"97.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>வணக்கம் (Tamil)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-6c652ad209d377e4-light-flowchart-B1-1\" data-look=\"classic\" transform=\"translate(438.9296875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.7265625\" y=\"-24.75\" width=\"111.453125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.7265625, -9.75)\"><rect></rect><foreignObject width=\"51.453125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>21 Bytes</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-6c652ad209d377e4-light-flowchart-R1-3\" data-look=\"classic\" transform=\"translate(438.9296875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.6015625\" y=\"-24.75\" width=\"109.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.6015625, -9.75)\"><rect></rect><foreignObject width=\"49.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>7 Runes</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-6c652ad209d377e4-light-flowchart-G1-5\" data-look=\"classic\" transform=\"translate(438.9296875, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-118.9609375\" y=\"-24.75\" width=\"237.921875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-88.9609375, -9.75)\"><rect></rect><foreignObject width=\"177.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>5 Graphemes (வ, ண, க், க, ம்)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-6c652ad209d377e4-light-flowchart-E-6\" data-look=\"classic\" transform=\"translate(90.90625, 430.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.90625\" y=\"-24.75\" width=\"165.8125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.90625, -9.75)\"><rect></rect><foreignObject width=\"105.8125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>👨‍👩‍👧‍👦 (Family Emoji)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-6c652ad209d377e4-light-flowchart-B2-7\" data-look=\"classic\" transform=\"translate(438.9296875, 331.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-56.9375\" y=\"-24.75\" width=\"113.875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-26.9375, -9.75)\"><rect></rect><foreignObject width=\"53.875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>25 Bytes</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-6c652ad209d377e4-light-flowchart-R2-9\" data-look=\"classic\" transform=\"translate(438.9296875, 430.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.6015625\" y=\"-24.75\" width=\"109.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.6015625, -9.75)\"><rect></rect><foreignObject width=\"49.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>7 Runes</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-6c652ad209d377e4-light-flowchart-G2-11\" data-look=\"classic\" transform=\"translate(438.9296875, 530.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.515625\" y=\"-24.75\" width=\"133.03125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.515625, -9.75)\"><rect></rect><foreignObject width=\"73.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 Grapheme</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-6c652ad209d377e4-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-6c652ad209d377e4-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-6c652ad209d377e4-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-6c652ad209d377e4-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 565.890625px;\" viewBox=\"0 0 565.890625 563\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-6c652ad209d377e4-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-6c652ad209d377e4-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-6c652ad209d377e4-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-6c652ad209d377e4-dark .error-icon{fill:rgb(21, 22, 23);}#d-6c652ad209d377e4-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-6c652ad209d377e4-dark .edge-thickness-normal{stroke-width:1px;}#d-6c652ad209d377e4-dark .edge-thickness-thick{stroke-width:3.5px;}#d-6c652ad209d377e4-dark .edge-pattern-solid{stroke-dasharray:0;}#d-6c652ad209d377e4-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-6c652ad209d377e4-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-6c652ad209d377e4-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-6c652ad209d377e4-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-6c652ad209d377e4-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-6c652ad209d377e4-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-6c652ad209d377e4-dark p{margin:0;}#d-6c652ad209d377e4-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-6c652ad209d377e4-dark .cluster-label text{fill:#eae9e8;}#d-6c652ad209d377e4-dark .cluster-label span{color:#eae9e8;}#d-6c652ad209d377e4-dark .cluster-label span p{background-color:transparent;}#d-6c652ad209d377e4-dark .label text,#d-6c652ad209d377e4-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-6c652ad209d377e4-dark .node rect,#d-6c652ad209d377e4-dark .node circle,#d-6c652ad209d377e4-dark .node ellipse,#d-6c652ad209d377e4-dark .node polygon,#d-6c652ad209d377e4-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-6c652ad209d377e4-dark .rough-node .label text,#d-6c652ad209d377e4-dark .node .label text,#d-6c652ad209d377e4-dark .image-shape .label,#d-6c652ad209d377e4-dark .icon-shape .label{text-anchor:middle;}#d-6c652ad209d377e4-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-6c652ad209d377e4-dark .rough-node .label,#d-6c652ad209d377e4-dark .node .label,#d-6c652ad209d377e4-dark .image-shape .label,#d-6c652ad209d377e4-dark .icon-shape .label{text-align:center;}#d-6c652ad209d377e4-dark .node.clickable{cursor:pointer;}#d-6c652ad209d377e4-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-6c652ad209d377e4-dark .arrowheadPath{fill:#eae9e8;}#d-6c652ad209d377e4-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-6c652ad209d377e4-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-6c652ad209d377e4-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-6c652ad209d377e4-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-6c652ad209d377e4-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-6c652ad209d377e4-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-6c652ad209d377e4-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-6c652ad209d377e4-dark .cluster text{fill:#eae9e8;}#d-6c652ad209d377e4-dark .cluster span{color:#eae9e8;}#d-6c652ad209d377e4-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-6c652ad209d377e4-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-6c652ad209d377e4-dark rect.text{fill:none;stroke-width:0;}#d-6c652ad209d377e4-dark .icon-shape,#d-6c652ad209d377e4-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-6c652ad209d377e4-dark .icon-shape p,#d-6c652ad209d377e4-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-6c652ad209d377e4-dark .icon-shape .label rect,#d-6c652ad209d377e4-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-6c652ad209d377e4-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-6c652ad209d377e4-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-6c652ad209d377e4-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-6c652ad209d377e4-dark [data-look=\"neo\"].node rect,#d-6c652ad209d377e4-dark [data-look=\"neo\"].cluster rect,#d-6c652ad209d377e4-dark [data-look=\"neo\"].node polygon{stroke:url(#d-6c652ad209d377e4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-6c652ad209d377e4-dark [data-look=\"neo\"].node path{stroke:url(#d-6c652ad209d377e4-dark-gradient);stroke-width:1px;}#d-6c652ad209d377e4-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-6c652ad209d377e4-dark [data-look=\"neo\"].node circle{stroke:url(#d-6c652ad209d377e4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-6c652ad209d377e4-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-6c652ad209d377e4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-6c652ad209d377e4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-6c652ad209d377e4-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-6c652ad209d377e4-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M129.706,107.5L149.237,95.042C168.768,82.583,207.829,57.667,249.412,45.208C290.995,32.75,335.099,32.75,357.151,32.75L379.203,32.75\" id=\"d-6c652ad209d377e4-dark-L_T_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_B1_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjEwNy41fSx7IngiOjI0Ni44OTA2MjUsInkiOjMyLjc1fSx7IngiOjM4My4yMDMxMjUsInkiOjMyLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M169.664,132.25L182.535,132.25C195.406,132.25,221.148,132.25,256.259,132.25C291.37,132.25,335.849,132.25,358.089,132.25L380.328,132.25\" id=\"d-6c652ad209d377e4-dark-L_T_R1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_R1_0\" data-points=\"W3sieCI6MTY5LjY2NDA2MjUsInkiOjEzMi4yNX0seyJ4IjoyNDYuODkwNjI1LCJ5IjoxMzIuMjV9LHsieCI6Mzg0LjMyODEyNSwieSI6MTMyLjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M129.706,157L149.237,169.458C168.768,181.917,207.829,206.833,238.873,219.292C269.917,231.75,292.943,231.75,304.456,231.75L315.969,231.75\" id=\"d-6c652ad209d377e4-dark-L_T_G1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_T_G1_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjE1N30seyJ4IjoyNDYuODkwNjI1LCJ5IjoyMzEuNzV9LHsieCI6MzE5Ljk2ODc1LCJ5IjoyMzEuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M129.706,406L149.237,393.542C168.768,381.083,207.829,356.167,249.21,343.708C290.591,331.25,334.292,331.25,356.142,331.25L377.992,331.25\" id=\"d-6c652ad209d377e4-dark-L_E_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_B2_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjQwNn0seyJ4IjoyNDYuODkwNjI1LCJ5IjozMzEuMjV9LHsieCI6MzgxLjk5MjE4NzUsInkiOjMzMS4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M173.813,430.75L185.992,430.75C198.172,430.75,222.531,430.75,256.951,430.75C291.37,430.75,335.849,430.75,358.089,430.75L380.328,430.75\" id=\"d-6c652ad209d377e4-dark-L_E_R2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_R2_0\" data-points=\"W3sieCI6MTczLjgxMjUsInkiOjQzMC43NX0seyJ4IjoyNDYuODkwNjI1LCJ5Ijo0MzAuNzV9LHsieCI6Mzg0LjMyODEyNSwieSI6NDMwLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M129.706,455.5L149.237,467.958C168.768,480.417,207.829,505.333,247.614,517.792C287.398,530.25,327.906,530.25,348.16,530.25L368.414,530.25\" id=\"d-6c652ad209d377e4-dark-L_E_G2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G2_0\" data-points=\"W3sieCI6MTI5LjcwNjM4MzQ3OTg5OTUsInkiOjQ1NS41fSx7IngiOjI0Ni44OTA2MjUsInkiOjUzMC4yNX0seyJ4IjozNzIuNDE0MDYyNSwieSI6NTMwLjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-6c652ad209d377e4-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(246.890625, 32.75)\"><g class=\"label\" data-id=\"L_T_B1_0\" transform=\"translate(-9.2109375, -9.75)\"><foreignObject width=\"18.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>len</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 132.25)\"><g class=\"label\" data-id=\"L_T_R1_0\" transform=\"translate(-48.078125, -9.75)\"><foreignObject width=\"96.15625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>utf8.RuneCount</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 231.75)\"><g class=\"label\" data-id=\"L_T_G1_0\" transform=\"translate(-20.46875, -9.75)\"><foreignObject width=\"40.9375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>uniseg</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 331.25)\"><g class=\"label\" data-id=\"L_E_B2_0\" transform=\"translate(-9.2109375, -9.75)\"><foreignObject width=\"18.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>len</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 430.75)\"><g class=\"label\" data-id=\"L_E_R2_0\" transform=\"translate(-48.078125, -9.75)\"><foreignObject width=\"96.15625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>utf8.RuneCount</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(246.890625, 530.25)\"><g class=\"label\" data-id=\"L_E_G2_0\" transform=\"translate(-20.46875, -9.75)\"><foreignObject width=\"40.9375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>uniseg</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-6c652ad209d377e4-dark-flowchart-T-0\" data-look=\"classic\" transform=\"translate(90.90625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-78.7578125\" y=\"-24.75\" width=\"157.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-48.7578125, -9.75)\"><rect></rect><foreignObject width=\"97.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>வணக்கம் (Tamil)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-6c652ad209d377e4-dark-flowchart-B1-1\" data-look=\"classic\" transform=\"translate(438.9296875, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-55.7265625\" y=\"-24.75\" width=\"111.453125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-25.7265625, -9.75)\"><rect></rect><foreignObject width=\"51.453125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>21 Bytes</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-6c652ad209d377e4-dark-flowchart-R1-3\" data-look=\"classic\" transform=\"translate(438.9296875, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.6015625\" y=\"-24.75\" width=\"109.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.6015625, -9.75)\"><rect></rect><foreignObject width=\"49.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>7 Runes</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-6c652ad209d377e4-dark-flowchart-G1-5\" data-look=\"classic\" transform=\"translate(438.9296875, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-118.9609375\" y=\"-24.75\" width=\"237.921875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-88.9609375, -9.75)\"><rect></rect><foreignObject width=\"177.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>5 Graphemes (வ, ண, க், க, ம்)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-6c652ad209d377e4-dark-flowchart-E-6\" data-look=\"classic\" transform=\"translate(90.90625, 430.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.90625\" y=\"-24.75\" width=\"165.8125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.90625, -9.75)\"><rect></rect><foreignObject width=\"105.8125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>👨‍👩‍👧‍👦 (Family Emoji)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-6c652ad209d377e4-dark-flowchart-B2-7\" data-look=\"classic\" transform=\"translate(438.9296875, 331.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-56.9375\" y=\"-24.75\" width=\"113.875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-26.9375, -9.75)\"><rect></rect><foreignObject width=\"53.875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>25 Bytes</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-6c652ad209d377e4-dark-flowchart-R2-9\" data-look=\"classic\" transform=\"translate(438.9296875, 430.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-54.6015625\" y=\"-24.75\" width=\"109.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-24.6015625, -9.75)\"><rect></rect><foreignObject width=\"49.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>7 Runes</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-6c652ad209d377e4-dark-flowchart-G2-11\" data-look=\"classic\" transform=\"translate(438.9296875, 530.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.515625\" y=\"-24.75\" width=\"133.03125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.515625, -9.75)\"><rect></rect><foreignObject width=\"73.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 Grapheme</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-6c652ad209d377e4-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-6c652ad209d377e4-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-6c652ad209d377e4-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"proper-grapheme-iteration-with-uniseg\">Proper Grapheme Iteration with <code>uniseg</code><a class=\"h-anchor\" href=\"#proper-grapheme-iteration-with-uniseg\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Go’s standard library stops at code points (<code>rune</code>). For Unicode Standard Annex #29 compliant grapheme clustering, use <code>github.com/rivo/uniseg</code>:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">slices</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">github.com/rivo/uniseg</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// ReverseGraphemes reverses a string without breaking combining marks or ZWJ sequences</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> ReverseGraphemes</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">s</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> clusters []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    gr </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> uniseg.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">NewGraphemes</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(s)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> gr.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Next</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        clusters </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> append</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(clusters, gr.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Str</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    slices.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Reverse</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(clusters)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> result </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, c </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> clusters {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        result </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">+=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> c</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> result</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">ReverseGraphemes</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"வணக்கம்\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// ம் க க் ண வ (Valid Tamil graphemes preserved)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"text-processing-reference\">Text Processing Reference<a class=\"h-anchor\" href=\"#text-processing-reference\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Objective</th>\n<th>Technique</th>\n<th>Allocation Profile</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Byte count</strong></td>\n<td><code>len(s)</code></td>\n<td>Zero allocation</td>\n</tr>\n<tr>\n<td><strong>Code point count</strong></td>\n<td><code>utf8.RuneCountInString(s)</code></td>\n<td>Zero allocation</td>\n</tr>\n<tr>\n<td><strong>Decode code points</strong></td>\n<td><code>for idx, r := range s</code></td>\n<td>Zero allocation</td>\n</tr>\n<tr>\n<td><strong>Visible character count</strong></td>\n<td><code>uniseg.GraphemeClusterCount(s)</code></td>\n<td>Zero allocation</td>\n</tr>\n<tr>\n<td><strong>Safe truncation / display</strong></td>\n<td>Segment on grapheme boundaries via <code>uniseg</code></td>\n<td>Minimal slice allocation</td>\n</tr>\n</tbody>\n</table></div>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-was-never-bad/",
      "url": "https://ashwingopalsamy.in/blog/go-was-never-bad/",
      "title": "Go Was Never Bad: The Engineering Case for Intentional Minimalism",
      "content_text": "Why Go's deliberate constraints, sub-millisecond GC pauses, and static compilation excel in production backend infrastructure.",
      "date_published": "2025-06-21T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Discussions around Go often contrast its syntactic simplicity with the expressive type systems of Rust, Haskell, or modern C++. Critics frequently cite the absence of algebraic data types, operator overloading, and macro meta-programming as deficits.</p>\n<p>In production backend infrastructure and payment gateways, these omissions are not oversights. They are deliberate design choices that trade language cleverness for operational predictability, maintainability across large engineering teams, and sub-second developer feedback loops.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"bce6f581e0b0fa31\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-bce6f581e0b0fa31-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1194.703125px;\" viewBox=\"0 0 1194.703125 204\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-bce6f581e0b0fa31-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-bce6f581e0b0fa31-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-bce6f581e0b0fa31-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-bce6f581e0b0fa31-light .error-icon{fill:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-light .error-text{fill:#000000;stroke:#000000;}#d-bce6f581e0b0fa31-light .edge-thickness-normal{stroke-width:1px;}#d-bce6f581e0b0fa31-light .edge-thickness-thick{stroke-width:3.5px;}#d-bce6f581e0b0fa31-light .edge-pattern-solid{stroke-dasharray:0;}#d-bce6f581e0b0fa31-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-bce6f581e0b0fa31-light .edge-pattern-dashed{stroke-dasharray:3;}#d-bce6f581e0b0fa31-light .edge-pattern-dotted{stroke-dasharray:2;}#d-bce6f581e0b0fa31-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-bce6f581e0b0fa31-light .marker.cross{stroke:rgb(44, 46, 48);}#d-bce6f581e0b0fa31-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-bce6f581e0b0fa31-light p{margin:0;}#d-bce6f581e0b0fa31-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-light .cluster-label text{fill:#000000;}#d-bce6f581e0b0fa31-light .cluster-label span{color:#000000;}#d-bce6f581e0b0fa31-light .cluster-label span p{background-color:transparent;}#d-bce6f581e0b0fa31-light .label text,#d-bce6f581e0b0fa31-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-light .node rect,#d-bce6f581e0b0fa31-light .node circle,#d-bce6f581e0b0fa31-light .node ellipse,#d-bce6f581e0b0fa31-light .node polygon,#d-bce6f581e0b0fa31-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-bce6f581e0b0fa31-light .rough-node .label text,#d-bce6f581e0b0fa31-light .node .label text,#d-bce6f581e0b0fa31-light .image-shape .label,#d-bce6f581e0b0fa31-light .icon-shape .label{text-anchor:middle;}#d-bce6f581e0b0fa31-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-bce6f581e0b0fa31-light .rough-node .label,#d-bce6f581e0b0fa31-light .node .label,#d-bce6f581e0b0fa31-light .image-shape .label,#d-bce6f581e0b0fa31-light .icon-shape .label{text-align:center;}#d-bce6f581e0b0fa31-light .node.clickable{cursor:pointer;}#d-bce6f581e0b0fa31-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-bce6f581e0b0fa31-light .arrowheadPath{fill:#000000;}#d-bce6f581e0b0fa31-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-bce6f581e0b0fa31-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-bce6f581e0b0fa31-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-bce6f581e0b0fa31-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-bce6f581e0b0fa31-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-bce6f581e0b0fa31-light .cluster text{fill:#000000;}#d-bce6f581e0b0fa31-light .cluster span{color:#000000;}#d-bce6f581e0b0fa31-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-bce6f581e0b0fa31-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-light rect.text{fill:none;stroke-width:0;}#d-bce6f581e0b0fa31-light .icon-shape,#d-bce6f581e0b0fa31-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-bce6f581e0b0fa31-light .icon-shape p,#d-bce6f581e0b0fa31-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-bce6f581e0b0fa31-light .icon-shape .label rect,#d-bce6f581e0b0fa31-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-bce6f581e0b0fa31-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-bce6f581e0b0fa31-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node rect,#d-bce6f581e0b0fa31-light [data-look=\"neo\"].cluster rect,#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node polygon{stroke:url(#d-bce6f581e0b0fa31-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node path{stroke:url(#d-bce6f581e0b0fa31-light-gradient);stroke-width:1px;}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node circle{stroke:url(#d-bce6f581e0b0fa31-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-bce6f581e0b0fa31-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-bce6f581e0b0fa31-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M473,59.134L417.167,66.279C361.333,73.423,249.667,87.711,193.833,98.356C138,109,138,116,138,119.5L138,123\" id=\"d-bce6f581e0b0fa31-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6NDczLCJ5Ijo1OS4xMzQ0MDg2MDIxNTA1MzZ9LHsieCI6MTM4LCJ5IjoxMDJ9LHsieCI6MTM4LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-light_flowchart-v2-pointEnd)\"></path><path d=\"M513.126,77L502.272,81.167C491.417,85.333,469.709,93.667,458.854,101.333C448,109,448,116,448,119.5L448,123\" id=\"d-bce6f581e0b0fa31-light-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6NTEzLjEyNjA1MDQyMDE2ODEsInkiOjc3fSx7IngiOjQ0OCwieSI6MTAyfSx7IngiOjQ0OCwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-light_flowchart-v2-pointEnd)\"></path><path d=\"M692.874,77L703.728,81.167C714.583,85.333,736.291,93.667,747.146,101.333C758,109,758,116,758,119.5L758,123\" id=\"d-bce6f581e0b0fa31-light-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6NjkyLjg3Mzk0OTU3OTgzMTksInkiOjc3fSx7IngiOjc1OCwieSI6MTAyfSx7IngiOjc1OCwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-light_flowchart-v2-pointEnd)\"></path><path d=\"M733,59.339L787.892,66.449C842.784,73.559,952.568,87.78,1007.46,100.015C1062.352,112.25,1062.352,122.5,1062.352,127.625L1062.352,132.75\" id=\"d-bce6f581e0b0fa31-light-L_A_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_E_0\" data-points=\"W3sieCI6NzMzLCJ5Ijo1OS4zMzg5NTQzNjg0MjAxNn0seyJ4IjoxMDYyLjM1MTU2MjUsInkiOjEwMn0seyJ4IjoxMDYyLjM1MTU2MjUsInkiOjEzNi43NX1d\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-bce6f581e0b0fa31-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(603, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Deliberate Language Constraints</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Predictable Runtime Latency (Sub-ms GC)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(448, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Instant Static Deployments (Zero Cgo/Glibc Churn)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(758, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Navigable Codebases (No Implicit Magic)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1062.3515625, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-124.3515625\" y=\"-24.75\" width=\"248.703125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-94.3515625, -9.75)\"><rect></rect><foreignObject width=\"188.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Sub-Second Compiler Velocity</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-bce6f581e0b0fa31-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-bce6f581e0b0fa31-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-bce6f581e0b0fa31-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-bce6f581e0b0fa31-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1194.703125px;\" viewBox=\"0 0 1194.703125 204\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-bce6f581e0b0fa31-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-bce6f581e0b0fa31-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-bce6f581e0b0fa31-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-bce6f581e0b0fa31-dark .error-icon{fill:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-bce6f581e0b0fa31-dark .edge-thickness-normal{stroke-width:1px;}#d-bce6f581e0b0fa31-dark .edge-thickness-thick{stroke-width:3.5px;}#d-bce6f581e0b0fa31-dark .edge-pattern-solid{stroke-dasharray:0;}#d-bce6f581e0b0fa31-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-bce6f581e0b0fa31-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-bce6f581e0b0fa31-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-bce6f581e0b0fa31-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-bce6f581e0b0fa31-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-bce6f581e0b0fa31-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-bce6f581e0b0fa31-dark p{margin:0;}#d-bce6f581e0b0fa31-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-dark .cluster-label text{fill:#eae9e8;}#d-bce6f581e0b0fa31-dark .cluster-label span{color:#eae9e8;}#d-bce6f581e0b0fa31-dark .cluster-label span p{background-color:transparent;}#d-bce6f581e0b0fa31-dark .label text,#d-bce6f581e0b0fa31-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-dark .node rect,#d-bce6f581e0b0fa31-dark .node circle,#d-bce6f581e0b0fa31-dark .node ellipse,#d-bce6f581e0b0fa31-dark .node polygon,#d-bce6f581e0b0fa31-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-bce6f581e0b0fa31-dark .rough-node .label text,#d-bce6f581e0b0fa31-dark .node .label text,#d-bce6f581e0b0fa31-dark .image-shape .label,#d-bce6f581e0b0fa31-dark .icon-shape .label{text-anchor:middle;}#d-bce6f581e0b0fa31-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-bce6f581e0b0fa31-dark .rough-node .label,#d-bce6f581e0b0fa31-dark .node .label,#d-bce6f581e0b0fa31-dark .image-shape .label,#d-bce6f581e0b0fa31-dark .icon-shape .label{text-align:center;}#d-bce6f581e0b0fa31-dark .node.clickable{cursor:pointer;}#d-bce6f581e0b0fa31-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-bce6f581e0b0fa31-dark .arrowheadPath{fill:#eae9e8;}#d-bce6f581e0b0fa31-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-bce6f581e0b0fa31-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-bce6f581e0b0fa31-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-bce6f581e0b0fa31-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-bce6f581e0b0fa31-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-bce6f581e0b0fa31-dark .cluster text{fill:#eae9e8;}#d-bce6f581e0b0fa31-dark .cluster span{color:#eae9e8;}#d-bce6f581e0b0fa31-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-bce6f581e0b0fa31-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-bce6f581e0b0fa31-dark rect.text{fill:none;stroke-width:0;}#d-bce6f581e0b0fa31-dark .icon-shape,#d-bce6f581e0b0fa31-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-bce6f581e0b0fa31-dark .icon-shape p,#d-bce6f581e0b0fa31-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-bce6f581e0b0fa31-dark .icon-shape .label rect,#d-bce6f581e0b0fa31-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-bce6f581e0b0fa31-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-bce6f581e0b0fa31-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-bce6f581e0b0fa31-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node rect,#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].cluster rect,#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node polygon{stroke:url(#d-bce6f581e0b0fa31-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node path{stroke:url(#d-bce6f581e0b0fa31-dark-gradient);stroke-width:1px;}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node circle{stroke:url(#d-bce6f581e0b0fa31-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-bce6f581e0b0fa31-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-bce6f581e0b0fa31-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-bce6f581e0b0fa31-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-bce6f581e0b0fa31-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M473,59.134L417.167,66.279C361.333,73.423,249.667,87.711,193.833,98.356C138,109,138,116,138,119.5L138,123\" id=\"d-bce6f581e0b0fa31-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6NDczLCJ5Ijo1OS4xMzQ0MDg2MDIxNTA1MzZ9LHsieCI6MTM4LCJ5IjoxMDJ9LHsieCI6MTM4LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-dark_flowchart-v2-pointEnd)\"></path><path d=\"M513.126,77L502.272,81.167C491.417,85.333,469.709,93.667,458.854,101.333C448,109,448,116,448,119.5L448,123\" id=\"d-bce6f581e0b0fa31-dark-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6NTEzLjEyNjA1MDQyMDE2ODEsInkiOjc3fSx7IngiOjQ0OCwieSI6MTAyfSx7IngiOjQ0OCwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-dark_flowchart-v2-pointEnd)\"></path><path d=\"M692.874,77L703.728,81.167C714.583,85.333,736.291,93.667,747.146,101.333C758,109,758,116,758,119.5L758,123\" id=\"d-bce6f581e0b0fa31-dark-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6NjkyLjg3Mzk0OTU3OTgzMTksInkiOjc3fSx7IngiOjc1OCwieSI6MTAyfSx7IngiOjc1OCwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-dark_flowchart-v2-pointEnd)\"></path><path d=\"M733,59.339L787.892,66.449C842.784,73.559,952.568,87.78,1007.46,100.015C1062.352,112.25,1062.352,122.5,1062.352,127.625L1062.352,132.75\" id=\"d-bce6f581e0b0fa31-dark-L_A_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_E_0\" data-points=\"W3sieCI6NzMzLCJ5Ijo1OS4zMzg5NTQzNjg0MjAxNn0seyJ4IjoxMDYyLjM1MTU2MjUsInkiOjEwMn0seyJ4IjoxMDYyLjM1MTU2MjUsInkiOjEzNi43NX1d\" data-look=\"classic\" marker-end=\"url(#d-bce6f581e0b0fa31-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-bce6f581e0b0fa31-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(603, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Deliberate Language Constraints</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Predictable Runtime Latency (Sub-ms GC)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(448, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Instant Static Deployments (Zero Cgo/Glibc Churn)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(758, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Navigable Codebases (No Implicit Magic)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-bce6f581e0b0fa31-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1062.3515625, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-124.3515625\" y=\"-24.75\" width=\"248.703125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-94.3515625, -9.75)\"><rect></rect><foreignObject width=\"188.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Sub-Second Compiler Velocity</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-bce6f581e0b0fa31-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-bce6f581e0b0fa31-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-bce6f581e0b0fa31-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"1-operational-predictability-and-sub-millisecond-gc\">1. Operational Predictability and Sub-Millisecond GC<a class=\"h-anchor\" href=\"#1-operational-predictability-and-sub-millisecond-gc\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>For high-throughput financial and distributed services, p99.9 latency matters more than peak synthetic throughput.</p>\n<p>Many high-performance runtimes historically relied on generational garbage collectors that required complex tuning knobs (eden spaces, survivor ratios, tenured generation sizing) and suffered from occasional multi-second Stop-The-World (STW) pauses.</p>\n<p>Go made a deliberate architectural trade-off:</p>\n<ul>\n<li>The Go garbage collector (pioneered by Rick Hudson) is a concurrent, tri-color mark-sweep collector optimized specifically for <strong>sub-millisecond STW pause times</strong> (typically under 500 microseconds).</li>\n<li>Instead of maximizing batch throughput at the cost of latency variance, Go prioritizes predictable, uniform request handling.</li>\n</ul>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"dfdb522e963023bb\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-dfdb522e963023bb-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 349.140625px;\" viewBox=\"0 0 349.140625 603\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-dfdb522e963023bb-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-dfdb522e963023bb-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-dfdb522e963023bb-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-dfdb522e963023bb-light .error-icon{fill:rgb(255, 255, 255);}#d-dfdb522e963023bb-light .error-text{fill:#000000;stroke:#000000;}#d-dfdb522e963023bb-light .edge-thickness-normal{stroke-width:1px;}#d-dfdb522e963023bb-light .edge-thickness-thick{stroke-width:3.5px;}#d-dfdb522e963023bb-light .edge-pattern-solid{stroke-dasharray:0;}#d-dfdb522e963023bb-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-dfdb522e963023bb-light .edge-pattern-dashed{stroke-dasharray:3;}#d-dfdb522e963023bb-light .edge-pattern-dotted{stroke-dasharray:2;}#d-dfdb522e963023bb-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-dfdb522e963023bb-light .marker.cross{stroke:rgb(44, 46, 48);}#d-dfdb522e963023bb-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-dfdb522e963023bb-light p{margin:0;}#d-dfdb522e963023bb-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-dfdb522e963023bb-light .cluster-label text{fill:#000000;}#d-dfdb522e963023bb-light .cluster-label span{color:#000000;}#d-dfdb522e963023bb-light .cluster-label span p{background-color:transparent;}#d-dfdb522e963023bb-light .label text,#d-dfdb522e963023bb-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-dfdb522e963023bb-light .node rect,#d-dfdb522e963023bb-light .node circle,#d-dfdb522e963023bb-light .node ellipse,#d-dfdb522e963023bb-light .node polygon,#d-dfdb522e963023bb-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-dfdb522e963023bb-light .rough-node .label text,#d-dfdb522e963023bb-light .node .label text,#d-dfdb522e963023bb-light .image-shape .label,#d-dfdb522e963023bb-light .icon-shape .label{text-anchor:middle;}#d-dfdb522e963023bb-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-dfdb522e963023bb-light .rough-node .label,#d-dfdb522e963023bb-light .node .label,#d-dfdb522e963023bb-light .image-shape .label,#d-dfdb522e963023bb-light .icon-shape .label{text-align:center;}#d-dfdb522e963023bb-light .node.clickable{cursor:pointer;}#d-dfdb522e963023bb-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-dfdb522e963023bb-light .arrowheadPath{fill:#000000;}#d-dfdb522e963023bb-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-dfdb522e963023bb-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-dfdb522e963023bb-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-dfdb522e963023bb-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-dfdb522e963023bb-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-dfdb522e963023bb-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-dfdb522e963023bb-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-dfdb522e963023bb-light .cluster text{fill:#000000;}#d-dfdb522e963023bb-light .cluster span{color:#000000;}#d-dfdb522e963023bb-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-dfdb522e963023bb-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-dfdb522e963023bb-light rect.text{fill:none;stroke-width:0;}#d-dfdb522e963023bb-light .icon-shape,#d-dfdb522e963023bb-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-dfdb522e963023bb-light .icon-shape p,#d-dfdb522e963023bb-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-dfdb522e963023bb-light .icon-shape .label rect,#d-dfdb522e963023bb-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-dfdb522e963023bb-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-dfdb522e963023bb-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-dfdb522e963023bb-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-dfdb522e963023bb-light [data-look=\"neo\"].node rect,#d-dfdb522e963023bb-light [data-look=\"neo\"].cluster rect,#d-dfdb522e963023bb-light [data-look=\"neo\"].node polygon{stroke:url(#d-dfdb522e963023bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-dfdb522e963023bb-light [data-look=\"neo\"].node path{stroke:url(#d-dfdb522e963023bb-light-gradient);stroke-width:1px;}#d-dfdb522e963023bb-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-dfdb522e963023bb-light [data-look=\"neo\"].node circle{stroke:url(#d-dfdb522e963023bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-dfdb522e963023bb-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-dfdb522e963023bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-dfdb522e963023bb-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-dfdb522e963023bb-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"></g><g class=\"edgeLabels\"></g><g class=\"nodes\"><g class=\"root\" transform=\"translate(1.5703125, 0)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-dfdb522e963023bb-light-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"7.1328125\" y=\"8\" width=\"331.734375\" height=\"268.5\"></rect><g class=\"cluster-label \" transform=\"translate(11.1328125, 8)\"><foreignObject width=\"323.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Go Tri-Color Concurrent Collector (Low Tail Latency)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,114.5L173,120.75C173,127,173,139.5,173,151.333C173,163.167,173,174.333,173,179.917L173,185.5\" id=\"d-dfdb522e963023bb-light-L_C1_C2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C1_C2_0\" data-points=\"W3sieCI6MTczLCJ5IjoxMTQuNX0seyJ4IjoxNzMsInkiOjE1Mn0seyJ4IjoxNzMsInkiOjE4OS41fV0=\" data-look=\"classic\" marker-end=\"url(#d-dfdb522e963023bb-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C1_C2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-success \" id=\"d-dfdb522e963023bb-light-flowchart-C1-2\" data-look=\"classic\" transform=\"translate(173, 80)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Concurrent Mark Phase (&lt;1ms STW)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-dfdb522e963023bb-light-flowchart-C2-3\" data-look=\"classic\" transform=\"translate(173, 214.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.859375\" y=\"-24.75\" width=\"203.71875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.859375, -9.75)\"><rect></rect><foreignObject width=\"143.71875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Predictable p99.9 SLAs</p></span></div></foreignObject></g></g></g></g><g class=\"root\" transform=\"translate(1.5703125, 318.5)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-dfdb522e963023bb-light-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"6.4296875\" y=\"8\" width=\"333.140625\" height=\"268.5\"></rect><g class=\"cluster-label \" transform=\"translate(10.4296875, 8)\"><foreignObject width=\"325.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Generational Collector (High Throughput, High Jitter)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,95L173,101.25C173,107.5,173,120,173,131.833C173,143.667,173,154.833,173,160.417L173,166\" id=\"d-dfdb522e963023bb-light-L_G1_G2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G1_G2_0\" data-points=\"W3sieCI6MTczLCJ5Ijo5NX0seyJ4IjoxNzMsInkiOjEzMi41fSx7IngiOjE3MywieSI6MTcwfV0=\" data-look=\"classic\" marker-end=\"url(#d-dfdb522e963023bb-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G1_G2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-dfdb522e963023bb-light-flowchart-G1-0\" data-look=\"classic\" transform=\"translate(173, 70.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.0234375\" y=\"-24.75\" width=\"154.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.0234375, -9.75)\"><rect></rect><foreignObject width=\"94.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Fast minor GCs</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-dfdb522e963023bb-light-flowchart-G2-1\" data-look=\"classic\" transform=\"translate(173, 204.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Occasional Full STW Pause (100ms - 2s)</p></span></div></foreignObject></g></g></g></g></g></g></g><defs><filter id=\"d-dfdb522e963023bb-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-dfdb522e963023bb-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-dfdb522e963023bb-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-dfdb522e963023bb-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 349.140625px;\" viewBox=\"0 0 349.140625 603\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-dfdb522e963023bb-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-dfdb522e963023bb-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-dfdb522e963023bb-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-dfdb522e963023bb-dark .error-icon{fill:rgb(21, 22, 23);}#d-dfdb522e963023bb-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-dfdb522e963023bb-dark .edge-thickness-normal{stroke-width:1px;}#d-dfdb522e963023bb-dark .edge-thickness-thick{stroke-width:3.5px;}#d-dfdb522e963023bb-dark .edge-pattern-solid{stroke-dasharray:0;}#d-dfdb522e963023bb-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-dfdb522e963023bb-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-dfdb522e963023bb-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-dfdb522e963023bb-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-dfdb522e963023bb-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-dfdb522e963023bb-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-dfdb522e963023bb-dark p{margin:0;}#d-dfdb522e963023bb-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-dfdb522e963023bb-dark .cluster-label text{fill:#eae9e8;}#d-dfdb522e963023bb-dark .cluster-label span{color:#eae9e8;}#d-dfdb522e963023bb-dark .cluster-label span p{background-color:transparent;}#d-dfdb522e963023bb-dark .label text,#d-dfdb522e963023bb-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-dfdb522e963023bb-dark .node rect,#d-dfdb522e963023bb-dark .node circle,#d-dfdb522e963023bb-dark .node ellipse,#d-dfdb522e963023bb-dark .node polygon,#d-dfdb522e963023bb-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-dfdb522e963023bb-dark .rough-node .label text,#d-dfdb522e963023bb-dark .node .label text,#d-dfdb522e963023bb-dark .image-shape .label,#d-dfdb522e963023bb-dark .icon-shape .label{text-anchor:middle;}#d-dfdb522e963023bb-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-dfdb522e963023bb-dark .rough-node .label,#d-dfdb522e963023bb-dark .node .label,#d-dfdb522e963023bb-dark .image-shape .label,#d-dfdb522e963023bb-dark .icon-shape .label{text-align:center;}#d-dfdb522e963023bb-dark .node.clickable{cursor:pointer;}#d-dfdb522e963023bb-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-dfdb522e963023bb-dark .arrowheadPath{fill:#eae9e8;}#d-dfdb522e963023bb-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-dfdb522e963023bb-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-dfdb522e963023bb-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-dfdb522e963023bb-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-dfdb522e963023bb-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-dfdb522e963023bb-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-dfdb522e963023bb-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-dfdb522e963023bb-dark .cluster text{fill:#eae9e8;}#d-dfdb522e963023bb-dark .cluster span{color:#eae9e8;}#d-dfdb522e963023bb-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-dfdb522e963023bb-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-dfdb522e963023bb-dark rect.text{fill:none;stroke-width:0;}#d-dfdb522e963023bb-dark .icon-shape,#d-dfdb522e963023bb-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-dfdb522e963023bb-dark .icon-shape p,#d-dfdb522e963023bb-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-dfdb522e963023bb-dark .icon-shape .label rect,#d-dfdb522e963023bb-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-dfdb522e963023bb-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-dfdb522e963023bb-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-dfdb522e963023bb-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-dfdb522e963023bb-dark [data-look=\"neo\"].node rect,#d-dfdb522e963023bb-dark [data-look=\"neo\"].cluster rect,#d-dfdb522e963023bb-dark [data-look=\"neo\"].node polygon{stroke:url(#d-dfdb522e963023bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-dfdb522e963023bb-dark [data-look=\"neo\"].node path{stroke:url(#d-dfdb522e963023bb-dark-gradient);stroke-width:1px;}#d-dfdb522e963023bb-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-dfdb522e963023bb-dark [data-look=\"neo\"].node circle{stroke:url(#d-dfdb522e963023bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-dfdb522e963023bb-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-dfdb522e963023bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-dfdb522e963023bb-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-dfdb522e963023bb-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-dfdb522e963023bb-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"></g><g class=\"edgeLabels\"></g><g class=\"nodes\"><g class=\"root\" transform=\"translate(1.5703125, 0)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-dfdb522e963023bb-dark-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"7.1328125\" y=\"8\" width=\"331.734375\" height=\"268.5\"></rect><g class=\"cluster-label \" transform=\"translate(11.1328125, 8)\"><foreignObject width=\"323.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Go Tri-Color Concurrent Collector (Low Tail Latency)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,114.5L173,120.75C173,127,173,139.5,173,151.333C173,163.167,173,174.333,173,179.917L173,185.5\" id=\"d-dfdb522e963023bb-dark-L_C1_C2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C1_C2_0\" data-points=\"W3sieCI6MTczLCJ5IjoxMTQuNX0seyJ4IjoxNzMsInkiOjE1Mn0seyJ4IjoxNzMsInkiOjE4OS41fV0=\" data-look=\"classic\" marker-end=\"url(#d-dfdb522e963023bb-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C1_C2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-success \" id=\"d-dfdb522e963023bb-dark-flowchart-C1-2\" data-look=\"classic\" transform=\"translate(173, 80)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Concurrent Mark Phase (&lt;1ms STW)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-dfdb522e963023bb-dark-flowchart-C2-3\" data-look=\"classic\" transform=\"translate(173, 214.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.859375\" y=\"-24.75\" width=\"203.71875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.859375, -9.75)\"><rect></rect><foreignObject width=\"143.71875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Predictable p99.9 SLAs</p></span></div></foreignObject></g></g></g></g><g class=\"root\" transform=\"translate(1.5703125, 318.5)\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-dfdb522e963023bb-dark-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"6.4296875\" y=\"8\" width=\"333.140625\" height=\"268.5\"></rect><g class=\"cluster-label \" transform=\"translate(10.4296875, 8)\"><foreignObject width=\"325.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Generational Collector (High Throughput, High Jitter)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M173,95L173,101.25C173,107.5,173,120,173,131.833C173,143.667,173,154.833,173,160.417L173,166\" id=\"d-dfdb522e963023bb-dark-L_G1_G2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G1_G2_0\" data-points=\"W3sieCI6MTczLCJ5Ijo5NX0seyJ4IjoxNzMsInkiOjEzMi41fSx7IngiOjE3MywieSI6MTcwfV0=\" data-look=\"classic\" marker-end=\"url(#d-dfdb522e963023bb-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G1_G2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-dfdb522e963023bb-dark-flowchart-G1-0\" data-look=\"classic\" transform=\"translate(173, 70.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.0234375\" y=\"-24.75\" width=\"154.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.0234375, -9.75)\"><rect></rect><foreignObject width=\"94.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Fast minor GCs</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-dfdb522e963023bb-dark-flowchart-G2-1\" data-look=\"classic\" transform=\"translate(173, 204.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Occasional Full STW Pause (100ms - 2s)</p></span></div></foreignObject></g></g></g></g></g></g></g><defs><filter id=\"d-dfdb522e963023bb-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-dfdb522e963023bb-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-dfdb522e963023bb-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"2-the-single-static-binary-model\">2. The Single Static Binary Model<a class=\"h-anchor\" href=\"#2-the-single-static-binary-model\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Deploying services in containerized cloud environments reveals the fragility of dynamic linking. Version mismatches between <code>glibc</code> on build machines and target container base images are a persistent source of production downtime.</p>\n<p>Go compiles to a single, self-contained static binary (<code>CGO_ENABLED=0</code>):</p>\n<ul>\n<li>Containers run on scratch or minimal distroless base images with zero system dependencies.</li>\n<li>Cold start times are measured in single-digit milliseconds rather than seconds.</li>\n<li>Attack surfaces are drastically reduced because the container filesystem contains only the executable binary.</li>\n</ul>\n<h2 id=\"3-readability-and-maintenance-at-scale\">3. Readability and Maintenance at Scale<a class=\"h-anchor\" href=\"#3-readability-and-maintenance-at-scale\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In large organizations with hundreds or thousands of engineers, code is read orders of magnitude more often than it is written.</p>\n<p>Languages with heavy metaprogramming (macros, runtime reflection magic, aspect-oriented annotations, operator overloading) allow individual developers to construct private domain-specific dialects. While expressive for the author, it forces every subsequent maintainer to decipher hidden execution paths:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// In Go, control flow is strictly explicit:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">result, err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> accountService.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Debit</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(ctx, req)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Errorf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"debit failed: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%w</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>There are no hidden exception handlers, no implicit aspect interceptors injected by reflection frameworks, and no invisible type conversions. What you read in the source code is precisely what the CPU executes.</p>\n<h2 id=\"4-compiler-velocity-as-an-engineering-asset\">4. Compiler Velocity as an Engineering Asset<a class=\"h-anchor\" href=\"#4-compiler-velocity-as-an-engineering-asset\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Compilation speed is a first-class language feature. The Go compiler (<code>gc</code>) was designed from inception to compile hundreds of thousands of lines of code per second.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"cdda5b7aab612580\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-cdda5b7aab612580-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 276px;\" viewBox=\"0 0 276 483\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-cdda5b7aab612580-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-cdda5b7aab612580-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-cdda5b7aab612580-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-cdda5b7aab612580-light .error-icon{fill:rgb(255, 255, 255);}#d-cdda5b7aab612580-light .error-text{fill:#000000;stroke:#000000;}#d-cdda5b7aab612580-light .edge-thickness-normal{stroke-width:1px;}#d-cdda5b7aab612580-light .edge-thickness-thick{stroke-width:3.5px;}#d-cdda5b7aab612580-light .edge-pattern-solid{stroke-dasharray:0;}#d-cdda5b7aab612580-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-cdda5b7aab612580-light .edge-pattern-dashed{stroke-dasharray:3;}#d-cdda5b7aab612580-light .edge-pattern-dotted{stroke-dasharray:2;}#d-cdda5b7aab612580-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-cdda5b7aab612580-light .marker.cross{stroke:rgb(44, 46, 48);}#d-cdda5b7aab612580-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-cdda5b7aab612580-light p{margin:0;}#d-cdda5b7aab612580-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-cdda5b7aab612580-light .cluster-label text{fill:#000000;}#d-cdda5b7aab612580-light .cluster-label span{color:#000000;}#d-cdda5b7aab612580-light .cluster-label span p{background-color:transparent;}#d-cdda5b7aab612580-light .label text,#d-cdda5b7aab612580-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-cdda5b7aab612580-light .node rect,#d-cdda5b7aab612580-light .node circle,#d-cdda5b7aab612580-light .node ellipse,#d-cdda5b7aab612580-light .node polygon,#d-cdda5b7aab612580-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-cdda5b7aab612580-light .rough-node .label text,#d-cdda5b7aab612580-light .node .label text,#d-cdda5b7aab612580-light .image-shape .label,#d-cdda5b7aab612580-light .icon-shape .label{text-anchor:middle;}#d-cdda5b7aab612580-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-cdda5b7aab612580-light .rough-node .label,#d-cdda5b7aab612580-light .node .label,#d-cdda5b7aab612580-light .image-shape .label,#d-cdda5b7aab612580-light .icon-shape .label{text-align:center;}#d-cdda5b7aab612580-light .node.clickable{cursor:pointer;}#d-cdda5b7aab612580-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-cdda5b7aab612580-light .arrowheadPath{fill:#000000;}#d-cdda5b7aab612580-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-cdda5b7aab612580-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-cdda5b7aab612580-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-cdda5b7aab612580-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-cdda5b7aab612580-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-cdda5b7aab612580-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-cdda5b7aab612580-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-cdda5b7aab612580-light .cluster text{fill:#000000;}#d-cdda5b7aab612580-light .cluster span{color:#000000;}#d-cdda5b7aab612580-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-cdda5b7aab612580-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-cdda5b7aab612580-light rect.text{fill:none;stroke-width:0;}#d-cdda5b7aab612580-light .icon-shape,#d-cdda5b7aab612580-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-cdda5b7aab612580-light .icon-shape p,#d-cdda5b7aab612580-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-cdda5b7aab612580-light .icon-shape .label rect,#d-cdda5b7aab612580-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-cdda5b7aab612580-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-cdda5b7aab612580-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-cdda5b7aab612580-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-cdda5b7aab612580-light [data-look=\"neo\"].node rect,#d-cdda5b7aab612580-light [data-look=\"neo\"].cluster rect,#d-cdda5b7aab612580-light [data-look=\"neo\"].node polygon{stroke:url(#d-cdda5b7aab612580-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-cdda5b7aab612580-light [data-look=\"neo\"].node path{stroke:url(#d-cdda5b7aab612580-light-gradient);stroke-width:1px;}#d-cdda5b7aab612580-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-cdda5b7aab612580-light [data-look=\"neo\"].node circle{stroke:url(#d-cdda5b7aab612580-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-cdda5b7aab612580-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-cdda5b7aab612580-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-cdda5b7aab612580-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-cdda5b7aab612580-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,57.5L138,61.667C138,65.833,138,74.167,138,81.833C138,89.5,138,96.5,138,100L138,103.5\" id=\"d-cdda5b7aab612580-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo1Ny41fSx7IngiOjEzOCwieSI6ODIuNX0seyJ4IjoxMzgsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-light_flowchart-v2-pointEnd)\"></path><path d=\"M138,157L138,161.167C138,165.333,138,173.667,138,181.333C138,189,138,196,138,199.5L138,203\" id=\"d-cdda5b7aab612580-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxNTd9LHsieCI6MTM4LCJ5IjoxODJ9LHsieCI6MTM4LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-light_flowchart-v2-pointEnd)\"></path><path d=\"M138,256.5L138,260.667C138,264.833,138,273.167,138,280.833C138,288.5,138,295.5,138,299L138,302.5\" id=\"d-cdda5b7aab612580-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTM4LCJ5IjoyNTYuNX0seyJ4IjoxMzgsInkiOjI4MS41fSx7IngiOjEzOCwieSI6MzA2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-light_flowchart-v2-pointEnd)\"></path><path d=\"M138,356L138,360.167C138,364.333,138,372.667,138,380.333C138,388,138,395,138,398.5L138,402\" id=\"d-cdda5b7aab612580-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTM4LCJ5IjozNTZ9LHsieCI6MTM4LCJ5IjozODF9LHsieCI6MTM4LCJ5Ijo0MDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-cdda5b7aab612580-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.578125\" y=\"-24.75\" width=\"219.15625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.578125, -9.75)\"><rect></rect><foreignObject width=\"159.15625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Fast Compiler (&lt;1s builds)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-cdda5b7aab612580-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-111.7890625\" y=\"-24.75\" width=\"223.578125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-81.7890625, -9.75)\"><rect></rect><foreignObject width=\"163.578125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Instant Unit Test Execution</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-cdda5b7aab612580-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(138, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-121.4609375\" y=\"-24.75\" width=\"242.921875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-91.4609375, -9.75)\"><rect></rect><foreignObject width=\"182.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Continuous Local TDD Cycles</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-cdda5b7aab612580-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(138, 331.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.0390625\" y=\"-24.75\" width=\"238.078125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.0390625, -9.75)\"><rect></rect><foreignObject width=\"178.078125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Accelerated CI/CD Feedback</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-cdda5b7aab612580-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(138, 440.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Rapid Production Hotfix Deployment</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-cdda5b7aab612580-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-cdda5b7aab612580-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-cdda5b7aab612580-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-cdda5b7aab612580-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 276px;\" viewBox=\"0 0 276 483\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-cdda5b7aab612580-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-cdda5b7aab612580-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-cdda5b7aab612580-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-cdda5b7aab612580-dark .error-icon{fill:rgb(21, 22, 23);}#d-cdda5b7aab612580-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-cdda5b7aab612580-dark .edge-thickness-normal{stroke-width:1px;}#d-cdda5b7aab612580-dark .edge-thickness-thick{stroke-width:3.5px;}#d-cdda5b7aab612580-dark .edge-pattern-solid{stroke-dasharray:0;}#d-cdda5b7aab612580-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-cdda5b7aab612580-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-cdda5b7aab612580-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-cdda5b7aab612580-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-cdda5b7aab612580-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-cdda5b7aab612580-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-cdda5b7aab612580-dark p{margin:0;}#d-cdda5b7aab612580-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-cdda5b7aab612580-dark .cluster-label text{fill:#eae9e8;}#d-cdda5b7aab612580-dark .cluster-label span{color:#eae9e8;}#d-cdda5b7aab612580-dark .cluster-label span p{background-color:transparent;}#d-cdda5b7aab612580-dark .label text,#d-cdda5b7aab612580-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-cdda5b7aab612580-dark .node rect,#d-cdda5b7aab612580-dark .node circle,#d-cdda5b7aab612580-dark .node ellipse,#d-cdda5b7aab612580-dark .node polygon,#d-cdda5b7aab612580-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-cdda5b7aab612580-dark .rough-node .label text,#d-cdda5b7aab612580-dark .node .label text,#d-cdda5b7aab612580-dark .image-shape .label,#d-cdda5b7aab612580-dark .icon-shape .label{text-anchor:middle;}#d-cdda5b7aab612580-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-cdda5b7aab612580-dark .rough-node .label,#d-cdda5b7aab612580-dark .node .label,#d-cdda5b7aab612580-dark .image-shape .label,#d-cdda5b7aab612580-dark .icon-shape .label{text-align:center;}#d-cdda5b7aab612580-dark .node.clickable{cursor:pointer;}#d-cdda5b7aab612580-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-cdda5b7aab612580-dark .arrowheadPath{fill:#eae9e8;}#d-cdda5b7aab612580-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-cdda5b7aab612580-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-cdda5b7aab612580-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-cdda5b7aab612580-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-cdda5b7aab612580-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-cdda5b7aab612580-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-cdda5b7aab612580-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-cdda5b7aab612580-dark .cluster text{fill:#eae9e8;}#d-cdda5b7aab612580-dark .cluster span{color:#eae9e8;}#d-cdda5b7aab612580-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-cdda5b7aab612580-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-cdda5b7aab612580-dark rect.text{fill:none;stroke-width:0;}#d-cdda5b7aab612580-dark .icon-shape,#d-cdda5b7aab612580-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-cdda5b7aab612580-dark .icon-shape p,#d-cdda5b7aab612580-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-cdda5b7aab612580-dark .icon-shape .label rect,#d-cdda5b7aab612580-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-cdda5b7aab612580-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-cdda5b7aab612580-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-cdda5b7aab612580-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-cdda5b7aab612580-dark [data-look=\"neo\"].node rect,#d-cdda5b7aab612580-dark [data-look=\"neo\"].cluster rect,#d-cdda5b7aab612580-dark [data-look=\"neo\"].node polygon{stroke:url(#d-cdda5b7aab612580-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-cdda5b7aab612580-dark [data-look=\"neo\"].node path{stroke:url(#d-cdda5b7aab612580-dark-gradient);stroke-width:1px;}#d-cdda5b7aab612580-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-cdda5b7aab612580-dark [data-look=\"neo\"].node circle{stroke:url(#d-cdda5b7aab612580-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-cdda5b7aab612580-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-cdda5b7aab612580-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-cdda5b7aab612580-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-cdda5b7aab612580-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-cdda5b7aab612580-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,57.5L138,61.667C138,65.833,138,74.167,138,81.833C138,89.5,138,96.5,138,100L138,103.5\" id=\"d-cdda5b7aab612580-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo1Ny41fSx7IngiOjEzOCwieSI6ODIuNX0seyJ4IjoxMzgsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-dark_flowchart-v2-pointEnd)\"></path><path d=\"M138,157L138,161.167C138,165.333,138,173.667,138,181.333C138,189,138,196,138,199.5L138,203\" id=\"d-cdda5b7aab612580-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxNTd9LHsieCI6MTM4LCJ5IjoxODJ9LHsieCI6MTM4LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-dark_flowchart-v2-pointEnd)\"></path><path d=\"M138,256.5L138,260.667C138,264.833,138,273.167,138,280.833C138,288.5,138,295.5,138,299L138,302.5\" id=\"d-cdda5b7aab612580-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTM4LCJ5IjoyNTYuNX0seyJ4IjoxMzgsInkiOjI4MS41fSx7IngiOjEzOCwieSI6MzA2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-dark_flowchart-v2-pointEnd)\"></path><path d=\"M138,356L138,360.167C138,364.333,138,372.667,138,380.333C138,388,138,395,138,398.5L138,402\" id=\"d-cdda5b7aab612580-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTM4LCJ5IjozNTZ9LHsieCI6MTM4LCJ5IjozODF9LHsieCI6MTM4LCJ5Ijo0MDZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-cdda5b7aab612580-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-cdda5b7aab612580-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-109.578125\" y=\"-24.75\" width=\"219.15625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-79.578125, -9.75)\"><rect></rect><foreignObject width=\"159.15625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Fast Compiler (&lt;1s builds)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-cdda5b7aab612580-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-111.7890625\" y=\"-24.75\" width=\"223.578125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-81.7890625, -9.75)\"><rect></rect><foreignObject width=\"163.578125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Instant Unit Test Execution</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-cdda5b7aab612580-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(138, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-121.4609375\" y=\"-24.75\" width=\"242.921875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-91.4609375, -9.75)\"><rect></rect><foreignObject width=\"182.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Continuous Local TDD Cycles</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-cdda5b7aab612580-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(138, 331.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.0390625\" y=\"-24.75\" width=\"238.078125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.0390625, -9.75)\"><rect></rect><foreignObject width=\"178.078125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Accelerated CI/CD Feedback</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-cdda5b7aab612580-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(138, 440.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Rapid Production Hotfix Deployment</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-cdda5b7aab612580-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-cdda5b7aab612580-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-cdda5b7aab612580-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>When CI pipelines complete test and build suites in 15 seconds rather than 15 minutes, developer iteration cycles accelerate, and production incident remediation times drop dramatically.</p>\n<h2 id=\"5-intentional-constraints\">5. Intentional Constraints<a class=\"h-anchor\" href=\"#5-intentional-constraints\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When Go introduced generics in version 1.18, it did so with strict conservative boundaries: type parameters without template specialization or metaprogramming recursion. This preserved Go’s fast compilation and monomorphized efficiency without code bloat.</p>\n<p>Similarly, explicit error handling (<code>if err != nil</code>) forces engineers to actively structure failure paths directly alongside the happy path, eliminating unhandled runtime exceptions.</p>\n<h2 id=\"summary\">Summary<a class=\"h-anchor\" href=\"#summary\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Go is not intended for every computational domain: it is not a systems kernel language like C, nor does it attempt the compile-time theorem proving of Rust.</p>\n<p>For backend microservices, payment pipelines, and cloud-native distributed systems, Go provides an optimal balance: brutal simplicity, instant deployments, and predictable latency.</p>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2025-06-15:watch/rookie",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Rookie",
      "content_text": "",
      "date_published": "2025-06-15T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-goroutine-stack-growth/",
      "url": "https://ashwingopalsamy.in/blog/go-goroutine-stack-growth/",
      "title": "How Goroutine Stacks Grow and Shrink",
      "content_text": "How contiguous stack allocation, stack maps, and runtime shrinking enable millions of lightweight goroutines.",
      "date_published": "2025-06-08T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Standard operating system threads typically allocate a fixed 1MB to 8MB stack upfront with guard pages. Spawning 100,000 OS threads would consume hundreds of gigabytes of virtual memory.</p>\n<p>Go achieves its high concurrency concurrency model by initializing goroutines with a <strong>2 KB stack</strong> and dynamically growing and shrinking memory in response to runtime call depth.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"0069a0f174023cdf\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-0069a0f174023cdf-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1605.46875px;\" viewBox=\"0 0 1605.46875 65.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-0069a0f174023cdf-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-0069a0f174023cdf-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-0069a0f174023cdf-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-0069a0f174023cdf-light .error-icon{fill:rgb(255, 255, 255);}#d-0069a0f174023cdf-light .error-text{fill:#000000;stroke:#000000;}#d-0069a0f174023cdf-light .edge-thickness-normal{stroke-width:1px;}#d-0069a0f174023cdf-light .edge-thickness-thick{stroke-width:3.5px;}#d-0069a0f174023cdf-light .edge-pattern-solid{stroke-dasharray:0;}#d-0069a0f174023cdf-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-0069a0f174023cdf-light .edge-pattern-dashed{stroke-dasharray:3;}#d-0069a0f174023cdf-light .edge-pattern-dotted{stroke-dasharray:2;}#d-0069a0f174023cdf-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-0069a0f174023cdf-light .marker.cross{stroke:rgb(44, 46, 48);}#d-0069a0f174023cdf-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-0069a0f174023cdf-light p{margin:0;}#d-0069a0f174023cdf-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-0069a0f174023cdf-light .cluster-label text{fill:#000000;}#d-0069a0f174023cdf-light .cluster-label span{color:#000000;}#d-0069a0f174023cdf-light .cluster-label span p{background-color:transparent;}#d-0069a0f174023cdf-light .label text,#d-0069a0f174023cdf-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-0069a0f174023cdf-light .node rect,#d-0069a0f174023cdf-light .node circle,#d-0069a0f174023cdf-light .node ellipse,#d-0069a0f174023cdf-light .node polygon,#d-0069a0f174023cdf-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-0069a0f174023cdf-light .rough-node .label text,#d-0069a0f174023cdf-light .node .label text,#d-0069a0f174023cdf-light .image-shape .label,#d-0069a0f174023cdf-light .icon-shape .label{text-anchor:middle;}#d-0069a0f174023cdf-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-0069a0f174023cdf-light .rough-node .label,#d-0069a0f174023cdf-light .node .label,#d-0069a0f174023cdf-light .image-shape .label,#d-0069a0f174023cdf-light .icon-shape .label{text-align:center;}#d-0069a0f174023cdf-light .node.clickable{cursor:pointer;}#d-0069a0f174023cdf-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-0069a0f174023cdf-light .arrowheadPath{fill:#000000;}#d-0069a0f174023cdf-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-0069a0f174023cdf-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-0069a0f174023cdf-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-0069a0f174023cdf-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-0069a0f174023cdf-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-0069a0f174023cdf-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-0069a0f174023cdf-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-0069a0f174023cdf-light .cluster text{fill:#000000;}#d-0069a0f174023cdf-light .cluster span{color:#000000;}#d-0069a0f174023cdf-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-0069a0f174023cdf-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-0069a0f174023cdf-light rect.text{fill:none;stroke-width:0;}#d-0069a0f174023cdf-light .icon-shape,#d-0069a0f174023cdf-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-0069a0f174023cdf-light .icon-shape p,#d-0069a0f174023cdf-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-0069a0f174023cdf-light .icon-shape .label rect,#d-0069a0f174023cdf-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-0069a0f174023cdf-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-0069a0f174023cdf-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-0069a0f174023cdf-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-0069a0f174023cdf-light [data-look=\"neo\"].node rect,#d-0069a0f174023cdf-light [data-look=\"neo\"].cluster rect,#d-0069a0f174023cdf-light [data-look=\"neo\"].node polygon{stroke:url(#d-0069a0f174023cdf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-0069a0f174023cdf-light [data-look=\"neo\"].node path{stroke:url(#d-0069a0f174023cdf-light-gradient);stroke-width:1px;}#d-0069a0f174023cdf-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-0069a0f174023cdf-light [data-look=\"neo\"].node circle{stroke:url(#d-0069a0f174023cdf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-0069a0f174023cdf-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-0069a0f174023cdf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-0069a0f174023cdf-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-0069a0f174023cdf-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M203.25,32.75L207.417,32.75C211.583,32.75,219.917,32.75,227.583,32.75C235.25,32.75,242.25,32.75,245.75,32.75L249.25,32.75\" id=\"d-0069a0f174023cdf-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjAzLjI1LCJ5IjozMi43NX0seyJ4IjoyMjguMjUsInkiOjMyLjc1fSx7IngiOjI1My4yNSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-light_flowchart-v2-pointEnd)\"></path><path d=\"M435.891,32.75L449.867,32.75C463.844,32.75,491.797,32.75,519.083,32.75C546.37,32.75,572.99,32.75,586.299,32.75L599.609,32.75\" id=\"d-0069a0f174023cdf-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NDM1Ljg5MDYyNSwieSI6MzIuNzV9LHsieCI6NTE5Ljc1LCJ5IjozMi43NX0seyJ4Ijo2MDMuNjA5Mzc1LCJ5IjozMi43NX1d\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-light_flowchart-v2-pointEnd)\"></path><path d=\"M778.469,32.75L782.635,32.75C786.802,32.75,795.135,32.75,802.802,32.75C810.469,32.75,817.469,32.75,820.969,32.75L824.469,32.75\" id=\"d-0069a0f174023cdf-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6Nzc4LjQ2ODc1LCJ5IjozMi43NX0seyJ4Ijo4MDMuNDY4NzUsInkiOjMyLjc1fSx7IngiOjgyOC40Njg3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-light_flowchart-v2-pointEnd)\"></path><path d=\"M1068.484,32.75L1072.651,32.75C1076.818,32.75,1085.151,32.75,1092.818,32.75C1100.484,32.75,1107.484,32.75,1110.984,32.75L1114.484,32.75\" id=\"d-0069a0f174023cdf-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTA2OC40ODQzNzUsInkiOjMyLjc1fSx7IngiOjEwOTMuNDg0Mzc1LCJ5IjozMi43NX0seyJ4IjoxMTE4LjQ4NDM3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-light_flowchart-v2-pointEnd)\"></path><path d=\"M1374.344,32.75L1378.51,32.75C1382.677,32.75,1391.01,32.75,1398.677,32.75C1406.344,32.75,1413.344,32.75,1416.844,32.75L1420.344,32.75\" id=\"d-0069a0f174023cdf-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTM3NC4zNDM3NSwieSI6MzIuNzV9LHsieCI6MTM5OS4zNDM3NSwieSI6MzIuNzV9LHsieCI6MTQyNC4zNDM3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(519.75, 32.75)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-58.859375, -9.75)\"><foreignObject width=\"117.71875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>SP &lt;= stackguard0</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-0069a0f174023cdf-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(105.625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.625\" y=\"-24.75\" width=\"195.25\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.625, -9.75)\"><rect></rect><foreignObject width=\"135.25\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Goroutine Start (2 KB)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-0069a0f174023cdf-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(344.5703125, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.3203125\" y=\"-24.75\" width=\"182.640625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.3203125, -9.75)\"><rect></rect><foreignObject width=\"122.640625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Function Call Check</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-0069a0f174023cdf-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(691.0390625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.4296875\" y=\"-24.75\" width=\"174.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.4296875, -9.75)\"><rect></rect><foreignObject width=\"114.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>runtime.morestack</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-0069a0f174023cdf-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(948.4765625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-120.0078125\" y=\"-24.75\" width=\"240.015625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-90.0078125, -9.75)\"><rect></rect><foreignObject width=\"180.015625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Allocate 2x Contiguous Block</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-0069a0f174023cdf-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1246.4140625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-127.9296875\" y=\"-24.75\" width=\"255.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-97.9296875, -9.75)\"><rect></rect><foreignObject width=\"195.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>copystack &amp; Pointer Adjustment</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-0069a0f174023cdf-light-flowchart-F-9\" data-look=\"classic\" transform=\"translate(1510.90625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.5625\" y=\"-24.75\" width=\"173.125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.5625, -9.75)\"><rect></rect><foreignObject width=\"113.125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Resume Execution</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-0069a0f174023cdf-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-0069a0f174023cdf-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-0069a0f174023cdf-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-0069a0f174023cdf-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1605.46875px;\" viewBox=\"0 0 1605.46875 65.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-0069a0f174023cdf-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-0069a0f174023cdf-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-0069a0f174023cdf-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-0069a0f174023cdf-dark .error-icon{fill:rgb(21, 22, 23);}#d-0069a0f174023cdf-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-0069a0f174023cdf-dark .edge-thickness-normal{stroke-width:1px;}#d-0069a0f174023cdf-dark .edge-thickness-thick{stroke-width:3.5px;}#d-0069a0f174023cdf-dark .edge-pattern-solid{stroke-dasharray:0;}#d-0069a0f174023cdf-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-0069a0f174023cdf-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-0069a0f174023cdf-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-0069a0f174023cdf-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-0069a0f174023cdf-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-0069a0f174023cdf-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-0069a0f174023cdf-dark p{margin:0;}#d-0069a0f174023cdf-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-0069a0f174023cdf-dark .cluster-label text{fill:#eae9e8;}#d-0069a0f174023cdf-dark .cluster-label span{color:#eae9e8;}#d-0069a0f174023cdf-dark .cluster-label span p{background-color:transparent;}#d-0069a0f174023cdf-dark .label text,#d-0069a0f174023cdf-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-0069a0f174023cdf-dark .node rect,#d-0069a0f174023cdf-dark .node circle,#d-0069a0f174023cdf-dark .node ellipse,#d-0069a0f174023cdf-dark .node polygon,#d-0069a0f174023cdf-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-0069a0f174023cdf-dark .rough-node .label text,#d-0069a0f174023cdf-dark .node .label text,#d-0069a0f174023cdf-dark .image-shape .label,#d-0069a0f174023cdf-dark .icon-shape .label{text-anchor:middle;}#d-0069a0f174023cdf-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-0069a0f174023cdf-dark .rough-node .label,#d-0069a0f174023cdf-dark .node .label,#d-0069a0f174023cdf-dark .image-shape .label,#d-0069a0f174023cdf-dark .icon-shape .label{text-align:center;}#d-0069a0f174023cdf-dark .node.clickable{cursor:pointer;}#d-0069a0f174023cdf-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-0069a0f174023cdf-dark .arrowheadPath{fill:#eae9e8;}#d-0069a0f174023cdf-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-0069a0f174023cdf-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-0069a0f174023cdf-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-0069a0f174023cdf-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-0069a0f174023cdf-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-0069a0f174023cdf-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-0069a0f174023cdf-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-0069a0f174023cdf-dark .cluster text{fill:#eae9e8;}#d-0069a0f174023cdf-dark .cluster span{color:#eae9e8;}#d-0069a0f174023cdf-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-0069a0f174023cdf-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-0069a0f174023cdf-dark rect.text{fill:none;stroke-width:0;}#d-0069a0f174023cdf-dark .icon-shape,#d-0069a0f174023cdf-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-0069a0f174023cdf-dark .icon-shape p,#d-0069a0f174023cdf-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-0069a0f174023cdf-dark .icon-shape .label rect,#d-0069a0f174023cdf-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-0069a0f174023cdf-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-0069a0f174023cdf-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-0069a0f174023cdf-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-0069a0f174023cdf-dark [data-look=\"neo\"].node rect,#d-0069a0f174023cdf-dark [data-look=\"neo\"].cluster rect,#d-0069a0f174023cdf-dark [data-look=\"neo\"].node polygon{stroke:url(#d-0069a0f174023cdf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-0069a0f174023cdf-dark [data-look=\"neo\"].node path{stroke:url(#d-0069a0f174023cdf-dark-gradient);stroke-width:1px;}#d-0069a0f174023cdf-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-0069a0f174023cdf-dark [data-look=\"neo\"].node circle{stroke:url(#d-0069a0f174023cdf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-0069a0f174023cdf-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-0069a0f174023cdf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-0069a0f174023cdf-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-0069a0f174023cdf-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-0069a0f174023cdf-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M203.25,32.75L207.417,32.75C211.583,32.75,219.917,32.75,227.583,32.75C235.25,32.75,242.25,32.75,245.75,32.75L249.25,32.75\" id=\"d-0069a0f174023cdf-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjAzLjI1LCJ5IjozMi43NX0seyJ4IjoyMjguMjUsInkiOjMyLjc1fSx7IngiOjI1My4yNSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M435.891,32.75L449.867,32.75C463.844,32.75,491.797,32.75,519.083,32.75C546.37,32.75,572.99,32.75,586.299,32.75L599.609,32.75\" id=\"d-0069a0f174023cdf-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6NDM1Ljg5MDYyNSwieSI6MzIuNzV9LHsieCI6NTE5Ljc1LCJ5IjozMi43NX0seyJ4Ijo2MDMuNjA5Mzc1LCJ5IjozMi43NX1d\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M778.469,32.75L782.635,32.75C786.802,32.75,795.135,32.75,802.802,32.75C810.469,32.75,817.469,32.75,820.969,32.75L824.469,32.75\" id=\"d-0069a0f174023cdf-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6Nzc4LjQ2ODc1LCJ5IjozMi43NX0seyJ4Ijo4MDMuNDY4NzUsInkiOjMyLjc1fSx7IngiOjgyOC40Njg3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1068.484,32.75L1072.651,32.75C1076.818,32.75,1085.151,32.75,1092.818,32.75C1100.484,32.75,1107.484,32.75,1110.984,32.75L1114.484,32.75\" id=\"d-0069a0f174023cdf-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTA2OC40ODQzNzUsInkiOjMyLjc1fSx7IngiOjEwOTMuNDg0Mzc1LCJ5IjozMi43NX0seyJ4IjoxMTE4LjQ4NDM3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1374.344,32.75L1378.51,32.75C1382.677,32.75,1391.01,32.75,1398.677,32.75C1406.344,32.75,1413.344,32.75,1416.844,32.75L1420.344,32.75\" id=\"d-0069a0f174023cdf-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTM3NC4zNDM3NSwieSI6MzIuNzV9LHsieCI6MTM5OS4zNDM3NSwieSI6MzIuNzV9LHsieCI6MTQyNC4zNDM3NSwieSI6MzIuNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-0069a0f174023cdf-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(519.75, 32.75)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-58.859375, -9.75)\"><foreignObject width=\"117.71875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>SP &lt;= stackguard0</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-0069a0f174023cdf-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(105.625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-97.625\" y=\"-24.75\" width=\"195.25\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-67.625, -9.75)\"><rect></rect><foreignObject width=\"135.25\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Goroutine Start (2 KB)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-0069a0f174023cdf-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(344.5703125, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.3203125\" y=\"-24.75\" width=\"182.640625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.3203125, -9.75)\"><rect></rect><foreignObject width=\"122.640625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Function Call Check</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-0069a0f174023cdf-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(691.0390625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.4296875\" y=\"-24.75\" width=\"174.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.4296875, -9.75)\"><rect></rect><foreignObject width=\"114.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>runtime.morestack</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-0069a0f174023cdf-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(948.4765625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-120.0078125\" y=\"-24.75\" width=\"240.015625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-90.0078125, -9.75)\"><rect></rect><foreignObject width=\"180.015625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Allocate 2x Contiguous Block</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-0069a0f174023cdf-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(1246.4140625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-127.9296875\" y=\"-24.75\" width=\"255.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-97.9296875, -9.75)\"><rect></rect><foreignObject width=\"195.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>copystack &amp; Pointer Adjustment</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-0069a0f174023cdf-dark-flowchart-F-9\" data-look=\"classic\" transform=\"translate(1510.90625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.5625\" y=\"-24.75\" width=\"173.125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.5625, -9.75)\"><rect></rect><foreignObject width=\"113.125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Resume Execution</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-0069a0f174023cdf-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-0069a0f174023cdf-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-0069a0f174023cdf-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"the-historical-problem-segmented-stacks-and-the-hot-split\">The Historical Problem: Segmented Stacks and the “Hot Split”<a class=\"h-anchor\" href=\"#the-historical-problem-segmented-stacks-and-the-hot-split\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In Go 1.0 through 1.3, Go used <strong>segmented stacks</strong> (split stacks). When a function needed more stack space than remained in its current 2KB block, the runtime allocated a new heap segment and linked it via a pointer list.</p>\n<p>This created a severe performance failure mode known as the <strong>hot split problem</strong>:</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"645733d8b57bfa51\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-645733d8b57bfa51-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 867.5px;\" viewBox=\"-117.5 -10 867.5 471\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"453\" y=\"385\" fill=\"#eaeaea\" stroke=\"#666\" width=\"247\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"576.5\" y=\"417.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"576.5\" dy=\"0\">runtime.morestack / lessstack</tspan></text></g><g><rect x=\"0\" y=\"385\" fill=\"#eaeaea\" stroke=\"#666\" width=\"189\" height=\"65\" name=\"TL\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"94.5\" y=\"417.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"94.5\" dy=\"0\">Tight Loop in Function</tspan></text></g><g><line id=\"d-645733d8b57bfa51-light-actor1\" x1=\"576.5\" y1=\"65\" x2=\"576.5\" y2=\"385\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Runtime\" data-et=\"life-line\" data-id=\"Runtime\"></line><g id=\"d-645733d8b57bfa51-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Runtime\"><rect x=\"453\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"247\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"576.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"576.5\" dy=\"0\">runtime.morestack / lessstack</tspan></text></g></g><g><line id=\"d-645733d8b57bfa51-light-actor0\" x1=\"94.5\" y1=\"65\" x2=\"94.5\" y2=\"385\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"TL\" data-et=\"life-line\" data-id=\"TL\"></line><g id=\"d-645733d8b57bfa51-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"TL\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"189\" height=\"65\" name=\"TL\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"94.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"94.5\" dy=\"0\">Tight Loop in Function</tspan></text></g></g><style>#d-645733d8b57bfa51-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-645733d8b57bfa51-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-645733d8b57bfa51-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-645733d8b57bfa51-light .error-icon{fill:rgb(255, 255, 255);}#d-645733d8b57bfa51-light .error-text{fill:#000000;stroke:#000000;}#d-645733d8b57bfa51-light .edge-thickness-normal{stroke-width:1px;}#d-645733d8b57bfa51-light .edge-thickness-thick{stroke-width:3.5px;}#d-645733d8b57bfa51-light .edge-pattern-solid{stroke-dasharray:0;}#d-645733d8b57bfa51-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-645733d8b57bfa51-light .edge-pattern-dashed{stroke-dasharray:3;}#d-645733d8b57bfa51-light .edge-pattern-dotted{stroke-dasharray:2;}#d-645733d8b57bfa51-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light .marker.cross{stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-645733d8b57bfa51-light p{margin:0;}#d-645733d8b57bfa51-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-645733d8b57bfa51-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-645733d8b57bfa51-light .actor-line{stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-645733d8b57bfa51-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-645733d8b57bfa51-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-645733d8b57bfa51-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-645733d8b57bfa51-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-645733d8b57bfa51-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-645733d8b57bfa51-light .labelText,#d-645733d8b57bfa51-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-645733d8b57bfa51-light .loopText,#d-645733d8b57bfa51-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-645733d8b57bfa51-light .sectionTitle,#d-645733d8b57bfa51-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-645733d8b57bfa51-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-645733d8b57bfa51-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-645733d8b57bfa51-light .noteText,#d-645733d8b57bfa51-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-645733d8b57bfa51-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-645733d8b57bfa51-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-645733d8b57bfa51-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-645733d8b57bfa51-light .actorPopupMenu{position:absolute;}#d-645733d8b57bfa51-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-645733d8b57bfa51-light .actor-man circle,#d-645733d8b57bfa51-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-645733d8b57bfa51-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-645733d8b57bfa51-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-645733d8b57bfa51-light [data-look=\"neo\"].node rect,#d-645733d8b57bfa51-light [data-look=\"neo\"].cluster rect,#d-645733d8b57bfa51-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-645733d8b57bfa51-light [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-645733d8b57bfa51-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-645733d8b57bfa51-light [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-645733d8b57bfa51-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-645733d8b57bfa51-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-645733d8b57bfa51-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-645733d8b57bfa51-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-645733d8b57bfa51-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"-67.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"324\" height=\"40\" class=\"note\"></rect><text x=\"95\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"95\">Stack pointer sitting near 2 KB threshold</tspan></text></g><g data-et=\"note\" data-id=\"i5\"><rect x=\"69.5\" y=\"325\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"532\" height=\"40\" class=\"note\"></rect><text x=\"336\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"336\">Mass memory allocator thrashing in CPU cache</tspan></text></g><text x=\"334\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Call f() -&gt; triggers morestack (Allocates new segment)</text><line x1=\"95.5\" y1=\"165\" x2=\"572.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"TL\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"337\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">f() returns -&gt; triggers lessstack (Frees segment)</text><line x1=\"575.5\" y1=\"215\" x2=\"98.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Runtime\" data-to=\"TL\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"334\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Next loop iteration calls f() -&gt; triggers morestack again</text><line x1=\"95.5\" y1=\"265\" x2=\"572.5\" y2=\"265\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"TL\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"337\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">f() returns -&gt; triggers lessstack again</text><line x1=\"575.5\" y1=\"315\" x2=\"98.5\" y2=\"315\" class=\"messageLine1\" data-et=\"message\" data-id=\"i4\" data-from=\"Runtime\" data-to=\"TL\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-645733d8b57bfa51-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 867.5px;\" viewBox=\"-117.5 -10 867.5 471\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"453\" y=\"385\" fill=\"#eaeaea\" stroke=\"#666\" width=\"247\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"576.5\" y=\"417.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"576.5\" dy=\"0\">runtime.morestack / lessstack</tspan></text></g><g><rect x=\"0\" y=\"385\" fill=\"#eaeaea\" stroke=\"#666\" width=\"189\" height=\"65\" name=\"TL\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"94.5\" y=\"417.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"94.5\" dy=\"0\">Tight Loop in Function</tspan></text></g><g><line id=\"d-645733d8b57bfa51-dark-actor1\" x1=\"576.5\" y1=\"65\" x2=\"576.5\" y2=\"385\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Runtime\" data-et=\"life-line\" data-id=\"Runtime\"></line><g id=\"d-645733d8b57bfa51-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Runtime\"><rect x=\"453\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"247\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"576.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"576.5\" dy=\"0\">runtime.morestack / lessstack</tspan></text></g></g><g><line id=\"d-645733d8b57bfa51-dark-actor0\" x1=\"94.5\" y1=\"65\" x2=\"94.5\" y2=\"385\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"TL\" data-et=\"life-line\" data-id=\"TL\"></line><g id=\"d-645733d8b57bfa51-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"TL\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"189\" height=\"65\" name=\"TL\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"94.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"94.5\" dy=\"0\">Tight Loop in Function</tspan></text></g></g><style>#d-645733d8b57bfa51-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-645733d8b57bfa51-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-645733d8b57bfa51-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-645733d8b57bfa51-dark .error-icon{fill:rgb(21, 22, 23);}#d-645733d8b57bfa51-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-645733d8b57bfa51-dark .edge-thickness-normal{stroke-width:1px;}#d-645733d8b57bfa51-dark .edge-thickness-thick{stroke-width:3.5px;}#d-645733d8b57bfa51-dark .edge-pattern-solid{stroke-dasharray:0;}#d-645733d8b57bfa51-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-645733d8b57bfa51-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-645733d8b57bfa51-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-645733d8b57bfa51-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-645733d8b57bfa51-dark p{margin:0;}#d-645733d8b57bfa51-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-645733d8b57bfa51-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-645733d8b57bfa51-dark .actor-line{stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-645733d8b57bfa51-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-645733d8b57bfa51-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-645733d8b57bfa51-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-645733d8b57bfa51-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-645733d8b57bfa51-dark .labelText,#d-645733d8b57bfa51-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-645733d8b57bfa51-dark .loopText,#d-645733d8b57bfa51-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-645733d8b57bfa51-dark .sectionTitle,#d-645733d8b57bfa51-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-645733d8b57bfa51-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-645733d8b57bfa51-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-645733d8b57bfa51-dark .noteText,#d-645733d8b57bfa51-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-645733d8b57bfa51-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-645733d8b57bfa51-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-645733d8b57bfa51-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-645733d8b57bfa51-dark .actorPopupMenu{position:absolute;}#d-645733d8b57bfa51-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-645733d8b57bfa51-dark .actor-man circle,#d-645733d8b57bfa51-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-645733d8b57bfa51-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-645733d8b57bfa51-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-645733d8b57bfa51-dark [data-look=\"neo\"].node rect,#d-645733d8b57bfa51-dark [data-look=\"neo\"].cluster rect,#d-645733d8b57bfa51-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-645733d8b57bfa51-dark [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-645733d8b57bfa51-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-645733d8b57bfa51-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-645733d8b57bfa51-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-645733d8b57bfa51-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-645733d8b57bfa51-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-645733d8b57bfa51-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-645733d8b57bfa51-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-645733d8b57bfa51-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-645733d8b57bfa51-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"-67.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"324\" height=\"40\" class=\"note\"></rect><text x=\"95\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"95\">Stack pointer sitting near 2 KB threshold</tspan></text></g><g data-et=\"note\" data-id=\"i5\"><rect x=\"69.5\" y=\"325\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"532\" height=\"40\" class=\"note\"></rect><text x=\"336\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"336\">Mass memory allocator thrashing in CPU cache</tspan></text></g><text x=\"334\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Call f() -&gt; triggers morestack (Allocates new segment)</text><line x1=\"95.5\" y1=\"165\" x2=\"572.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"TL\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"337\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">f() returns -&gt; triggers lessstack (Frees segment)</text><line x1=\"575.5\" y1=\"215\" x2=\"98.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Runtime\" data-to=\"TL\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"334\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Next loop iteration calls f() -&gt; triggers morestack again</text><line x1=\"95.5\" y1=\"265\" x2=\"572.5\" y2=\"265\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"TL\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"337\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">f() returns -&gt; triggers lessstack again</text><line x1=\"575.5\" y1=\"315\" x2=\"98.5\" y2=\"315\" class=\"messageLine1\" data-et=\"message\" data-id=\"i4\" data-from=\"Runtime\" data-to=\"TL\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-645733d8b57bfa51-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>If a loop executed near the 2KB stack boundary and called a function, every iteration triggered a dynamic allocation and deallocation cycle.</p>\n<h2 id=\"the-modern-solution-contiguous-stacks-go-14\">The Modern Solution: Contiguous Stacks (Go 1.4+)<a class=\"h-anchor\" href=\"#the-modern-solution-contiguous-stacks-go-14\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In Go 1.4, the Go team replaced segmented stacks with <strong>contiguous stack reallocation</strong>:</p>\n<ol>\n<li>When a goroutine outgrows its current stack, the runtime allocates a new contiguous memory buffer of <strong>double the size</strong> (e.g. 2KB <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span></span></p> 4KB <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span></span></p> 8KB <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>→</mo></mrow><annotation encoding=\"application/x-tex\">\\to</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.3669em;\"></span><span class=\"mrel\">→</span></span></span></span></span></p> 16KB).</li>\n<li>The runtime invokes <code>runtime.copystack</code>, copying all active stack frames from the old buffer to the new buffer.</li>\n<li><strong>Pointer Relocation with Stack Maps</strong>: The compiler generates static <em>stack maps</em> that tell the garbage collector and runtime exactly which 8-byte words on the stack are pointers. The runtime updates every internal pointer to point to the relocated frame addresses in the new memory block.</li>\n<li>The old stack buffer is released to the runtime mcache pool.</li>\n</ol>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"421f28fb120d6e80\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-421f28fb120d6e80-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 745.84375px;\" viewBox=\"0 0 745.84375 434\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-421f28fb120d6e80-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-421f28fb120d6e80-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-421f28fb120d6e80-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-421f28fb120d6e80-light .error-icon{fill:rgb(255, 255, 255);}#d-421f28fb120d6e80-light .error-text{fill:#000000;stroke:#000000;}#d-421f28fb120d6e80-light .edge-thickness-normal{stroke-width:1px;}#d-421f28fb120d6e80-light .edge-thickness-thick{stroke-width:3.5px;}#d-421f28fb120d6e80-light .edge-pattern-solid{stroke-dasharray:0;}#d-421f28fb120d6e80-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-421f28fb120d6e80-light .edge-pattern-dashed{stroke-dasharray:3;}#d-421f28fb120d6e80-light .edge-pattern-dotted{stroke-dasharray:2;}#d-421f28fb120d6e80-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-421f28fb120d6e80-light .marker.cross{stroke:rgb(44, 46, 48);}#d-421f28fb120d6e80-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-421f28fb120d6e80-light p{margin:0;}#d-421f28fb120d6e80-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-421f28fb120d6e80-light .cluster-label text{fill:#000000;}#d-421f28fb120d6e80-light .cluster-label span{color:#000000;}#d-421f28fb120d6e80-light .cluster-label span p{background-color:transparent;}#d-421f28fb120d6e80-light .label text,#d-421f28fb120d6e80-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-421f28fb120d6e80-light .node rect,#d-421f28fb120d6e80-light .node circle,#d-421f28fb120d6e80-light .node ellipse,#d-421f28fb120d6e80-light .node polygon,#d-421f28fb120d6e80-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-421f28fb120d6e80-light .rough-node .label text,#d-421f28fb120d6e80-light .node .label text,#d-421f28fb120d6e80-light .image-shape .label,#d-421f28fb120d6e80-light .icon-shape .label{text-anchor:middle;}#d-421f28fb120d6e80-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-421f28fb120d6e80-light .rough-node .label,#d-421f28fb120d6e80-light .node .label,#d-421f28fb120d6e80-light .image-shape .label,#d-421f28fb120d6e80-light .icon-shape .label{text-align:center;}#d-421f28fb120d6e80-light .node.clickable{cursor:pointer;}#d-421f28fb120d6e80-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-421f28fb120d6e80-light .arrowheadPath{fill:#000000;}#d-421f28fb120d6e80-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-421f28fb120d6e80-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-421f28fb120d6e80-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-421f28fb120d6e80-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-421f28fb120d6e80-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-421f28fb120d6e80-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-421f28fb120d6e80-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-421f28fb120d6e80-light .cluster text{fill:#000000;}#d-421f28fb120d6e80-light .cluster span{color:#000000;}#d-421f28fb120d6e80-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-421f28fb120d6e80-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-421f28fb120d6e80-light rect.text{fill:none;stroke-width:0;}#d-421f28fb120d6e80-light .icon-shape,#d-421f28fb120d6e80-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-421f28fb120d6e80-light .icon-shape p,#d-421f28fb120d6e80-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-421f28fb120d6e80-light .icon-shape .label rect,#d-421f28fb120d6e80-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-421f28fb120d6e80-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-421f28fb120d6e80-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-421f28fb120d6e80-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-421f28fb120d6e80-light [data-look=\"neo\"].node rect,#d-421f28fb120d6e80-light [data-look=\"neo\"].cluster rect,#d-421f28fb120d6e80-light [data-look=\"neo\"].node polygon{stroke:url(#d-421f28fb120d6e80-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-421f28fb120d6e80-light [data-look=\"neo\"].node path{stroke:url(#d-421f28fb120d6e80-light-gradient);stroke-width:1px;}#d-421f28fb120d6e80-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-421f28fb120d6e80-light [data-look=\"neo\"].node circle{stroke:url(#d-421f28fb120d6e80-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-421f28fb120d6e80-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-421f28fb120d6e80-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-421f28fb120d6e80-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-421f28fb120d6e80-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-421f28fb120d6e80-light-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"434.34375\" y=\"8\" width=\"303.5\" height=\"418\"></rect><g class=\"cluster-label \" transform=\"translate(532.078125, 8)\"><foreignObject width=\"108.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>New Stack (8 KB)</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-421f28fb120d6e80-light-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"233.203125\" height=\"318.5\"></rect><g class=\"cluster-label \" transform=\"translate(73.765625, 8)\"><foreignObject width=\"101.671875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Old Stack (4 KB)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M199.633,67.75L206.561,67.75C213.49,67.75,227.346,67.75,250.37,67.75C273.393,67.75,305.583,67.75,337.773,67.75C369.964,67.75,402.154,67.75,429.167,67.75C456.18,67.75,478.016,67.75,488.934,67.75L499.852,67.75\" id=\"d-421f28fb120d6e80-light-L_O1_N1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_O1_N1_0\" data-points=\"W3sieCI6MTk5LjYzMjgxMjUsInkiOjY3Ljc1fSx7IngiOjI0MS4yMDMxMjUsInkiOjY3Ljc1fSx7IngiOjMzNy43NzM0Mzc1LCJ5Ijo2Ny43NX0seyJ4Ijo0MzQuMzQzNzUsInkiOjY3Ljc1fSx7IngiOjUwMy44NTE1NjI1LCJ5Ijo2Ny43NX1d\" data-look=\"classic\" marker-end=\"url(#d-421f28fb120d6e80-light_flowchart-v2-pointEnd)\"></path><path d=\"M207.5,167.25L213.117,167.25C218.734,167.25,229.969,167.25,251.681,167.25C273.393,167.25,305.583,167.25,337.773,167.25C369.964,167.25,402.154,167.25,428.947,167.25C455.74,167.25,477.135,167.25,487.833,167.25L498.531,167.25\" id=\"d-421f28fb120d6e80-light-L_O2_N2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_O2_N2_0\" data-points=\"W3sieCI6MjA3LjUsInkiOjE2Ny4yNX0seyJ4IjoyNDEuMjAzMTI1LCJ5IjoxNjcuMjV9LHsieCI6MzM3Ljc3MzQzNzUsInkiOjE2Ny4yNX0seyJ4Ijo0MzQuMzQzNzUsInkiOjE2Ny4yNX0seyJ4Ijo1MDIuNTMxMjUsInkiOjE2Ny4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-421f28fb120d6e80-light_flowchart-v2-pointEnd)\"></path><path d=\"M216.203,266.75L220.37,266.75C224.536,266.75,232.87,266.75,253.132,266.75C273.393,266.75,305.583,266.75,337.773,266.75C369.964,266.75,402.154,266.75,421.749,266.75C441.344,266.75,448.344,266.75,451.844,266.75L455.344,266.75\" id=\"d-421f28fb120d6e80-light-L_O3_N3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_O3_N3_0\" data-points=\"W3sieCI6MjE2LjIwMzEyNSwieSI6MjY2Ljc1fSx7IngiOjI0MS4yMDMxMjUsInkiOjI2Ni43NX0seyJ4IjozMzcuNzczNDM3NSwieSI6MjY2Ljc1fSx7IngiOjQzNC4zNDM3NSwieSI6MjY2Ljc1fSx7IngiOjQ1OS4zNDM3NSwieSI6MjY2Ljc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-421f28fb120d6e80-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(337.7734375, 67.75)\"><g class=\"label\" data-id=\"L_O1_N1_0\" transform=\"translate(-43.2578125, -9.75)\"><foreignObject width=\"86.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Copy memory</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(337.7734375, 167.25)\"><g class=\"label\" data-id=\"L_O2_N2_0\" transform=\"translate(-43.2578125, -9.75)\"><foreignObject width=\"86.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Copy memory</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(337.7734375, 266.75)\"><g class=\"label\" data-id=\"L_O3_N3_0\" transform=\"translate(-71.5703125, -9.75)\"><foreignObject width=\"143.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Rewrite via Stack Maps</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-421f28fb120d6e80-light-flowchart-O1-0\" data-look=\"classic\" transform=\"translate(124.6015625, 67.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-75.03125\" y=\"-24.75\" width=\"150.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-45.03125, -9.75)\"><rect></rect><foreignObject width=\"90.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 1 (main)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-421f28fb120d6e80-light-flowchart-O2-1\" data-look=\"classic\" transform=\"translate(124.6015625, 167.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.8984375\" y=\"-24.75\" width=\"165.796875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.8984375, -9.75)\"><rect></rect><foreignObject width=\"105.796875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 2 (worker)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-421f28fb120d6e80-light-flowchart-O3-2\" data-look=\"classic\" transform=\"translate(124.6015625, 266.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.6015625\" y=\"-24.75\" width=\"183.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.6015625, -9.75)\"><rect></rect><foreignObject width=\"123.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointer A -&gt; Frame 1</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-421f28fb120d6e80-light-flowchart-N1-3\" data-look=\"classic\" transform=\"translate(586.09375, 67.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.2421875\" y=\"-24.75\" width=\"164.484375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.2421875, -9.75)\"><rect></rect><foreignObject width=\"104.484375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 1 (Copied)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-421f28fb120d6e80-light-flowchart-N2-4\" data-look=\"classic\" transform=\"translate(586.09375, 167.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.5625\" y=\"-24.75\" width=\"167.125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.5625, -9.75)\"><rect></rect><foreignObject width=\"107.125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 2 (Copied)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-421f28fb120d6e80-light-flowchart-N3-5\" data-look=\"classic\" transform=\"translate(586.09375, 266.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.75\" y=\"-24.75\" width=\"253.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.75, -9.75)\"><rect></rect><foreignObject width=\"193.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointer A' -&gt; Frame 1 (Adjusted)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-421f28fb120d6e80-light-flowchart-N4-6\" data-look=\"classic\" transform=\"translate(586.09375, 366.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.140625\" y=\"-24.75\" width=\"192.28125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.140625, -9.75)\"><rect></rect><foreignObject width=\"132.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Unused Space (4 KB)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-421f28fb120d6e80-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-421f28fb120d6e80-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-421f28fb120d6e80-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-421f28fb120d6e80-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 745.84375px;\" viewBox=\"0 0 745.84375 434\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-421f28fb120d6e80-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-421f28fb120d6e80-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-421f28fb120d6e80-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-421f28fb120d6e80-dark .error-icon{fill:rgb(21, 22, 23);}#d-421f28fb120d6e80-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-421f28fb120d6e80-dark .edge-thickness-normal{stroke-width:1px;}#d-421f28fb120d6e80-dark .edge-thickness-thick{stroke-width:3.5px;}#d-421f28fb120d6e80-dark .edge-pattern-solid{stroke-dasharray:0;}#d-421f28fb120d6e80-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-421f28fb120d6e80-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-421f28fb120d6e80-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-421f28fb120d6e80-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-421f28fb120d6e80-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-421f28fb120d6e80-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-421f28fb120d6e80-dark p{margin:0;}#d-421f28fb120d6e80-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-421f28fb120d6e80-dark .cluster-label text{fill:#eae9e8;}#d-421f28fb120d6e80-dark .cluster-label span{color:#eae9e8;}#d-421f28fb120d6e80-dark .cluster-label span p{background-color:transparent;}#d-421f28fb120d6e80-dark .label text,#d-421f28fb120d6e80-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-421f28fb120d6e80-dark .node rect,#d-421f28fb120d6e80-dark .node circle,#d-421f28fb120d6e80-dark .node ellipse,#d-421f28fb120d6e80-dark .node polygon,#d-421f28fb120d6e80-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-421f28fb120d6e80-dark .rough-node .label text,#d-421f28fb120d6e80-dark .node .label text,#d-421f28fb120d6e80-dark .image-shape .label,#d-421f28fb120d6e80-dark .icon-shape .label{text-anchor:middle;}#d-421f28fb120d6e80-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-421f28fb120d6e80-dark .rough-node .label,#d-421f28fb120d6e80-dark .node .label,#d-421f28fb120d6e80-dark .image-shape .label,#d-421f28fb120d6e80-dark .icon-shape .label{text-align:center;}#d-421f28fb120d6e80-dark .node.clickable{cursor:pointer;}#d-421f28fb120d6e80-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-421f28fb120d6e80-dark .arrowheadPath{fill:#eae9e8;}#d-421f28fb120d6e80-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-421f28fb120d6e80-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-421f28fb120d6e80-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-421f28fb120d6e80-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-421f28fb120d6e80-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-421f28fb120d6e80-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-421f28fb120d6e80-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-421f28fb120d6e80-dark .cluster text{fill:#eae9e8;}#d-421f28fb120d6e80-dark .cluster span{color:#eae9e8;}#d-421f28fb120d6e80-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-421f28fb120d6e80-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-421f28fb120d6e80-dark rect.text{fill:none;stroke-width:0;}#d-421f28fb120d6e80-dark .icon-shape,#d-421f28fb120d6e80-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-421f28fb120d6e80-dark .icon-shape p,#d-421f28fb120d6e80-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-421f28fb120d6e80-dark .icon-shape .label rect,#d-421f28fb120d6e80-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-421f28fb120d6e80-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-421f28fb120d6e80-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-421f28fb120d6e80-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-421f28fb120d6e80-dark [data-look=\"neo\"].node rect,#d-421f28fb120d6e80-dark [data-look=\"neo\"].cluster rect,#d-421f28fb120d6e80-dark [data-look=\"neo\"].node polygon{stroke:url(#d-421f28fb120d6e80-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-421f28fb120d6e80-dark [data-look=\"neo\"].node path{stroke:url(#d-421f28fb120d6e80-dark-gradient);stroke-width:1px;}#d-421f28fb120d6e80-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-421f28fb120d6e80-dark [data-look=\"neo\"].node circle{stroke:url(#d-421f28fb120d6e80-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-421f28fb120d6e80-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-421f28fb120d6e80-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-421f28fb120d6e80-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-421f28fb120d6e80-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-421f28fb120d6e80-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-421f28fb120d6e80-dark-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"434.34375\" y=\"8\" width=\"303.5\" height=\"418\"></rect><g class=\"cluster-label \" transform=\"translate(532.078125, 8)\"><foreignObject width=\"108.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>New Stack (8 KB)</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-421f28fb120d6e80-dark-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"233.203125\" height=\"318.5\"></rect><g class=\"cluster-label \" transform=\"translate(73.765625, 8)\"><foreignObject width=\"101.671875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Old Stack (4 KB)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M199.633,67.75L206.561,67.75C213.49,67.75,227.346,67.75,250.37,67.75C273.393,67.75,305.583,67.75,337.773,67.75C369.964,67.75,402.154,67.75,429.167,67.75C456.18,67.75,478.016,67.75,488.934,67.75L499.852,67.75\" id=\"d-421f28fb120d6e80-dark-L_O1_N1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_O1_N1_0\" data-points=\"W3sieCI6MTk5LjYzMjgxMjUsInkiOjY3Ljc1fSx7IngiOjI0MS4yMDMxMjUsInkiOjY3Ljc1fSx7IngiOjMzNy43NzM0Mzc1LCJ5Ijo2Ny43NX0seyJ4Ijo0MzQuMzQzNzUsInkiOjY3Ljc1fSx7IngiOjUwMy44NTE1NjI1LCJ5Ijo2Ny43NX1d\" data-look=\"classic\" marker-end=\"url(#d-421f28fb120d6e80-dark_flowchart-v2-pointEnd)\"></path><path d=\"M207.5,167.25L213.117,167.25C218.734,167.25,229.969,167.25,251.681,167.25C273.393,167.25,305.583,167.25,337.773,167.25C369.964,167.25,402.154,167.25,428.947,167.25C455.74,167.25,477.135,167.25,487.833,167.25L498.531,167.25\" id=\"d-421f28fb120d6e80-dark-L_O2_N2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_O2_N2_0\" data-points=\"W3sieCI6MjA3LjUsInkiOjE2Ny4yNX0seyJ4IjoyNDEuMjAzMTI1LCJ5IjoxNjcuMjV9LHsieCI6MzM3Ljc3MzQzNzUsInkiOjE2Ny4yNX0seyJ4Ijo0MzQuMzQzNzUsInkiOjE2Ny4yNX0seyJ4Ijo1MDIuNTMxMjUsInkiOjE2Ny4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-421f28fb120d6e80-dark_flowchart-v2-pointEnd)\"></path><path d=\"M216.203,266.75L220.37,266.75C224.536,266.75,232.87,266.75,253.132,266.75C273.393,266.75,305.583,266.75,337.773,266.75C369.964,266.75,402.154,266.75,421.749,266.75C441.344,266.75,448.344,266.75,451.844,266.75L455.344,266.75\" id=\"d-421f28fb120d6e80-dark-L_O3_N3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_O3_N3_0\" data-points=\"W3sieCI6MjE2LjIwMzEyNSwieSI6MjY2Ljc1fSx7IngiOjI0MS4yMDMxMjUsInkiOjI2Ni43NX0seyJ4IjozMzcuNzczNDM3NSwieSI6MjY2Ljc1fSx7IngiOjQzNC4zNDM3NSwieSI6MjY2Ljc1fSx7IngiOjQ1OS4zNDM3NSwieSI6MjY2Ljc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-421f28fb120d6e80-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(337.7734375, 67.75)\"><g class=\"label\" data-id=\"L_O1_N1_0\" transform=\"translate(-43.2578125, -9.75)\"><foreignObject width=\"86.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Copy memory</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(337.7734375, 167.25)\"><g class=\"label\" data-id=\"L_O2_N2_0\" transform=\"translate(-43.2578125, -9.75)\"><foreignObject width=\"86.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Copy memory</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(337.7734375, 266.75)\"><g class=\"label\" data-id=\"L_O3_N3_0\" transform=\"translate(-71.5703125, -9.75)\"><foreignObject width=\"143.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Rewrite via Stack Maps</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-warning \" id=\"d-421f28fb120d6e80-dark-flowchart-O1-0\" data-look=\"classic\" transform=\"translate(124.6015625, 67.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-75.03125\" y=\"-24.75\" width=\"150.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-45.03125, -9.75)\"><rect></rect><foreignObject width=\"90.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 1 (main)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-421f28fb120d6e80-dark-flowchart-O2-1\" data-look=\"classic\" transform=\"translate(124.6015625, 167.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.8984375\" y=\"-24.75\" width=\"165.796875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.8984375, -9.75)\"><rect></rect><foreignObject width=\"105.796875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 2 (worker)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-421f28fb120d6e80-dark-flowchart-O3-2\" data-look=\"classic\" transform=\"translate(124.6015625, 266.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.6015625\" y=\"-24.75\" width=\"183.203125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.6015625, -9.75)\"><rect></rect><foreignObject width=\"123.203125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointer A -&gt; Frame 1</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-421f28fb120d6e80-dark-flowchart-N1-3\" data-look=\"classic\" transform=\"translate(586.09375, 67.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.2421875\" y=\"-24.75\" width=\"164.484375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.2421875, -9.75)\"><rect></rect><foreignObject width=\"104.484375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 1 (Copied)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-421f28fb120d6e80-dark-flowchart-N2-4\" data-look=\"classic\" transform=\"translate(586.09375, 167.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.5625\" y=\"-24.75\" width=\"167.125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.5625, -9.75)\"><rect></rect><foreignObject width=\"107.125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Frame 2 (Copied)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-421f28fb120d6e80-dark-flowchart-N3-5\" data-look=\"classic\" transform=\"translate(586.09375, 266.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.75\" y=\"-24.75\" width=\"253.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.75, -9.75)\"><rect></rect><foreignObject width=\"193.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointer A' -&gt; Frame 1 (Adjusted)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-421f28fb120d6e80-dark-flowchart-N4-6\" data-look=\"classic\" transform=\"translate(586.09375, 366.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.140625\" y=\"-24.75\" width=\"192.28125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.140625, -9.75)\"><rect></rect><foreignObject width=\"132.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Unused Space (4 KB)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-421f28fb120d6e80-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-421f28fb120d6e80-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-421f28fb120d6e80-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"the-compilers-stack-check-prologue\">The Compiler’s Stack Check Prologue<a class=\"h-anchor\" href=\"#the-compilers-stack-check-prologue\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>To determine when a stack copy is required without kernel traps, the Go compiler inserts a 3-instruction assembly prologue at the head of every non-leaf function:</p>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span>// Go compiler prologue (x86-64)</span></span>\n<span class=\"line\"><span>MOVQ (TLS), CX           // Load current Goroutine (g) pointer</span></span>\n<span class=\"line\"><span>CMPQ SP, 16(CX)          // Compare SP with g.stackguard0</span></span>\n<span class=\"line\"><span>JBE  runtime.morestack_noctxt // Jump if stack pointer is dangerously low</span></span></code></pre></div>\n<p>If the remaining stack space falls below <code>g.stackguard0</code>, execution branches to <code>runtime.morestack</code>, triggering contiguous expansion.</p>\n<h2 id=\"stack-shrinking-during-garbage-collection\">Stack Shrinking During Garbage Collection<a class=\"h-anchor\" href=\"#stack-shrinking-during-garbage-collection\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Stack memory does not grow unbounded during spikes. During the concurrent mark phase of Garbage Collection:</p>\n<ul>\n<li>If a goroutine is using <strong>less than 1/4 of its allocated stack capacity</strong>, the runtime allocates a buffer half the current size and copies the frames over.</li>\n<li>The stack will not shrink below the initial 2 KB floor.</li>\n</ul>\n<h2 id=\"stack-limits--debugsetmaxstack\">Stack Limits &amp; <code>debug.SetMaxStack</code><a class=\"h-anchor\" href=\"#stack-limits--debugsetmaxstack\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>By default, the runtime enforces a stack ceiling of <strong>1 GB</strong> on 64-bit platforms (250 MB on 32-bit platforms) to prevent accidental infinite recursion from consuming entire machine RAM.</p>\n<p>You can configure this ceiling programmatically using standard library <code>runtime/debug</code>:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime/debug</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> init</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Restrict runaway recursion in high-density worker pools to 20MB</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    debug.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">SetMaxStack</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">20</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1024</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1024</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"engineering-rules\">Engineering Rules<a class=\"h-anchor\" href=\"#engineering-rules\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Avoid deeply nested goroutine recursion</strong>: While stacks grow dynamically, large stacks hold many object references, increasing GC mark phase scan times.</li>\n<li><strong>Value semantics on stack</strong>: Keeping structs on the stack eliminates heap escape and garbage collection pressure entirely.</li>\n<li><strong>Understand copy overhead</strong>: Heavy stack growth causes <code>runtime.copystack</code> execution. For high-throughput worker routines, keeping call chains bounded prevents reallocation jitter.</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-scheduler-infinite-loops/",
      "url": "https://ashwingopalsamy.in/blog/go-scheduler-infinite-loops/",
      "title": "Go Scheduler, Yield Points, and Infinite Loops",
      "content_text": "How the GMP scheduler, cooperative yield points, and Go 1.14+ signal-based preemption handle tight loops.",
      "date_published": "2025-05-24T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>The Go runtime multiplexes <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>M</mi></mrow><annotation encoding=\"application/x-tex\">M</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">M</span></span></span></span></span></p> goroutines over <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>N</mi></mrow><annotation encoding=\"application/x-tex\">N</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.109em;\">N</span></span></span></span></span></p> operating system threads using the <strong>GMP scheduler</strong>:</p>\n<ul>\n<li><strong>G (Goroutine)</strong>: Represents the goroutine stack, instruction pointer, and scheduling state.</li>\n<li><strong>M (Machine)</strong>: Represents an actual OS thread created by the kernel.</li>\n<li><strong>P (Processor)</strong>: Represents a logical resource context required to execute Go code (defaulting to <code>runtime.GOMAXPROCS(0)</code>).</li>\n</ul>\n<p>Each P owns a local run queue (capacity 256 Gs), while the runtime maintains a shared global run queue.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"8011343fce8f5519\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-8011343fce8f5519-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 621.0234375px;\" viewBox=\"0 0 621.0234375 691.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-8011343fce8f5519-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-8011343fce8f5519-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-8011343fce8f5519-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-8011343fce8f5519-light .error-icon{fill:rgb(255, 255, 255);}#d-8011343fce8f5519-light .error-text{fill:#000000;stroke:#000000;}#d-8011343fce8f5519-light .edge-thickness-normal{stroke-width:1px;}#d-8011343fce8f5519-light .edge-thickness-thick{stroke-width:3.5px;}#d-8011343fce8f5519-light .edge-pattern-solid{stroke-dasharray:0;}#d-8011343fce8f5519-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-8011343fce8f5519-light .edge-pattern-dashed{stroke-dasharray:3;}#d-8011343fce8f5519-light .edge-pattern-dotted{stroke-dasharray:2;}#d-8011343fce8f5519-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-8011343fce8f5519-light .marker.cross{stroke:rgb(44, 46, 48);}#d-8011343fce8f5519-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-8011343fce8f5519-light p{margin:0;}#d-8011343fce8f5519-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-8011343fce8f5519-light .cluster-label text{fill:#000000;}#d-8011343fce8f5519-light .cluster-label span{color:#000000;}#d-8011343fce8f5519-light .cluster-label span p{background-color:transparent;}#d-8011343fce8f5519-light .label text,#d-8011343fce8f5519-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-8011343fce8f5519-light .node rect,#d-8011343fce8f5519-light .node circle,#d-8011343fce8f5519-light .node ellipse,#d-8011343fce8f5519-light .node polygon,#d-8011343fce8f5519-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-8011343fce8f5519-light .rough-node .label text,#d-8011343fce8f5519-light .node .label text,#d-8011343fce8f5519-light .image-shape .label,#d-8011343fce8f5519-light .icon-shape .label{text-anchor:middle;}#d-8011343fce8f5519-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-8011343fce8f5519-light .rough-node .label,#d-8011343fce8f5519-light .node .label,#d-8011343fce8f5519-light .image-shape .label,#d-8011343fce8f5519-light .icon-shape .label{text-align:center;}#d-8011343fce8f5519-light .node.clickable{cursor:pointer;}#d-8011343fce8f5519-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-8011343fce8f5519-light .arrowheadPath{fill:#000000;}#d-8011343fce8f5519-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-8011343fce8f5519-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-8011343fce8f5519-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-8011343fce8f5519-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-8011343fce8f5519-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-8011343fce8f5519-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-8011343fce8f5519-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-8011343fce8f5519-light .cluster text{fill:#000000;}#d-8011343fce8f5519-light .cluster span{color:#000000;}#d-8011343fce8f5519-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-8011343fce8f5519-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-8011343fce8f5519-light rect.text{fill:none;stroke-width:0;}#d-8011343fce8f5519-light .icon-shape,#d-8011343fce8f5519-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-8011343fce8f5519-light .icon-shape p,#d-8011343fce8f5519-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-8011343fce8f5519-light .icon-shape .label rect,#d-8011343fce8f5519-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-8011343fce8f5519-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-8011343fce8f5519-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-8011343fce8f5519-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-8011343fce8f5519-light [data-look=\"neo\"].node rect,#d-8011343fce8f5519-light [data-look=\"neo\"].cluster rect,#d-8011343fce8f5519-light [data-look=\"neo\"].node polygon{stroke:url(#d-8011343fce8f5519-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-8011343fce8f5519-light [data-look=\"neo\"].node path{stroke:url(#d-8011343fce8f5519-light-gradient);stroke-width:1px;}#d-8011343fce8f5519-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-8011343fce8f5519-light [data-look=\"neo\"].node circle{stroke:url(#d-8011343fce8f5519-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-8011343fce8f5519-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-8011343fce8f5519-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-8011343fce8f5519-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-8011343fce8f5519-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-8011343fce8f5519-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-8011343fce8f5519-light-subGraph2\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"340.5\" width=\"216.359375\" height=\"343\"></rect><g class=\"cluster-label \" transform=\"translate(76.453125, 340.5)\"><foreignObject width=\"79.453125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Processor P1</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-8011343fce8f5519-light-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"244.359375\" y=\"177\" width=\"368.6640625\" height=\"382\"></rect><g class=\"cluster-label \" transform=\"translate(387.51171875, 177)\"><foreignObject width=\"82.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Processor P0</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-8011343fce8f5519-light-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"43.39453125\" y=\"8\" width=\"450.640625\" height=\"99.5\"></rect><g class=\"cluster-label \" transform=\"translate(213.36328125, 8)\"><foreignObject width=\"110.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Global Run Queue</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M461.109,271L466.121,276.792C471.134,282.583,481.159,294.167,486.171,305.75C491.184,317.333,491.184,328.917,491.184,339.833C491.184,350.75,491.184,361,491.184,366.125L491.184,371.25\" id=\"d-8011343fce8f5519-light-L_LQ0_M0_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_LQ0_M0_0\" data-points=\"W3sieCI6NDYxLjEwODYxMzQ5Mjc3OTgsInkiOjI3MX0seyJ4Ijo0OTEuMTgzNTkzNzUsInkiOjMwNS43NX0seyJ4Ijo0OTEuMTgzNTkzNzUsInkiOjM0MC41fSx7IngiOjQ5MS4xODM1OTM3NSwieSI6Mzc1LjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path><path d=\"M491.184,424.75L491.184,430.542C491.184,436.333,491.184,447.917,491.184,457.208C491.184,466.5,491.184,473.5,491.184,477L491.184,480.5\" id=\"d-8011343fce8f5519-light-L_M0_CPU0_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M0_CPU0_0\" data-points=\"W3sieCI6NDkxLjE4MzU5Mzc1LCJ5Ijo0MjQuNzV9LHsieCI6NDkxLjE4MzU5Mzc1LCJ5Ijo0NTkuNX0seyJ4Ijo0OTEuMTgzNTkzNzUsInkiOjQ4NC41fV0=\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path><path d=\"M116.18,434.5L116.18,438.667C116.18,442.833,116.18,451.167,116.18,458.833C116.18,466.5,116.18,473.5,116.18,477L116.18,480.5\" id=\"d-8011343fce8f5519-light-L_LQ1_M1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_LQ1_M1_0\" data-points=\"W3sieCI6MTE2LjE3OTY4NzUsInkiOjQzNC41fSx7IngiOjExNi4xNzk2ODc1LCJ5Ijo0NTkuNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6NDg0LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path><path d=\"M116.18,534L116.18,538.167C116.18,542.333,116.18,550.667,116.18,559C116.18,567.333,116.18,575.667,116.18,583.333C116.18,591,116.18,598,116.18,601.5L116.18,605\" id=\"d-8011343fce8f5519-light-L_M1_CPU1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M1_CPU1_0\" data-points=\"W3sieCI6MTE2LjE3OTY4NzUsInkiOjUzNH0seyJ4IjoxMTYuMTc5Njg3NSwieSI6NTU5fSx7IngiOjExNi4xNzk2ODc1LCJ5Ijo1ODR9LHsieCI6MTE2LjE3OTY4NzUsInkiOjYwOX1d\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path><path d=\"M365.364,82.5L376.345,86.667C387.326,90.833,409.288,99.167,420.269,109.125C431.25,119.083,431.25,130.667,431.25,142.25C431.25,153.833,431.25,165.417,431.25,174.708C431.25,184,431.25,191,431.25,194.5L431.25,198\" id=\"d-8011343fce8f5519-light-L_GQ_LQ0_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_GQ_LQ0_0\" data-points=\"W3sieCI6MzY1LjM2MzkyOTAyMDEwMDUsInkiOjgyLjV9LHsieCI6NDMxLjI1LCJ5IjoxMDcuNX0seyJ4Ijo0MzEuMjUsInkiOjE0Mi4yNX0seyJ4Ijo0MzEuMjUsInkiOjE3N30seyJ4Ijo0MzEuMjUsInkiOjIwMn1d\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path><path d=\"M229.566,76.835L210.669,81.946C191.771,87.057,153.975,97.278,135.077,108.181C116.18,119.083,116.18,130.667,116.18,142.25C116.18,153.833,116.18,165.417,116.18,181.125C116.18,196.833,116.18,216.667,116.18,238.125C116.18,259.583,116.18,282.667,116.18,300C116.18,317.333,116.18,328.917,116.18,338.208C116.18,347.5,116.18,354.5,116.18,358L116.18,361.5\" id=\"d-8011343fce8f5519-light-L_GQ_LQ1_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_GQ_LQ1_0\" data-points=\"W3sieCI6MjI5LjU2NjQwNjI1LCJ5Ijo3Ni44MzUyODg2ODQwOTMxN30seyJ4IjoxMTYuMTc5Njg3NSwieSI6MTA3LjV9LHsieCI6MTE2LjE3OTY4NzUsInkiOjE0Mi4yNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6MTc3fSx7IngiOjExNi4xNzk2ODc1LCJ5IjoyMzYuNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6MzA1Ljc1fSx7IngiOjExNi4xNzk2ODc1LCJ5IjozNDAuNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6MzY1LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path><path d=\"M401.391,271L396.379,276.792C391.366,282.583,381.341,294.167,376.329,305.75C371.316,317.333,371.316,328.917,341.195,341.733C311.075,354.549,250.833,368.598,220.712,375.622L190.591,382.647\" id=\"d-8011343fce8f5519-light-L_LQ0_LQ1_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_LQ0_LQ1_0\" data-points=\"W3sieCI6NDAxLjM5MTM4NjUwNzIyMDIsInkiOjI3MX0seyJ4IjozNzEuMzE2NDA2MjUsInkiOjMwNS43NX0seyJ4IjozNzEuMzE2NDA2MjUsInkiOjM0MC41fSx7IngiOjE4Ni42OTUzMTI1LCJ5IjozODMuNTU1MTcxMDkzOTI5NH1d\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_LQ0_M0_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M0_CPU0_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_LQ1_M1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M1_CPU1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(431.25, 142.25)\"><g class=\"label\" data-id=\"L_GQ_LQ0_0\" transform=\"translate(-28.7109375, -9.75)\"><foreignObject width=\"57.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Schedule</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(116.1796875, 236.5)\"><g class=\"label\" data-id=\"L_GQ_LQ1_0\" transform=\"translate(-28.7109375, -9.75)\"><foreignObject width=\"57.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Schedule</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(371.31640625, 305.75)\"><g class=\"label\" data-id=\"L_LQ0_LQ1_0\" transform=\"translate(-99.8671875, -9.75)\"><foreignObject width=\"199.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Work Stealing (50% from victim)</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-storage \" id=\"d-8011343fce8f5519-light-flowchart-GQ-0\" data-look=\"classic\" transform=\"translate(300.13671875, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.5703125\" y=\"-24.75\" width=\"141.140625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.5703125, -9.75)\"><rect></rect><foreignObject width=\"81.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>G5, G6, G7 ...</p></span></div></foreignObject></g></g><g class=\"node default diag-queue \" id=\"d-8011343fce8f5519-light-flowchart-LQ0-1\" data-look=\"classic\" transform=\"translate(431.25, 236.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.046875\" y=\"-34.5\" width=\"198.09375\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.046875, -19.5)\"><rect></rect><foreignObject width=\"138.09375\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Local Queue (256 Gs):<br>G1, G2</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-8011343fce8f5519-light-flowchart-M0-3\" data-look=\"classic\" transform=\"translate(491.18359375, 400)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.6328125\" y=\"-24.75\" width=\"149.265625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.6328125, -9.75)\"><rect></rect><foreignObject width=\"89.265625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>OS Thread M0</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-8011343fce8f5519-light-flowchart-CPU0-5\" data-look=\"classic\" transform=\"translate(491.18359375, 509.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.2734375\" y=\"-24.75\" width=\"132.546875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.2734375, -9.75)\"><rect></rect><foreignObject width=\"72.546875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>CPU Core 0</p></span></div></foreignObject></g></g><g class=\"node default diag-queue \" id=\"d-8011343fce8f5519-light-flowchart-LQ1-6\" data-look=\"classic\" transform=\"translate(116.1796875, 400)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.515625\" y=\"-34.5\" width=\"141.03125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.515625, -19.5)\"><rect></rect><foreignObject width=\"81.03125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Local Queue:<br>G3, G4</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-8011343fce8f5519-light-flowchart-M1-8\" data-look=\"classic\" transform=\"translate(116.1796875, 509.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1796875\" y=\"-24.75\" width=\"146.359375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1796875, -9.75)\"><rect></rect><foreignObject width=\"86.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>OS Thread M1</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-8011343fce8f5519-light-flowchart-CPU1-10\" data-look=\"classic\" transform=\"translate(116.1796875, 633.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.8125\" y=\"-24.75\" width=\"129.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.8125, -9.75)\"><rect></rect><foreignObject width=\"69.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>CPU Core 1</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-8011343fce8f5519-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-8011343fce8f5519-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-8011343fce8f5519-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-8011343fce8f5519-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 621.0234375px;\" viewBox=\"0 0 621.0234375 691.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-8011343fce8f5519-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-8011343fce8f5519-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-8011343fce8f5519-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-8011343fce8f5519-dark .error-icon{fill:rgb(21, 22, 23);}#d-8011343fce8f5519-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-8011343fce8f5519-dark .edge-thickness-normal{stroke-width:1px;}#d-8011343fce8f5519-dark .edge-thickness-thick{stroke-width:3.5px;}#d-8011343fce8f5519-dark .edge-pattern-solid{stroke-dasharray:0;}#d-8011343fce8f5519-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-8011343fce8f5519-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-8011343fce8f5519-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-8011343fce8f5519-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-8011343fce8f5519-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-8011343fce8f5519-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-8011343fce8f5519-dark p{margin:0;}#d-8011343fce8f5519-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-8011343fce8f5519-dark .cluster-label text{fill:#eae9e8;}#d-8011343fce8f5519-dark .cluster-label span{color:#eae9e8;}#d-8011343fce8f5519-dark .cluster-label span p{background-color:transparent;}#d-8011343fce8f5519-dark .label text,#d-8011343fce8f5519-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-8011343fce8f5519-dark .node rect,#d-8011343fce8f5519-dark .node circle,#d-8011343fce8f5519-dark .node ellipse,#d-8011343fce8f5519-dark .node polygon,#d-8011343fce8f5519-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-8011343fce8f5519-dark .rough-node .label text,#d-8011343fce8f5519-dark .node .label text,#d-8011343fce8f5519-dark .image-shape .label,#d-8011343fce8f5519-dark .icon-shape .label{text-anchor:middle;}#d-8011343fce8f5519-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-8011343fce8f5519-dark .rough-node .label,#d-8011343fce8f5519-dark .node .label,#d-8011343fce8f5519-dark .image-shape .label,#d-8011343fce8f5519-dark .icon-shape .label{text-align:center;}#d-8011343fce8f5519-dark .node.clickable{cursor:pointer;}#d-8011343fce8f5519-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-8011343fce8f5519-dark .arrowheadPath{fill:#eae9e8;}#d-8011343fce8f5519-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-8011343fce8f5519-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-8011343fce8f5519-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-8011343fce8f5519-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-8011343fce8f5519-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-8011343fce8f5519-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-8011343fce8f5519-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-8011343fce8f5519-dark .cluster text{fill:#eae9e8;}#d-8011343fce8f5519-dark .cluster span{color:#eae9e8;}#d-8011343fce8f5519-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-8011343fce8f5519-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-8011343fce8f5519-dark rect.text{fill:none;stroke-width:0;}#d-8011343fce8f5519-dark .icon-shape,#d-8011343fce8f5519-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-8011343fce8f5519-dark .icon-shape p,#d-8011343fce8f5519-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-8011343fce8f5519-dark .icon-shape .label rect,#d-8011343fce8f5519-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-8011343fce8f5519-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-8011343fce8f5519-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-8011343fce8f5519-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-8011343fce8f5519-dark [data-look=\"neo\"].node rect,#d-8011343fce8f5519-dark [data-look=\"neo\"].cluster rect,#d-8011343fce8f5519-dark [data-look=\"neo\"].node polygon{stroke:url(#d-8011343fce8f5519-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-8011343fce8f5519-dark [data-look=\"neo\"].node path{stroke:url(#d-8011343fce8f5519-dark-gradient);stroke-width:1px;}#d-8011343fce8f5519-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-8011343fce8f5519-dark [data-look=\"neo\"].node circle{stroke:url(#d-8011343fce8f5519-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-8011343fce8f5519-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-8011343fce8f5519-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-8011343fce8f5519-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-8011343fce8f5519-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-8011343fce8f5519-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-8011343fce8f5519-dark-subGraph2\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"340.5\" width=\"216.359375\" height=\"343\"></rect><g class=\"cluster-label \" transform=\"translate(76.453125, 340.5)\"><foreignObject width=\"79.453125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Processor P1</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-8011343fce8f5519-dark-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"244.359375\" y=\"177\" width=\"368.6640625\" height=\"382\"></rect><g class=\"cluster-label \" transform=\"translate(387.51171875, 177)\"><foreignObject width=\"82.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Processor P0</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-8011343fce8f5519-dark-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"43.39453125\" y=\"8\" width=\"450.640625\" height=\"99.5\"></rect><g class=\"cluster-label \" transform=\"translate(213.36328125, 8)\"><foreignObject width=\"110.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Global Run Queue</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M461.109,271L466.121,276.792C471.134,282.583,481.159,294.167,486.171,305.75C491.184,317.333,491.184,328.917,491.184,339.833C491.184,350.75,491.184,361,491.184,366.125L491.184,371.25\" id=\"d-8011343fce8f5519-dark-L_LQ0_M0_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_LQ0_M0_0\" data-points=\"W3sieCI6NDYxLjEwODYxMzQ5Mjc3OTgsInkiOjI3MX0seyJ4Ijo0OTEuMTgzNTkzNzUsInkiOjMwNS43NX0seyJ4Ijo0OTEuMTgzNTkzNzUsInkiOjM0MC41fSx7IngiOjQ5MS4xODM1OTM3NSwieSI6Mzc1LjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path><path d=\"M491.184,424.75L491.184,430.542C491.184,436.333,491.184,447.917,491.184,457.208C491.184,466.5,491.184,473.5,491.184,477L491.184,480.5\" id=\"d-8011343fce8f5519-dark-L_M0_CPU0_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M0_CPU0_0\" data-points=\"W3sieCI6NDkxLjE4MzU5Mzc1LCJ5Ijo0MjQuNzV9LHsieCI6NDkxLjE4MzU5Mzc1LCJ5Ijo0NTkuNX0seyJ4Ijo0OTEuMTgzNTkzNzUsInkiOjQ4NC41fV0=\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path><path d=\"M116.18,434.5L116.18,438.667C116.18,442.833,116.18,451.167,116.18,458.833C116.18,466.5,116.18,473.5,116.18,477L116.18,480.5\" id=\"d-8011343fce8f5519-dark-L_LQ1_M1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_LQ1_M1_0\" data-points=\"W3sieCI6MTE2LjE3OTY4NzUsInkiOjQzNC41fSx7IngiOjExNi4xNzk2ODc1LCJ5Ijo0NTkuNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6NDg0LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path><path d=\"M116.18,534L116.18,538.167C116.18,542.333,116.18,550.667,116.18,559C116.18,567.333,116.18,575.667,116.18,583.333C116.18,591,116.18,598,116.18,601.5L116.18,605\" id=\"d-8011343fce8f5519-dark-L_M1_CPU1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_M1_CPU1_0\" data-points=\"W3sieCI6MTE2LjE3OTY4NzUsInkiOjUzNH0seyJ4IjoxMTYuMTc5Njg3NSwieSI6NTU5fSx7IngiOjExNi4xNzk2ODc1LCJ5Ijo1ODR9LHsieCI6MTE2LjE3OTY4NzUsInkiOjYwOX1d\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path><path d=\"M365.364,82.5L376.345,86.667C387.326,90.833,409.288,99.167,420.269,109.125C431.25,119.083,431.25,130.667,431.25,142.25C431.25,153.833,431.25,165.417,431.25,174.708C431.25,184,431.25,191,431.25,194.5L431.25,198\" id=\"d-8011343fce8f5519-dark-L_GQ_LQ0_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_GQ_LQ0_0\" data-points=\"W3sieCI6MzY1LjM2MzkyOTAyMDEwMDUsInkiOjgyLjV9LHsieCI6NDMxLjI1LCJ5IjoxMDcuNX0seyJ4Ijo0MzEuMjUsInkiOjE0Mi4yNX0seyJ4Ijo0MzEuMjUsInkiOjE3N30seyJ4Ijo0MzEuMjUsInkiOjIwMn1d\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path><path d=\"M229.566,76.835L210.669,81.946C191.771,87.057,153.975,97.278,135.077,108.181C116.18,119.083,116.18,130.667,116.18,142.25C116.18,153.833,116.18,165.417,116.18,181.125C116.18,196.833,116.18,216.667,116.18,238.125C116.18,259.583,116.18,282.667,116.18,300C116.18,317.333,116.18,328.917,116.18,338.208C116.18,347.5,116.18,354.5,116.18,358L116.18,361.5\" id=\"d-8011343fce8f5519-dark-L_GQ_LQ1_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_GQ_LQ1_0\" data-points=\"W3sieCI6MjI5LjU2NjQwNjI1LCJ5Ijo3Ni44MzUyODg2ODQwOTMxN30seyJ4IjoxMTYuMTc5Njg3NSwieSI6MTA3LjV9LHsieCI6MTE2LjE3OTY4NzUsInkiOjE0Mi4yNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6MTc3fSx7IngiOjExNi4xNzk2ODc1LCJ5IjoyMzYuNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6MzA1Ljc1fSx7IngiOjExNi4xNzk2ODc1LCJ5IjozNDAuNX0seyJ4IjoxMTYuMTc5Njg3NSwieSI6MzY1LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path><path d=\"M401.391,271L396.379,276.792C391.366,282.583,381.341,294.167,376.329,305.75C371.316,317.333,371.316,328.917,341.195,341.733C311.075,354.549,250.833,368.598,220.712,375.622L190.591,382.647\" id=\"d-8011343fce8f5519-dark-L_LQ0_LQ1_0\" class=\" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_LQ0_LQ1_0\" data-points=\"W3sieCI6NDAxLjM5MTM4NjUwNzIyMDIsInkiOjI3MX0seyJ4IjozNzEuMzE2NDA2MjUsInkiOjMwNS43NX0seyJ4IjozNzEuMzE2NDA2MjUsInkiOjM0MC41fSx7IngiOjE4Ni42OTUzMTI1LCJ5IjozODMuNTU1MTcxMDkzOTI5NH1d\" data-look=\"classic\" marker-end=\"url(#d-8011343fce8f5519-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_LQ0_M0_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M0_CPU0_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_LQ1_M1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_M1_CPU1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(431.25, 142.25)\"><g class=\"label\" data-id=\"L_GQ_LQ0_0\" transform=\"translate(-28.7109375, -9.75)\"><foreignObject width=\"57.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Schedule</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(116.1796875, 236.5)\"><g class=\"label\" data-id=\"L_GQ_LQ1_0\" transform=\"translate(-28.7109375, -9.75)\"><foreignObject width=\"57.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Schedule</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(371.31640625, 305.75)\"><g class=\"label\" data-id=\"L_LQ0_LQ1_0\" transform=\"translate(-99.8671875, -9.75)\"><foreignObject width=\"199.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Work Stealing (50% from victim)</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-storage \" id=\"d-8011343fce8f5519-dark-flowchart-GQ-0\" data-look=\"classic\" transform=\"translate(300.13671875, 57.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.5703125\" y=\"-24.75\" width=\"141.140625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.5703125, -9.75)\"><rect></rect><foreignObject width=\"81.140625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>G5, G6, G7 ...</p></span></div></foreignObject></g></g><g class=\"node default diag-queue \" id=\"d-8011343fce8f5519-dark-flowchart-LQ0-1\" data-look=\"classic\" transform=\"translate(431.25, 236.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.046875\" y=\"-34.5\" width=\"198.09375\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.046875, -19.5)\"><rect></rect><foreignObject width=\"138.09375\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Local Queue (256 Gs):<br>G1, G2</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-8011343fce8f5519-dark-flowchart-M0-3\" data-look=\"classic\" transform=\"translate(491.18359375, 400)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.6328125\" y=\"-24.75\" width=\"149.265625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.6328125, -9.75)\"><rect></rect><foreignObject width=\"89.265625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>OS Thread M0</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-8011343fce8f5519-dark-flowchart-CPU0-5\" data-look=\"classic\" transform=\"translate(491.18359375, 509.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-66.2734375\" y=\"-24.75\" width=\"132.546875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-36.2734375, -9.75)\"><rect></rect><foreignObject width=\"72.546875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>CPU Core 0</p></span></div></foreignObject></g></g><g class=\"node default diag-queue \" id=\"d-8011343fce8f5519-dark-flowchart-LQ1-6\" data-look=\"classic\" transform=\"translate(116.1796875, 400)\"><rect class=\"basic label-container\" style=\"\" x=\"-70.515625\" y=\"-34.5\" width=\"141.03125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-40.515625, -19.5)\"><rect></rect><foreignObject width=\"81.03125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Local Queue:<br>G3, G4</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-8011343fce8f5519-dark-flowchart-M1-8\" data-look=\"classic\" transform=\"translate(116.1796875, 509.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.1796875\" y=\"-24.75\" width=\"146.359375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.1796875, -9.75)\"><rect></rect><foreignObject width=\"86.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>OS Thread M1</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-8011343fce8f5519-dark-flowchart-CPU1-10\" data-look=\"classic\" transform=\"translate(116.1796875, 633.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.8125\" y=\"-24.75\" width=\"129.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.8125, -9.75)\"><rect></rect><foreignObject width=\"69.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>CPU Core 1</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-8011343fce8f5519-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-8011343fce8f5519-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-8011343fce8f5519-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"cooperative-yield-points\">Cooperative Yield Points<a class=\"h-anchor\" href=\"#cooperative-yield-points\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Historically, Go was a strictly <strong>cooperative scheduler</strong>. A running goroutine yielded execution to other goroutines only at explicit yield points:</p>\n<ol>\n<li><strong>Channel operations</strong>: Sending or receiving on a channel (<code>ch &lt;- val</code>, <code>&lt;-ch</code>).</li>\n<li><strong>Network I/O</strong>: Blocking network calls routed through the epoll/kqueue <code>netpoller</code>.</li>\n<li><strong>Synchronization</strong>: Locking a <code>sync.Mutex</code> or parking on a <code>sync.WaitGroup</code>.</li>\n<li><strong>System calls</strong>: Entering blocking file or OS syscalls.</li>\n<li><strong>Stack checks</strong>: Calling any non-inlined function where the compiler inserted a stack check prologue.</li>\n<li><strong>Explicit yields</strong>: Invoking <code>runtime.Gosched()</code>.</li>\n</ol>\n<h2 id=\"the-pre-go-114-trap-tight-loop-deadlocks\">The Pre-Go 1.14 Trap: Tight Loop Deadlocks<a class=\"h-anchor\" href=\"#the-pre-go-114-trap-tight-loop-deadlocks\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Before Go 1.14, a tight CPU-bound computation loop with no function calls had zero yield points:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Pre-Go 1.14: Monopolized the processor indefinitely</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">go</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Tight loop with no function calls or channel I/O</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}()</span></span></code></pre></div>\n<p>If <code>GOMAXPROCS</code> was 1, this loop starved all other goroutines. More critically, when the Garbage Collector attempted a Stop-The-World (STW) pause, it had to wait for all P processors to reach a safepoint. Because the tight loop never hit a safepoint, the entire application <strong>deadlocked permanently</strong>.</p>\n<h2 id=\"modern-asynchronous-preemption-go-114\">Modern Asynchronous Preemption (Go 1.14+)<a class=\"h-anchor\" href=\"#modern-asynchronous-preemption-go-114\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In Go 1.14, the runtime introduced <strong>asynchronous preemption</strong> driven by OS signals:</p>\n<ol>\n<li>The runtime runs a background monitoring thread called <code>sysmon</code> (which executes without a P).</li>\n<li><code>sysmon</code> inspects all active goroutines. If a goroutine has run on a P for more than <strong>10 milliseconds</strong> without yielding, <code>sysmon</code> emits a <code>SIGURG</code> signal (on Unix platforms) or calls <code>SuspendThread</code> (on Windows) targeting the underlying OS thread (M).</li>\n<li>The OS thread catches the signal. The runtime signal handler checks whether the current instruction is at a safe register state.</li>\n<li>If safe, the signal handler saves the goroutine’s registers, pushes a call to <code>runtime.asyncPreempt</code>, moves the G back to the global run queue, and invokes the scheduler to run the next runnable G.</li>\n</ol>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"d0bef3fb53d3aa9b\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-d0bef3fb53d3aa9b-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1222px;\" viewBox=\"-50 -10 1222 611\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"959\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"163\" height=\"65\" name=\"Sched\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1040.5\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1040.5\" dy=\"0\">Runtime Scheduler</tspan></text></g><g><rect x=\"693\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"195\" height=\"65\" name=\"Sig\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"790.5\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"790.5\" dy=\"0\">SIGURG Signal Handler</tspan></text></g><g><rect x=\"294\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"283\" height=\"65\" name=\"M\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"435.5\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"435.5\" dy=\"0\">OS Thread M (Running Tight Loop)</tspan></text></g><g><rect x=\"0\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"244\" height=\"65\" name=\"SM\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"122\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"122\" dy=\"0\">sysmon (Background Thread)</tspan></text></g><g><line id=\"d-d0bef3fb53d3aa9b-light-actor3\" x1=\"1040.5\" y1=\"65\" x2=\"1040.5\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Sched\" data-et=\"life-line\" data-id=\"Sched\"></line><g id=\"d-d0bef3fb53d3aa9b-light-root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"Sched\"><rect x=\"959\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"163\" height=\"65\" name=\"Sched\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1040.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1040.5\" dy=\"0\">Runtime Scheduler</tspan></text></g></g><g><line id=\"d-d0bef3fb53d3aa9b-light-actor2\" x1=\"790.5\" y1=\"65\" x2=\"790.5\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Sig\" data-et=\"life-line\" data-id=\"Sig\"></line><g id=\"d-d0bef3fb53d3aa9b-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Sig\"><rect x=\"693\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"195\" height=\"65\" name=\"Sig\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"790.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"790.5\" dy=\"0\">SIGURG Signal Handler</tspan></text></g></g><g><line id=\"d-d0bef3fb53d3aa9b-light-actor1\" x1=\"435.5\" y1=\"65\" x2=\"435.5\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"M\" data-et=\"life-line\" data-id=\"M\"></line><g id=\"d-d0bef3fb53d3aa9b-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"M\"><rect x=\"294\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"283\" height=\"65\" name=\"M\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"435.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"435.5\" dy=\"0\">OS Thread M (Running Tight Loop)</tspan></text></g></g><g><line id=\"d-d0bef3fb53d3aa9b-light-actor0\" x1=\"122\" y1=\"65\" x2=\"122\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"SM\" data-et=\"life-line\" data-id=\"SM\"></line><g id=\"d-d0bef3fb53d3aa9b-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"SM\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"244\" height=\"65\" name=\"SM\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"122\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"122\" dy=\"0\">sysmon (Background Thread)</tspan></text></g></g><style>#d-d0bef3fb53d3aa9b-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-d0bef3fb53d3aa9b-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-d0bef3fb53d3aa9b-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-d0bef3fb53d3aa9b-light .error-icon{fill:rgb(255, 255, 255);}#d-d0bef3fb53d3aa9b-light .error-text{fill:#000000;stroke:#000000;}#d-d0bef3fb53d3aa9b-light .edge-thickness-normal{stroke-width:1px;}#d-d0bef3fb53d3aa9b-light .edge-thickness-thick{stroke-width:3.5px;}#d-d0bef3fb53d3aa9b-light .edge-pattern-solid{stroke-dasharray:0;}#d-d0bef3fb53d3aa9b-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-d0bef3fb53d3aa9b-light .edge-pattern-dashed{stroke-dasharray:3;}#d-d0bef3fb53d3aa9b-light .edge-pattern-dotted{stroke-dasharray:2;}#d-d0bef3fb53d3aa9b-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light .marker.cross{stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-d0bef3fb53d3aa9b-light p{margin:0;}#d-d0bef3fb53d3aa9b-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-d0bef3fb53d3aa9b-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-d0bef3fb53d3aa9b-light .actor-line{stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-d0bef3fb53d3aa9b-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-d0bef3fb53d3aa9b-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-d0bef3fb53d3aa9b-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-d0bef3fb53d3aa9b-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-d0bef3fb53d3aa9b-light .labelText,#d-d0bef3fb53d3aa9b-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-d0bef3fb53d3aa9b-light .loopText,#d-d0bef3fb53d3aa9b-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-d0bef3fb53d3aa9b-light .sectionTitle,#d-d0bef3fb53d3aa9b-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-d0bef3fb53d3aa9b-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-d0bef3fb53d3aa9b-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-light .noteText,#d-d0bef3fb53d3aa9b-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-d0bef3fb53d3aa9b-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-d0bef3fb53d3aa9b-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-d0bef3fb53d3aa9b-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-d0bef3fb53d3aa9b-light .actorPopupMenu{position:absolute;}#d-d0bef3fb53d3aa9b-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-d0bef3fb53d3aa9b-light .actor-man circle,#d-d0bef3fb53d3aa9b-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-d0bef3fb53d3aa9b-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-d0bef3fb53d3aa9b-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node rect,#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].cluster rect,#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-d0bef3fb53d3aa9b-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-d0bef3fb53d3aa9b-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-d0bef3fb53d3aa9b-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"437\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Executes tight loop (&gt;10ms, no yield points)</text><path d=\"M 436.5,115 C 496.5,105 496.5,145 436.5,135\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"M\" data-to=\"M\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"123\" y=\"160\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Detects long-running G (&gt;10ms)</text><path d=\"M 123,195 C 183,185 183,225 123,215\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"SM\" data-to=\"SM\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"277\" y=\"240\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Send OS Signal SIGURG</text><line x1=\"123\" y1=\"275\" x2=\"431.5\" y2=\"275\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"SM\" data-to=\"M\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"612\" y=\"290\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Interrupts execution &amp; saves registers</text><line x1=\"436.5\" y1=\"325\" x2=\"786.5\" y2=\"325\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"M\" data-to=\"Sig\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"792\" y=\"340\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push asyncPreempt frame</text><path d=\"M 791.5,375 C 851.5,365 851.5,405 791.5,395\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Sig\" data-to=\"Sig\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"914\" y=\"420\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Yield G to Global Queue</text><line x1=\"791.5\" y1=\"455\" x2=\"1036.5\" y2=\"455\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Sig\" data-to=\"Sched\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"740\" y=\"470\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Context switch to next Goroutine</text><line x1=\"1039.5\" y1=\"505\" x2=\"439.5\" y2=\"505\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"Sched\" data-to=\"M\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-light-arrowhead)\" style=\"fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-d0bef3fb53d3aa9b-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1222px;\" viewBox=\"-50 -10 1222 611\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"959\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"163\" height=\"65\" name=\"Sched\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1040.5\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1040.5\" dy=\"0\">Runtime Scheduler</tspan></text></g><g><rect x=\"693\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"195\" height=\"65\" name=\"Sig\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"790.5\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"790.5\" dy=\"0\">SIGURG Signal Handler</tspan></text></g><g><rect x=\"294\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"283\" height=\"65\" name=\"M\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"435.5\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"435.5\" dy=\"0\">OS Thread M (Running Tight Loop)</tspan></text></g><g><rect x=\"0\" y=\"525\" fill=\"#eaeaea\" stroke=\"#666\" width=\"244\" height=\"65\" name=\"SM\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"122\" y=\"557.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"122\" dy=\"0\">sysmon (Background Thread)</tspan></text></g><g><line id=\"d-d0bef3fb53d3aa9b-dark-actor3\" x1=\"1040.5\" y1=\"65\" x2=\"1040.5\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Sched\" data-et=\"life-line\" data-id=\"Sched\"></line><g id=\"d-d0bef3fb53d3aa9b-dark-root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"Sched\"><rect x=\"959\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"163\" height=\"65\" name=\"Sched\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1040.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1040.5\" dy=\"0\">Runtime Scheduler</tspan></text></g></g><g><line id=\"d-d0bef3fb53d3aa9b-dark-actor2\" x1=\"790.5\" y1=\"65\" x2=\"790.5\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Sig\" data-et=\"life-line\" data-id=\"Sig\"></line><g id=\"d-d0bef3fb53d3aa9b-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Sig\"><rect x=\"693\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"195\" height=\"65\" name=\"Sig\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"790.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"790.5\" dy=\"0\">SIGURG Signal Handler</tspan></text></g></g><g><line id=\"d-d0bef3fb53d3aa9b-dark-actor1\" x1=\"435.5\" y1=\"65\" x2=\"435.5\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"M\" data-et=\"life-line\" data-id=\"M\"></line><g id=\"d-d0bef3fb53d3aa9b-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"M\"><rect x=\"294\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"283\" height=\"65\" name=\"M\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"435.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"435.5\" dy=\"0\">OS Thread M (Running Tight Loop)</tspan></text></g></g><g><line id=\"d-d0bef3fb53d3aa9b-dark-actor0\" x1=\"122\" y1=\"65\" x2=\"122\" y2=\"525\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"SM\" data-et=\"life-line\" data-id=\"SM\"></line><g id=\"d-d0bef3fb53d3aa9b-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"SM\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"244\" height=\"65\" name=\"SM\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"122\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"122\" dy=\"0\">sysmon (Background Thread)</tspan></text></g></g><style>#d-d0bef3fb53d3aa9b-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-d0bef3fb53d3aa9b-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-d0bef3fb53d3aa9b-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-d0bef3fb53d3aa9b-dark .error-icon{fill:rgb(21, 22, 23);}#d-d0bef3fb53d3aa9b-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-d0bef3fb53d3aa9b-dark .edge-thickness-normal{stroke-width:1px;}#d-d0bef3fb53d3aa9b-dark .edge-thickness-thick{stroke-width:3.5px;}#d-d0bef3fb53d3aa9b-dark .edge-pattern-solid{stroke-dasharray:0;}#d-d0bef3fb53d3aa9b-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-d0bef3fb53d3aa9b-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-d0bef3fb53d3aa9b-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-d0bef3fb53d3aa9b-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-d0bef3fb53d3aa9b-dark p{margin:0;}#d-d0bef3fb53d3aa9b-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-d0bef3fb53d3aa9b-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-d0bef3fb53d3aa9b-dark .actor-line{stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-d0bef3fb53d3aa9b-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-d0bef3fb53d3aa9b-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-d0bef3fb53d3aa9b-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-d0bef3fb53d3aa9b-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-d0bef3fb53d3aa9b-dark .labelText,#d-d0bef3fb53d3aa9b-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-d0bef3fb53d3aa9b-dark .loopText,#d-d0bef3fb53d3aa9b-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-d0bef3fb53d3aa9b-dark .sectionTitle,#d-d0bef3fb53d3aa9b-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-d0bef3fb53d3aa9b-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-d0bef3fb53d3aa9b-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-d0bef3fb53d3aa9b-dark .noteText,#d-d0bef3fb53d3aa9b-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-d0bef3fb53d3aa9b-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-d0bef3fb53d3aa9b-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-d0bef3fb53d3aa9b-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-d0bef3fb53d3aa9b-dark .actorPopupMenu{position:absolute;}#d-d0bef3fb53d3aa9b-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-d0bef3fb53d3aa9b-dark .actor-man circle,#d-d0bef3fb53d3aa9b-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-d0bef3fb53d3aa9b-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-d0bef3fb53d3aa9b-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node rect,#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].cluster rect,#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-d0bef3fb53d3aa9b-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-d0bef3fb53d3aa9b-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-d0bef3fb53d3aa9b-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-d0bef3fb53d3aa9b-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-d0bef3fb53d3aa9b-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"437\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Executes tight loop (&gt;10ms, no yield points)</text><path d=\"M 436.5,115 C 496.5,105 496.5,145 436.5,135\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"M\" data-to=\"M\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"123\" y=\"160\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Detects long-running G (&gt;10ms)</text><path d=\"M 123,195 C 183,185 183,225 123,215\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"SM\" data-to=\"SM\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"277\" y=\"240\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Send OS Signal SIGURG</text><line x1=\"123\" y1=\"275\" x2=\"431.5\" y2=\"275\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"SM\" data-to=\"M\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"612\" y=\"290\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Interrupts execution &amp; saves registers</text><line x1=\"436.5\" y1=\"325\" x2=\"786.5\" y2=\"325\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"M\" data-to=\"Sig\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"792\" y=\"340\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push asyncPreempt frame</text><path d=\"M 791.5,375 C 851.5,365 851.5,405 791.5,395\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Sig\" data-to=\"Sig\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"914\" y=\"420\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Yield G to Global Queue</text><line x1=\"791.5\" y1=\"455\" x2=\"1036.5\" y2=\"455\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Sig\" data-to=\"Sched\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"740\" y=\"470\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Context switch to next Goroutine</text><line x1=\"1039.5\" y1=\"505\" x2=\"439.5\" y2=\"505\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"Sched\" data-to=\"M\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-d0bef3fb53d3aa9b-dark-arrowhead)\" style=\"fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"where-preemption-still-cannot-occur\">Where Preemption Still Cannot Occur<a class=\"h-anchor\" href=\"#where-preemption-still-cannot-occur\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>While Go 1.14+ handles almost all tight loops, certain regions remain non-preemptible:</p>\n<ol>\n<li><strong>Assembly functions without stack maps</strong>: Hand-written assembly routines without safepoint annotations cannot be safely interrupted because the garbage collector cannot trace pointer registers.</li>\n<li><strong>Cgo calls</strong>: While executing C code inside cgo, execution is outside the Go runtime; <code>sysmon</code> cannot preempt until execution returns across the cgo boundary.</li>\n<li><strong>Runtime internal locks</strong>: Goroutines executing low-level runtime code while holding internal locks (e.g. <code>gopark</code> or malloc locks) defer signal preemption until the lock is released.</li>\n</ol>\n<h2 id=\"practical-concurrency-patterns\">Practical Concurrency Patterns<a class=\"h-anchor\" href=\"#practical-concurrency-patterns\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">context</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">runtime</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// ComputeWorker demonstrates cooperative yielding in long-running CPU calculations</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> ComputeWorker</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">ctx</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Context</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">data</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> i, val </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> data {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">        // Check cancellation every batch</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> i</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1000</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> ==</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            select</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            case</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &lt;-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">ctx.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Done</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">():</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">                return</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            default</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">                // Voluntarily yield execution in tight batch loops</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">                runtime.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Gosched</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">        process</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(val)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"scheduler-rules\">Scheduler Rules<a class=\"h-anchor\" href=\"#scheduler-rules\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Do not use busy-spin loops</strong>: Never use <code>for !ready {}</code> to wait for state changes. Use <code>sync.Cond</code>, channels, or <code>sync/atomic</code> with event notifications.</li>\n<li><strong>Work-stealing mechanics</strong>: When a P exhausts its local queue, it steals half of the runnable goroutines from another randomly chosen P to balance CPU core utilization.</li>\n<li><strong>I/O scalability</strong>: Go handles hundreds of thousands of network connections because <code>netpoller</code> parks goroutines without blocking kernel threads.</li>\n</ol>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2025-05-18:books/software-architecture-hard-parts",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Software Architecture: The Hard Parts",
      "content_text": "",
      "date_published": "2025-05-18T00:00:00.000Z",
      "tags": [
        "books"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://ashwingopalsamy.in/blog/review-your-own-pr-first/",
      "url": "https://ashwingopalsamy.in/blog/review-your-own-pr-first/",
      "title": "Review Your Own PR First",
      "content_text": "How author self-review eliminates low-signal review cycles, accelerates merge velocity, and improves code quality.",
      "date_published": "2025-01-15T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>The highest-leverage habit for accelerating code review turnaround is conducting a rigorous, line-by-line self-review in the web diff viewer before requesting reviews from colleagues.</p>\n<p>In software teams, code reviews are asynchronous. Every review round-trip introduces context switching overhead and delays deployment by hours or days.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"ece0b98893619e03\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-ece0b98893619e03-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 890.5px;\" viewBox=\"-162.5 -10 890.5 941\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"528\" y=\"855\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Reviewer\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"603\" y=\"887.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"603\" dy=\"0\">Reviewer</tspan></text></g><g><rect x=\"0\" y=\"855\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Author\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"887.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Author</tspan></text></g><g><line id=\"d-ece0b98893619e03-light-actor1\" x1=\"603\" y1=\"65\" x2=\"603\" y2=\"855\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Reviewer\" data-et=\"life-line\" data-id=\"Reviewer\"></line><g id=\"d-ece0b98893619e03-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Reviewer\"><rect x=\"528\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Reviewer\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"603\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"603\" dy=\"0\">Reviewer</tspan></text></g></g><g><line id=\"d-ece0b98893619e03-light-actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"855\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Author\" data-et=\"life-line\" data-id=\"Author\"></line><g id=\"d-ece0b98893619e03-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Author\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Author\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Author</tspan></text></g></g><style>#d-ece0b98893619e03-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-ece0b98893619e03-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-ece0b98893619e03-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-ece0b98893619e03-light .error-icon{fill:rgb(255, 255, 255);}#d-ece0b98893619e03-light .error-text{fill:#000000;stroke:#000000;}#d-ece0b98893619e03-light .edge-thickness-normal{stroke-width:1px;}#d-ece0b98893619e03-light .edge-thickness-thick{stroke-width:3.5px;}#d-ece0b98893619e03-light .edge-pattern-solid{stroke-dasharray:0;}#d-ece0b98893619e03-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-ece0b98893619e03-light .edge-pattern-dashed{stroke-dasharray:3;}#d-ece0b98893619e03-light .edge-pattern-dotted{stroke-dasharray:2;}#d-ece0b98893619e03-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light .marker.cross{stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-ece0b98893619e03-light p{margin:0;}#d-ece0b98893619e03-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-ece0b98893619e03-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-ece0b98893619e03-light .actor-line{stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-ece0b98893619e03-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-ece0b98893619e03-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-ece0b98893619e03-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-ece0b98893619e03-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-ece0b98893619e03-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-ece0b98893619e03-light .labelText,#d-ece0b98893619e03-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-ece0b98893619e03-light .loopText,#d-ece0b98893619e03-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-ece0b98893619e03-light .sectionTitle,#d-ece0b98893619e03-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-ece0b98893619e03-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-ece0b98893619e03-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-ece0b98893619e03-light .noteText,#d-ece0b98893619e03-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-ece0b98893619e03-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-ece0b98893619e03-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-ece0b98893619e03-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-ece0b98893619e03-light .actorPopupMenu{position:absolute;}#d-ece0b98893619e03-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-ece0b98893619e03-light .actor-man circle,#d-ece0b98893619e03-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-ece0b98893619e03-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-ece0b98893619e03-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-ece0b98893619e03-light [data-look=\"neo\"].node rect,#d-ece0b98893619e03-light [data-look=\"neo\"].cluster rect,#d-ece0b98893619e03-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-ece0b98893619e03-light [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-ece0b98893619e03-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-ece0b98893619e03-light [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-ece0b98893619e03-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-ece0b98893619e03-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-ece0b98893619e03-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-ece0b98893619e03-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-ece0b98893619e03-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"50\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">Path A: Unreviewed PR (High Review Jitter)</tspan></text></g><g data-et=\"note\" data-id=\"i6\"><rect x=\"50\" y=\"435\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"440\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">3+ round trips over 48 hours</tspan></text></g><g data-et=\"note\" data-id=\"i7\"><rect x=\"50\" y=\"485\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"490\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">Path B: Self-Reviewed PR (High-Signal Velocity)</tspan></text></g><g data-et=\"note\" data-id=\"i12\"><rect x=\"50\" y=\"795\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"800\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">1 round trip in 2 hours</tspan></text></g><text x=\"338\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Request Review</text><line x1=\"76\" y1=\"165\" x2=\"599\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Author\" data-to=\"Reviewer\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"341\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">10 comments on formatting, typos, and forgotten debug logs</text><line x1=\"602\" y1=\"215\" x2=\"79\" y2=\"215\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"Reviewer\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"76\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push fixes</text><path d=\"M 76,265 C 136,255 136,295 76,285\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"341\" y=\"310\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">4 comments on missed edge cases</text><line x1=\"602\" y1=\"345\" x2=\"79\" y2=\"345\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Reviewer\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"76\" y=\"360\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push fixes</text><path d=\"M 76,395 C 136,385 136,425 76,415\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"76\" y=\"540\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Line-by-line self-review &amp; preemptive annotations</text><path d=\"M 76,575 C 136,565 136,605 76,595\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"338\" y=\"620\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Request Review on clean, annotated PR</text><line x1=\"76\" y1=\"655\" x2=\"599\" y2=\"655\" class=\"messageLine0\" data-et=\"message\" data-id=\"i9\" data-from=\"Author\" data-to=\"Reviewer\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"341\" y=\"670\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">1 architectural confirmation comment</text><line x1=\"602\" y1=\"705\" x2=\"79\" y2=\"705\" class=\"messageLine0\" data-et=\"message\" data-id=\"i10\" data-from=\"Reviewer\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"76\" y=\"720\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Merge to main</text><path d=\"M 76,755 C 136,745 136,785 76,775\" class=\"messageLine0\" data-et=\"message\" data-id=\"i11\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-light-arrowhead)\" style=\"fill: none;\"></path></svg>\n<svg data-variant=\"dark\" id=\"d-ece0b98893619e03-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 890.5px;\" viewBox=\"-162.5 -10 890.5 941\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"528\" y=\"855\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Reviewer\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"603\" y=\"887.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"603\" dy=\"0\">Reviewer</tspan></text></g><g><rect x=\"0\" y=\"855\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Author\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"887.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Author</tspan></text></g><g><line id=\"d-ece0b98893619e03-dark-actor1\" x1=\"603\" y1=\"65\" x2=\"603\" y2=\"855\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Reviewer\" data-et=\"life-line\" data-id=\"Reviewer\"></line><g id=\"d-ece0b98893619e03-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Reviewer\"><rect x=\"528\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Reviewer\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"603\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"603\" dy=\"0\">Reviewer</tspan></text></g></g><g><line id=\"d-ece0b98893619e03-dark-actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"855\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Author\" data-et=\"life-line\" data-id=\"Author\"></line><g id=\"d-ece0b98893619e03-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Author\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Author\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"0\">Author</tspan></text></g></g><style>#d-ece0b98893619e03-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-ece0b98893619e03-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-ece0b98893619e03-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-ece0b98893619e03-dark .error-icon{fill:rgb(21, 22, 23);}#d-ece0b98893619e03-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-ece0b98893619e03-dark .edge-thickness-normal{stroke-width:1px;}#d-ece0b98893619e03-dark .edge-thickness-thick{stroke-width:3.5px;}#d-ece0b98893619e03-dark .edge-pattern-solid{stroke-dasharray:0;}#d-ece0b98893619e03-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-ece0b98893619e03-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-ece0b98893619e03-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-ece0b98893619e03-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-ece0b98893619e03-dark p{margin:0;}#d-ece0b98893619e03-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-ece0b98893619e03-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-ece0b98893619e03-dark .actor-line{stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-ece0b98893619e03-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-ece0b98893619e03-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-ece0b98893619e03-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-ece0b98893619e03-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-ece0b98893619e03-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-ece0b98893619e03-dark .labelText,#d-ece0b98893619e03-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-ece0b98893619e03-dark .loopText,#d-ece0b98893619e03-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-ece0b98893619e03-dark .sectionTitle,#d-ece0b98893619e03-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-ece0b98893619e03-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-ece0b98893619e03-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-ece0b98893619e03-dark .noteText,#d-ece0b98893619e03-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-ece0b98893619e03-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-ece0b98893619e03-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-ece0b98893619e03-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-ece0b98893619e03-dark .actorPopupMenu{position:absolute;}#d-ece0b98893619e03-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-ece0b98893619e03-dark .actor-man circle,#d-ece0b98893619e03-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-ece0b98893619e03-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-ece0b98893619e03-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-ece0b98893619e03-dark [data-look=\"neo\"].node rect,#d-ece0b98893619e03-dark [data-look=\"neo\"].cluster rect,#d-ece0b98893619e03-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-ece0b98893619e03-dark [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-ece0b98893619e03-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-ece0b98893619e03-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-ece0b98893619e03-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-ece0b98893619e03-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-ece0b98893619e03-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-ece0b98893619e03-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-ece0b98893619e03-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-ece0b98893619e03-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-ece0b98893619e03-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"50\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">Path A: Unreviewed PR (High Review Jitter)</tspan></text></g><g data-et=\"note\" data-id=\"i6\"><rect x=\"50\" y=\"435\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"440\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">3+ round trips over 48 hours</tspan></text></g><g data-et=\"note\" data-id=\"i7\"><rect x=\"50\" y=\"485\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"490\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">Path B: Self-Reviewed PR (High-Signal Velocity)</tspan></text></g><g data-et=\"note\" data-id=\"i12\"><rect x=\"50\" y=\"795\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"578\" height=\"40\" class=\"note\"></rect><text x=\"339\" y=\"800\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"339\">1 round trip in 2 hours</tspan></text></g><text x=\"338\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Request Review</text><line x1=\"76\" y1=\"165\" x2=\"599\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Author\" data-to=\"Reviewer\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"341\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">10 comments on formatting, typos, and forgotten debug logs</text><line x1=\"602\" y1=\"215\" x2=\"79\" y2=\"215\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"Reviewer\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"76\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push fixes</text><path d=\"M 76,265 C 136,255 136,295 76,285\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"341\" y=\"310\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">4 comments on missed edge cases</text><line x1=\"602\" y1=\"345\" x2=\"79\" y2=\"345\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Reviewer\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"76\" y=\"360\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push fixes</text><path d=\"M 76,395 C 136,385 136,425 76,415\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"76\" y=\"540\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Line-by-line self-review &amp; preemptive annotations</text><path d=\"M 76,575 C 136,565 136,605 76,595\" class=\"messageLine0\" data-et=\"message\" data-id=\"i8\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"338\" y=\"620\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Request Review on clean, annotated PR</text><line x1=\"76\" y1=\"655\" x2=\"599\" y2=\"655\" class=\"messageLine0\" data-et=\"message\" data-id=\"i9\" data-from=\"Author\" data-to=\"Reviewer\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"341\" y=\"670\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">1 architectural confirmation comment</text><line x1=\"602\" y1=\"705\" x2=\"79\" y2=\"705\" class=\"messageLine0\" data-et=\"message\" data-id=\"i10\" data-from=\"Reviewer\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"76\" y=\"720\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Merge to main</text><path d=\"M 76,755 C 136,745 136,785 76,775\" class=\"messageLine0\" data-et=\"message\" data-id=\"i11\" data-from=\"Author\" data-to=\"Author\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-ece0b98893619e03-dark-arrowhead)\" style=\"fill: none;\"></path></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"the-five-step-self-review-workflow\">The Five-Step Self-Review Workflow<a class=\"h-anchor\" href=\"#the-five-step-self-review-workflow\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<h3 id=\"1-review-the-web-diff-view-in-isolation\">1. Review the Web Diff View in Isolation<a class=\"h-anchor\" href=\"#1-review-the-web-diff-view-in-isolation\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Never rely solely on your local IDE diff. Open the GitHub or GitLab “Files changed” tab in split view. Stepping outside the editing environment forces your brain to read the code as a consumer rather than the author.</p>\n<h3 id=\"2-scrub-diff-churn-and-accidental-changes\">2. Scrub Diff Churn and Accidental Changes<a class=\"h-anchor\" href=\"#2-scrub-diff-churn-and-accidental-changes\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Look for noise that pollutes the PR:</p>\n<ul>\n<li>Unintentional whitespace or auto-formatting shifts in untouched files</li>\n<li>Commented-out dead code or temporary debugging print statements</li>\n<li>Dependency lockfile churn caused by experimental package installations</li>\n</ul>\n<h3 id=\"3-add-preemptive-author-annotations\">3. Add Preemptive Author Annotations<a class=\"h-anchor\" href=\"#3-add-preemptive-author-annotations\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>If a section of code looks unusual, counterintuitive, or deliberately complex, add an inline comment on your own PR before your reviewer sees it:</p>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span>// Author Note:</span></span>\n<span class=\"line\"><span>\"Using sync/atomic here instead of a mutex because this runs on </span></span>\n<span class=\"line\"><span>the 50k rps authorization ingress path. Benchmark results linked in PR description.\"</span></span></code></pre></div>\n<p>Preemptive comments immediately answer the reviewer’s first question, preventing an unnecessary round-trip comment asking for justification.</p>\n<h3 id=\"4-verify-failure-paths-in-tests\">4. Verify Failure Paths in Tests<a class=\"h-anchor\" href=\"#4-verify-failure-paths-in-tests\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Review your newly added unit tests in the diff:</p>\n<ul>\n<li>Do tests verify error branches as thoroughly as happy paths?</li>\n<li>Are edge cases (nil inputs, empty slices, boundary limits) explicitly asserted?</li>\n<li>Are test names descriptive of the failure mode being protected?</li>\n</ul>\n<h3 id=\"5-structure-the-pr-summary-with-evidence\">5. Structure the PR Summary with Evidence<a class=\"h-anchor\" href=\"#5-structure-the-pr-summary-with-evidence\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>A high-signal PR description answers three questions succinctly:</p>\n<ol>\n<li><strong>What</strong>: The concrete functional change.</li>\n<li><strong>Why</strong>: The technical motivation or incident ticket reference.</li>\n<li><strong>Verification</strong>: The exact commands run and evidence of success (e.g. <code>go test -race ./pkg/auth/...</code> passing with benchmark metrics).</li>\n</ol>\n<h2 id=\"operational-rules\">Operational Rules<a class=\"h-anchor\" href=\"#operational-rules\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Keep diffs under 400 lines</strong>: Review quality drops precipitously on PRs exceeding 400 lines of modified code. Split large changes into sequential, stackable PRs.</li>\n<li><strong>Never ping reviewers before self-reviewing</strong>: A reviewer’s time should be spent validating system architecture and race conditions, not flagging leftover formatting discrepancies.</li>\n<li><strong>Automate formatting via CI</strong>: Formatting and linting should be enforced entirely by pre-commit hooks and CI gates, keeping human reviews focused on technical correctness.</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-generics-comparable-constraint/",
      "url": "https://ashwingopalsamy.in/blog/go-generics-comparable-constraint/",
      "title": "The comparable Constraint in Go Generics",
      "content_text": "How Go's comparable constraint works, the Go 1.20 interface comparability evolution, and compile-time vs runtime guarantees.",
      "date_published": "2024-12-25T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>In Go’s type parameter system, <code>comparable</code> is a predefined constraint implemented by every type that supports equality comparisons using <code>==</code> and <code>!=</code>.</p>\n<p>Without <code>comparable</code>, generic code cannot use equality operators or instantiate <code>map</code> keys with type parameters.</p>\n<h2 id=\"which-types-are-comparable\">Which Types Are Comparable?<a class=\"h-anchor\" href=\"#which-types-are-comparable\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Under the Go language specification (§Comparison operators), the following types are strictly comparable:</p>\n<ul>\n<li><strong>Booleans and numeric types</strong>: <code>bool</code>, <code>int</code>, <code>int64</code>, <code>float64</code>, <code>complex128</code>, and related primitives</li>\n<li><strong>Strings</strong>: Compared byte-for-byte</li>\n<li><strong>Pointers</strong>: Compared by memory address</li>\n<li><strong>Channels</strong>: Compared by runtime channel pointer identity</li>\n<li><strong>Structs</strong>: Comparable if and only if every field in the struct is comparable</li>\n<li><strong>Arrays</strong>: Comparable if and only if the element type is comparable</li>\n<li><strong>Interfaces</strong>: Comparable if their dynamic types support equality (with runtime caveats)</li>\n</ul>\n<p>Slices, maps, and functions are <strong>not</strong> comparable. Any struct or array containing a slice, map, or function is also not comparable.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"a6c4004d52c1c85d\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-a6c4004d52c1c85d-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1478.37890625px;\" viewBox=\"0 0 1478.37890625 303.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-a6c4004d52c1c85d-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-a6c4004d52c1c85d-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-a6c4004d52c1c85d-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-a6c4004d52c1c85d-light .error-icon{fill:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-light .error-text{fill:#000000;stroke:#000000;}#d-a6c4004d52c1c85d-light .edge-thickness-normal{stroke-width:1px;}#d-a6c4004d52c1c85d-light .edge-thickness-thick{stroke-width:3.5px;}#d-a6c4004d52c1c85d-light .edge-pattern-solid{stroke-dasharray:0;}#d-a6c4004d52c1c85d-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-a6c4004d52c1c85d-light .edge-pattern-dashed{stroke-dasharray:3;}#d-a6c4004d52c1c85d-light .edge-pattern-dotted{stroke-dasharray:2;}#d-a6c4004d52c1c85d-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-a6c4004d52c1c85d-light .marker.cross{stroke:rgb(44, 46, 48);}#d-a6c4004d52c1c85d-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-a6c4004d52c1c85d-light p{margin:0;}#d-a6c4004d52c1c85d-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-light .cluster-label text{fill:#000000;}#d-a6c4004d52c1c85d-light .cluster-label span{color:#000000;}#d-a6c4004d52c1c85d-light .cluster-label span p{background-color:transparent;}#d-a6c4004d52c1c85d-light .label text,#d-a6c4004d52c1c85d-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-light .node rect,#d-a6c4004d52c1c85d-light .node circle,#d-a6c4004d52c1c85d-light .node ellipse,#d-a6c4004d52c1c85d-light .node polygon,#d-a6c4004d52c1c85d-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-a6c4004d52c1c85d-light .rough-node .label text,#d-a6c4004d52c1c85d-light .node .label text,#d-a6c4004d52c1c85d-light .image-shape .label,#d-a6c4004d52c1c85d-light .icon-shape .label{text-anchor:middle;}#d-a6c4004d52c1c85d-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-a6c4004d52c1c85d-light .rough-node .label,#d-a6c4004d52c1c85d-light .node .label,#d-a6c4004d52c1c85d-light .image-shape .label,#d-a6c4004d52c1c85d-light .icon-shape .label{text-align:center;}#d-a6c4004d52c1c85d-light .node.clickable{cursor:pointer;}#d-a6c4004d52c1c85d-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-a6c4004d52c1c85d-light .arrowheadPath{fill:#000000;}#d-a6c4004d52c1c85d-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-a6c4004d52c1c85d-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-a6c4004d52c1c85d-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-a6c4004d52c1c85d-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-a6c4004d52c1c85d-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-a6c4004d52c1c85d-light .cluster text{fill:#000000;}#d-a6c4004d52c1c85d-light .cluster span{color:#000000;}#d-a6c4004d52c1c85d-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-a6c4004d52c1c85d-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-light rect.text{fill:none;stroke-width:0;}#d-a6c4004d52c1c85d-light .icon-shape,#d-a6c4004d52c1c85d-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-a6c4004d52c1c85d-light .icon-shape p,#d-a6c4004d52c1c85d-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-a6c4004d52c1c85d-light .icon-shape .label rect,#d-a6c4004d52c1c85d-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-a6c4004d52c1c85d-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-a6c4004d52c1c85d-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node rect,#d-a6c4004d52c1c85d-light [data-look=\"neo\"].cluster rect,#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node polygon{stroke:url(#d-a6c4004d52c1c85d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node path{stroke:url(#d-a6c4004d52c1c85d-light-gradient);stroke-width:1px;}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node circle{stroke:url(#d-a6c4004d52c1c85d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-a6c4004d52c1c85d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-a6c4004d52c1c85d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M931.289,37.531L838.457,45.026C745.625,52.521,559.961,67.51,467.129,78.505C374.297,89.5,374.297,96.5,374.297,100L374.297,103.5\" id=\"d-a6c4004d52c1c85d-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6OTMxLjI4OTA2MjUsInkiOjM3LjUzMTA0NTk1ODc5NTU2fSx7IngiOjM3NC4yOTY4NzUsInkiOjgyLjV9LHsieCI6Mzc0LjI5Njg3NSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M990.508,57.5L990.508,61.667C990.508,65.833,990.508,74.167,990.508,81.833C990.508,89.5,990.508,96.5,990.508,100L990.508,103.5\" id=\"d-a6c4004d52c1c85d-light-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6OTkwLjUwNzgxMjUsInkiOjU3LjV9LHsieCI6OTkwLjUwNzgxMjUsInkiOjgyLjV9LHsieCI6OTkwLjUwNzgxMjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M1049.727,41.171L1098.169,48.059C1146.611,54.947,1243.495,68.724,1291.937,79.112C1340.379,89.5,1340.379,96.5,1340.379,100L1340.379,103.5\" id=\"d-a6c4004d52c1c85d-light-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6MTA0OS43MjY1NjI1LCJ5Ijo0MS4xNzA2MjM2NjcxOTg4NX0seyJ4IjoxMzQwLjM3ODkwNjI1LCJ5Ijo4Mi41fSx7IngiOjEzNDAuMzc4OTA2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M244.297,172.452L223.629,177.293C202.961,182.135,161.625,191.817,140.957,201.784C120.289,211.75,120.289,222,120.289,227.125L120.289,232.25\" id=\"d-a6c4004d52c1c85d-light-L_B_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_B1_0\" data-points=\"W3sieCI6MjQ0LjI5Njg3NSwieSI6MTcyLjQ1MTgxOTI3MjI5MTF9LHsieCI6MTIwLjI4OTA2MjUsInkiOjIwMS41fSx7IngiOjEyMC4yODkwNjI1LCJ5IjoyMzYuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M374.297,176.5L374.297,180.667C374.297,184.833,374.297,193.167,374.297,202.458C374.297,211.75,374.297,222,374.297,227.125L374.297,232.25\" id=\"d-a6c4004d52c1c85d-light-L_B_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_B2_0\" data-points=\"W3sieCI6Mzc0LjI5Njg3NSwieSI6MTc2LjV9LHsieCI6Mzc0LjI5Njg3NSwieSI6MjAxLjV9LHsieCI6Mzc0LjI5Njg3NSwieSI6MjM2LjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M504.297,170.467L527.917,175.639C551.536,180.811,598.776,191.156,622.396,199.828C646.016,208.5,646.016,215.5,646.016,219L646.016,222.5\" id=\"d-a6c4004d52c1c85d-light-L_B_B3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_B3_0\" data-points=\"W3sieCI6NTA0LjI5Njg3NSwieSI6MTcwLjQ2NjkzNTAyMDEyNjV9LHsieCI6NjQ2LjAxNTYyNSwieSI6MjAxLjV9LHsieCI6NjQ2LjAxNTYyNSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M937.476,176.5L931.071,180.667C924.666,184.833,911.857,193.167,905.452,202.458C899.047,211.75,899.047,222,899.047,227.125L899.047,232.25\" id=\"d-a6c4004d52c1c85d-light-L_C_C1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_C1_0\" data-points=\"W3sieCI6OTM3LjQ3NTg0MDMzNjEzNDQsInkiOjE3Ni41fSx7IngiOjg5OS4wNDY4NzUsInkiOjIwMS41fSx7IngiOjg5OS4wNDY4NzUsInkiOjIzNi4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M1043.54,176.5L1049.945,180.667C1056.349,184.833,1069.159,193.167,1075.564,202.458C1081.969,211.75,1081.969,222,1081.969,227.125L1081.969,232.25\" id=\"d-a6c4004d52c1c85d-light-L_C_C2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_C2_0\" data-points=\"W3sieCI6MTA0My41Mzk3ODQ2NjM4NjU1LCJ5IjoxNzYuNX0seyJ4IjoxMDgxLjk2ODc1LCJ5IjoyMDEuNX0seyJ4IjoxMDgxLjk2ODc1LCJ5IjoyMzYuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path><path d=\"M1340.379,176.5L1340.379,180.667C1340.379,184.833,1340.379,193.167,1340.379,202.458C1340.379,211.75,1340.379,222,1340.379,227.125L1340.379,232.25\" id=\"d-a6c4004d52c1c85d-light-L_D_D1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_D1_0\" data-points=\"W3sieCI6MTM0MC4zNzg5MDYyNSwieSI6MTc2LjV9LHsieCI6MTM0MC4zNzg5MDYyNSwieSI6MjAxLjV9LHsieCI6MTM0MC4zNzg5MDYyNSwieSI6MjM2LjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_B1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_B2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_B3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_C1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_C2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_D1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-a6c4004d52c1c85d-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(990.5078125, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.21875\" y=\"-24.75\" width=\"118.4375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.21875, -9.75)\"><rect></rect><foreignObject width=\"58.4375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Go Types</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(374.296875, 142)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Strictly Comparable (Compile-Time Safe)</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-a6c4004d52c1c85d-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(990.5078125, 142)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Incomparable (Compile-Time Blocked)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-a6c4004d52c1c85d-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(1340.37890625, 142)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Ordinary Comparable (Runtime Checked)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-light-flowchart-B1-7\" data-look=\"classic\" transform=\"translate(120.2890625, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-112.2890625\" y=\"-24.75\" width=\"224.578125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-82.2890625, -9.75)\"><rect></rect><foreignObject width=\"164.578125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Primitives (int, string, bool)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-light-flowchart-B2-9\" data-look=\"classic\" transform=\"translate(374.296875, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.71875\" y=\"-24.75\" width=\"183.4375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.71875, -9.75)\"><rect></rect><foreignObject width=\"123.4375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointers &amp; Channels</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-light-flowchart-B3-11\" data-look=\"classic\" transform=\"translate(646.015625, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Structs/Arrays of comparable fields</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-a6c4004d52c1c85d-light-flowchart-C1-13\" data-look=\"classic\" transform=\"translate(899.046875, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.03125\" y=\"-24.75\" width=\"146.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.03125, -9.75)\"><rect></rect><foreignObject width=\"86.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Slices &amp; Maps</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-a6c4004d52c1c85d-light-flowchart-C2-15\" data-look=\"classic\" transform=\"translate(1081.96875, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.890625\" y=\"-24.75\" width=\"119.78125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.890625, -9.75)\"><rect></rect><foreignObject width=\"59.78125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Functions</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-a6c4004d52c1c85d-light-flowchart-D1-17\" data-look=\"classic\" transform=\"translate(1340.37890625, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.9296875\" y=\"-24.75\" width=\"193.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.9296875, -9.75)\"><rect></rect><foreignObject width=\"133.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Interfaces (any, error)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-a6c4004d52c1c85d-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-a6c4004d52c1c85d-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-a6c4004d52c1c85d-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-a6c4004d52c1c85d-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1478.37890625px;\" viewBox=\"0 0 1478.37890625 303.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-a6c4004d52c1c85d-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-a6c4004d52c1c85d-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-a6c4004d52c1c85d-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-a6c4004d52c1c85d-dark .error-icon{fill:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-a6c4004d52c1c85d-dark .edge-thickness-normal{stroke-width:1px;}#d-a6c4004d52c1c85d-dark .edge-thickness-thick{stroke-width:3.5px;}#d-a6c4004d52c1c85d-dark .edge-pattern-solid{stroke-dasharray:0;}#d-a6c4004d52c1c85d-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-a6c4004d52c1c85d-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-a6c4004d52c1c85d-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-a6c4004d52c1c85d-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-a6c4004d52c1c85d-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-a6c4004d52c1c85d-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-a6c4004d52c1c85d-dark p{margin:0;}#d-a6c4004d52c1c85d-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-dark .cluster-label text{fill:#eae9e8;}#d-a6c4004d52c1c85d-dark .cluster-label span{color:#eae9e8;}#d-a6c4004d52c1c85d-dark .cluster-label span p{background-color:transparent;}#d-a6c4004d52c1c85d-dark .label text,#d-a6c4004d52c1c85d-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-dark .node rect,#d-a6c4004d52c1c85d-dark .node circle,#d-a6c4004d52c1c85d-dark .node ellipse,#d-a6c4004d52c1c85d-dark .node polygon,#d-a6c4004d52c1c85d-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-a6c4004d52c1c85d-dark .rough-node .label text,#d-a6c4004d52c1c85d-dark .node .label text,#d-a6c4004d52c1c85d-dark .image-shape .label,#d-a6c4004d52c1c85d-dark .icon-shape .label{text-anchor:middle;}#d-a6c4004d52c1c85d-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-a6c4004d52c1c85d-dark .rough-node .label,#d-a6c4004d52c1c85d-dark .node .label,#d-a6c4004d52c1c85d-dark .image-shape .label,#d-a6c4004d52c1c85d-dark .icon-shape .label{text-align:center;}#d-a6c4004d52c1c85d-dark .node.clickable{cursor:pointer;}#d-a6c4004d52c1c85d-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-a6c4004d52c1c85d-dark .arrowheadPath{fill:#eae9e8;}#d-a6c4004d52c1c85d-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-a6c4004d52c1c85d-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-a6c4004d52c1c85d-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-a6c4004d52c1c85d-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-a6c4004d52c1c85d-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-a6c4004d52c1c85d-dark .cluster text{fill:#eae9e8;}#d-a6c4004d52c1c85d-dark .cluster span{color:#eae9e8;}#d-a6c4004d52c1c85d-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-a6c4004d52c1c85d-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-a6c4004d52c1c85d-dark rect.text{fill:none;stroke-width:0;}#d-a6c4004d52c1c85d-dark .icon-shape,#d-a6c4004d52c1c85d-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-a6c4004d52c1c85d-dark .icon-shape p,#d-a6c4004d52c1c85d-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-a6c4004d52c1c85d-dark .icon-shape .label rect,#d-a6c4004d52c1c85d-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-a6c4004d52c1c85d-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-a6c4004d52c1c85d-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-a6c4004d52c1c85d-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node rect,#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].cluster rect,#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node polygon{stroke:url(#d-a6c4004d52c1c85d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node path{stroke:url(#d-a6c4004d52c1c85d-dark-gradient);stroke-width:1px;}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node circle{stroke:url(#d-a6c4004d52c1c85d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-a6c4004d52c1c85d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-a6c4004d52c1c85d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a6c4004d52c1c85d-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-a6c4004d52c1c85d-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M931.289,37.531L838.457,45.026C745.625,52.521,559.961,67.51,467.129,78.505C374.297,89.5,374.297,96.5,374.297,100L374.297,103.5\" id=\"d-a6c4004d52c1c85d-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6OTMxLjI4OTA2MjUsInkiOjM3LjUzMTA0NTk1ODc5NTU2fSx7IngiOjM3NC4yOTY4NzUsInkiOjgyLjV9LHsieCI6Mzc0LjI5Njg3NSwieSI6MTA3LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M990.508,57.5L990.508,61.667C990.508,65.833,990.508,74.167,990.508,81.833C990.508,89.5,990.508,96.5,990.508,100L990.508,103.5\" id=\"d-a6c4004d52c1c85d-dark-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6OTkwLjUwNzgxMjUsInkiOjU3LjV9LHsieCI6OTkwLjUwNzgxMjUsInkiOjgyLjV9LHsieCI6OTkwLjUwNzgxMjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1049.727,41.171L1098.169,48.059C1146.611,54.947,1243.495,68.724,1291.937,79.112C1340.379,89.5,1340.379,96.5,1340.379,100L1340.379,103.5\" id=\"d-a6c4004d52c1c85d-dark-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6MTA0OS43MjY1NjI1LCJ5Ijo0MS4xNzA2MjM2NjcxOTg4NX0seyJ4IjoxMzQwLjM3ODkwNjI1LCJ5Ijo4Mi41fSx7IngiOjEzNDAuMzc4OTA2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M244.297,172.452L223.629,177.293C202.961,182.135,161.625,191.817,140.957,201.784C120.289,211.75,120.289,222,120.289,227.125L120.289,232.25\" id=\"d-a6c4004d52c1c85d-dark-L_B_B1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_B1_0\" data-points=\"W3sieCI6MjQ0LjI5Njg3NSwieSI6MTcyLjQ1MTgxOTI3MjI5MTF9LHsieCI6MTIwLjI4OTA2MjUsInkiOjIwMS41fSx7IngiOjEyMC4yODkwNjI1LCJ5IjoyMzYuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M374.297,176.5L374.297,180.667C374.297,184.833,374.297,193.167,374.297,202.458C374.297,211.75,374.297,222,374.297,227.125L374.297,232.25\" id=\"d-a6c4004d52c1c85d-dark-L_B_B2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_B2_0\" data-points=\"W3sieCI6Mzc0LjI5Njg3NSwieSI6MTc2LjV9LHsieCI6Mzc0LjI5Njg3NSwieSI6MjAxLjV9LHsieCI6Mzc0LjI5Njg3NSwieSI6MjM2LjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M504.297,170.467L527.917,175.639C551.536,180.811,598.776,191.156,622.396,199.828C646.016,208.5,646.016,215.5,646.016,219L646.016,222.5\" id=\"d-a6c4004d52c1c85d-dark-L_B_B3_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_B3_0\" data-points=\"W3sieCI6NTA0LjI5Njg3NSwieSI6MTcwLjQ2NjkzNTAyMDEyNjV9LHsieCI6NjQ2LjAxNTYyNSwieSI6MjAxLjV9LHsieCI6NjQ2LjAxNTYyNSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M937.476,176.5L931.071,180.667C924.666,184.833,911.857,193.167,905.452,202.458C899.047,211.75,899.047,222,899.047,227.125L899.047,232.25\" id=\"d-a6c4004d52c1c85d-dark-L_C_C1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_C1_0\" data-points=\"W3sieCI6OTM3LjQ3NTg0MDMzNjEzNDQsInkiOjE3Ni41fSx7IngiOjg5OS4wNDY4NzUsInkiOjIwMS41fSx7IngiOjg5OS4wNDY4NzUsInkiOjIzNi4yNX1d\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1043.54,176.5L1049.945,180.667C1056.349,184.833,1069.159,193.167,1075.564,202.458C1081.969,211.75,1081.969,222,1081.969,227.125L1081.969,232.25\" id=\"d-a6c4004d52c1c85d-dark-L_C_C2_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_C2_0\" data-points=\"W3sieCI6MTA0My41Mzk3ODQ2NjM4NjU1LCJ5IjoxNzYuNX0seyJ4IjoxMDgxLjk2ODc1LCJ5IjoyMDEuNX0seyJ4IjoxMDgxLjk2ODc1LCJ5IjoyMzYuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M1340.379,176.5L1340.379,180.667C1340.379,184.833,1340.379,193.167,1340.379,202.458C1340.379,211.75,1340.379,222,1340.379,227.125L1340.379,232.25\" id=\"d-a6c4004d52c1c85d-dark-L_D_D1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_D1_0\" data-points=\"W3sieCI6MTM0MC4zNzg5MDYyNSwieSI6MTc2LjV9LHsieCI6MTM0MC4zNzg5MDYyNSwieSI6MjAxLjV9LHsieCI6MTM0MC4zNzg5MDYyNSwieSI6MjM2LjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-a6c4004d52c1c85d-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_B1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_B2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_B3_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_C1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_C2_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_D1_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-a6c4004d52c1c85d-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(990.5078125, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.21875\" y=\"-24.75\" width=\"118.4375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.21875, -9.75)\"><rect></rect><foreignObject width=\"58.4375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Go Types</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(374.296875, 142)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Strictly Comparable (Compile-Time Safe)</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-a6c4004d52c1c85d-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(990.5078125, 142)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Incomparable (Compile-Time Blocked)</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-a6c4004d52c1c85d-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(1340.37890625, 142)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Ordinary Comparable (Runtime Checked)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-dark-flowchart-B1-7\" data-look=\"classic\" transform=\"translate(120.2890625, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-112.2890625\" y=\"-24.75\" width=\"224.578125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-82.2890625, -9.75)\"><rect></rect><foreignObject width=\"164.578125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Primitives (int, string, bool)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-dark-flowchart-B2-9\" data-look=\"classic\" transform=\"translate(374.296875, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.71875\" y=\"-24.75\" width=\"183.4375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.71875, -9.75)\"><rect></rect><foreignObject width=\"123.4375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointers &amp; Channels</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-a6c4004d52c1c85d-dark-flowchart-B3-11\" data-look=\"classic\" transform=\"translate(646.015625, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Structs/Arrays of comparable fields</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-a6c4004d52c1c85d-dark-flowchart-C1-13\" data-look=\"classic\" transform=\"translate(899.046875, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-73.03125\" y=\"-24.75\" width=\"146.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-43.03125, -9.75)\"><rect></rect><foreignObject width=\"86.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Slices &amp; Maps</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-a6c4004d52c1c85d-dark-flowchart-C2-15\" data-look=\"classic\" transform=\"translate(1081.96875, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-59.890625\" y=\"-24.75\" width=\"119.78125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-29.890625, -9.75)\"><rect></rect><foreignObject width=\"59.78125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Functions</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-a6c4004d52c1c85d-dark-flowchart-D1-17\" data-look=\"classic\" transform=\"translate(1340.37890625, 261)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.9296875\" y=\"-24.75\" width=\"193.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.9296875, -9.75)\"><rect></rect><foreignObject width=\"133.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Interfaces (any, error)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-a6c4004d52c1c85d-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-a6c4004d52c1c85d-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-a6c4004d52c1c85d-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"generic-sets-and-slice-lookups\">Generic Sets and Slice Lookups<a class=\"h-anchor\" href=\"#generic-sets-and-slice-lookups\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The primary use case for <code>comparable</code> is creating generic collections, deduplication pipelines, and lookups:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Set is a generic hash set requiring comparable elements for map keys</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Set</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> comparable</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    elements </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> NewSet</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> comparable</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]() </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Set</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">] {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &amp;</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Set</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]{elements: </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{})}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">s </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Set</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Add</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">val</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    s.elements[val] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}{}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">s </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Set</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]) </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Contains</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">val</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">bool</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    _, ok </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> s.elements[val]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> ok</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// RemoveDuplicates filters out repeated items while preserving initial order</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> RemoveDuplicates</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> comparable</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">](</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">items</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) []</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    seen </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">map</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">[</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">]</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(items))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    result </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> make</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">([]</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">T</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">len</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(items))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, item </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> range</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> items {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> _, exists </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> seen[item]; </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">exists {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            seen[item] </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{}{}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            result </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> append</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(result, item)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> result</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"the-go-120-interface-comparability-evolution\">The Go 1.20 Interface Comparability Evolution<a class=\"h-anchor\" href=\"#the-go-120-interface-comparability-evolution\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In Go 1.18 and 1.19, interface types (like <code>any</code> or <code>error</code>) could not satisfy the <code>comparable</code> constraint. If you attempted to instantiate <code>NewSet[any]()</code>, the compiler failed: <code>any does not implement comparable</code>.</p>\n<p>This restriction existed because interface comparison in Go is dynamic: comparing two interface values whose underlying concrete types are slices or maps causes a <strong>runtime panic</strong>:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> a, b </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">any</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}, []</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">{</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">2</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(a </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">==</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> b) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// runtime panic: comparing uncomparable type []int</span></span></code></pre></div>\n<p>In Go 1.20 (proposals #51338 and #56548), the language authors relaxed this constraint:</p>\n<ol>\n<li><strong>Ordinary comparability</strong>: Non-type-parameter interface types (like <code>any</code>, <code>fmt.Stringer</code>, or custom interfaces) now satisfy <code>comparable</code> constraints.</li>\n<li><strong>Strict comparability</strong>: Concrete types without interfaces guarantee compile-time safety without the risk of dynamic comparison panics.</li>\n</ol>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"a00ffe5ef300def6\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-a00ffe5ef300def6-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 959.5px;\" viewBox=\"-50 -10 959.5 721\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"709.5\" y=\"635\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"784.5\" y=\"667.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"784.5\" dy=\"0\">Go Runtime</tspan></text></g><g><rect x=\"509.5\" y=\"635\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Compiler\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"584.5\" y=\"667.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"584.5\" dy=\"0\">Go Compiler</tspan></text></g><g><rect x=\"0\" y=\"635\" fill=\"#eaeaea\" stroke=\"#666\" width=\"269\" height=\"65\" name=\"Code\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"134.5\" y=\"667.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"134.5\" dy=\"0\">Generic Function [T comparable]</tspan></text></g><g><line id=\"d-a00ffe5ef300def6-light-actor2\" x1=\"784.5\" y1=\"65\" x2=\"784.5\" y2=\"635\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Runtime\" data-et=\"life-line\" data-id=\"Runtime\"></line><g id=\"d-a00ffe5ef300def6-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Runtime\"><rect x=\"709.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"784.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"784.5\" dy=\"0\">Go Runtime</tspan></text></g></g><g><line id=\"d-a00ffe5ef300def6-light-actor1\" x1=\"584.5\" y1=\"65\" x2=\"584.5\" y2=\"635\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Compiler\" data-et=\"life-line\" data-id=\"Compiler\"></line><g id=\"d-a00ffe5ef300def6-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Compiler\"><rect x=\"509.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Compiler\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"584.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"584.5\" dy=\"0\">Go Compiler</tspan></text></g></g><g><line id=\"d-a00ffe5ef300def6-light-actor0\" x1=\"134.5\" y1=\"65\" x2=\"134.5\" y2=\"635\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Code\" data-et=\"life-line\" data-id=\"Code\"></line><g id=\"d-a00ffe5ef300def6-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Code\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"269\" height=\"65\" name=\"Code\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"134.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"134.5\" dy=\"0\">Generic Function [T comparable]</tspan></text></g></g><style>#d-a00ffe5ef300def6-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-a00ffe5ef300def6-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-a00ffe5ef300def6-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-a00ffe5ef300def6-light .error-icon{fill:rgb(255, 255, 255);}#d-a00ffe5ef300def6-light .error-text{fill:#000000;stroke:#000000;}#d-a00ffe5ef300def6-light .edge-thickness-normal{stroke-width:1px;}#d-a00ffe5ef300def6-light .edge-thickness-thick{stroke-width:3.5px;}#d-a00ffe5ef300def6-light .edge-pattern-solid{stroke-dasharray:0;}#d-a00ffe5ef300def6-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-a00ffe5ef300def6-light .edge-pattern-dashed{stroke-dasharray:3;}#d-a00ffe5ef300def6-light .edge-pattern-dotted{stroke-dasharray:2;}#d-a00ffe5ef300def6-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light .marker.cross{stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-a00ffe5ef300def6-light p{margin:0;}#d-a00ffe5ef300def6-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-a00ffe5ef300def6-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-a00ffe5ef300def6-light .actor-line{stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-a00ffe5ef300def6-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-a00ffe5ef300def6-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-a00ffe5ef300def6-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-a00ffe5ef300def6-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-a00ffe5ef300def6-light .labelText,#d-a00ffe5ef300def6-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-a00ffe5ef300def6-light .loopText,#d-a00ffe5ef300def6-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-a00ffe5ef300def6-light .sectionTitle,#d-a00ffe5ef300def6-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-a00ffe5ef300def6-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-a00ffe5ef300def6-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-a00ffe5ef300def6-light .noteText,#d-a00ffe5ef300def6-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-a00ffe5ef300def6-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-a00ffe5ef300def6-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-a00ffe5ef300def6-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-a00ffe5ef300def6-light .actorPopupMenu{position:absolute;}#d-a00ffe5ef300def6-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-a00ffe5ef300def6-light .actor-man circle,#d-a00ffe5ef300def6-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-a00ffe5ef300def6-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-a00ffe5ef300def6-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-a00ffe5ef300def6-light [data-look=\"neo\"].node rect,#d-a00ffe5ef300def6-light [data-look=\"neo\"].cluster rect,#d-a00ffe5ef300def6-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-a00ffe5ef300def6-light [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-a00ffe5ef300def6-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-a00ffe5ef300def6-light [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-a00ffe5ef300def6-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-a00ffe5ef300def6-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-a00ffe5ef300def6-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-a00ffe5ef300def6-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-a00ffe5ef300def6-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"109.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"500\" height=\"40\" class=\"note\"></rect><text x=\"360\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"360\">Case 1: T is int or string (Strictly Comparable)</tspan></text></g><g data-et=\"note\" data-id=\"i3\"><rect x=\"109.5\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"700\" height=\"40\" class=\"note\"></rect><text x=\"460\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"460\">Case 2: T is any (Ordinary Interface)</tspan></text></g><g data-et=\"control-structure\" data-id=\"i11\"><line x1=\"123.5\" y1=\"425\" x2=\"795.5\" y2=\"425\" class=\"loopLine\"></line><line x1=\"795.5\" y1=\"425\" x2=\"795.5\" y2=\"615\" class=\"loopLine\"></line><line x1=\"123.5\" y1=\"615\" x2=\"795.5\" y2=\"615\" class=\"loopLine\"></line><line x1=\"123.5\" y1=\"425\" x2=\"123.5\" y2=\"615\" class=\"loopLine\"></line><line x1=\"123.5\" y1=\"525\" x2=\"795.5\" y2=\"525\" class=\"loopLine\" style=\"stroke-dasharray: 3, 3;\"></line><polygon points=\"123.5,425 173.5,425 173.5,438 165.1,445 123.5,445\" class=\"labelBox\"></polygon><text x=\"149\" y=\"438\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"labelText\" style=\"font-size: 16px; font-weight: 400;\">alt</text><text x=\"484.5\" y=\"443\" text-anchor=\"middle\" class=\"loopText\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"484.5\">[Dynamic values are scalar (int, string)]</tspan></text><text x=\"459.5\" y=\"543\" text-anchor=\"middle\" class=\"sectionTitle\" style=\"font-size: 16px; font-weight: 400;\">[Dynamic values contain slice / map]</text></g><text x=\"358\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Instantiate with int</text><line x1=\"135.5\" y1=\"165\" x2=\"580.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Code\" data-to=\"Compiler\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"361\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Validated at compile time (Zero runtime panic risk)</text><line x1=\"583.5\" y1=\"215\" x2=\"138.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Compiler\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"358\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Instantiate with any</text><line x1=\"135.5\" y1=\"315\" x2=\"580.5\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Code\" data-to=\"Compiler\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"361\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Allowed in Go 1.20+</text><line x1=\"583.5\" y1=\"365\" x2=\"138.5\" y2=\"365\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"Compiler\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"458\" y=\"380\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Compare interface values</text><line x1=\"135.5\" y1=\"415\" x2=\"780.5\" y2=\"415\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"Code\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"461\" y=\"475\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Returns boolean comparison result</text><line x1=\"783.5\" y1=\"510\" x2=\"138.5\" y2=\"510\" class=\"messageLine1\" data-et=\"message\" data-id=\"i8\" data-from=\"Runtime\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"461\" y=\"570\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Panics: comparing uncomparable type</text><line x1=\"783.5\" y1=\"605\" x2=\"138.5\" y2=\"605\" class=\"messageLine1\" data-et=\"message\" data-id=\"i10\" data-from=\"Runtime\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-light-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-a00ffe5ef300def6-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 959.5px;\" viewBox=\"-50 -10 959.5 721\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"709.5\" y=\"635\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"784.5\" y=\"667.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"784.5\" dy=\"0\">Go Runtime</tspan></text></g><g><rect x=\"509.5\" y=\"635\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Compiler\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"584.5\" y=\"667.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"584.5\" dy=\"0\">Go Compiler</tspan></text></g><g><rect x=\"0\" y=\"635\" fill=\"#eaeaea\" stroke=\"#666\" width=\"269\" height=\"65\" name=\"Code\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"134.5\" y=\"667.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"134.5\" dy=\"0\">Generic Function [T comparable]</tspan></text></g><g><line id=\"d-a00ffe5ef300def6-dark-actor2\" x1=\"784.5\" y1=\"65\" x2=\"784.5\" y2=\"635\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Runtime\" data-et=\"life-line\" data-id=\"Runtime\"></line><g id=\"d-a00ffe5ef300def6-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Runtime\"><rect x=\"709.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Runtime\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"784.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"784.5\" dy=\"0\">Go Runtime</tspan></text></g></g><g><line id=\"d-a00ffe5ef300def6-dark-actor1\" x1=\"584.5\" y1=\"65\" x2=\"584.5\" y2=\"635\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Compiler\" data-et=\"life-line\" data-id=\"Compiler\"></line><g id=\"d-a00ffe5ef300def6-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Compiler\"><rect x=\"509.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Compiler\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"584.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"584.5\" dy=\"0\">Go Compiler</tspan></text></g></g><g><line id=\"d-a00ffe5ef300def6-dark-actor0\" x1=\"134.5\" y1=\"65\" x2=\"134.5\" y2=\"635\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Code\" data-et=\"life-line\" data-id=\"Code\"></line><g id=\"d-a00ffe5ef300def6-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"Code\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"269\" height=\"65\" name=\"Code\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"134.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"134.5\" dy=\"0\">Generic Function [T comparable]</tspan></text></g></g><style>#d-a00ffe5ef300def6-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-a00ffe5ef300def6-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-a00ffe5ef300def6-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-a00ffe5ef300def6-dark .error-icon{fill:rgb(21, 22, 23);}#d-a00ffe5ef300def6-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-a00ffe5ef300def6-dark .edge-thickness-normal{stroke-width:1px;}#d-a00ffe5ef300def6-dark .edge-thickness-thick{stroke-width:3.5px;}#d-a00ffe5ef300def6-dark .edge-pattern-solid{stroke-dasharray:0;}#d-a00ffe5ef300def6-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-a00ffe5ef300def6-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-a00ffe5ef300def6-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-a00ffe5ef300def6-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-a00ffe5ef300def6-dark p{margin:0;}#d-a00ffe5ef300def6-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-a00ffe5ef300def6-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-a00ffe5ef300def6-dark .actor-line{stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-a00ffe5ef300def6-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-a00ffe5ef300def6-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-a00ffe5ef300def6-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-a00ffe5ef300def6-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-a00ffe5ef300def6-dark .labelText,#d-a00ffe5ef300def6-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-a00ffe5ef300def6-dark .loopText,#d-a00ffe5ef300def6-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-a00ffe5ef300def6-dark .sectionTitle,#d-a00ffe5ef300def6-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-a00ffe5ef300def6-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-a00ffe5ef300def6-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-a00ffe5ef300def6-dark .noteText,#d-a00ffe5ef300def6-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-a00ffe5ef300def6-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-a00ffe5ef300def6-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-a00ffe5ef300def6-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-a00ffe5ef300def6-dark .actorPopupMenu{position:absolute;}#d-a00ffe5ef300def6-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-a00ffe5ef300def6-dark .actor-man circle,#d-a00ffe5ef300def6-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-a00ffe5ef300def6-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-a00ffe5ef300def6-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node rect,#d-a00ffe5ef300def6-dark [data-look=\"neo\"].cluster rect,#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node path{stroke:url(#mmd-2-gradient);stroke-width:1px;}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-2-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-a00ffe5ef300def6-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-a00ffe5ef300def6-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-a00ffe5ef300def6-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-a00ffe5ef300def6-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-a00ffe5ef300def6-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i0\"><rect x=\"109.5\" y=\"75\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"500\" height=\"40\" class=\"note\"></rect><text x=\"360\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"360\">Case 1: T is int or string (Strictly Comparable)</tspan></text></g><g data-et=\"note\" data-id=\"i3\"><rect x=\"109.5\" y=\"225\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"700\" height=\"40\" class=\"note\"></rect><text x=\"460\" y=\"230\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"460\">Case 2: T is any (Ordinary Interface)</tspan></text></g><g data-et=\"control-structure\" data-id=\"i11\"><line x1=\"123.5\" y1=\"425\" x2=\"795.5\" y2=\"425\" class=\"loopLine\"></line><line x1=\"795.5\" y1=\"425\" x2=\"795.5\" y2=\"615\" class=\"loopLine\"></line><line x1=\"123.5\" y1=\"615\" x2=\"795.5\" y2=\"615\" class=\"loopLine\"></line><line x1=\"123.5\" y1=\"425\" x2=\"123.5\" y2=\"615\" class=\"loopLine\"></line><line x1=\"123.5\" y1=\"525\" x2=\"795.5\" y2=\"525\" class=\"loopLine\" style=\"stroke-dasharray: 3, 3;\"></line><polygon points=\"123.5,425 173.5,425 173.5,438 165.1,445 123.5,445\" class=\"labelBox\"></polygon><text x=\"149\" y=\"438\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"labelText\" style=\"font-size: 16px; font-weight: 400;\">alt</text><text x=\"484.5\" y=\"443\" text-anchor=\"middle\" class=\"loopText\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"484.5\">[Dynamic values are scalar (int, string)]</tspan></text><text x=\"459.5\" y=\"543\" text-anchor=\"middle\" class=\"sectionTitle\" style=\"font-size: 16px; font-weight: 400;\">[Dynamic values contain slice / map]</text></g><text x=\"358\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Instantiate with int</text><line x1=\"135.5\" y1=\"165\" x2=\"580.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"Code\" data-to=\"Compiler\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"361\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Validated at compile time (Zero runtime panic risk)</text><line x1=\"583.5\" y1=\"215\" x2=\"138.5\" y2=\"215\" class=\"messageLine1\" data-et=\"message\" data-id=\"i2\" data-from=\"Compiler\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"358\" y=\"280\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Instantiate with any</text><line x1=\"135.5\" y1=\"315\" x2=\"580.5\" y2=\"315\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Code\" data-to=\"Compiler\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"361\" y=\"330\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Allowed in Go 1.20+</text><line x1=\"583.5\" y1=\"365\" x2=\"138.5\" y2=\"365\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"Compiler\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"458\" y=\"380\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Compare interface values</text><line x1=\"135.5\" y1=\"415\" x2=\"780.5\" y2=\"415\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"Code\" data-to=\"Runtime\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"461\" y=\"475\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Returns boolean comparison result</text><line x1=\"783.5\" y1=\"510\" x2=\"138.5\" y2=\"510\" class=\"messageLine1\" data-et=\"message\" data-id=\"i8\" data-from=\"Runtime\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"461\" y=\"570\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Panics: comparing uncomparable type</text><line x1=\"783.5\" y1=\"605\" x2=\"138.5\" y2=\"605\" class=\"messageLine1\" data-et=\"message\" data-id=\"i10\" data-from=\"Runtime\" data-to=\"Code\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-a00ffe5ef300def6-dark-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"summary-of-constraints\">Summary of Constraints<a class=\"h-anchor\" href=\"#summary-of-constraints\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Constraint</th>\n<th>Allowed Types</th>\n<th>Supported Operations</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>any</code></td>\n<td>All Go types</td>\n<td>Assignment, type assertions, passing to functions</td>\n</tr>\n<tr>\n<td><code>comparable</code></td>\n<td>Primitives, pointers, channels, interfaces, comparable structs/arrays</td>\n<td><code>==</code>, <code>!=</code>, and map key usage</td>\n</tr>\n<tr>\n<td><code>cmp.Ordered</code></td>\n<td>Integers, floats, strings</td>\n<td><code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>==</code>, <code>!=</code></td>\n</tr>\n</tbody>\n</table></div>\n<p>When authoring generic packages, use <code>comparable</code> whenever your algorithms rely on equality checks or map key lookups. If ordering is required, prefer the standard library <code>cmp.Ordered</code> constraint.</p>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-program-entry-point/",
      "url": "https://ashwingopalsamy.in/blog/go-program-entry-point/",
      "title": "What Happens Before main() in Go",
      "content_text": "The Go runtime bootstrap sequence from _rt0_go and schedinit to topological package init execution.",
      "date_published": "2024-12-13T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Before the first line of your <code>main.main()</code> function executes, the Go runtime performs a multi-stage bootstrap sequence: detecting CPU hardware capabilities, setting up memory allocators, initializing logical processors, and executing package initializations in topological dependency order.</p>\n<h2 id=\"the-bootstrap-execution-chain\">The Bootstrap Execution Chain<a class=\"h-anchor\" href=\"#the-bootstrap-execution-chain\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When an operating system loads a compiled Go ELF or Mach-O binary, execution starts at the architecture-specific assembly entry point:</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"c83bde83d8bd3135\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-c83bde83d8bd3135-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1650.5px;\" viewBox=\"-50 -10 1650.5 691\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"1400.5\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1475.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1475.5\" dy=\"0\">main.main()</tspan></text></g><g><rect x=\"1091.5\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"250\" height=\"65\" name=\"MainG\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1216.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1216.5\" dy=\"0\">Main Goroutine (runtime.main)</tspan></text></g><g><rect x=\"708\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"RT\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"814.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"814.5\" dy=\"0\">runtime.rt0_go / schedinit</tspan></text></g><g><rect x=\"350\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"209\" height=\"65\" name=\"ASM\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"454.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"454.5\" dy=\"0\">_rt0_amd64 / _rt0_arm64</tspan></text></g><g><rect x=\"0\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"OS\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"106.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"106.5\" dy=\"0\">Operating System Loader</tspan></text></g><g><line id=\"d-c83bde83d8bd3135-light-actor4\" x1=\"1475.5\" y1=\"65\" x2=\"1475.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"User\" data-et=\"life-line\" data-id=\"User\"></line><g id=\"d-c83bde83d8bd3135-light-root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"User\"><rect x=\"1400.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1475.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1475.5\" dy=\"0\">main.main()</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-light-actor3\" x1=\"1216.5\" y1=\"65\" x2=\"1216.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"MainG\" data-et=\"life-line\" data-id=\"MainG\"></line><g id=\"d-c83bde83d8bd3135-light-root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"MainG\"><rect x=\"1091.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"250\" height=\"65\" name=\"MainG\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1216.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1216.5\" dy=\"0\">Main Goroutine (runtime.main)</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-light-actor2\" x1=\"814.5\" y1=\"65\" x2=\"814.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"RT\" data-et=\"life-line\" data-id=\"RT\"></line><g id=\"d-c83bde83d8bd3135-light-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"RT\"><rect x=\"708\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"RT\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"814.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"814.5\" dy=\"0\">runtime.rt0_go / schedinit</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-light-actor1\" x1=\"454.5\" y1=\"65\" x2=\"454.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"ASM\" data-et=\"life-line\" data-id=\"ASM\"></line><g id=\"d-c83bde83d8bd3135-light-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"ASM\"><rect x=\"350\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"209\" height=\"65\" name=\"ASM\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"454.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"454.5\" dy=\"0\">_rt0_amd64 / _rt0_arm64</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-light-actor0\" x1=\"106.5\" y1=\"65\" x2=\"106.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"OS\" data-et=\"life-line\" data-id=\"OS\"></line><g id=\"d-c83bde83d8bd3135-light-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"OS\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"OS\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"106.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"106.5\" dy=\"0\">Operating System Loader</tspan></text></g></g><style>#d-c83bde83d8bd3135-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-c83bde83d8bd3135-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-c83bde83d8bd3135-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-c83bde83d8bd3135-light .error-icon{fill:rgb(255, 255, 255);}#d-c83bde83d8bd3135-light .error-text{fill:#000000;stroke:#000000;}#d-c83bde83d8bd3135-light .edge-thickness-normal{stroke-width:1px;}#d-c83bde83d8bd3135-light .edge-thickness-thick{stroke-width:3.5px;}#d-c83bde83d8bd3135-light .edge-pattern-solid{stroke-dasharray:0;}#d-c83bde83d8bd3135-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-c83bde83d8bd3135-light .edge-pattern-dashed{stroke-dasharray:3;}#d-c83bde83d8bd3135-light .edge-pattern-dotted{stroke-dasharray:2;}#d-c83bde83d8bd3135-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light .marker.cross{stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-c83bde83d8bd3135-light p{margin:0;}#d-c83bde83d8bd3135-light .actor{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);stroke-width:1;}#d-c83bde83d8bd3135-light rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light rect.note[data-look=\"neo\"]{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light text.actor&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-c83bde83d8bd3135-light .actor-line{stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-c83bde83d8bd3135-light .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light [id$=\"-arrowhead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light .sequenceNumber{fill:rgb(255, 255, 255);}#d-c83bde83d8bd3135-light [id$=\"-sequencenumber\"]{fill:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light [id$=\"-crosshead\"] path{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-c83bde83d8bd3135-light .messageText{fill:rgb(21, 22, 23);stroke:none;}#d-c83bde83d8bd3135-light .labelBox{stroke:rgb(203, 206, 208);fill:rgb(255, 255, 255);filter:none;}#d-c83bde83d8bd3135-light .labelText,#d-c83bde83d8bd3135-light .labelText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-c83bde83d8bd3135-light .loopText,#d-c83bde83d8bd3135-light .loopText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-c83bde83d8bd3135-light .sectionTitle,#d-c83bde83d8bd3135-light .sectionTitle&gt;tspan{fill:rgb(21, 22, 23);stroke:none;}#d-c83bde83d8bd3135-light .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(203, 206, 208);fill:rgb(203, 206, 208);}#d-c83bde83d8bd3135-light .note{stroke:rgb(203, 206, 208);fill:rgb(220, 222, 224);}#d-c83bde83d8bd3135-light .noteText,#d-c83bde83d8bd3135-light .noteText&gt;tspan{fill:rgb(21, 22, 23);stroke:none;font-weight:normal;}#d-c83bde83d8bd3135-light .activation0{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-c83bde83d8bd3135-light .activation1{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-c83bde83d8bd3135-light .activation2{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);}#d-c83bde83d8bd3135-light .actorPopupMenu{position:absolute;}#d-c83bde83d8bd3135-light .actorPopupMenuPanel{position:absolute;fill:rgb(255, 255, 255);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-c83bde83d8bd3135-light .actor-man circle,#d-c83bde83d8bd3135-light line{fill:rgb(255, 255, 255);stroke-width:2px;}#d-c83bde83d8bd3135-light g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(203, 206, 208);}#d-c83bde83d8bd3135-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-c83bde83d8bd3135-light [data-look=\"neo\"].node rect,#d-c83bde83d8bd3135-light [data-look=\"neo\"].cluster rect,#d-c83bde83d8bd3135-light [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-c83bde83d8bd3135-light [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-c83bde83d8bd3135-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-c83bde83d8bd3135-light [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-c83bde83d8bd3135-light [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-c83bde83d8bd3135-light-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-c83bde83d8bd3135-light-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-c83bde83d8bd3135-light-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-c83bde83d8bd3135-light-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-light-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"279\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Transfer control to binary entry point</text><line x1=\"107.5\" y1=\"115\" x2=\"450.5\" y2=\"115\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"OS\" data-to=\"ASM\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"633\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Setup g0 stack &amp; m0 (main OS thread)</text><line x1=\"455.5\" y1=\"165\" x2=\"810.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"ASM\" data-to=\"RT\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"816\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.schedinit (Memory, GC, GOMAXPROCS)</text><path d=\"M 815.5,215 C 875.5,205 875.5,245 815.5,235\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"RT\" data-to=\"RT\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"1014\" y=\"260\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.newproc -&gt; Spawns Main Goroutine</text><line x1=\"815.5\" y1=\"295\" x2=\"1212.5\" y2=\"295\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"RT\" data-to=\"MainG\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></line><text x=\"816\" y=\"310\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.mstart (Enter scheduler loop)</text><path d=\"M 815.5,345 C 875.5,335 875.5,375 815.5,365\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"RT\" data-to=\"RT\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"1218\" y=\"390\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.gcenable &amp; Start sysmon thread</text><path d=\"M 1217.5,425 C 1277.5,415 1277.5,455 1217.5,445\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"MainG\" data-to=\"MainG\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"1218\" y=\"470\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Execute package inittask graph in dependency order</text><path d=\"M 1217.5,505 C 1277.5,495 1277.5,535 1217.5,525\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"MainG\" data-to=\"MainG\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></path><text x=\"1345\" y=\"550\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Invoke main.main()</text><line x1=\"1217.5\" y1=\"585\" x2=\"1471.5\" y2=\"585\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"MainG\" data-to=\"User\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-light-arrowhead)\" style=\"fill: none;\"></line></svg>\n<svg data-variant=\"dark\" id=\"d-c83bde83d8bd3135-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1650.5px;\" viewBox=\"-50 -10 1650.5 691\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"1400.5\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1475.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1475.5\" dy=\"0\">main.main()</tspan></text></g><g><rect x=\"1091.5\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"250\" height=\"65\" name=\"MainG\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1216.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1216.5\" dy=\"0\">Main Goroutine (runtime.main)</tspan></text></g><g><rect x=\"708\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"RT\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"814.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"814.5\" dy=\"0\">runtime.rt0_go / schedinit</tspan></text></g><g><rect x=\"350\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"209\" height=\"65\" name=\"ASM\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"454.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"454.5\" dy=\"0\">_rt0_amd64 / _rt0_arm64</tspan></text></g><g><rect x=\"0\" y=\"605\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"OS\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"106.5\" y=\"637.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"106.5\" dy=\"0\">Operating System Loader</tspan></text></g><g><line id=\"d-c83bde83d8bd3135-dark-actor4\" x1=\"1475.5\" y1=\"65\" x2=\"1475.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"User\" data-et=\"life-line\" data-id=\"User\"></line><g id=\"d-c83bde83d8bd3135-dark-root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"User\"><rect x=\"1400.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"User\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1475.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1475.5\" dy=\"0\">main.main()</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-dark-actor3\" x1=\"1216.5\" y1=\"65\" x2=\"1216.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"MainG\" data-et=\"life-line\" data-id=\"MainG\"></line><g id=\"d-c83bde83d8bd3135-dark-root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"MainG\"><rect x=\"1091.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"250\" height=\"65\" name=\"MainG\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1216.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"1216.5\" dy=\"0\">Main Goroutine (runtime.main)</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-dark-actor2\" x1=\"814.5\" y1=\"65\" x2=\"814.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"RT\" data-et=\"life-line\" data-id=\"RT\"></line><g id=\"d-c83bde83d8bd3135-dark-root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"RT\"><rect x=\"708\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"RT\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"814.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"814.5\" dy=\"0\">runtime.rt0_go / schedinit</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-dark-actor1\" x1=\"454.5\" y1=\"65\" x2=\"454.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"ASM\" data-et=\"life-line\" data-id=\"ASM\"></line><g id=\"d-c83bde83d8bd3135-dark-root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"ASM\"><rect x=\"350\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"209\" height=\"65\" name=\"ASM\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"454.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"454.5\" dy=\"0\">_rt0_amd64 / _rt0_arm64</tspan></text></g></g><g><line id=\"d-c83bde83d8bd3135-dark-actor0\" x1=\"106.5\" y1=\"65\" x2=\"106.5\" y2=\"605\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"OS\" data-et=\"life-line\" data-id=\"OS\"></line><g id=\"d-c83bde83d8bd3135-dark-root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"OS\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"213\" height=\"65\" name=\"OS\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"106.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"106.5\" dy=\"0\">Operating System Loader</tspan></text></g></g><style>#d-c83bde83d8bd3135-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-c83bde83d8bd3135-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-c83bde83d8bd3135-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-c83bde83d8bd3135-dark .error-icon{fill:rgb(21, 22, 23);}#d-c83bde83d8bd3135-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-c83bde83d8bd3135-dark .edge-thickness-normal{stroke-width:1px;}#d-c83bde83d8bd3135-dark .edge-thickness-thick{stroke-width:3.5px;}#d-c83bde83d8bd3135-dark .edge-pattern-solid{stroke-dasharray:0;}#d-c83bde83d8bd3135-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-c83bde83d8bd3135-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-c83bde83d8bd3135-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-c83bde83d8bd3135-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-c83bde83d8bd3135-dark p{margin:0;}#d-c83bde83d8bd3135-dark .actor{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);stroke-width:1;}#d-c83bde83d8bd3135-dark rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark rect.note[data-look=\"neo\"]{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark text.actor&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-c83bde83d8bd3135-dark .actor-line{stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-c83bde83d8bd3135-dark .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark [id$=\"-arrowhead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark .sequenceNumber{fill:rgb(21, 22, 23);}#d-c83bde83d8bd3135-dark [id$=\"-sequencenumber\"]{fill:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark [id$=\"-crosshead\"] path{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-c83bde83d8bd3135-dark .messageText{fill:rgb(255, 255, 255);stroke:none;}#d-c83bde83d8bd3135-dark .labelBox{stroke:rgb(108, 111, 114);fill:rgb(21, 22, 23);filter:none;}#d-c83bde83d8bd3135-dark .labelText,#d-c83bde83d8bd3135-dark .labelText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-c83bde83d8bd3135-dark .loopText,#d-c83bde83d8bd3135-dark .loopText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-c83bde83d8bd3135-dark .sectionTitle,#d-c83bde83d8bd3135-dark .sectionTitle&gt;tspan{fill:rgb(255, 255, 255);stroke:none;}#d-c83bde83d8bd3135-dark .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:rgb(108, 111, 114);fill:rgb(108, 111, 114);}#d-c83bde83d8bd3135-dark .note{stroke:rgb(108, 111, 114);fill:rgb(69, 72, 74);}#d-c83bde83d8bd3135-dark .noteText,#d-c83bde83d8bd3135-dark .noteText&gt;tspan{fill:rgb(255, 255, 255);stroke:none;font-weight:normal;}#d-c83bde83d8bd3135-dark .activation0{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-c83bde83d8bd3135-dark .activation1{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-c83bde83d8bd3135-dark .activation2{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);}#d-c83bde83d8bd3135-dark .actorPopupMenu{position:absolute;}#d-c83bde83d8bd3135-dark .actorPopupMenuPanel{position:absolute;fill:rgb(21, 22, 23);box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-c83bde83d8bd3135-dark .actor-man circle,#d-c83bde83d8bd3135-dark line{fill:rgb(21, 22, 23);stroke-width:2px;}#d-c83bde83d8bd3135-dark g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:rgb(108, 111, 114);}#d-c83bde83d8bd3135-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node rect,#d-c83bde83d8bd3135-dark [data-look=\"neo\"].cluster rect,#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node polygon{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node path{stroke:url(#mmd-1-gradient);stroke-width:1px;}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node circle{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#mmd-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c83bde83d8bd3135-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"d-c83bde83d8bd3135-dark-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"d-c83bde83d8bd3135-dark-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"d-c83bde83d8bd3135-dark-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"d-c83bde83d8bd3135-dark-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"279\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Transfer control to binary entry point</text><line x1=\"107.5\" y1=\"115\" x2=\"450.5\" y2=\"115\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"OS\" data-to=\"ASM\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"633\" y=\"130\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Setup g0 stack &amp; m0 (main OS thread)</text><line x1=\"455.5\" y1=\"165\" x2=\"810.5\" y2=\"165\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"ASM\" data-to=\"RT\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"816\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.schedinit (Memory, GC, GOMAXPROCS)</text><path d=\"M 815.5,215 C 875.5,205 875.5,245 815.5,235\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"RT\" data-to=\"RT\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"1014\" y=\"260\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.newproc -&gt; Spawns Main Goroutine</text><line x1=\"815.5\" y1=\"295\" x2=\"1212.5\" y2=\"295\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"RT\" data-to=\"MainG\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></line><text x=\"816\" y=\"310\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.mstart (Enter scheduler loop)</text><path d=\"M 815.5,345 C 875.5,335 875.5,375 815.5,365\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"RT\" data-to=\"RT\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"1218\" y=\"390\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">runtime.gcenable &amp; Start sysmon thread</text><path d=\"M 1217.5,425 C 1277.5,415 1277.5,455 1217.5,445\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"MainG\" data-to=\"MainG\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"1218\" y=\"470\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Execute package inittask graph in dependency order</text><path d=\"M 1217.5,505 C 1277.5,495 1277.5,535 1217.5,525\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"MainG\" data-to=\"MainG\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></path><text x=\"1345\" y=\"550\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Invoke main.main()</text><line x1=\"1217.5\" y1=\"585\" x2=\"1471.5\" y2=\"585\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"MainG\" data-to=\"User\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#d-c83bde83d8bd3135-dark-arrowhead)\" style=\"fill: none;\"></line></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h3 id=\"stage-1-cpu-detection-and-machine-initialization-runtimert0_go\">Stage 1: CPU Detection and Machine Initialization (<code>runtime.rt0_go</code>)<a class=\"h-anchor\" href=\"#stage-1-cpu-detection-and-machine-initialization-runtimert0_go\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>The assembly bootstrap reads <code>argc</code> and <code>argv</code>, sets up the thread-local storage (<code>TLS</code>), determines hardware feature flags (such as AES-NI, AVX-512, or ARM NEON), and links the bootstrap OS thread (<code>m0</code>) with the system execution stack (<code>g0</code>).</p>\n<h3 id=\"stage-2-subsystem-allocation-runtimeschedinit\">Stage 2: Subsystem Allocation (<code>runtime.schedinit</code>)<a class=\"h-anchor\" href=\"#stage-2-subsystem-allocation-runtimeschedinit\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p><code>schedinit</code> initializes all core runtime engines:</p>\n<ul>\n<li><strong>Memory Allocator</strong> (<code>mallocinit</code>): Configures heap spans and thread caches (<code>mcache</code>).</li>\n<li><strong>Garbage Collector</strong> (<code>gcinit</code>): Calculates heap pacing parameters and pacing targets.</li>\n<li><strong>Processors</strong> (<code>procresize</code>): Allocates <p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>P</mi></mrow><annotation encoding=\"application/x-tex\">P</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6833em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.1389em;\">P</span></span></span></span></span></p> logical processors matching <code>GOMAXPROCS</code>.</li>\n<li><strong>System Stack</strong>: Initializes stack pools and signal preemption handlers.</li>\n</ul>\n<h3 id=\"stage-3-the-main-goroutine-runtimemain\">Stage 3: The Main Goroutine (<code>runtime.main</code>)<a class=\"h-anchor\" href=\"#stage-3-the-main-goroutine-runtimemain\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<p>Once the scheduler starts via <code>runtime.mstart</code>, the runtime spawns the first official user goroutine executing <code>runtime.main</code>. This goroutine starts the background <code>sysmon</code> thread, enables garbage collection (<code>gcenable</code>), and evaluates the compiler-generated package dependency graph.</p>\n<h2 id=\"package-initialization-order-inittask\">Package Initialization Order (<code>inittask</code>)<a class=\"h-anchor\" href=\"#package-initialization-order-inittask\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Go initializes packages strictly in <strong>topological dependency order</strong> (leaf dependencies first). Circular imports are rejected at compile time.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"9cf0d37da1f0e8b3\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-9cf0d37da1f0e8b3-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 288.421875px;\" viewBox=\"0 0 288.421875 403\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-9cf0d37da1f0e8b3-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-9cf0d37da1f0e8b3-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-9cf0d37da1f0e8b3-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-9cf0d37da1f0e8b3-light .error-icon{fill:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-light .error-text{fill:#000000;stroke:#000000;}#d-9cf0d37da1f0e8b3-light .edge-thickness-normal{stroke-width:1px;}#d-9cf0d37da1f0e8b3-light .edge-thickness-thick{stroke-width:3.5px;}#d-9cf0d37da1f0e8b3-light .edge-pattern-solid{stroke-dasharray:0;}#d-9cf0d37da1f0e8b3-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-9cf0d37da1f0e8b3-light .edge-pattern-dashed{stroke-dasharray:3;}#d-9cf0d37da1f0e8b3-light .edge-pattern-dotted{stroke-dasharray:2;}#d-9cf0d37da1f0e8b3-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-9cf0d37da1f0e8b3-light .marker.cross{stroke:rgb(44, 46, 48);}#d-9cf0d37da1f0e8b3-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-9cf0d37da1f0e8b3-light p{margin:0;}#d-9cf0d37da1f0e8b3-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-light .cluster-label text{fill:#000000;}#d-9cf0d37da1f0e8b3-light .cluster-label span{color:#000000;}#d-9cf0d37da1f0e8b3-light .cluster-label span p{background-color:transparent;}#d-9cf0d37da1f0e8b3-light .label text,#d-9cf0d37da1f0e8b3-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-light .node rect,#d-9cf0d37da1f0e8b3-light .node circle,#d-9cf0d37da1f0e8b3-light .node ellipse,#d-9cf0d37da1f0e8b3-light .node polygon,#d-9cf0d37da1f0e8b3-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-9cf0d37da1f0e8b3-light .rough-node .label text,#d-9cf0d37da1f0e8b3-light .node .label text,#d-9cf0d37da1f0e8b3-light .image-shape .label,#d-9cf0d37da1f0e8b3-light .icon-shape .label{text-anchor:middle;}#d-9cf0d37da1f0e8b3-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-9cf0d37da1f0e8b3-light .rough-node .label,#d-9cf0d37da1f0e8b3-light .node .label,#d-9cf0d37da1f0e8b3-light .image-shape .label,#d-9cf0d37da1f0e8b3-light .icon-shape .label{text-align:center;}#d-9cf0d37da1f0e8b3-light .node.clickable{cursor:pointer;}#d-9cf0d37da1f0e8b3-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-9cf0d37da1f0e8b3-light .arrowheadPath{fill:#000000;}#d-9cf0d37da1f0e8b3-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-9cf0d37da1f0e8b3-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-9cf0d37da1f0e8b3-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-9cf0d37da1f0e8b3-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-9cf0d37da1f0e8b3-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-9cf0d37da1f0e8b3-light .cluster text{fill:#000000;}#d-9cf0d37da1f0e8b3-light .cluster span{color:#000000;}#d-9cf0d37da1f0e8b3-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-9cf0d37da1f0e8b3-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-light rect.text{fill:none;stroke-width:0;}#d-9cf0d37da1f0e8b3-light .icon-shape,#d-9cf0d37da1f0e8b3-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-9cf0d37da1f0e8b3-light .icon-shape p,#d-9cf0d37da1f0e8b3-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-9cf0d37da1f0e8b3-light .icon-shape .label rect,#d-9cf0d37da1f0e8b3-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-9cf0d37da1f0e8b3-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-9cf0d37da1f0e8b3-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node rect,#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].cluster rect,#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node polygon{stroke:url(#d-9cf0d37da1f0e8b3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node path{stroke:url(#d-9cf0d37da1f0e8b3-light-gradient);stroke-width:1px;}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node circle{stroke:url(#d-9cf0d37da1f0e8b3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-9cf0d37da1f0e8b3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-9cf0d37da1f0e8b3-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M186.312,77L190.047,81.167C193.783,85.333,201.255,93.667,204.991,101.333C208.727,109,208.727,116,208.727,119.5L208.727,123\" id=\"d-9cf0d37da1f0e8b3-light-L_main_Auth_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_main_Auth_0\" data-points=\"W3sieCI6MTg2LjMxMTU4MDg4MjM1MjkzLCJ5Ijo3N30seyJ4IjoyMDguNzI2NTYyNSwieSI6MTAyfSx7IngiOjIwOC43MjY1NjI1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd)\"></path><path d=\"M114.331,77L109.373,81.167C104.416,85.333,94.501,93.667,89.543,106.125C84.586,118.583,84.586,135.167,84.586,151.75C84.586,168.333,84.586,184.917,85.292,196.721C85.998,208.526,87.411,215.552,88.117,219.065L88.823,222.578\" id=\"d-9cf0d37da1f0e8b3-light-L_main_DB_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_main_DB_0\" data-points=\"W3sieCI6MTE0LjMzMDg4MjM1Mjk0MTE3LCJ5Ijo3N30seyJ4Ijo4NC41ODU5Mzc1LCJ5IjoxMDJ9LHsieCI6ODQuNTg1OTM3NSwieSI6MTUxLjc1fSx7IngiOjg0LjU4NTkzNzUsInkiOjIwMS41fSx7IngiOjg5LjYxMTA2MzEyODE0MDcsInkiOjIyNi41fV0=\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd)\"></path><path d=\"M178.483,176.5L173.391,180.667C168.3,184.833,158.117,193.167,149.045,201.045C139.973,208.924,132.012,216.348,128.031,220.06L124.051,223.772\" id=\"d-9cf0d37da1f0e8b3-light-L_Auth_DB_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Auth_DB_0\" data-points=\"W3sieCI6MTc4LjQ4MjgyNDI3NzYzODIsInkiOjE3Ni41fSx7IngiOjE0Ny45MzM1OTM3NSwieSI6MjAxLjV9LHsieCI6MTIxLjEyNTcyNjI4NzY4ODQ1LCJ5IjoyMjYuNX1d\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd)\"></path><path d=\"M94.586,276L94.586,280.167C94.586,284.333,94.586,292.667,98.367,300.534C102.147,308.401,109.709,315.801,113.49,319.502L117.271,323.202\" id=\"d-9cf0d37da1f0e8b3-light-L_DB_Config_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_DB_Config_0\" data-points=\"W3sieCI6OTQuNTg1OTM3NSwieSI6Mjc2fSx7IngiOjk0LjU4NTkzNzUsInkiOjMwMX0seyJ4IjoxMjAuMTI5MjAxNjgwNjcyMjcsInkiOjMyNn1d\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd)\"></path><path d=\"M213.701,176.5L214.539,180.667C215.376,184.833,217.052,193.167,217.889,205.625C218.727,218.083,218.727,234.667,218.727,251.25C218.727,267.833,218.727,284.417,214.776,296.419C210.826,308.421,202.926,315.841,198.976,319.551L195.025,323.262\" id=\"d-9cf0d37da1f0e8b3-light-L_Auth_Config_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Auth_Config_0\" data-points=\"W3sieCI6MjEzLjcwMTQzNjg3MTg1OTMsInkiOjE3Ni41fSx7IngiOjIxOC43MjY1NjI1LCJ5IjoyMDEuNX0seyJ4IjoyMTguNzI2NTYyNSwieSI6MjUxLjI1fSx7IngiOjIxOC43MjY1NjI1LCJ5IjozMDF9LHsieCI6MTkyLjEwOTkwMDIxMDA4NDA1LCJ5IjozMjZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_main_Auth_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_main_DB_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Auth_DB_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_DB_Config_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Auth_Config_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-9cf0d37da1f0e8b3-light-flowchart-main-0\" data-look=\"classic\" transform=\"translate(155.37890625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-76.28125\" y=\"-34.5\" width=\"152.5625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-46.28125, -19.5)\"><rect></rect><foreignObject width=\"92.5625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>main package<br>(Initialized last)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-9cf0d37da1f0e8b3-light-flowchart-Auth-1\" data-look=\"classic\" transform=\"translate(208.7265625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-71.6953125\" y=\"-24.75\" width=\"143.390625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-41.6953125, -9.75)\"><rect></rect><foreignObject width=\"83.390625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>auth package</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-9cf0d37da1f0e8b3-light-flowchart-DB-2\" data-look=\"classic\" transform=\"translate(94.5859375, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.5859375\" y=\"-24.75\" width=\"173.171875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.5859375, -9.75)\"><rect></rect><foreignObject width=\"113.171875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>database package</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-9cf0d37da1f0e8b3-light-flowchart-Config-3\" data-look=\"classic\" transform=\"translate(155.37890625, 360.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.765625\" y=\"-34.5\" width=\"189.53125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.765625, -19.5)\"><rect></rect><foreignObject width=\"129.53125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>config package<br>(Leaf: Initialized first)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-9cf0d37da1f0e8b3-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-9cf0d37da1f0e8b3-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-9cf0d37da1f0e8b3-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-9cf0d37da1f0e8b3-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 288.421875px;\" viewBox=\"0 0 288.421875 403\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-9cf0d37da1f0e8b3-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-9cf0d37da1f0e8b3-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-9cf0d37da1f0e8b3-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-9cf0d37da1f0e8b3-dark .error-icon{fill:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-9cf0d37da1f0e8b3-dark .edge-thickness-normal{stroke-width:1px;}#d-9cf0d37da1f0e8b3-dark .edge-thickness-thick{stroke-width:3.5px;}#d-9cf0d37da1f0e8b3-dark .edge-pattern-solid{stroke-dasharray:0;}#d-9cf0d37da1f0e8b3-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-9cf0d37da1f0e8b3-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-9cf0d37da1f0e8b3-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-9cf0d37da1f0e8b3-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-9cf0d37da1f0e8b3-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-9cf0d37da1f0e8b3-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-9cf0d37da1f0e8b3-dark p{margin:0;}#d-9cf0d37da1f0e8b3-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-dark .cluster-label text{fill:#eae9e8;}#d-9cf0d37da1f0e8b3-dark .cluster-label span{color:#eae9e8;}#d-9cf0d37da1f0e8b3-dark .cluster-label span p{background-color:transparent;}#d-9cf0d37da1f0e8b3-dark .label text,#d-9cf0d37da1f0e8b3-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-dark .node rect,#d-9cf0d37da1f0e8b3-dark .node circle,#d-9cf0d37da1f0e8b3-dark .node ellipse,#d-9cf0d37da1f0e8b3-dark .node polygon,#d-9cf0d37da1f0e8b3-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-9cf0d37da1f0e8b3-dark .rough-node .label text,#d-9cf0d37da1f0e8b3-dark .node .label text,#d-9cf0d37da1f0e8b3-dark .image-shape .label,#d-9cf0d37da1f0e8b3-dark .icon-shape .label{text-anchor:middle;}#d-9cf0d37da1f0e8b3-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-9cf0d37da1f0e8b3-dark .rough-node .label,#d-9cf0d37da1f0e8b3-dark .node .label,#d-9cf0d37da1f0e8b3-dark .image-shape .label,#d-9cf0d37da1f0e8b3-dark .icon-shape .label{text-align:center;}#d-9cf0d37da1f0e8b3-dark .node.clickable{cursor:pointer;}#d-9cf0d37da1f0e8b3-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-9cf0d37da1f0e8b3-dark .arrowheadPath{fill:#eae9e8;}#d-9cf0d37da1f0e8b3-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-9cf0d37da1f0e8b3-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-9cf0d37da1f0e8b3-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-9cf0d37da1f0e8b3-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-9cf0d37da1f0e8b3-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-9cf0d37da1f0e8b3-dark .cluster text{fill:#eae9e8;}#d-9cf0d37da1f0e8b3-dark .cluster span{color:#eae9e8;}#d-9cf0d37da1f0e8b3-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-9cf0d37da1f0e8b3-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-9cf0d37da1f0e8b3-dark rect.text{fill:none;stroke-width:0;}#d-9cf0d37da1f0e8b3-dark .icon-shape,#d-9cf0d37da1f0e8b3-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-9cf0d37da1f0e8b3-dark .icon-shape p,#d-9cf0d37da1f0e8b3-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-9cf0d37da1f0e8b3-dark .icon-shape .label rect,#d-9cf0d37da1f0e8b3-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-9cf0d37da1f0e8b3-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-9cf0d37da1f0e8b3-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-9cf0d37da1f0e8b3-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node rect,#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].cluster rect,#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node polygon{stroke:url(#d-9cf0d37da1f0e8b3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node path{stroke:url(#d-9cf0d37da1f0e8b3-dark-gradient);stroke-width:1px;}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node circle{stroke:url(#d-9cf0d37da1f0e8b3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-9cf0d37da1f0e8b3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-9cf0d37da1f0e8b3-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-9cf0d37da1f0e8b3-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-9cf0d37da1f0e8b3-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M186.312,77L190.047,81.167C193.783,85.333,201.255,93.667,204.991,101.333C208.727,109,208.727,116,208.727,119.5L208.727,123\" id=\"d-9cf0d37da1f0e8b3-dark-L_main_Auth_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_main_Auth_0\" data-points=\"W3sieCI6MTg2LjMxMTU4MDg4MjM1MjkzLCJ5Ijo3N30seyJ4IjoyMDguNzI2NTYyNSwieSI6MTAyfSx7IngiOjIwOC43MjY1NjI1LCJ5IjoxMjd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M114.331,77L109.373,81.167C104.416,85.333,94.501,93.667,89.543,106.125C84.586,118.583,84.586,135.167,84.586,151.75C84.586,168.333,84.586,184.917,85.292,196.721C85.998,208.526,87.411,215.552,88.117,219.065L88.823,222.578\" id=\"d-9cf0d37da1f0e8b3-dark-L_main_DB_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_main_DB_0\" data-points=\"W3sieCI6MTE0LjMzMDg4MjM1Mjk0MTE3LCJ5Ijo3N30seyJ4Ijo4NC41ODU5Mzc1LCJ5IjoxMDJ9LHsieCI6ODQuNTg1OTM3NSwieSI6MTUxLjc1fSx7IngiOjg0LjU4NTkzNzUsInkiOjIwMS41fSx7IngiOjg5LjYxMTA2MzEyODE0MDcsInkiOjIyNi41fV0=\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M178.483,176.5L173.391,180.667C168.3,184.833,158.117,193.167,149.045,201.045C139.973,208.924,132.012,216.348,128.031,220.06L124.051,223.772\" id=\"d-9cf0d37da1f0e8b3-dark-L_Auth_DB_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Auth_DB_0\" data-points=\"W3sieCI6MTc4LjQ4MjgyNDI3NzYzODIsInkiOjE3Ni41fSx7IngiOjE0Ny45MzM1OTM3NSwieSI6MjAxLjV9LHsieCI6MTIxLjEyNTcyNjI4NzY4ODQ1LCJ5IjoyMjYuNX1d\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M94.586,276L94.586,280.167C94.586,284.333,94.586,292.667,98.367,300.534C102.147,308.401,109.709,315.801,113.49,319.502L117.271,323.202\" id=\"d-9cf0d37da1f0e8b3-dark-L_DB_Config_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_DB_Config_0\" data-points=\"W3sieCI6OTQuNTg1OTM3NSwieSI6Mjc2fSx7IngiOjk0LjU4NTkzNzUsInkiOjMwMX0seyJ4IjoxMjAuMTI5MjAxNjgwNjcyMjcsInkiOjMyNn1d\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd)\"></path><path d=\"M213.701,176.5L214.539,180.667C215.376,184.833,217.052,193.167,217.889,205.625C218.727,218.083,218.727,234.667,218.727,251.25C218.727,267.833,218.727,284.417,214.776,296.419C210.826,308.421,202.926,315.841,198.976,319.551L195.025,323.262\" id=\"d-9cf0d37da1f0e8b3-dark-L_Auth_Config_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_Auth_Config_0\" data-points=\"W3sieCI6MjEzLjcwMTQzNjg3MTg1OTMsInkiOjE3Ni41fSx7IngiOjIxOC43MjY1NjI1LCJ5IjoyMDEuNX0seyJ4IjoyMTguNzI2NTYyNSwieSI6MjUxLjI1fSx7IngiOjIxOC43MjY1NjI1LCJ5IjozMDF9LHsieCI6MTkyLjEwOTkwMDIxMDA4NDA1LCJ5IjozMjZ9XQ==\" data-look=\"classic\" marker-end=\"url(#d-9cf0d37da1f0e8b3-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_main_Auth_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_main_DB_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Auth_DB_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_DB_Config_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_Auth_Config_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-9cf0d37da1f0e8b3-dark-flowchart-main-0\" data-look=\"classic\" transform=\"translate(155.37890625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-76.28125\" y=\"-34.5\" width=\"152.5625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-46.28125, -19.5)\"><rect></rect><foreignObject width=\"92.5625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>main package<br>(Initialized last)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-9cf0d37da1f0e8b3-dark-flowchart-Auth-1\" data-look=\"classic\" transform=\"translate(208.7265625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-71.6953125\" y=\"-24.75\" width=\"143.390625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-41.6953125, -9.75)\"><rect></rect><foreignObject width=\"83.390625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>auth package</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-9cf0d37da1f0e8b3-dark-flowchart-DB-2\" data-look=\"classic\" transform=\"translate(94.5859375, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.5859375\" y=\"-24.75\" width=\"173.171875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.5859375, -9.75)\"><rect></rect><foreignObject width=\"113.171875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>database package</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-9cf0d37da1f0e8b3-dark-flowchart-Config-3\" data-look=\"classic\" transform=\"translate(155.37890625, 360.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.765625\" y=\"-34.5\" width=\"189.53125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.765625, -19.5)\"><rect></rect><foreignObject width=\"129.53125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>config package<br>(Leaf: Initialized first)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-9cf0d37da1f0e8b3-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-9cf0d37da1f0e8b3-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-9cf0d37da1f0e8b3-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<ol>\n<li><strong>Variables before <code>init()</code></strong>: Within a package, package-level variables are initialized first (evaluating expressions and dependencies).</li>\n<li><strong>Lexical order across files</strong>: If a package spans multiple source files, files are processed in <strong>lexical (alphabetical) base name order</strong> as presented to the compiler.</li>\n<li><strong>Multiple <code>init()</code> functions</strong>: A package can define multiple <code>init()</code> functions across several files. They execute sequentially in lexical file order and source code line order.</li>\n</ol>\n<h2 id=\"exit-behavior-return-vs-osexit\">Exit Behavior: <code>return</code> vs <code>os.Exit()</code><a class=\"h-anchor\" href=\"#exit-behavior-return-vs-osexit\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The way a Go application terminates determines whether runtime cleanup occurs:</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"f3696808183aaddd\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-f3696808183aaddd-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 667.39453125px;\" viewBox=\"0 0 667.39453125 264.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-f3696808183aaddd-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-f3696808183aaddd-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-f3696808183aaddd-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-f3696808183aaddd-light .error-icon{fill:rgb(255, 255, 255);}#d-f3696808183aaddd-light .error-text{fill:#000000;stroke:#000000;}#d-f3696808183aaddd-light .edge-thickness-normal{stroke-width:1px;}#d-f3696808183aaddd-light .edge-thickness-thick{stroke-width:3.5px;}#d-f3696808183aaddd-light .edge-pattern-solid{stroke-dasharray:0;}#d-f3696808183aaddd-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-f3696808183aaddd-light .edge-pattern-dashed{stroke-dasharray:3;}#d-f3696808183aaddd-light .edge-pattern-dotted{stroke-dasharray:2;}#d-f3696808183aaddd-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-f3696808183aaddd-light .marker.cross{stroke:rgb(44, 46, 48);}#d-f3696808183aaddd-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-f3696808183aaddd-light p{margin:0;}#d-f3696808183aaddd-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-f3696808183aaddd-light .cluster-label text{fill:#000000;}#d-f3696808183aaddd-light .cluster-label span{color:#000000;}#d-f3696808183aaddd-light .cluster-label span p{background-color:transparent;}#d-f3696808183aaddd-light .label text,#d-f3696808183aaddd-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-f3696808183aaddd-light .node rect,#d-f3696808183aaddd-light .node circle,#d-f3696808183aaddd-light .node ellipse,#d-f3696808183aaddd-light .node polygon,#d-f3696808183aaddd-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-f3696808183aaddd-light .rough-node .label text,#d-f3696808183aaddd-light .node .label text,#d-f3696808183aaddd-light .image-shape .label,#d-f3696808183aaddd-light .icon-shape .label{text-anchor:middle;}#d-f3696808183aaddd-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-f3696808183aaddd-light .rough-node .label,#d-f3696808183aaddd-light .node .label,#d-f3696808183aaddd-light .image-shape .label,#d-f3696808183aaddd-light .icon-shape .label{text-align:center;}#d-f3696808183aaddd-light .node.clickable{cursor:pointer;}#d-f3696808183aaddd-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-f3696808183aaddd-light .arrowheadPath{fill:#000000;}#d-f3696808183aaddd-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-f3696808183aaddd-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-f3696808183aaddd-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-f3696808183aaddd-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-f3696808183aaddd-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-f3696808183aaddd-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-f3696808183aaddd-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-f3696808183aaddd-light .cluster text{fill:#000000;}#d-f3696808183aaddd-light .cluster span{color:#000000;}#d-f3696808183aaddd-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-f3696808183aaddd-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-f3696808183aaddd-light rect.text{fill:none;stroke-width:0;}#d-f3696808183aaddd-light .icon-shape,#d-f3696808183aaddd-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-f3696808183aaddd-light .icon-shape p,#d-f3696808183aaddd-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-f3696808183aaddd-light .icon-shape .label rect,#d-f3696808183aaddd-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-f3696808183aaddd-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-f3696808183aaddd-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-f3696808183aaddd-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-f3696808183aaddd-light [data-look=\"neo\"].node rect,#d-f3696808183aaddd-light [data-look=\"neo\"].cluster rect,#d-f3696808183aaddd-light [data-look=\"neo\"].node polygon{stroke:url(#d-f3696808183aaddd-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-f3696808183aaddd-light [data-look=\"neo\"].node path{stroke:url(#d-f3696808183aaddd-light-gradient);stroke-width:1px;}#d-f3696808183aaddd-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-f3696808183aaddd-light [data-look=\"neo\"].node circle{stroke:url(#d-f3696808183aaddd-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-f3696808183aaddd-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-f3696808183aaddd-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-f3696808183aaddd-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-f3696808183aaddd-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-f3696808183aaddd-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M97.883,57.5L97.883,61.667C97.883,65.833,97.883,74.167,97.883,81.833C97.883,89.5,97.883,96.5,97.883,100L97.883,103.5\" id=\"d-f3696808183aaddd-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6OTcuODgyODEyNSwieSI6NTcuNX0seyJ4Ijo5Ny44ODI4MTI1LCJ5Ijo4Mi41fSx7IngiOjk3Ljg4MjgxMjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-light_flowchart-v2-pointEnd)\"></path><path d=\"M97.883,157L97.883,161.167C97.883,165.333,97.883,173.667,97.883,181.333C97.883,189,97.883,196,97.883,199.5L97.883,203\" id=\"d-f3696808183aaddd-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6OTcuODgyODEyNSwieSI6MTU3fSx7IngiOjk3Ljg4MjgxMjUsInkiOjE4Mn0seyJ4Ijo5Ny44ODI4MTI1LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-light_flowchart-v2-pointEnd)\"></path><path d=\"M439.848,57.5L439.848,61.667C439.848,65.833,439.848,74.167,439.848,81.833C439.848,89.5,439.848,96.5,439.848,100L439.848,103.5\" id=\"d-f3696808183aaddd-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NDM5Ljg0NzY1NjI1LCJ5Ijo1Ny41fSx7IngiOjQzOS44NDc2NTYyNSwieSI6ODIuNX0seyJ4Ijo0MzkuODQ3NjU2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-light_flowchart-v2-pointEnd)\"></path><path d=\"M380.829,157L370.894,161.167C360.958,165.333,341.086,173.667,331.151,181.333C321.215,189,321.215,196,321.215,199.5L321.215,203\" id=\"d-f3696808183aaddd-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MzgwLjgyOTMyMjM5MzIxNjEsInkiOjE1N30seyJ4IjozMjEuMjE0ODQzNzUsInkiOjE4Mn0seyJ4IjozMjEuMjE0ODQzNzUsInkiOjIwN31d\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-light_flowchart-v2-pointEnd)\"></path><path d=\"M498.866,157L508.802,161.167C518.737,165.333,538.609,173.667,548.545,181.333C558.48,189,558.48,196,558.48,199.5L558.48,203\" id=\"d-f3696808183aaddd-light-L_E_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G_0\" data-points=\"W3sieCI6NDk4Ljg2NTk5MDEwNjc4MzksInkiOjE1N30seyJ4Ijo1NTguNDgwNDY4NzUsInkiOjE4Mn0seyJ4Ijo1NTguNDgwNDY4NzUsInkiOjIwN31d\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-f3696808183aaddd-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(97.8828125, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.8828125\" y=\"-24.75\" width=\"179.765625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.8828125, -9.75)\"><rect></rect><foreignObject width=\"119.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>main.main() returns</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-f3696808183aaddd-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(97.8828125, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.9296875\" y=\"-24.75\" width=\"149.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.9296875, -9.75)\"><rect></rect><foreignObject width=\"89.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>runtime.exit(0)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-f3696808183aaddd-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(97.8828125, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.15625\" y=\"-24.75\" width=\"172.3125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.15625, -9.75)\"><rect></rect><foreignObject width=\"112.3125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Defers in main run</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f3696808183aaddd-light-flowchart-D-4\" data-look=\"classic\" transform=\"translate(439.84765625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.921875\" y=\"-24.75\" width=\"155.84375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.921875, -9.75)\"><rect></rect><foreignObject width=\"95.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>os.Exit(1) called</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f3696808183aaddd-light-flowchart-E-5\" data-look=\"classic\" transform=\"translate(439.84765625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.2265625\" y=\"-24.75\" width=\"198.453125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.2265625, -9.75)\"><rect></rect><foreignObject width=\"138.453125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Direct syscall: sys_exit</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f3696808183aaddd-light-flowchart-F-7\" data-look=\"classic\" transform=\"translate(321.21484375, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.3515625\" y=\"-24.75\" width=\"172.703125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.3515625, -9.75)\"><rect></rect><foreignObject width=\"112.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>No defers execute</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f3696808183aaddd-light-flowchart-G-9\" data-look=\"classic\" transform=\"translate(558.48046875, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.9140625\" y=\"-24.75\" width=\"201.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.9140625, -9.75)\"><rect></rect><foreignObject width=\"141.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Buffered file writes lost</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-f3696808183aaddd-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-f3696808183aaddd-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-f3696808183aaddd-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-f3696808183aaddd-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 667.39453125px;\" viewBox=\"0 0 667.39453125 264.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-f3696808183aaddd-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-f3696808183aaddd-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-f3696808183aaddd-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-f3696808183aaddd-dark .error-icon{fill:rgb(21, 22, 23);}#d-f3696808183aaddd-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-f3696808183aaddd-dark .edge-thickness-normal{stroke-width:1px;}#d-f3696808183aaddd-dark .edge-thickness-thick{stroke-width:3.5px;}#d-f3696808183aaddd-dark .edge-pattern-solid{stroke-dasharray:0;}#d-f3696808183aaddd-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-f3696808183aaddd-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-f3696808183aaddd-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-f3696808183aaddd-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-f3696808183aaddd-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-f3696808183aaddd-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-f3696808183aaddd-dark p{margin:0;}#d-f3696808183aaddd-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-f3696808183aaddd-dark .cluster-label text{fill:#eae9e8;}#d-f3696808183aaddd-dark .cluster-label span{color:#eae9e8;}#d-f3696808183aaddd-dark .cluster-label span p{background-color:transparent;}#d-f3696808183aaddd-dark .label text,#d-f3696808183aaddd-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-f3696808183aaddd-dark .node rect,#d-f3696808183aaddd-dark .node circle,#d-f3696808183aaddd-dark .node ellipse,#d-f3696808183aaddd-dark .node polygon,#d-f3696808183aaddd-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-f3696808183aaddd-dark .rough-node .label text,#d-f3696808183aaddd-dark .node .label text,#d-f3696808183aaddd-dark .image-shape .label,#d-f3696808183aaddd-dark .icon-shape .label{text-anchor:middle;}#d-f3696808183aaddd-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-f3696808183aaddd-dark .rough-node .label,#d-f3696808183aaddd-dark .node .label,#d-f3696808183aaddd-dark .image-shape .label,#d-f3696808183aaddd-dark .icon-shape .label{text-align:center;}#d-f3696808183aaddd-dark .node.clickable{cursor:pointer;}#d-f3696808183aaddd-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-f3696808183aaddd-dark .arrowheadPath{fill:#eae9e8;}#d-f3696808183aaddd-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-f3696808183aaddd-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-f3696808183aaddd-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-f3696808183aaddd-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-f3696808183aaddd-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-f3696808183aaddd-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-f3696808183aaddd-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-f3696808183aaddd-dark .cluster text{fill:#eae9e8;}#d-f3696808183aaddd-dark .cluster span{color:#eae9e8;}#d-f3696808183aaddd-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-f3696808183aaddd-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-f3696808183aaddd-dark rect.text{fill:none;stroke-width:0;}#d-f3696808183aaddd-dark .icon-shape,#d-f3696808183aaddd-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-f3696808183aaddd-dark .icon-shape p,#d-f3696808183aaddd-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-f3696808183aaddd-dark .icon-shape .label rect,#d-f3696808183aaddd-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-f3696808183aaddd-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-f3696808183aaddd-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-f3696808183aaddd-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-f3696808183aaddd-dark [data-look=\"neo\"].node rect,#d-f3696808183aaddd-dark [data-look=\"neo\"].cluster rect,#d-f3696808183aaddd-dark [data-look=\"neo\"].node polygon{stroke:url(#d-f3696808183aaddd-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-f3696808183aaddd-dark [data-look=\"neo\"].node path{stroke:url(#d-f3696808183aaddd-dark-gradient);stroke-width:1px;}#d-f3696808183aaddd-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-f3696808183aaddd-dark [data-look=\"neo\"].node circle{stroke:url(#d-f3696808183aaddd-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-f3696808183aaddd-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-f3696808183aaddd-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-f3696808183aaddd-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-f3696808183aaddd-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-f3696808183aaddd-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M97.883,57.5L97.883,61.667C97.883,65.833,97.883,74.167,97.883,81.833C97.883,89.5,97.883,96.5,97.883,100L97.883,103.5\" id=\"d-f3696808183aaddd-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6OTcuODgyODEyNSwieSI6NTcuNX0seyJ4Ijo5Ny44ODI4MTI1LCJ5Ijo4Mi41fSx7IngiOjk3Ljg4MjgxMjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-dark_flowchart-v2-pointEnd)\"></path><path d=\"M97.883,157L97.883,161.167C97.883,165.333,97.883,173.667,97.883,181.333C97.883,189,97.883,196,97.883,199.5L97.883,203\" id=\"d-f3696808183aaddd-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6OTcuODgyODEyNSwieSI6MTU3fSx7IngiOjk3Ljg4MjgxMjUsInkiOjE4Mn0seyJ4Ijo5Ny44ODI4MTI1LCJ5IjoyMDd9XQ==\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-dark_flowchart-v2-pointEnd)\"></path><path d=\"M439.848,57.5L439.848,61.667C439.848,65.833,439.848,74.167,439.848,81.833C439.848,89.5,439.848,96.5,439.848,100L439.848,103.5\" id=\"d-f3696808183aaddd-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6NDM5Ljg0NzY1NjI1LCJ5Ijo1Ny41fSx7IngiOjQzOS44NDc2NTYyNSwieSI6ODIuNX0seyJ4Ijo0MzkuODQ3NjU2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-dark_flowchart-v2-pointEnd)\"></path><path d=\"M380.829,157L370.894,161.167C360.958,165.333,341.086,173.667,331.151,181.333C321.215,189,321.215,196,321.215,199.5L321.215,203\" id=\"d-f3696808183aaddd-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MzgwLjgyOTMyMjM5MzIxNjEsInkiOjE1N30seyJ4IjozMjEuMjE0ODQzNzUsInkiOjE4Mn0seyJ4IjozMjEuMjE0ODQzNzUsInkiOjIwN31d\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-dark_flowchart-v2-pointEnd)\"></path><path d=\"M498.866,157L508.802,161.167C518.737,165.333,538.609,173.667,548.545,181.333C558.48,189,558.48,196,558.48,199.5L558.48,203\" id=\"d-f3696808183aaddd-dark-L_E_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G_0\" data-points=\"W3sieCI6NDk4Ljg2NTk5MDEwNjc4MzksInkiOjE1N30seyJ4Ijo1NTguNDgwNDY4NzUsInkiOjE4Mn0seyJ4Ijo1NTguNDgwNDY4NzUsInkiOjIwN31d\" data-look=\"classic\" marker-end=\"url(#d-f3696808183aaddd-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-f3696808183aaddd-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(97.8828125, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.8828125\" y=\"-24.75\" width=\"179.765625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.8828125, -9.75)\"><rect></rect><foreignObject width=\"119.765625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>main.main() returns</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-f3696808183aaddd-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(97.8828125, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-74.9296875\" y=\"-24.75\" width=\"149.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-44.9296875, -9.75)\"><rect></rect><foreignObject width=\"89.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>runtime.exit(0)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-f3696808183aaddd-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(97.8828125, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.15625\" y=\"-24.75\" width=\"172.3125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.15625, -9.75)\"><rect></rect><foreignObject width=\"112.3125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Defers in main run</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-f3696808183aaddd-dark-flowchart-D-4\" data-look=\"classic\" transform=\"translate(439.84765625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-77.921875\" y=\"-24.75\" width=\"155.84375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-47.921875, -9.75)\"><rect></rect><foreignObject width=\"95.84375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>os.Exit(1) called</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f3696808183aaddd-dark-flowchart-E-5\" data-look=\"classic\" transform=\"translate(439.84765625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.2265625\" y=\"-24.75\" width=\"198.453125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.2265625, -9.75)\"><rect></rect><foreignObject width=\"138.453125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Direct syscall: sys_exit</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f3696808183aaddd-dark-flowchart-F-7\" data-look=\"classic\" transform=\"translate(321.21484375, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.3515625\" y=\"-24.75\" width=\"172.703125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.3515625, -9.75)\"><rect></rect><foreignObject width=\"112.703125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>No defers execute</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-f3696808183aaddd-dark-flowchart-G-9\" data-look=\"classic\" transform=\"translate(558.48046875, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.9140625\" y=\"-24.75\" width=\"201.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.9140625, -9.75)\"><rect></rect><foreignObject width=\"141.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Buffered file writes lost</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-f3696808183aaddd-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-f3696808183aaddd-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-f3696808183aaddd-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">os</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    defer</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Deferred cleanup executed\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> run</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(); err </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">!=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> nil</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Fprintf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(os.Stderr, </span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Fatal error: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%v\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, err)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        os.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Exit</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Bypasses the deferred cleanup above!</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>To ensure <code>defer</code> statements execute on error paths, structure <code>main</code> to return an exit code to a thin runner rather than calling <code>os.Exit</code> deep in your application logic.</p>\n<h2 id=\"runtime-invariants\">Runtime Invariants<a class=\"h-anchor\" href=\"#runtime-invariants\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong><code>init()</code> cannot be called manually</strong>: <code>init</code> functions have no identifier in package scope and cannot be referenced or invoked by application code.</li>\n<li><strong>Main goroutine lock</strong>: The main goroutine is not pinned to <code>m0</code> unless explicitly locked with <code>runtime.LockOSThread()</code>.</li>\n<li><strong>Program termination</strong>: When <code>main.main()</code> returns, the runtime immediately terminates the process, even if background goroutines are actively running. Use <code>sync.WaitGroup</code> or context cancellation to manage graceful shutdown.</li>\n</ol>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-12-01:books/art-of-doing-science-engineering",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "The Art of Doing Science and Engineering",
      "content_text": "",
      "date_published": "2024-12-01T00:00:00.000Z",
      "tags": [
        "books"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-pointers-and-memory-management/",
      "url": "https://ashwingopalsamy.in/blog/go-pointers-and-memory-management/",
      "title": "Go Pointers and Memory Management",
      "content_text": "Value semantics vs pointers, register-based calling conventions, escape analysis mechanics, and concurrency safety in Go.",
      "date_published": "2024-11-17T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Memory management in Go balances the developer ergonomics of garbage collection with the performance of low-level pointer arithmetic and stack allocation.</p>\n<p>Understanding how the compiler chooses between stack and heap allocation is essential for authoring high-throughput, low-latency Go services.</p>\n<h2 id=\"stack-vs-heap-the-hardware-reality\">Stack vs Heap: The Hardware Reality<a class=\"h-anchor\" href=\"#stack-vs-heap-the-hardware-reality\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Every goroutine maintains its own contiguous stack that grows and shrinks dynamically. Stack allocations are essentially free: reclaiming memory requires only decrementing the stack pointer register (<code>SP</code>).</p>\n<p>The shared heap, managed by the Go runtime allocator (based on TCMalloc thread-caching) and concurrent tri-color mark-sweep garbage collector, requires synchronization, pointer tracking, and periodic GC scanning pauses.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"334dc461ad24018b\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-334dc461ad24018b-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1776.90625px;\" viewBox=\"0 0 1776.90625 239\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-334dc461ad24018b-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-334dc461ad24018b-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-334dc461ad24018b-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-334dc461ad24018b-light .error-icon{fill:rgb(255, 255, 255);}#d-334dc461ad24018b-light .error-text{fill:#000000;stroke:#000000;}#d-334dc461ad24018b-light .edge-thickness-normal{stroke-width:1px;}#d-334dc461ad24018b-light .edge-thickness-thick{stroke-width:3.5px;}#d-334dc461ad24018b-light .edge-pattern-solid{stroke-dasharray:0;}#d-334dc461ad24018b-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-334dc461ad24018b-light .edge-pattern-dashed{stroke-dasharray:3;}#d-334dc461ad24018b-light .edge-pattern-dotted{stroke-dasharray:2;}#d-334dc461ad24018b-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-334dc461ad24018b-light .marker.cross{stroke:rgb(44, 46, 48);}#d-334dc461ad24018b-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-334dc461ad24018b-light p{margin:0;}#d-334dc461ad24018b-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-334dc461ad24018b-light .cluster-label text{fill:#000000;}#d-334dc461ad24018b-light .cluster-label span{color:#000000;}#d-334dc461ad24018b-light .cluster-label span p{background-color:transparent;}#d-334dc461ad24018b-light .label text,#d-334dc461ad24018b-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-334dc461ad24018b-light .node rect,#d-334dc461ad24018b-light .node circle,#d-334dc461ad24018b-light .node ellipse,#d-334dc461ad24018b-light .node polygon,#d-334dc461ad24018b-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-334dc461ad24018b-light .rough-node .label text,#d-334dc461ad24018b-light .node .label text,#d-334dc461ad24018b-light .image-shape .label,#d-334dc461ad24018b-light .icon-shape .label{text-anchor:middle;}#d-334dc461ad24018b-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-334dc461ad24018b-light .rough-node .label,#d-334dc461ad24018b-light .node .label,#d-334dc461ad24018b-light .image-shape .label,#d-334dc461ad24018b-light .icon-shape .label{text-align:center;}#d-334dc461ad24018b-light .node.clickable{cursor:pointer;}#d-334dc461ad24018b-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-334dc461ad24018b-light .arrowheadPath{fill:#000000;}#d-334dc461ad24018b-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-334dc461ad24018b-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-334dc461ad24018b-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-334dc461ad24018b-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-334dc461ad24018b-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-334dc461ad24018b-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-334dc461ad24018b-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-334dc461ad24018b-light .cluster text{fill:#000000;}#d-334dc461ad24018b-light .cluster span{color:#000000;}#d-334dc461ad24018b-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-334dc461ad24018b-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-334dc461ad24018b-light rect.text{fill:none;stroke-width:0;}#d-334dc461ad24018b-light .icon-shape,#d-334dc461ad24018b-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-334dc461ad24018b-light .icon-shape p,#d-334dc461ad24018b-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-334dc461ad24018b-light .icon-shape .label rect,#d-334dc461ad24018b-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-334dc461ad24018b-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-334dc461ad24018b-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-334dc461ad24018b-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-334dc461ad24018b-light [data-look=\"neo\"].node rect,#d-334dc461ad24018b-light [data-look=\"neo\"].cluster rect,#d-334dc461ad24018b-light [data-look=\"neo\"].node polygon{stroke:url(#d-334dc461ad24018b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-334dc461ad24018b-light [data-look=\"neo\"].node path{stroke:url(#d-334dc461ad24018b-light-gradient);stroke-width:1px;}#d-334dc461ad24018b-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-334dc461ad24018b-light [data-look=\"neo\"].node circle{stroke:url(#d-334dc461ad24018b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-334dc461ad24018b-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-334dc461ad24018b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-334dc461ad24018b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-334dc461ad24018b-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-334dc461ad24018b-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-334dc461ad24018b-light-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"112\" width=\"950\" height=\"119\"></rect><g class=\"cluster-label \" transform=\"translate(396.3203125, 112)\"><foreignObject width=\"173.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Shared Heap (GC Managed)</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-334dc461ad24018b-light-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"978\" y=\"112\" width=\"790.90625\" height=\"119\"></rect><g class=\"cluster-label \" transform=\"translate(1243.515625, 112)\"><foreignObject width=\"259.875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Goroutine Stack (Fast, Zero GC Overhead)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M755.326,37.825L815.666,44.395C876.006,50.966,996.687,64.108,1057.027,76.471C1117.367,88.833,1117.367,100.417,1117.367,111.333C1117.367,122.25,1117.367,132.5,1117.367,137.625L1117.367,142.75\" id=\"d-334dc461ad24018b-light-L_EA_S1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_EA_S1_0\" data-points=\"W3sieCI6NzU1LjMyNjAwNTIwODEyOTEsInkiOjM3LjgyNDU1MjA4Mzc0MTcxNX0seyJ4IjoxMTE3LjM2NzE4NzUsInkiOjc3LjI1fSx7IngiOjExMTcuMzY3MTg3NSwieSI6MTEyfSx7IngiOjExMTcuMzY3MTg3NSwieSI6MTQ2Ljc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-334dc461ad24018b-light_flowchart-v2-pointEnd)\"></path><path d=\"M536.041,37.825L475.534,44.395C415.027,50.966,294.014,64.108,233.507,76.471C173,88.833,173,100.417,173,109.708C173,119,173,126,173,129.5L173,133\" id=\"d-334dc461ad24018b-light-L_EA_H1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_EA_H1_0\" data-points=\"W3sieCI6NTM2LjA0MTE4MjI5MTg3MDksInkiOjM3LjgyNDU1MjA4Mzc0MTcxNX0seyJ4IjoxNzMsInkiOjc3LjI1fSx7IngiOjE3MywieSI6MTEyfSx7IngiOjE3MywieSI6MTM3fV0=\" data-look=\"classic\" marker-end=\"url(#d-334dc461ad24018b-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(1117.3671875, 77.25)\"><g class=\"label\" data-id=\"L_EA_S1_0\" transform=\"translate(-82.7109375, -9.75)\"><foreignObject width=\"165.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Lifetime within stack frame</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(173, 77.25)\"><g class=\"label\" data-id=\"L_EA_H1_0\" transform=\"translate(-88.1953125, -9.75)\"><foreignObject width=\"176.390625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Lifetime outlives stack frame</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-success \" id=\"d-334dc461ad24018b-light-flowchart-S1-0\" data-look=\"classic\" transform=\"translate(1117.3671875, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-104.3671875\" y=\"-24.75\" width=\"208.734375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-74.3671875, -9.75)\"><rect></rect><foreignObject width=\"148.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Local primitive variables</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-334dc461ad24018b-light-flowchart-S2-1\" data-look=\"classic\" transform=\"translate(1385.7109375, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.9765625\" y=\"-24.75\" width=\"227.953125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.9765625, -9.75)\"><rect></rect><foreignObject width=\"167.953125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Small non-escaping structs</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-334dc461ad24018b-light-flowchart-S3-2\" data-look=\"classic\" transform=\"translate(1641.796875, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.109375\" y=\"-24.75\" width=\"184.21875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.109375, -9.75)\"><rect></rect><foreignObject width=\"124.21875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Function call frames</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-334dc461ad24018b-light-flowchart-H1-3\" data-look=\"classic\" transform=\"translate(173, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Variables escaping function scope</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-334dc461ad24018b-light-flowchart-H2-4\" data-look=\"classic\" transform=\"translate(483, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Values referenced through dynamic interfaces</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-334dc461ad24018b-light-flowchart-H3-5\" data-look=\"classic\" transform=\"translate(793, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Data surviving frame lifetime in closures</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-334dc461ad24018b-light-flowchart-EA-6\" data-look=\"classic\" transform=\"translate(645.18359375, 25.25)\"><polygon points=\"8.625,0 222.734375,0 231.359375,-17.25 222.734375,-34.5 8.625,-34.5 0,-17.25\" class=\"label-container\" transform=\"translate(-115.6796875,17.25)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-99.5546875, -9.75)\"><rect></rect><foreignObject width=\"199.109375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Escape Analysis (Compile-Time)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-334dc461ad24018b-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-334dc461ad24018b-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-334dc461ad24018b-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-334dc461ad24018b-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1776.90625px;\" viewBox=\"0 0 1776.90625 239\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-334dc461ad24018b-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-334dc461ad24018b-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-334dc461ad24018b-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-334dc461ad24018b-dark .error-icon{fill:rgb(21, 22, 23);}#d-334dc461ad24018b-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-334dc461ad24018b-dark .edge-thickness-normal{stroke-width:1px;}#d-334dc461ad24018b-dark .edge-thickness-thick{stroke-width:3.5px;}#d-334dc461ad24018b-dark .edge-pattern-solid{stroke-dasharray:0;}#d-334dc461ad24018b-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-334dc461ad24018b-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-334dc461ad24018b-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-334dc461ad24018b-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-334dc461ad24018b-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-334dc461ad24018b-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-334dc461ad24018b-dark p{margin:0;}#d-334dc461ad24018b-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-334dc461ad24018b-dark .cluster-label text{fill:#eae9e8;}#d-334dc461ad24018b-dark .cluster-label span{color:#eae9e8;}#d-334dc461ad24018b-dark .cluster-label span p{background-color:transparent;}#d-334dc461ad24018b-dark .label text,#d-334dc461ad24018b-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-334dc461ad24018b-dark .node rect,#d-334dc461ad24018b-dark .node circle,#d-334dc461ad24018b-dark .node ellipse,#d-334dc461ad24018b-dark .node polygon,#d-334dc461ad24018b-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-334dc461ad24018b-dark .rough-node .label text,#d-334dc461ad24018b-dark .node .label text,#d-334dc461ad24018b-dark .image-shape .label,#d-334dc461ad24018b-dark .icon-shape .label{text-anchor:middle;}#d-334dc461ad24018b-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-334dc461ad24018b-dark .rough-node .label,#d-334dc461ad24018b-dark .node .label,#d-334dc461ad24018b-dark .image-shape .label,#d-334dc461ad24018b-dark .icon-shape .label{text-align:center;}#d-334dc461ad24018b-dark .node.clickable{cursor:pointer;}#d-334dc461ad24018b-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-334dc461ad24018b-dark .arrowheadPath{fill:#eae9e8;}#d-334dc461ad24018b-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-334dc461ad24018b-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-334dc461ad24018b-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-334dc461ad24018b-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-334dc461ad24018b-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-334dc461ad24018b-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-334dc461ad24018b-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-334dc461ad24018b-dark .cluster text{fill:#eae9e8;}#d-334dc461ad24018b-dark .cluster span{color:#eae9e8;}#d-334dc461ad24018b-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-334dc461ad24018b-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-334dc461ad24018b-dark rect.text{fill:none;stroke-width:0;}#d-334dc461ad24018b-dark .icon-shape,#d-334dc461ad24018b-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-334dc461ad24018b-dark .icon-shape p,#d-334dc461ad24018b-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-334dc461ad24018b-dark .icon-shape .label rect,#d-334dc461ad24018b-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-334dc461ad24018b-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-334dc461ad24018b-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-334dc461ad24018b-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-334dc461ad24018b-dark [data-look=\"neo\"].node rect,#d-334dc461ad24018b-dark [data-look=\"neo\"].cluster rect,#d-334dc461ad24018b-dark [data-look=\"neo\"].node polygon{stroke:url(#d-334dc461ad24018b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-334dc461ad24018b-dark [data-look=\"neo\"].node path{stroke:url(#d-334dc461ad24018b-dark-gradient);stroke-width:1px;}#d-334dc461ad24018b-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-334dc461ad24018b-dark [data-look=\"neo\"].node circle{stroke:url(#d-334dc461ad24018b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-334dc461ad24018b-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-334dc461ad24018b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-334dc461ad24018b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-334dc461ad24018b-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-334dc461ad24018b-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster \" id=\"d-334dc461ad24018b-dark-subGraph1\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"112\" width=\"950\" height=\"119\"></rect><g class=\"cluster-label \" transform=\"translate(396.3203125, 112)\"><foreignObject width=\"173.359375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Shared Heap (GC Managed)</p></span></div></foreignObject></g></g><g class=\"cluster \" id=\"d-334dc461ad24018b-dark-subGraph0\" data-look=\"classic\"><rect style=\"\" x=\"978\" y=\"112\" width=\"790.90625\" height=\"119\"></rect><g class=\"cluster-label \" transform=\"translate(1243.515625, 112)\"><foreignObject width=\"259.875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel \"><p>Goroutine Stack (Fast, Zero GC Overhead)</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M755.326,37.825L815.666,44.395C876.006,50.966,996.687,64.108,1057.027,76.471C1117.367,88.833,1117.367,100.417,1117.367,111.333C1117.367,122.25,1117.367,132.5,1117.367,137.625L1117.367,142.75\" id=\"d-334dc461ad24018b-dark-L_EA_S1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_EA_S1_0\" data-points=\"W3sieCI6NzU1LjMyNjAwNTIwODEyOTEsInkiOjM3LjgyNDU1MjA4Mzc0MTcxNX0seyJ4IjoxMTE3LjM2NzE4NzUsInkiOjc3LjI1fSx7IngiOjExMTcuMzY3MTg3NSwieSI6MTEyfSx7IngiOjExMTcuMzY3MTg3NSwieSI6MTQ2Ljc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-334dc461ad24018b-dark_flowchart-v2-pointEnd)\"></path><path d=\"M536.041,37.825L475.534,44.395C415.027,50.966,294.014,64.108,233.507,76.471C173,88.833,173,100.417,173,109.708C173,119,173,126,173,129.5L173,133\" id=\"d-334dc461ad24018b-dark-L_EA_H1_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_EA_H1_0\" data-points=\"W3sieCI6NTM2LjA0MTE4MjI5MTg3MDksInkiOjM3LjgyNDU1MjA4Mzc0MTcxNX0seyJ4IjoxNzMsInkiOjc3LjI1fSx7IngiOjE3MywieSI6MTEyfSx7IngiOjE3MywieSI6MTM3fV0=\" data-look=\"classic\" marker-end=\"url(#d-334dc461ad24018b-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(1117.3671875, 77.25)\"><g class=\"label\" data-id=\"L_EA_S1_0\" transform=\"translate(-82.7109375, -9.75)\"><foreignObject width=\"165.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Lifetime within stack frame</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(173, 77.25)\"><g class=\"label\" data-id=\"L_EA_H1_0\" transform=\"translate(-88.1953125, -9.75)\"><foreignObject width=\"176.390625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Lifetime outlives stack frame</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-success \" id=\"d-334dc461ad24018b-dark-flowchart-S1-0\" data-look=\"classic\" transform=\"translate(1117.3671875, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-104.3671875\" y=\"-24.75\" width=\"208.734375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-74.3671875, -9.75)\"><rect></rect><foreignObject width=\"148.734375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Local primitive variables</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-334dc461ad24018b-dark-flowchart-S2-1\" data-look=\"classic\" transform=\"translate(1385.7109375, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.9765625\" y=\"-24.75\" width=\"227.953125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.9765625, -9.75)\"><rect></rect><foreignObject width=\"167.953125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Small non-escaping structs</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-334dc461ad24018b-dark-flowchart-S3-2\" data-look=\"classic\" transform=\"translate(1641.796875, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.109375\" y=\"-24.75\" width=\"184.21875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.109375, -9.75)\"><rect></rect><foreignObject width=\"124.21875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Function call frames</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-334dc461ad24018b-dark-flowchart-H1-3\" data-look=\"classic\" transform=\"translate(173, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Variables escaping function scope</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-334dc461ad24018b-dark-flowchart-H2-4\" data-look=\"classic\" transform=\"translate(483, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Values referenced through dynamic interfaces</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-334dc461ad24018b-dark-flowchart-H3-5\" data-look=\"classic\" transform=\"translate(793, 171.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Data surviving frame lifetime in closures</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-334dc461ad24018b-dark-flowchart-EA-6\" data-look=\"classic\" transform=\"translate(645.18359375, 25.25)\"><polygon points=\"8.625,0 222.734375,0 231.359375,-17.25 222.734375,-34.5 8.625,-34.5 0,-17.25\" class=\"label-container\" transform=\"translate(-115.6796875,17.25)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-99.5546875, -9.75)\"><rect></rect><foreignObject width=\"199.109375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Escape Analysis (Compile-Time)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-334dc461ad24018b-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-334dc461ad24018b-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-334dc461ad24018b-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"value-semantics-vs-pointer-overhead\">Value Semantics vs Pointer Overhead<a class=\"h-anchor\" href=\"#value-semantics-vs-pointer-overhead\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>A common misconception among developers transitioning from C++ is that passing pointers is always faster because it avoids copying data.</p>\n<p>On modern 64-bit architectures, Go uses a <strong>register-based calling convention</strong> (Go 1.17+ ABIInternal). Small structs (such as <code>time.Time</code>, UUIDs, or records with 2 to 4 fields) fit entirely within CPU registers (<code>RAX</code>, <code>RBX</code>, <code>RCX</code>, etc.) and are passed with zero memory reads or writes.</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Point</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    X, Y </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Passed directly in CPU floating point registers (Zero memory allocation)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> Distance</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">p1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">p2</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> Point</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    dx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p1.X </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p2.X</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    dy </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p1.Y </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p2.Y</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sqrt</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(dx</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">dx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">+</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> dy</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">dy)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Forces pointer indirection and potential heap escape if returned</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> DistancePtr</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">p1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">p2</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Point</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    dx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p1.X </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p2.X</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    dy </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p1.Y </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">-</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> p2.Y</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    return</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> math.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sqrt</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(dx</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">dx </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">+</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> dy</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">dy)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>Passing pointers to small structs introduces pointer indirection (cache misses) and may force the struct to escape to the heap, creating garbage collection overhead.</p>\n<h3 id=\"when-to-use-pointers\">When to Use Pointers<a class=\"h-anchor\" href=\"#when-to-use-pointers\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<ol>\n<li><strong>Mutation</strong>: When a method or function must modify the caller’s receiver state.</li>\n<li><strong>Large structs</strong>: When copying the struct payload exceeds CPU cache line efficiency (<p><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mo>&gt;</mo><mn>64</mn><mo>−</mo><mn>128</mn></mrow><annotation encoding=\"application/x-tex\">&gt; 64-128</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.5782em;vertical-align:-0.0391em;\"></span><span class=\"mrel\">&gt;</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.7278em;vertical-align:-0.0833em;\"></span><span class=\"mord\">64</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">−</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6444em;\"></span><span class=\"mord\">128</span></span></span></span></span></p> bytes).</li>\n<li><strong>Consistency</strong>: If some methods on a type require pointer receivers for mutation, use pointer receivers across all methods to maintain interface consistency.</li>\n</ol>\n<h2 id=\"escape-analysis-mechanics\">Escape Analysis Mechanics<a class=\"h-anchor\" href=\"#escape-analysis-mechanics\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Escape analysis is a compile-time optimization pass that determines whether an allocation can be safely placed on the stack or must escape to the heap:</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"1367896b1c3dcb30\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-1367896b1c3dcb30-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 484.44140625px;\" viewBox=\"0 0 484.44140625 1201.859375\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-1367896b1c3dcb30-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-1367896b1c3dcb30-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-1367896b1c3dcb30-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-1367896b1c3dcb30-light .error-icon{fill:rgb(255, 255, 255);}#d-1367896b1c3dcb30-light .error-text{fill:#000000;stroke:#000000;}#d-1367896b1c3dcb30-light .edge-thickness-normal{stroke-width:1px;}#d-1367896b1c3dcb30-light .edge-thickness-thick{stroke-width:3.5px;}#d-1367896b1c3dcb30-light .edge-pattern-solid{stroke-dasharray:0;}#d-1367896b1c3dcb30-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-1367896b1c3dcb30-light .edge-pattern-dashed{stroke-dasharray:3;}#d-1367896b1c3dcb30-light .edge-pattern-dotted{stroke-dasharray:2;}#d-1367896b1c3dcb30-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-1367896b1c3dcb30-light .marker.cross{stroke:rgb(44, 46, 48);}#d-1367896b1c3dcb30-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-1367896b1c3dcb30-light p{margin:0;}#d-1367896b1c3dcb30-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-1367896b1c3dcb30-light .cluster-label text{fill:#000000;}#d-1367896b1c3dcb30-light .cluster-label span{color:#000000;}#d-1367896b1c3dcb30-light .cluster-label span p{background-color:transparent;}#d-1367896b1c3dcb30-light .label text,#d-1367896b1c3dcb30-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-1367896b1c3dcb30-light .node rect,#d-1367896b1c3dcb30-light .node circle,#d-1367896b1c3dcb30-light .node ellipse,#d-1367896b1c3dcb30-light .node polygon,#d-1367896b1c3dcb30-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-1367896b1c3dcb30-light .rough-node .label text,#d-1367896b1c3dcb30-light .node .label text,#d-1367896b1c3dcb30-light .image-shape .label,#d-1367896b1c3dcb30-light .icon-shape .label{text-anchor:middle;}#d-1367896b1c3dcb30-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-1367896b1c3dcb30-light .rough-node .label,#d-1367896b1c3dcb30-light .node .label,#d-1367896b1c3dcb30-light .image-shape .label,#d-1367896b1c3dcb30-light .icon-shape .label{text-align:center;}#d-1367896b1c3dcb30-light .node.clickable{cursor:pointer;}#d-1367896b1c3dcb30-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-1367896b1c3dcb30-light .arrowheadPath{fill:#000000;}#d-1367896b1c3dcb30-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-1367896b1c3dcb30-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-1367896b1c3dcb30-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-1367896b1c3dcb30-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-1367896b1c3dcb30-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-1367896b1c3dcb30-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-1367896b1c3dcb30-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-1367896b1c3dcb30-light .cluster text{fill:#000000;}#d-1367896b1c3dcb30-light .cluster span{color:#000000;}#d-1367896b1c3dcb30-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-1367896b1c3dcb30-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-1367896b1c3dcb30-light rect.text{fill:none;stroke-width:0;}#d-1367896b1c3dcb30-light .icon-shape,#d-1367896b1c3dcb30-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-1367896b1c3dcb30-light .icon-shape p,#d-1367896b1c3dcb30-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-1367896b1c3dcb30-light .icon-shape .label rect,#d-1367896b1c3dcb30-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-1367896b1c3dcb30-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-1367896b1c3dcb30-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-1367896b1c3dcb30-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-1367896b1c3dcb30-light [data-look=\"neo\"].node rect,#d-1367896b1c3dcb30-light [data-look=\"neo\"].cluster rect,#d-1367896b1c3dcb30-light [data-look=\"neo\"].node polygon{stroke:url(#d-1367896b1c3dcb30-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-1367896b1c3dcb30-light [data-look=\"neo\"].node path{stroke:url(#d-1367896b1c3dcb30-light-gradient);stroke-width:1px;}#d-1367896b1c3dcb30-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-1367896b1c3dcb30-light [data-look=\"neo\"].node circle{stroke:url(#d-1367896b1c3dcb30-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-1367896b1c3dcb30-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-1367896b1c3dcb30-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-1367896b1c3dcb30-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-1367896b1c3dcb30-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M167.379,57.5L167.379,61.667C167.379,65.833,167.379,74.167,167.379,81.833C167.379,89.5,167.379,96.5,167.379,100L167.379,103.5\" id=\"d-1367896b1c3dcb30-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTY3LjM3ODkwNjI1LCJ5Ijo1Ny41fSx7IngiOjE2Ny4zNzg5MDYyNSwieSI6ODIuNX0seyJ4IjoxNjcuMzc4OTA2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M121.942,230.704L106.326,244.068C90.709,257.433,59.476,284.162,43.859,320.356C28.242,356.549,28.242,402.208,28.242,447.867C28.242,493.526,28.242,539.185,28.242,583.904C28.242,628.622,28.242,672.401,28.242,716.18C28.242,759.958,28.242,803.737,28.242,847.467C28.242,891.198,28.242,934.88,28.242,978.563C28.242,1022.245,28.242,1065.927,33.823,1093.099C39.403,1120.272,50.564,1130.934,56.144,1136.265L61.724,1141.596\" id=\"d-1367896b1c3dcb30-light-L_B_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_HEAP_0\" data-points=\"W3sieCI6MTIxLjk0MjI5ODQ2ODkxNSwieSI6MjMwLjcwNDAxNzIxODkxNX0seyJ4IjoyOC4yNDIxODc1LCJ5IjozMTAuODkwNjI1fSx7IngiOjI4LjI0MjE4NzUsInkiOjQ0Ny44NjcxODc1fSx7IngiOjI4LjI0MjE4NzUsInkiOjU4NC44NDM3NX0seyJ4IjoyOC4yNDIxODc1LCJ5Ijo3MTYuMTc5Njg3NX0seyJ4IjoyOC4yNDIxODc1LCJ5Ijo4NDcuNTE1NjI1fSx7IngiOjI4LjI0MjE4NzUsInkiOjk3OC41NjI1fSx7IngiOjI4LjI0MjE4NzUsInkiOjExMDkuNjA5Mzc1fSx7IngiOjY0LjYxNjUzMDk4NzM5NDk1LCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M198.205,245.315L204.503,256.244C210.801,267.173,223.396,289.032,229.694,305.086C235.992,321.141,235.992,331.391,235.992,336.516L235.992,341.641\" id=\"d-1367896b1c3dcb30-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTk4LjIwNDY4NzAyODQ1NjUsInkiOjI0NS4zMTQ4NDQyMjE1NDM1fSx7IngiOjIzNS45OTIxODc1LCJ5IjozMTAuODkwNjI1fSx7IngiOjIzNS45OTIxODc1LCJ5IjozNDUuNjQwNjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M187.51,501.611L174.996,515.483C162.482,529.355,137.454,557.1,124.94,592.861C112.426,628.622,112.426,672.401,112.426,716.18C112.426,759.958,112.426,803.737,112.426,847.467C112.426,891.198,112.426,934.88,112.426,978.563C112.426,1022.245,112.426,1065.927,110.524,1092.934C108.622,1119.941,104.819,1130.274,102.918,1135.44L101.016,1140.606\" id=\"d-1367896b1c3dcb30-light-L_C_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_HEAP_0\" data-points=\"W3sieCI6MTg3LjUwOTcwODcyODc2NjU1LCJ5Ijo1MDEuNjExMjcxMjI4NzY2NTV9LHsieCI6MTEyLjQyNTc4MTI1LCJ5Ijo1ODQuODQzNzV9LHsieCI6MTEyLjQyNTc4MTI1LCJ5Ijo3MTYuMTc5Njg3NX0seyJ4IjoxMTIuNDI1NzgxMjUsInkiOjg0Ny41MTU2MjV9LHsieCI6MTEyLjQyNTc4MTI1LCJ5Ijo5NzguNTYyNX0seyJ4IjoxMTIuNDI1NzgxMjUsInkiOjExMDkuNjA5Mzc1fSx7IngiOjk5LjYzNDA3NjI4Njc2NDcxLCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M269.162,516.924L274.599,528.244C280.036,539.564,290.911,562.204,296.348,578.649C301.785,595.094,301.785,605.344,301.785,610.469L301.785,615.594\" id=\"d-1367896b1c3dcb30-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjY5LjE2MTgxMTExNDE2MTMsInkiOjUxNi45MjQxMjYzODU4Mzg3fSx7IngiOjMwMS43ODUxNTYyNSwieSI6NTg0Ljg0Mzc1fSx7IngiOjMwMS43ODUxNTYyNSwieSI6NjE5LjU5Mzc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M258.202,769.182L247.466,782.238C236.731,795.293,215.26,821.404,204.525,856.301C193.789,891.198,193.789,934.88,193.789,978.563C193.789,1022.245,193.789,1065.927,184.315,1093.227C174.841,1120.527,155.893,1131.445,146.418,1136.904L136.944,1142.362\" id=\"d-1367896b1c3dcb30-light-L_D_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_HEAP_0\" data-points=\"W3sieCI6MjU4LjIwMTc1NDk1MzA1NTQsInkiOjc2OS4xODIyMjM3MDMwNTUzfSx7IngiOjE5My43ODkwNjI1LCJ5Ijo4NDcuNTE1NjI1fSx7IngiOjE5My43ODkwNjI1LCJ5Ijo5NzguNTYyNX0seyJ4IjoxOTMuNzg5MDYyNSwieSI6MTEwOS42MDkzNzV9LHsieCI6MTMzLjQ3ODQ2NjM4NjU1NDYzLCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M335.745,778.806L341.955,790.257C348.165,801.709,360.584,824.612,366.794,841.189C373.004,857.766,373.004,868.016,373.004,873.141L373.004,878.266\" id=\"d-1367896b1c3dcb30-light-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MzM1Ljc0NTAyMDcyNTI1NzQ2LCJ5Ijo3NzguODA1NzYwNTI0NzQyNn0seyJ4IjozNzMuMDAzOTA2MjUsInkiOjg0Ny41MTU2MjV9LHsieCI6MzczLjAwMzkwNjI1LCJ5Ijo4ODIuMjY1NjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M333.177,1035.032L324.41,1047.462C315.644,1059.891,298.111,1084.75,271.481,1102.772C244.851,1120.794,209.124,1131.979,191.261,1137.572L173.397,1143.164\" id=\"d-1367896b1c3dcb30-light-L_E_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_HEAP_0\" data-points=\"W3sieCI6MzMzLjE3NjYwMDA2Nzg0MzM3LCJ5IjoxMDM1LjAzMjA2ODgxNzg0MzN9LHsieCI6MjgwLjU3ODEyNSwieSI6MTEwOS42MDkzNzV9LHsieCI6MTY5LjU3OTc5OTEwNzE0Mjg2LCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path><path d=\"M385.737,1062.126L386.943,1070.04C388.149,1077.954,390.561,1093.782,391.767,1106.82C392.973,1119.859,392.973,1130.109,392.973,1135.234L392.973,1140.359\" id=\"d-1367896b1c3dcb30-light-L_E_STACK_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_STACK_0\" data-points=\"W3sieCI6Mzg1LjczNzIxMjYzOTAzMjYsInkiOjEwNjIuMTI2MDY4NjEwOTY3NH0seyJ4IjozOTIuOTcyNjU2MjUsInkiOjExMDkuNjA5Mzc1fSx7IngiOjM5Mi45NzI2NTYyNSwieSI6MTE0NC4zNTkzNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(28.2421875, 716.1796875)\"><g class=\"label\" data-id=\"L_B_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(235.9921875, 310.890625)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(112.42578125, 847.515625)\"><g class=\"label\" data-id=\"L_C_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(301.78515625, 584.84375)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(193.7890625, 978.5625)\"><g class=\"label\" data-id=\"L_D_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(373.00390625, 847.515625)\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(268.6248, 1113.35157)\"><g class=\"label\" data-id=\"L_E_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(392.97265625, 1109.609375)\"><g class=\"label\" data-id=\"L_E_STACK_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-1367896b1c3dcb30-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(167.37890625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.53125\" y=\"-24.75\" width=\"167.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.53125, -9.75)\"><rect></rect><foreignObject width=\"107.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Variable declared</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(167.37890625, 191.8203125)\"><polygon points=\"84.3203125,0 168.640625,-84.3203125 84.3203125,-168.640625 0,-84.3203125\" class=\"label-container\" transform=\"translate(-83.8203125, 84.3203125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-49.8203125, -19.5)\"><rect></rect><foreignObject width=\"99.640625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointer returned<br>from function?</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-1367896b1c3dcb30-light-flowchart-HEAP-3\" data-look=\"classic\" transform=\"translate(90.5234375, 1169.109375)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.5234375\" y=\"-24.75\" width=\"165.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.5234375, -9.75)\"><rect></rect><foreignObject width=\"105.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Allocate on Heap</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-light-flowchart-C-5\" data-look=\"classic\" transform=\"translate(235.9921875, 447.8671875)\"><polygon points=\"102.2265625,0 204.453125,-102.2265625 102.2265625,-204.453125 0,-102.2265625\" class=\"label-container\" transform=\"translate(-101.7265625, 102.2265625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-67.7265625, -19.5)\"><rect></rect><foreignObject width=\"135.453125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Captured by surviving<br>closure?</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-light-flowchart-D-9\" data-look=\"classic\" transform=\"translate(301.78515625, 716.1796875)\"><polygon points=\"96.5859375,0 193.171875,-96.5859375 96.5859375,-193.171875 0,-96.5859375\" class=\"label-container\" transform=\"translate(-96.0859375, 96.5859375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-62.0859375, -19.5)\"><rect></rect><foreignObject width=\"124.171875\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Passed to interface<br>(non-devirtualized)?</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-light-flowchart-E-13\" data-look=\"classic\" transform=\"translate(373.00390625, 978.5625)\"><polygon points=\"96.296875,0 192.59375,-96.296875 96.296875,-192.59375 0,-96.296875\" class=\"label-container\" transform=\"translate(-95.796875, 96.296875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-61.796875, -19.5)\"><rect></rect><foreignObject width=\"123.59375\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Size unknown or<br>exceeds stack limit?</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-1367896b1c3dcb30-light-flowchart-STACK-17\" data-look=\"classic\" transform=\"translate(392.97265625, 1169.109375)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.46875\" y=\"-24.75\" width=\"166.9375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.46875, -9.75)\"><rect></rect><foreignObject width=\"106.9375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Allocate on Stack</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-1367896b1c3dcb30-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-1367896b1c3dcb30-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-1367896b1c3dcb30-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-1367896b1c3dcb30-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 484.44140625px;\" viewBox=\"0 0 484.44140625 1201.859375\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-1367896b1c3dcb30-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-1367896b1c3dcb30-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-1367896b1c3dcb30-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-1367896b1c3dcb30-dark .error-icon{fill:rgb(21, 22, 23);}#d-1367896b1c3dcb30-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-1367896b1c3dcb30-dark .edge-thickness-normal{stroke-width:1px;}#d-1367896b1c3dcb30-dark .edge-thickness-thick{stroke-width:3.5px;}#d-1367896b1c3dcb30-dark .edge-pattern-solid{stroke-dasharray:0;}#d-1367896b1c3dcb30-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-1367896b1c3dcb30-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-1367896b1c3dcb30-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-1367896b1c3dcb30-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-1367896b1c3dcb30-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-1367896b1c3dcb30-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-1367896b1c3dcb30-dark p{margin:0;}#d-1367896b1c3dcb30-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-1367896b1c3dcb30-dark .cluster-label text{fill:#eae9e8;}#d-1367896b1c3dcb30-dark .cluster-label span{color:#eae9e8;}#d-1367896b1c3dcb30-dark .cluster-label span p{background-color:transparent;}#d-1367896b1c3dcb30-dark .label text,#d-1367896b1c3dcb30-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-1367896b1c3dcb30-dark .node rect,#d-1367896b1c3dcb30-dark .node circle,#d-1367896b1c3dcb30-dark .node ellipse,#d-1367896b1c3dcb30-dark .node polygon,#d-1367896b1c3dcb30-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-1367896b1c3dcb30-dark .rough-node .label text,#d-1367896b1c3dcb30-dark .node .label text,#d-1367896b1c3dcb30-dark .image-shape .label,#d-1367896b1c3dcb30-dark .icon-shape .label{text-anchor:middle;}#d-1367896b1c3dcb30-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-1367896b1c3dcb30-dark .rough-node .label,#d-1367896b1c3dcb30-dark .node .label,#d-1367896b1c3dcb30-dark .image-shape .label,#d-1367896b1c3dcb30-dark .icon-shape .label{text-align:center;}#d-1367896b1c3dcb30-dark .node.clickable{cursor:pointer;}#d-1367896b1c3dcb30-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-1367896b1c3dcb30-dark .arrowheadPath{fill:#eae9e8;}#d-1367896b1c3dcb30-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-1367896b1c3dcb30-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-1367896b1c3dcb30-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-1367896b1c3dcb30-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-1367896b1c3dcb30-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-1367896b1c3dcb30-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-1367896b1c3dcb30-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-1367896b1c3dcb30-dark .cluster text{fill:#eae9e8;}#d-1367896b1c3dcb30-dark .cluster span{color:#eae9e8;}#d-1367896b1c3dcb30-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-1367896b1c3dcb30-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-1367896b1c3dcb30-dark rect.text{fill:none;stroke-width:0;}#d-1367896b1c3dcb30-dark .icon-shape,#d-1367896b1c3dcb30-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-1367896b1c3dcb30-dark .icon-shape p,#d-1367896b1c3dcb30-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-1367896b1c3dcb30-dark .icon-shape .label rect,#d-1367896b1c3dcb30-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-1367896b1c3dcb30-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-1367896b1c3dcb30-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-1367896b1c3dcb30-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node rect,#d-1367896b1c3dcb30-dark [data-look=\"neo\"].cluster rect,#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node polygon{stroke:url(#d-1367896b1c3dcb30-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node path{stroke:url(#d-1367896b1c3dcb30-dark-gradient);stroke-width:1px;}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node circle{stroke:url(#d-1367896b1c3dcb30-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-1367896b1c3dcb30-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-1367896b1c3dcb30-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1367896b1c3dcb30-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-1367896b1c3dcb30-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M167.379,57.5L167.379,61.667C167.379,65.833,167.379,74.167,167.379,81.833C167.379,89.5,167.379,96.5,167.379,100L167.379,103.5\" id=\"d-1367896b1c3dcb30-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTY3LjM3ODkwNjI1LCJ5Ijo1Ny41fSx7IngiOjE2Ny4zNzg5MDYyNSwieSI6ODIuNX0seyJ4IjoxNjcuMzc4OTA2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M121.942,230.704L106.326,244.068C90.709,257.433,59.476,284.162,43.859,320.356C28.242,356.549,28.242,402.208,28.242,447.867C28.242,493.526,28.242,539.185,28.242,583.904C28.242,628.622,28.242,672.401,28.242,716.18C28.242,759.958,28.242,803.737,28.242,847.467C28.242,891.198,28.242,934.88,28.242,978.563C28.242,1022.245,28.242,1065.927,33.823,1093.099C39.403,1120.272,50.564,1130.934,56.144,1136.265L61.724,1141.596\" id=\"d-1367896b1c3dcb30-dark-L_B_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_HEAP_0\" data-points=\"W3sieCI6MTIxLjk0MjI5ODQ2ODkxNSwieSI6MjMwLjcwNDAxNzIxODkxNX0seyJ4IjoyOC4yNDIxODc1LCJ5IjozMTAuODkwNjI1fSx7IngiOjI4LjI0MjE4NzUsInkiOjQ0Ny44NjcxODc1fSx7IngiOjI4LjI0MjE4NzUsInkiOjU4NC44NDM3NX0seyJ4IjoyOC4yNDIxODc1LCJ5Ijo3MTYuMTc5Njg3NX0seyJ4IjoyOC4yNDIxODc1LCJ5Ijo4NDcuNTE1NjI1fSx7IngiOjI4LjI0MjE4NzUsInkiOjk3OC41NjI1fSx7IngiOjI4LjI0MjE4NzUsInkiOjExMDkuNjA5Mzc1fSx7IngiOjY0LjYxNjUzMDk4NzM5NDk1LCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M198.205,245.315L204.503,256.244C210.801,267.173,223.396,289.032,229.694,305.086C235.992,321.141,235.992,331.391,235.992,336.516L235.992,341.641\" id=\"d-1367896b1c3dcb30-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTk4LjIwNDY4NzAyODQ1NjUsInkiOjI0NS4zMTQ4NDQyMjE1NDM1fSx7IngiOjIzNS45OTIxODc1LCJ5IjozMTAuODkwNjI1fSx7IngiOjIzNS45OTIxODc1LCJ5IjozNDUuNjQwNjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M187.51,501.611L174.996,515.483C162.482,529.355,137.454,557.1,124.94,592.861C112.426,628.622,112.426,672.401,112.426,716.18C112.426,759.958,112.426,803.737,112.426,847.467C112.426,891.198,112.426,934.88,112.426,978.563C112.426,1022.245,112.426,1065.927,110.524,1092.934C108.622,1119.941,104.819,1130.274,102.918,1135.44L101.016,1140.606\" id=\"d-1367896b1c3dcb30-dark-L_C_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_HEAP_0\" data-points=\"W3sieCI6MTg3LjUwOTcwODcyODc2NjU1LCJ5Ijo1MDEuNjExMjcxMjI4NzY2NTV9LHsieCI6MTEyLjQyNTc4MTI1LCJ5Ijo1ODQuODQzNzV9LHsieCI6MTEyLjQyNTc4MTI1LCJ5Ijo3MTYuMTc5Njg3NX0seyJ4IjoxMTIuNDI1NzgxMjUsInkiOjg0Ny41MTU2MjV9LHsieCI6MTEyLjQyNTc4MTI1LCJ5Ijo5NzguNTYyNX0seyJ4IjoxMTIuNDI1NzgxMjUsInkiOjExMDkuNjA5Mzc1fSx7IngiOjk5LjYzNDA3NjI4Njc2NDcxLCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M269.162,516.924L274.599,528.244C280.036,539.564,290.911,562.204,296.348,578.649C301.785,595.094,301.785,605.344,301.785,610.469L301.785,615.594\" id=\"d-1367896b1c3dcb30-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjY5LjE2MTgxMTExNDE2MTMsInkiOjUxNi45MjQxMjYzODU4Mzg3fSx7IngiOjMwMS43ODUxNTYyNSwieSI6NTg0Ljg0Mzc1fSx7IngiOjMwMS43ODUxNTYyNSwieSI6NjE5LjU5Mzc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M258.202,769.182L247.466,782.238C236.731,795.293,215.26,821.404,204.525,856.301C193.789,891.198,193.789,934.88,193.789,978.563C193.789,1022.245,193.789,1065.927,184.315,1093.227C174.841,1120.527,155.893,1131.445,146.418,1136.904L136.944,1142.362\" id=\"d-1367896b1c3dcb30-dark-L_D_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_HEAP_0\" data-points=\"W3sieCI6MjU4LjIwMTc1NDk1MzA1NTQsInkiOjc2OS4xODIyMjM3MDMwNTUzfSx7IngiOjE5My43ODkwNjI1LCJ5Ijo4NDcuNTE1NjI1fSx7IngiOjE5My43ODkwNjI1LCJ5Ijo5NzguNTYyNX0seyJ4IjoxOTMuNzg5MDYyNSwieSI6MTEwOS42MDkzNzV9LHsieCI6MTMzLjQ3ODQ2NjM4NjU1NDYzLCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M335.745,778.806L341.955,790.257C348.165,801.709,360.584,824.612,366.794,841.189C373.004,857.766,373.004,868.016,373.004,873.141L373.004,878.266\" id=\"d-1367896b1c3dcb30-dark-L_D_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MzM1Ljc0NTAyMDcyNTI1NzQ2LCJ5Ijo3NzguODA1NzYwNTI0NzQyNn0seyJ4IjozNzMuMDAzOTA2MjUsInkiOjg0Ny41MTU2MjV9LHsieCI6MzczLjAwMzkwNjI1LCJ5Ijo4ODIuMjY1NjI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M333.177,1035.032L324.41,1047.462C315.644,1059.891,298.111,1084.75,271.481,1102.772C244.851,1120.794,209.124,1131.979,191.261,1137.572L173.397,1143.164\" id=\"d-1367896b1c3dcb30-dark-L_E_HEAP_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_HEAP_0\" data-points=\"W3sieCI6MzMzLjE3NjYwMDA2Nzg0MzM3LCJ5IjoxMDM1LjAzMjA2ODgxNzg0MzN9LHsieCI6MjgwLjU3ODEyNSwieSI6MTEwOS42MDkzNzV9LHsieCI6MTY5LjU3OTc5OTEwNzE0Mjg2LCJ5IjoxMTQ0LjM1OTM3NX1d\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path><path d=\"M385.737,1062.126L386.943,1070.04C388.149,1077.954,390.561,1093.782,391.767,1106.82C392.973,1119.859,392.973,1130.109,392.973,1135.234L392.973,1140.359\" id=\"d-1367896b1c3dcb30-dark-L_E_STACK_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_STACK_0\" data-points=\"W3sieCI6Mzg1LjczNzIxMjYzOTAzMjYsInkiOjEwNjIuMTI2MDY4NjEwOTY3NH0seyJ4IjozOTIuOTcyNjU2MjUsInkiOjExMDkuNjA5Mzc1fSx7IngiOjM5Mi45NzI2NTYyNSwieSI6MTE0NC4zNTkzNzV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-1367896b1c3dcb30-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(28.2421875, 716.1796875)\"><g class=\"label\" data-id=\"L_B_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(235.9921875, 310.890625)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(112.42578125, 847.515625)\"><g class=\"label\" data-id=\"L_C_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(301.78515625, 584.84375)\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(193.7890625, 978.5625)\"><g class=\"label\" data-id=\"L_D_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(373.00390625, 847.515625)\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(268.6248, 1113.35157)\"><g class=\"label\" data-id=\"L_E_HEAP_0\" transform=\"translate(-11.140625, -9.75)\"><foreignObject width=\"22.28125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(392.97265625, 1109.609375)\"><g class=\"label\" data-id=\"L_E_STACK_0\" transform=\"translate(-8.796875, -9.75)\"><foreignObject width=\"17.59375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>No</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-1367896b1c3dcb30-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(167.37890625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.53125\" y=\"-24.75\" width=\"167.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.53125, -9.75)\"><rect></rect><foreignObject width=\"107.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Variable declared</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(167.37890625, 191.8203125)\"><polygon points=\"84.3203125,0 168.640625,-84.3203125 84.3203125,-168.640625 0,-84.3203125\" class=\"label-container\" transform=\"translate(-83.8203125, 84.3203125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-49.8203125, -19.5)\"><rect></rect><foreignObject width=\"99.640625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Pointer returned<br>from function?</p></span></div></foreignObject></g></g><g class=\"node default diag-warning \" id=\"d-1367896b1c3dcb30-dark-flowchart-HEAP-3\" data-look=\"classic\" transform=\"translate(90.5234375, 1169.109375)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.5234375\" y=\"-24.75\" width=\"165.046875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.5234375, -9.75)\"><rect></rect><foreignObject width=\"105.046875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Allocate on Heap</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-dark-flowchart-C-5\" data-look=\"classic\" transform=\"translate(235.9921875, 447.8671875)\"><polygon points=\"102.2265625,0 204.453125,-102.2265625 102.2265625,-204.453125 0,-102.2265625\" class=\"label-container\" transform=\"translate(-101.7265625, 102.2265625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-67.7265625, -19.5)\"><rect></rect><foreignObject width=\"135.453125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Captured by surviving<br>closure?</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-dark-flowchart-D-9\" data-look=\"classic\" transform=\"translate(301.78515625, 716.1796875)\"><polygon points=\"96.5859375,0 193.171875,-96.5859375 96.5859375,-193.171875 0,-96.5859375\" class=\"label-container\" transform=\"translate(-96.0859375, 96.5859375)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-62.0859375, -19.5)\"><rect></rect><foreignObject width=\"124.171875\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Passed to interface<br>(non-devirtualized)?</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1367896b1c3dcb30-dark-flowchart-E-13\" data-look=\"classic\" transform=\"translate(373.00390625, 978.5625)\"><polygon points=\"96.296875,0 192.59375,-96.296875 96.296875,-192.59375 0,-96.296875\" class=\"label-container\" transform=\"translate(-95.796875, 96.296875)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-61.796875, -19.5)\"><rect></rect><foreignObject width=\"123.59375\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Size unknown or<br>exceeds stack limit?</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-1367896b1c3dcb30-dark-flowchart-STACK-17\" data-look=\"classic\" transform=\"translate(392.97265625, 1169.109375)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.46875\" y=\"-24.75\" width=\"166.9375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.46875, -9.75)\"><rect></rect><foreignObject width=\"106.9375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Allocate on Stack</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-1367896b1c3dcb30-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-1367896b1c3dcb30-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-1367896b1c3dcb30-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>Inspect escape analysis decisions on any Go package with compiler flags:</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> build</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -gcflags=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"-m -m\"</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> main.go</span></span></code></pre></div>\n<p>Example compiler diagnostic output:</p>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span>./main.go:12:13: p escapes to heap:</span></span>\n<span class=\"line\"><span>./main.go:12:13:   flow: ~r0 = &amp;p:</span></span>\n<span class=\"line\"><span>./main.go:12:13:     from return &amp;p (return) at ./main.go:12:5</span></span>\n<span class=\"line\"><span>./main.go:10:2: moved to heap: p</span></span></code></pre></div>\n<h2 id=\"concurrency-shared-pointers-and-race-conditions\">Concurrency: Shared Pointers and Race Conditions<a class=\"h-anchor\" href=\"#concurrency-shared-pointers-and-race-conditions\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When multiple goroutines access a shared memory pointer without synchronization, a data race occurs.</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">    \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync/atomic</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> wg </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">sync</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">WaitGroup</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> counter </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">atomic</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">.</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">Int64</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Lock-free atomic counter</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    for</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1000</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">; i</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">++</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        wg.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Add</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        go</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> func</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">            defer</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> wg.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Done</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">            counter.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Add</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">1</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Atomic hardware CAS instruction</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">        }()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    wg.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Wait</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Printf</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"Final count: </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">%d\\n</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, counter.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Load</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>Always execute test suites with the race detector enabled to verify memory safety:</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> test</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -race</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./...</span></span></code></pre></div>\n<h2 id=\"architectural-guidelines\">Architectural Guidelines<a class=\"h-anchor\" href=\"#architectural-guidelines\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Default to value semantics</strong>: For small, immutable domain types, prefer values over pointers to maximize CPU register utilization and eliminate heap allocations.</li>\n<li><strong>Beware of interface boxing</strong>: Passing concrete types to <code>any</code> or formatting functions like <code>fmt.Println</code> often forces values to escape to the heap unless devirtualized by the compiler.</li>\n<li><strong>Use atomic primitives for shared counters</strong>: Prefer <code>sync/atomic</code> types (<code>atomic.Int64</code>, <code>atomic.Pointer</code>) over mutexes for single-word synchronized mutations.</li>\n</ol>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-11-15:watch/the-office",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "The Office",
      "content_text": "",
      "date_published": "2024-11-15T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "https://ashwingopalsamy.in/blog/git-practices-for-production-codebases/",
      "url": "https://ashwingopalsamy.in/blog/git-practices-for-production-codebases/",
      "title": "Git Practices for Production Codebases",
      "content_text": "Git hygiene for regulated production: atomic commits, git bisect regression isolation, rebase workflows, and cryptographic signing.",
      "date_published": "2024-11-14T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>In regulated production environments (such as banking, healthcare, and infrastructure platforms), version control is not just developer tooling: it is an immutable audit log, a forensic safety net, and the foundation of automated release engineering.</p>\n<p>Adopting structured Git practices directly impacts mean-time-to-recovery (MTTR) during production incidents and satisfies SOC 2 and PCI-DSS change-management compliance requirements.</p>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"b8bb86ddd94f0d16\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-b8bb86ddd94f0d16-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 540.40625px;\" viewBox=\"0 0 540.40625 264.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-b8bb86ddd94f0d16-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-b8bb86ddd94f0d16-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-b8bb86ddd94f0d16-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-b8bb86ddd94f0d16-light .error-icon{fill:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-light .error-text{fill:#000000;stroke:#000000;}#d-b8bb86ddd94f0d16-light .edge-thickness-normal{stroke-width:1px;}#d-b8bb86ddd94f0d16-light .edge-thickness-thick{stroke-width:3.5px;}#d-b8bb86ddd94f0d16-light .edge-pattern-solid{stroke-dasharray:0;}#d-b8bb86ddd94f0d16-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-b8bb86ddd94f0d16-light .edge-pattern-dashed{stroke-dasharray:3;}#d-b8bb86ddd94f0d16-light .edge-pattern-dotted{stroke-dasharray:2;}#d-b8bb86ddd94f0d16-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-b8bb86ddd94f0d16-light .marker.cross{stroke:rgb(44, 46, 48);}#d-b8bb86ddd94f0d16-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-b8bb86ddd94f0d16-light p{margin:0;}#d-b8bb86ddd94f0d16-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-light .cluster-label text{fill:#000000;}#d-b8bb86ddd94f0d16-light .cluster-label span{color:#000000;}#d-b8bb86ddd94f0d16-light .cluster-label span p{background-color:transparent;}#d-b8bb86ddd94f0d16-light .label text,#d-b8bb86ddd94f0d16-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-light .node rect,#d-b8bb86ddd94f0d16-light .node circle,#d-b8bb86ddd94f0d16-light .node ellipse,#d-b8bb86ddd94f0d16-light .node polygon,#d-b8bb86ddd94f0d16-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-b8bb86ddd94f0d16-light .rough-node .label text,#d-b8bb86ddd94f0d16-light .node .label text,#d-b8bb86ddd94f0d16-light .image-shape .label,#d-b8bb86ddd94f0d16-light .icon-shape .label{text-anchor:middle;}#d-b8bb86ddd94f0d16-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-b8bb86ddd94f0d16-light .rough-node .label,#d-b8bb86ddd94f0d16-light .node .label,#d-b8bb86ddd94f0d16-light .image-shape .label,#d-b8bb86ddd94f0d16-light .icon-shape .label{text-align:center;}#d-b8bb86ddd94f0d16-light .node.clickable{cursor:pointer;}#d-b8bb86ddd94f0d16-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-b8bb86ddd94f0d16-light .arrowheadPath{fill:#000000;}#d-b8bb86ddd94f0d16-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-b8bb86ddd94f0d16-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-b8bb86ddd94f0d16-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-b8bb86ddd94f0d16-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-b8bb86ddd94f0d16-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-b8bb86ddd94f0d16-light .cluster text{fill:#000000;}#d-b8bb86ddd94f0d16-light .cluster span{color:#000000;}#d-b8bb86ddd94f0d16-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-b8bb86ddd94f0d16-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-light rect.text{fill:none;stroke-width:0;}#d-b8bb86ddd94f0d16-light .icon-shape,#d-b8bb86ddd94f0d16-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-b8bb86ddd94f0d16-light .icon-shape p,#d-b8bb86ddd94f0d16-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-b8bb86ddd94f0d16-light .icon-shape .label rect,#d-b8bb86ddd94f0d16-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-b8bb86ddd94f0d16-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-b8bb86ddd94f0d16-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node rect,#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].cluster rect,#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node polygon{stroke:url(#d-b8bb86ddd94f0d16-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node path{stroke:url(#d-b8bb86ddd94f0d16-light-gradient);stroke-width:1px;}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node circle{stroke:url(#d-b8bb86ddd94f0d16-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-b8bb86ddd94f0d16-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-b8bb86ddd94f0d16-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M204.445,32.75L214.608,32.75C224.771,32.75,245.096,32.75,258.759,32.75C272.422,32.75,279.422,32.75,282.922,32.75L286.422,32.75\" id=\"d-b8bb86ddd94f0d16-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjA0LjQ0NTMxMjUsInkiOjMyLjc1fSx7IngiOjI2NS40MjE4NzUsInkiOjMyLjc1fSx7IngiOjI5MC40MjE4NzUsInkiOjMyLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-b8bb86ddd94f0d16-light_flowchart-v2-pointEnd)\"></path><path d=\"M238.297,132.25L242.818,132.25C247.339,132.25,256.38,132.25,265.651,132.25C274.922,132.25,284.422,132.25,289.172,132.25L293.922,132.25\" id=\"d-b8bb86ddd94f0d16-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjM4LjI5Njg3NSwieSI6MTMyLjI1fSx7IngiOjI2NS40MjE4NzUsInkiOjEzMi4yNX0seyJ4IjoyOTcuOTIxODc1LCJ5IjoxMzIuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-b8bb86ddd94f0d16-light_flowchart-v2-pointEnd)\"></path><path d=\"M240.422,231.75L244.589,231.75C248.755,231.75,257.089,231.75,267.285,231.75C277.482,231.75,289.542,231.75,295.572,231.75L301.602,231.75\" id=\"d-b8bb86ddd94f0d16-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MjQwLjQyMTg3NSwieSI6MjMxLjc1fSx7IngiOjI2NS40MjE4NzUsInkiOjIzMS43NX0seyJ4IjozMDUuNjAxNTYyNSwieSI6MjMxLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-b8bb86ddd94f0d16-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-b8bb86ddd94f0d16-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(124.2109375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-80.234375\" y=\"-24.75\" width=\"160.46875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-50.234375, -9.75)\"><rect></rect><foreignObject width=\"100.46875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Atomic Commits</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-b8bb86ddd94f0d16-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(411.4140625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-120.9921875\" y=\"-24.75\" width=\"241.984375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-90.9921875, -9.75)\"><rect></rect><foreignObject width=\"181.984375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Automated git bisect Isolation</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-b8bb86ddd94f0d16-light-flowchart-C-2\" data-look=\"classic\" transform=\"translate(124.2109375, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.0859375\" y=\"-24.75\" width=\"228.171875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.0859375, -9.75)\"><rect></rect><foreignObject width=\"168.171875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Interactive Rebase Hygiene</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-b8bb86ddd94f0d16-light-flowchart-D-3\" data-look=\"classic\" transform=\"translate(411.4140625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.4921875\" y=\"-24.75\" width=\"226.984375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.4921875, -9.75)\"><rect></rect><foreignObject width=\"166.984375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Clean Cherry-Pick Hotfixes</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-b8bb86ddd94f0d16-light-flowchart-E-4\" data-look=\"classic\" transform=\"translate(124.2109375, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-116.2109375\" y=\"-24.75\" width=\"232.421875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-86.2109375, -9.75)\"><rect></rect><foreignObject width=\"172.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Signed Commits (GPG/SSH)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-b8bb86ddd94f0d16-light-flowchart-F-5\" data-look=\"classic\" transform=\"translate(411.4140625, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.8125\" y=\"-24.75\" width=\"211.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.8125, -9.75)\"><rect></rect><foreignObject width=\"151.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>SOC 2 Audit Compliance</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-b8bb86ddd94f0d16-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-b8bb86ddd94f0d16-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-b8bb86ddd94f0d16-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-b8bb86ddd94f0d16-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 540.40625px;\" viewBox=\"0 0 540.40625 264.5\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-b8bb86ddd94f0d16-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-b8bb86ddd94f0d16-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-b8bb86ddd94f0d16-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-b8bb86ddd94f0d16-dark .error-icon{fill:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-b8bb86ddd94f0d16-dark .edge-thickness-normal{stroke-width:1px;}#d-b8bb86ddd94f0d16-dark .edge-thickness-thick{stroke-width:3.5px;}#d-b8bb86ddd94f0d16-dark .edge-pattern-solid{stroke-dasharray:0;}#d-b8bb86ddd94f0d16-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-b8bb86ddd94f0d16-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-b8bb86ddd94f0d16-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-b8bb86ddd94f0d16-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-b8bb86ddd94f0d16-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-b8bb86ddd94f0d16-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-b8bb86ddd94f0d16-dark p{margin:0;}#d-b8bb86ddd94f0d16-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-dark .cluster-label text{fill:#eae9e8;}#d-b8bb86ddd94f0d16-dark .cluster-label span{color:#eae9e8;}#d-b8bb86ddd94f0d16-dark .cluster-label span p{background-color:transparent;}#d-b8bb86ddd94f0d16-dark .label text,#d-b8bb86ddd94f0d16-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-dark .node rect,#d-b8bb86ddd94f0d16-dark .node circle,#d-b8bb86ddd94f0d16-dark .node ellipse,#d-b8bb86ddd94f0d16-dark .node polygon,#d-b8bb86ddd94f0d16-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-b8bb86ddd94f0d16-dark .rough-node .label text,#d-b8bb86ddd94f0d16-dark .node .label text,#d-b8bb86ddd94f0d16-dark .image-shape .label,#d-b8bb86ddd94f0d16-dark .icon-shape .label{text-anchor:middle;}#d-b8bb86ddd94f0d16-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-b8bb86ddd94f0d16-dark .rough-node .label,#d-b8bb86ddd94f0d16-dark .node .label,#d-b8bb86ddd94f0d16-dark .image-shape .label,#d-b8bb86ddd94f0d16-dark .icon-shape .label{text-align:center;}#d-b8bb86ddd94f0d16-dark .node.clickable{cursor:pointer;}#d-b8bb86ddd94f0d16-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-b8bb86ddd94f0d16-dark .arrowheadPath{fill:#eae9e8;}#d-b8bb86ddd94f0d16-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-b8bb86ddd94f0d16-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-b8bb86ddd94f0d16-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-b8bb86ddd94f0d16-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-b8bb86ddd94f0d16-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-b8bb86ddd94f0d16-dark .cluster text{fill:#eae9e8;}#d-b8bb86ddd94f0d16-dark .cluster span{color:#eae9e8;}#d-b8bb86ddd94f0d16-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-b8bb86ddd94f0d16-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-b8bb86ddd94f0d16-dark rect.text{fill:none;stroke-width:0;}#d-b8bb86ddd94f0d16-dark .icon-shape,#d-b8bb86ddd94f0d16-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-b8bb86ddd94f0d16-dark .icon-shape p,#d-b8bb86ddd94f0d16-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-b8bb86ddd94f0d16-dark .icon-shape .label rect,#d-b8bb86ddd94f0d16-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-b8bb86ddd94f0d16-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-b8bb86ddd94f0d16-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-b8bb86ddd94f0d16-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node rect,#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].cluster rect,#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node polygon{stroke:url(#d-b8bb86ddd94f0d16-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node path{stroke:url(#d-b8bb86ddd94f0d16-dark-gradient);stroke-width:1px;}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node circle{stroke:url(#d-b8bb86ddd94f0d16-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-b8bb86ddd94f0d16-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-b8bb86ddd94f0d16-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-b8bb86ddd94f0d16-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-b8bb86ddd94f0d16-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M204.445,32.75L214.608,32.75C224.771,32.75,245.096,32.75,258.759,32.75C272.422,32.75,279.422,32.75,282.922,32.75L286.422,32.75\" id=\"d-b8bb86ddd94f0d16-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjA0LjQ0NTMxMjUsInkiOjMyLjc1fSx7IngiOjI2NS40MjE4NzUsInkiOjMyLjc1fSx7IngiOjI5MC40MjE4NzUsInkiOjMyLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-b8bb86ddd94f0d16-dark_flowchart-v2-pointEnd)\"></path><path d=\"M238.297,132.25L242.818,132.25C247.339,132.25,256.38,132.25,265.651,132.25C274.922,132.25,284.422,132.25,289.172,132.25L293.922,132.25\" id=\"d-b8bb86ddd94f0d16-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjM4LjI5Njg3NSwieSI6MTMyLjI1fSx7IngiOjI2NS40MjE4NzUsInkiOjEzMi4yNX0seyJ4IjoyOTcuOTIxODc1LCJ5IjoxMzIuMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-b8bb86ddd94f0d16-dark_flowchart-v2-pointEnd)\"></path><path d=\"M240.422,231.75L244.589,231.75C248.755,231.75,257.089,231.75,267.285,231.75C277.482,231.75,289.542,231.75,295.572,231.75L301.602,231.75\" id=\"d-b8bb86ddd94f0d16-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MjQwLjQyMTg3NSwieSI6MjMxLjc1fSx7IngiOjI2NS40MjE4NzUsInkiOjIzMS43NX0seyJ4IjozMDUuNjAxNTYyNSwieSI6MjMxLjc1fV0=\" data-look=\"classic\" marker-end=\"url(#d-b8bb86ddd94f0d16-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-b8bb86ddd94f0d16-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(124.2109375, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-80.234375\" y=\"-24.75\" width=\"160.46875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-50.234375, -9.75)\"><rect></rect><foreignObject width=\"100.46875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Atomic Commits</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-b8bb86ddd94f0d16-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(411.4140625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-120.9921875\" y=\"-24.75\" width=\"241.984375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-90.9921875, -9.75)\"><rect></rect><foreignObject width=\"181.984375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Automated git bisect Isolation</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-b8bb86ddd94f0d16-dark-flowchart-C-2\" data-look=\"classic\" transform=\"translate(124.2109375, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.0859375\" y=\"-24.75\" width=\"228.171875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.0859375, -9.75)\"><rect></rect><foreignObject width=\"168.171875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Interactive Rebase Hygiene</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-b8bb86ddd94f0d16-dark-flowchart-D-3\" data-look=\"classic\" transform=\"translate(411.4140625, 132.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.4921875\" y=\"-24.75\" width=\"226.984375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.4921875, -9.75)\"><rect></rect><foreignObject width=\"166.984375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Clean Cherry-Pick Hotfixes</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-b8bb86ddd94f0d16-dark-flowchart-E-4\" data-look=\"classic\" transform=\"translate(124.2109375, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-116.2109375\" y=\"-24.75\" width=\"232.421875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-86.2109375, -9.75)\"><rect></rect><foreignObject width=\"172.421875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Signed Commits (GPG/SSH)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-b8bb86ddd94f0d16-dark-flowchart-F-5\" data-look=\"classic\" transform=\"translate(411.4140625, 231.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-105.8125\" y=\"-24.75\" width=\"211.625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-75.8125, -9.75)\"><rect></rect><foreignObject width=\"151.625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>SOC 2 Audit Compliance</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-b8bb86ddd94f0d16-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-b8bb86ddd94f0d16-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-b8bb86ddd94f0d16-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"1-atomic-commits-enable-automated-git-bisect\">1. Atomic Commits Enable Automated <code>git bisect</code><a class=\"h-anchor\" href=\"#1-atomic-commits-enable-automated-git-bisect\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>An atomic commit represents a single, complete logical change (one bug fix, one refactor, or one feature increment) where all automated unit tests compile and pass.</p>\n<p>When an elusive regression escapes into production, atomic commits allow automated root-cause identification using <code>git bisect</code>:</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"># Automatically binary search through 500 commits in ~9 steps:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> bisect</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> start</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> HEAD</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> v2.4.0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> bisect</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> run</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> go</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> test</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ./pkg/auth/...</span></span></code></pre></div>\n<p>If a developer bundles an unrelated schema change, a linter fix, and a business logic change into a single monolithic commit, <code>git bisect</code> cannot isolate the failure, and reverting the breaking change requires manual surgical refactoring during an active incident.</p>\n<h2 id=\"2-conventional-commits-for-machine-readable-history\">2. Conventional Commits for Machine-Readable History<a class=\"h-anchor\" href=\"#2-conventional-commits-for-machine-readable-history\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Formatting commit headers according to the Conventional Commits specification enables automated semantic versioning (<code>semver</code>) and automated changelog generation:</p>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span>&lt;type&gt;(&lt;scope&gt;): &lt;short imperative description&gt;</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>[optional body explaining motivation and trade-offs]</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>[optional footer: closes #1042, Signed-off-by: ...]</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"58ecaa78aaa4bcd2\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-58ecaa78aaa4bcd2-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 896px;\" viewBox=\"0 0 896 204\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-58ecaa78aaa4bcd2-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-58ecaa78aaa4bcd2-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-58ecaa78aaa4bcd2-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-58ecaa78aaa4bcd2-light .error-icon{fill:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-light .error-text{fill:#000000;stroke:#000000;}#d-58ecaa78aaa4bcd2-light .edge-thickness-normal{stroke-width:1px;}#d-58ecaa78aaa4bcd2-light .edge-thickness-thick{stroke-width:3.5px;}#d-58ecaa78aaa4bcd2-light .edge-pattern-solid{stroke-dasharray:0;}#d-58ecaa78aaa4bcd2-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-58ecaa78aaa4bcd2-light .edge-pattern-dashed{stroke-dasharray:3;}#d-58ecaa78aaa4bcd2-light .edge-pattern-dotted{stroke-dasharray:2;}#d-58ecaa78aaa4bcd2-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-58ecaa78aaa4bcd2-light .marker.cross{stroke:rgb(44, 46, 48);}#d-58ecaa78aaa4bcd2-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-58ecaa78aaa4bcd2-light p{margin:0;}#d-58ecaa78aaa4bcd2-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-light .cluster-label text{fill:#000000;}#d-58ecaa78aaa4bcd2-light .cluster-label span{color:#000000;}#d-58ecaa78aaa4bcd2-light .cluster-label span p{background-color:transparent;}#d-58ecaa78aaa4bcd2-light .label text,#d-58ecaa78aaa4bcd2-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-light .node rect,#d-58ecaa78aaa4bcd2-light .node circle,#d-58ecaa78aaa4bcd2-light .node ellipse,#d-58ecaa78aaa4bcd2-light .node polygon,#d-58ecaa78aaa4bcd2-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-58ecaa78aaa4bcd2-light .rough-node .label text,#d-58ecaa78aaa4bcd2-light .node .label text,#d-58ecaa78aaa4bcd2-light .image-shape .label,#d-58ecaa78aaa4bcd2-light .icon-shape .label{text-anchor:middle;}#d-58ecaa78aaa4bcd2-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-58ecaa78aaa4bcd2-light .rough-node .label,#d-58ecaa78aaa4bcd2-light .node .label,#d-58ecaa78aaa4bcd2-light .image-shape .label,#d-58ecaa78aaa4bcd2-light .icon-shape .label{text-align:center;}#d-58ecaa78aaa4bcd2-light .node.clickable{cursor:pointer;}#d-58ecaa78aaa4bcd2-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-58ecaa78aaa4bcd2-light .arrowheadPath{fill:#000000;}#d-58ecaa78aaa4bcd2-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-58ecaa78aaa4bcd2-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-58ecaa78aaa4bcd2-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-58ecaa78aaa4bcd2-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-58ecaa78aaa4bcd2-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-58ecaa78aaa4bcd2-light .cluster text{fill:#000000;}#d-58ecaa78aaa4bcd2-light .cluster span{color:#000000;}#d-58ecaa78aaa4bcd2-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-58ecaa78aaa4bcd2-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-light rect.text{fill:none;stroke-width:0;}#d-58ecaa78aaa4bcd2-light .icon-shape,#d-58ecaa78aaa4bcd2-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-58ecaa78aaa4bcd2-light .icon-shape p,#d-58ecaa78aaa4bcd2-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-58ecaa78aaa4bcd2-light .icon-shape .label rect,#d-58ecaa78aaa4bcd2-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-58ecaa78aaa4bcd2-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-58ecaa78aaa4bcd2-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node rect,#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].cluster rect,#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node polygon{stroke:url(#d-58ecaa78aaa4bcd2-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node path{stroke:url(#d-58ecaa78aaa4bcd2-light-gradient);stroke-width:1px;}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node circle{stroke:url(#d-58ecaa78aaa4bcd2-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-58ecaa78aaa4bcd2-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-58ecaa78aaa4bcd2-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M318,67.452L288,73.21C258,78.968,198,90.484,168,99.742C138,109,138,116,138,119.5L138,123\" id=\"d-58ecaa78aaa4bcd2-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MzE4LCJ5Ijo2Ny40NTE2MTI5MDMyMjU4MX0seyJ4IjoxMzgsInkiOjEwMn0seyJ4IjoxMzgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-58ecaa78aaa4bcd2-light_flowchart-v2-pointEnd)\"></path><path d=\"M448,77L448,81.167C448,85.333,448,93.667,448,101.333C448,109,448,116,448,119.5L448,123\" id=\"d-58ecaa78aaa4bcd2-light-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6NDQ4LCJ5Ijo3N30seyJ4Ijo0NDgsInkiOjEwMn0seyJ4Ijo0NDgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-58ecaa78aaa4bcd2-light_flowchart-v2-pointEnd)\"></path><path d=\"M578,67.452L608,73.21C638,78.968,698,90.484,728,99.742C758,109,758,116,758,119.5L758,123\" id=\"d-58ecaa78aaa4bcd2-light-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6NTc4LCJ5Ijo2Ny40NTE2MTI5MDMyMjU4MX0seyJ4Ijo3NTgsInkiOjEwMn0seyJ4Ijo3NTgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-58ecaa78aaa4bcd2-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-58ecaa78aaa4bcd2-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(448, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>feat(parser): add secondary bitmap validation</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-58ecaa78aaa4bcd2-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Type: feat (Triggers minor version bump)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-58ecaa78aaa4bcd2-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(448, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Scope: parser (Subsystem package)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-58ecaa78aaa4bcd2-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(758, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Description: add secondary bitmap validation</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-58ecaa78aaa4bcd2-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-58ecaa78aaa4bcd2-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-58ecaa78aaa4bcd2-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-58ecaa78aaa4bcd2-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 896px;\" viewBox=\"0 0 896 204\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-58ecaa78aaa4bcd2-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-58ecaa78aaa4bcd2-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-58ecaa78aaa4bcd2-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-58ecaa78aaa4bcd2-dark .error-icon{fill:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-58ecaa78aaa4bcd2-dark .edge-thickness-normal{stroke-width:1px;}#d-58ecaa78aaa4bcd2-dark .edge-thickness-thick{stroke-width:3.5px;}#d-58ecaa78aaa4bcd2-dark .edge-pattern-solid{stroke-dasharray:0;}#d-58ecaa78aaa4bcd2-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-58ecaa78aaa4bcd2-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-58ecaa78aaa4bcd2-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-58ecaa78aaa4bcd2-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-58ecaa78aaa4bcd2-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-58ecaa78aaa4bcd2-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-58ecaa78aaa4bcd2-dark p{margin:0;}#d-58ecaa78aaa4bcd2-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-dark .cluster-label text{fill:#eae9e8;}#d-58ecaa78aaa4bcd2-dark .cluster-label span{color:#eae9e8;}#d-58ecaa78aaa4bcd2-dark .cluster-label span p{background-color:transparent;}#d-58ecaa78aaa4bcd2-dark .label text,#d-58ecaa78aaa4bcd2-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-dark .node rect,#d-58ecaa78aaa4bcd2-dark .node circle,#d-58ecaa78aaa4bcd2-dark .node ellipse,#d-58ecaa78aaa4bcd2-dark .node polygon,#d-58ecaa78aaa4bcd2-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-58ecaa78aaa4bcd2-dark .rough-node .label text,#d-58ecaa78aaa4bcd2-dark .node .label text,#d-58ecaa78aaa4bcd2-dark .image-shape .label,#d-58ecaa78aaa4bcd2-dark .icon-shape .label{text-anchor:middle;}#d-58ecaa78aaa4bcd2-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-58ecaa78aaa4bcd2-dark .rough-node .label,#d-58ecaa78aaa4bcd2-dark .node .label,#d-58ecaa78aaa4bcd2-dark .image-shape .label,#d-58ecaa78aaa4bcd2-dark .icon-shape .label{text-align:center;}#d-58ecaa78aaa4bcd2-dark .node.clickable{cursor:pointer;}#d-58ecaa78aaa4bcd2-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-58ecaa78aaa4bcd2-dark .arrowheadPath{fill:#eae9e8;}#d-58ecaa78aaa4bcd2-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-58ecaa78aaa4bcd2-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-58ecaa78aaa4bcd2-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-58ecaa78aaa4bcd2-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-58ecaa78aaa4bcd2-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-58ecaa78aaa4bcd2-dark .cluster text{fill:#eae9e8;}#d-58ecaa78aaa4bcd2-dark .cluster span{color:#eae9e8;}#d-58ecaa78aaa4bcd2-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-58ecaa78aaa4bcd2-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-58ecaa78aaa4bcd2-dark rect.text{fill:none;stroke-width:0;}#d-58ecaa78aaa4bcd2-dark .icon-shape,#d-58ecaa78aaa4bcd2-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-58ecaa78aaa4bcd2-dark .icon-shape p,#d-58ecaa78aaa4bcd2-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-58ecaa78aaa4bcd2-dark .icon-shape .label rect,#d-58ecaa78aaa4bcd2-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-58ecaa78aaa4bcd2-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-58ecaa78aaa4bcd2-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-58ecaa78aaa4bcd2-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node rect,#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].cluster rect,#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node polygon{stroke:url(#d-58ecaa78aaa4bcd2-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node path{stroke:url(#d-58ecaa78aaa4bcd2-dark-gradient);stroke-width:1px;}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node circle{stroke:url(#d-58ecaa78aaa4bcd2-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-58ecaa78aaa4bcd2-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-58ecaa78aaa4bcd2-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-58ecaa78aaa4bcd2-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-58ecaa78aaa4bcd2-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M318,67.452L288,73.21C258,78.968,198,90.484,168,99.742C138,109,138,116,138,119.5L138,123\" id=\"d-58ecaa78aaa4bcd2-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MzE4LCJ5Ijo2Ny40NTE2MTI5MDMyMjU4MX0seyJ4IjoxMzgsInkiOjEwMn0seyJ4IjoxMzgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointEnd)\"></path><path d=\"M448,77L448,81.167C448,85.333,448,93.667,448,101.333C448,109,448,116,448,119.5L448,123\" id=\"d-58ecaa78aaa4bcd2-dark-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6NDQ4LCJ5Ijo3N30seyJ4Ijo0NDgsInkiOjEwMn0seyJ4Ijo0NDgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointEnd)\"></path><path d=\"M578,67.452L608,73.21C638,78.968,698,90.484,728,99.742C758,109,758,116,758,119.5L758,123\" id=\"d-58ecaa78aaa4bcd2-dark-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6NTc4LCJ5Ijo2Ny40NTE2MTI5MDMyMjU4MX0seyJ4Ijo3NTgsInkiOjEwMn0seyJ4Ijo3NTgsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-58ecaa78aaa4bcd2-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-58ecaa78aaa4bcd2-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(448, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>feat(parser): add secondary bitmap validation</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-58ecaa78aaa4bcd2-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Type: feat (Triggers minor version bump)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-58ecaa78aaa4bcd2-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(448, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Scope: parser (Subsystem package)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-58ecaa78aaa4bcd2-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(758, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-34.5\" width=\"260\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -19.5)\"><rect></rect><foreignObject width=\"200\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel \"><p>Description: add secondary bitmap validation</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-58ecaa78aaa4bcd2-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-58ecaa78aaa4bcd2-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-58ecaa78aaa4bcd2-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h3 id=\"type-taxonomy\">Type Taxonomy<a class=\"h-anchor\" href=\"#type-taxonomy\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h3>\n<ul>\n<li><code>feat</code>: New user or API capability (bumps minor version in SemVer).</li>\n<li><code>fix</code>: Bug remediation (bumps patch version).</li>\n<li><code>refactor</code>: Internal code structural change with zero behavioral or API changes.</li>\n<li><code>perf</code>: Code modification specifically measured to reduce CPU, memory, or I/O allocations.</li>\n<li><code>test</code>: Addition or modification of test suites without production code changes.</li>\n</ul>\n<h2 id=\"3-clean-rebase-and-fixup-workflows\">3. Clean Rebase and Fixup Workflows<a class=\"h-anchor\" href=\"#3-clean-rebase-and-fixup-workflows\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Feature branches often accumulate messy checkpoint commits (“fix typo”, “wip”, “debug test”). Before opening a PR or merging into main, clean your branch history using interactive rebase and automated fixups:</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"># Commit fix directly to a previous commit SHA:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> commit</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> --fixup</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &lt;</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">commit-sh</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">a</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"># Automatically reorder and squash fixups:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> rebase</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> -i</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> --autosquash</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> origin/main</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"daca7279c13b0558\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-daca7279c13b0558-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 523.578125px;\" viewBox=\"-165.578125 -20 523.578125 215.79962158203125\" role=\"graphics-document document\" aria-roledescription=\"gitGraph\"><style>#d-daca7279c13b0558-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-daca7279c13b0558-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-daca7279c13b0558-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-daca7279c13b0558-light .error-icon{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .error-text{fill:#000000;stroke:#000000;}#d-daca7279c13b0558-light .edge-thickness-normal{stroke-width:1px;}#d-daca7279c13b0558-light .edge-thickness-thick{stroke-width:3.5px;}#d-daca7279c13b0558-light .edge-pattern-solid{stroke-dasharray:0;}#d-daca7279c13b0558-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-daca7279c13b0558-light .edge-pattern-dashed{stroke-dasharray:3;}#d-daca7279c13b0558-light .edge-pattern-dotted{stroke-dasharray:2;}#d-daca7279c13b0558-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-daca7279c13b0558-light .marker.cross{stroke:rgb(44, 46, 48);}#d-daca7279c13b0558-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-daca7279c13b0558-light p{margin:0;}#d-daca7279c13b0558-light .commit-id,#d-daca7279c13b0558-light .commit-msg,#d-daca7279c13b0558-light .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#d-daca7279c13b0558-light .branch-label0{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit0{stroke:rgb(2, 120, 231);fill:rgb(2, 120, 231);}#d-daca7279c13b0558-light .commit-highlight0{stroke:rgb(254.0944206009, 200.6652360515, 150.4055793991);fill:rgb(254.0944206009, 200.6652360515, 150.4055793991);}#d-daca7279c13b0558-light .label0{fill:rgb(2, 120, 231);}#d-daca7279c13b0558-light .arrow0{stroke:rgb(2, 120, 231);}#d-daca7279c13b0558-light .branch-label1{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit1{stroke:rgb(120, 68, 240);fill:rgb(120, 68, 240);}#d-daca7279c13b0558-light .commit-highlight1{stroke:rgb(195.1311881189, 241.5965346535, 87.9034653467);fill:rgb(195.1311881189, 241.5965346535, 87.9034653467);}#d-daca7279c13b0558-light .label1{fill:rgb(120, 68, 240);}#d-daca7279c13b0558-light .arrow1{stroke:rgb(120, 68, 240);}#d-daca7279c13b0558-light .branch-label2{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit2{stroke:rgb(32, 180, 107);fill:rgb(32, 180, 107);}#d-daca7279c13b0558-light .commit-highlight2{stroke:rgb(242.2452830188, 183.2547169811, 212.3514150943);fill:rgb(242.2452830188, 183.2547169811, 212.3514150943);}#d-daca7279c13b0558-light .label2{fill:rgb(32, 180, 107);}#d-daca7279c13b0558-light .arrow2{stroke:rgb(32, 180, 107);}#d-daca7279c13b0558-light .branch-label3{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit3{stroke:rgb(245, 153, 38);fill:rgb(245, 153, 38);}#d-daca7279c13b0558-light .commit-highlight3{stroke:rgb(106.3502202645, 169.3722466962, 248.1497797357);fill:rgb(106.3502202645, 169.3722466962, 248.1497797357);}#d-daca7279c13b0558-light .label3{fill:rgb(245, 153, 38);}#d-daca7279c13b0558-light .arrow3{stroke:rgb(245, 153, 38);}#d-daca7279c13b0558-light .branch-label4{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .commit4{stroke:hsl(-60, 0%, 75%);fill:hsl(-60, 0%, 75%);}#d-daca7279c13b0558-light .commit-highlight4{stroke:rgb(63.75, 63.75, 63.75);fill:rgb(63.75, 63.75, 63.75);}#d-daca7279c13b0558-light .label4{fill:hsl(-60, 0%, 75%);}#d-daca7279c13b0558-light .arrow4{stroke:hsl(-60, 0%, 75%);}#d-daca7279c13b0558-light .branch-label5{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .commit5{stroke:hsl(-90, 0%, 75%);fill:hsl(-90, 0%, 75%);}#d-daca7279c13b0558-light .commit-highlight5{stroke:rgb(63.75, 63.75, 63.75);fill:rgb(63.75, 63.75, 63.75);}#d-daca7279c13b0558-light .label5{fill:hsl(-90, 0%, 75%);}#d-daca7279c13b0558-light .arrow5{stroke:hsl(-90, 0%, 75%);}#d-daca7279c13b0558-light .branch-label6{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .commit6{stroke:hsl(60, 0%, 75%);fill:hsl(60, 0%, 75%);}#d-daca7279c13b0558-light .commit-highlight6{stroke:rgb(63.75, 63.75, 63.75);fill:rgb(63.75, 63.75, 63.75);}#d-daca7279c13b0558-light .label6{fill:hsl(60, 0%, 75%);}#d-daca7279c13b0558-light .arrow6{stroke:hsl(60, 0%, 75%);}#d-daca7279c13b0558-light .branch-label7{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .commit7{stroke:hsl(120, 0%, 75%);fill:hsl(120, 0%, 75%);}#d-daca7279c13b0558-light .commit-highlight7{stroke:rgb(63.75, 63.75, 63.75);fill:rgb(63.75, 63.75, 63.75);}#d-daca7279c13b0558-light .label7{fill:hsl(120, 0%, 75%);}#d-daca7279c13b0558-light .arrow7{stroke:hsl(120, 0%, 75%);}#d-daca7279c13b0558-light .branch-label8{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit8{stroke:rgb(2, 120, 231);fill:rgb(2, 120, 231);}#d-daca7279c13b0558-light .commit-highlight8{stroke:rgb(254.0944206009, 200.6652360515, 150.4055793991);fill:rgb(254.0944206009, 200.6652360515, 150.4055793991);}#d-daca7279c13b0558-light .label8{fill:rgb(2, 120, 231);}#d-daca7279c13b0558-light .arrow8{stroke:rgb(2, 120, 231);}#d-daca7279c13b0558-light .branch-label9{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit9{stroke:rgb(120, 68, 240);fill:rgb(120, 68, 240);}#d-daca7279c13b0558-light .commit-highlight9{stroke:rgb(195.1311881189, 241.5965346535, 87.9034653467);fill:rgb(195.1311881189, 241.5965346535, 87.9034653467);}#d-daca7279c13b0558-light .label9{fill:rgb(120, 68, 240);}#d-daca7279c13b0558-light .arrow9{stroke:rgb(120, 68, 240);}#d-daca7279c13b0558-light .branch-label10{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit10{stroke:rgb(32, 180, 107);fill:rgb(32, 180, 107);}#d-daca7279c13b0558-light .commit-highlight10{stroke:rgb(242.2452830188, 183.2547169811, 212.3514150943);fill:rgb(242.2452830188, 183.2547169811, 212.3514150943);}#d-daca7279c13b0558-light .label10{fill:rgb(32, 180, 107);}#d-daca7279c13b0558-light .arrow10{stroke:rgb(32, 180, 107);}#d-daca7279c13b0558-light .branch-label11{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit11{stroke:rgb(245, 153, 38);fill:rgb(245, 153, 38);}#d-daca7279c13b0558-light .commit-highlight11{stroke:rgb(106.3502202645, 169.3722466962, 248.1497797357);fill:rgb(106.3502202645, 169.3722466962, 248.1497797357);}#d-daca7279c13b0558-light .label11{fill:rgb(245, 153, 38);}#d-daca7279c13b0558-light .arrow11{stroke:rgb(245, 153, 38);}#d-daca7279c13b0558-light .branch{stroke-width:1;stroke:rgb(44, 46, 48);stroke-dasharray:2;}#d-daca7279c13b0558-light .commit-label{font-size:10px;fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .commit-label-bkg{font-size:10px;fill:rgb(255, 255, 255);opacity:0.5;}#d-daca7279c13b0558-light .tag-label{font-size:10px;fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .tag-label-bkg{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);}#d-daca7279c13b0558-light .tag-hole{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .commit-merge{stroke:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .commit-reverse{stroke:rgb(255, 255, 255);fill:rgb(255, 255, 255);stroke-width:3;}#d-daca7279c13b0558-light .commit-highlight-inner{stroke:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-daca7279c13b0558-light .arrow{stroke-width:8;stroke-linecap:round;fill:none;}#d-daca7279c13b0558-light .gitTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-daca7279c13b0558-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-daca7279c13b0558-light [data-look=\"neo\"].node rect,#d-daca7279c13b0558-light [data-look=\"neo\"].cluster rect,#d-daca7279c13b0558-light [data-look=\"neo\"].node polygon{stroke:url(#d-daca7279c13b0558-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-daca7279c13b0558-light [data-look=\"neo\"].node path{stroke:url(#d-daca7279c13b0558-light-gradient);stroke-width:1px;}#d-daca7279c13b0558-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-daca7279c13b0558-light [data-look=\"neo\"].node circle{stroke:url(#d-daca7279c13b0558-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-daca7279c13b0558-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-daca7279c13b0558-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-daca7279c13b0558-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><linearGradient id=\"d-daca7279c13b0558-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></defs><g class=\"commit-bullets\"></g><g class=\"commit-labels\"></g><g><line x1=\"0\" y1=\"-2\" x2=\"350\" y2=\"-2\" class=\"branch branch0\"></line><rect class=\"branchLabelBkg label0\" style=\"\" rx=\"4\" ry=\"4\" x=\"-63.53125\" y=\"2\" width=\"47.53125\" height=\"20\" transform=\"translate(-19, -14)\"></rect><g class=\"branchLabel\"><g class=\"label branch-label0\" transform=\"translate(-73.53125, -12)\"><text><tspan xml:space=\"preserve\" dy=\"1em\" x=\"0\" class=\"row\">main</tspan></text></g></g><line x1=\"0\" y1=\"88\" x2=\"350\" y2=\"88\" class=\"branch branch1\"></line><rect class=\"branchLabelBkg label1\" style=\"\" rx=\"4\" ry=\"4\" x=\"-138.578125\" y=\"2\" width=\"122.578125\" height=\"20\" transform=\"translate(-19, 76)\"></rect><g class=\"branchLabel\"><g class=\"label branch-label1\" transform=\"translate(-148.578125, 78)\"><text><tspan xml:space=\"preserve\" dy=\"1em\" x=\"0\" class=\"row\">feature-rate-limit</tspan></text></g></g></g><g class=\"commit-arrows\"><path d=\"M 10 -2 L 10 68 A 20 20, 0, 0, 0, 30 88 L 60 88\" class=\"arrow arrow1\"></path><path d=\"M 60 88 L 110 88\" class=\"arrow arrow1\"></path><path d=\"M 110 88 L 160 88\" class=\"arrow arrow1\"></path><path d=\"M 10 -2 L 210 -2\" class=\"arrow arrow0\"></path><path d=\"M 160 88 L 260 88\" class=\"arrow arrow1\"></path><path d=\"M 210 -2 L 240 -2 A 20 20, 0, 0, 1, 260 18 L 260 88\" class=\"arrow arrow0\"></path><path d=\"M 210 -2 L 310 -2\" class=\"arrow arrow0\"></path><path d=\"M 260 88 L 290 88 A 20 20, 0, 0, 0, 310 68 L 310 -2\" class=\"arrow arrow1\"></path></g><g class=\"commit-bullets\"><circle cx=\"10\" cy=\"-2\" r=\"10\" class=\"commit v2.1.0 commit0\"></circle><circle cx=\"60\" cy=\"88\" r=\"10\" class=\"commit feat: add token bucket commit1\"></circle><circle cx=\"110\" cy=\"88\" r=\"10\" class=\"commit fixup: adjust refill math commit1\"></circle><circle cx=\"160\" cy=\"88\" r=\"10\" class=\"commit test: add burst tests commit1\"></circle><circle cx=\"210\" cy=\"-2\" r=\"10\" class=\"commit hotfix: patch timeout commit0\"></circle><circle cx=\"260\" cy=\"88\" r=\"10\" class=\"commit rebase &amp; autosquash commit1\"></circle><circle cx=\"260\" cy=\"88\" r=\"6\" class=\"commit commit-merge rebase &amp; autosquash commit1\"></circle><circle cx=\"310\" cy=\"-2\" r=\"10\" class=\"commit clean linear history commit0\"></circle><circle cx=\"310\" cy=\"-2\" r=\"6\" class=\"commit commit-merge clean linear history commit0\"></circle></g><g class=\"commit-labels\"><g transform=\"translate(-21.465, 19.095) rotate(-45, 0, -2)\"><rect class=\"commit-label-bkg\" x=\"-5.375\" y=\"11.5\" width=\"30.75\" height=\"16\"></rect><text x=\"-3.375\" y=\"23\" class=\"commit-label\">v2.1.0</text></g><g transform=\"translate(-51.4671875, 45.939062500000006) rotate(-45, 50, 88)\"><rect class=\"commit-label-bkg\" x=\"5.1484375\" y=\"101.5\" width=\"109.703125\" height=\"16\"></rect><text x=\"7.1484375\" y=\"113\" class=\"commit-label\">feat: add token bucket</text></g><g transform=\"translate(-52.15593749999999, 46.5553125) rotate(-45, 100, 88)\"><rect class=\"commit-label-bkg\" x=\"54.2421875\" y=\"101.5\" width=\"111.515625\" height=\"16.041015625\"></rect><text x=\"56.2421875\" y=\"113\" class=\"commit-label\">fixup: adjust refill math</text></g><g transform=\"translate(-46.9546875, 41.9015625) rotate(-45, 150, 88)\"><rect class=\"commit-label-bkg\" x=\"111.0859375\" y=\"101.5\" width=\"97.828125\" height=\"16\"></rect><text x=\"113.0859375\" y=\"113\" class=\"commit-label\">test: add burst tests</text></g><g transform=\"translate(-48.2075, 43.0225) rotate(-45, 200, -2)\"><rect class=\"commit-label-bkg\" x=\"159.4375\" y=\"11.5\" width=\"101.125\" height=\"16.041015625\"></rect><text x=\"161.4375\" y=\"23\" class=\"commit-label\">hotfix: patch timeout</text></g><g transform=\"translate(-49.0209375, 43.7503125) rotate(-45, 250, 88)\"><rect class=\"commit-label-bkg\" x=\"208.3671875\" y=\"101.5\" width=\"103.265625\" height=\"16.041015625\"></rect><text x=\"210.3671875\" y=\"113\" class=\"commit-label\">rebase &amp; autosquash</text></g><g transform=\"translate(-45.3515625, 40.4671875) rotate(-45, 300, -2)\"><rect class=\"commit-label-bkg\" x=\"263.1953125\" y=\"11.5\" width=\"93.609375\" height=\"16.080078125\"></rect><text x=\"265.1953125\" y=\"23\" class=\"commit-label\">clean linear history</text></g></g></svg>\n<svg data-variant=\"dark\" id=\"d-daca7279c13b0558-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 523.578125px;\" viewBox=\"-165.578125 -20 523.578125 215.79962158203125\" role=\"graphics-document document\" aria-roledescription=\"gitGraph\"><style>#d-daca7279c13b0558-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-daca7279c13b0558-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-daca7279c13b0558-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-daca7279c13b0558-dark .error-icon{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-daca7279c13b0558-dark .edge-thickness-normal{stroke-width:1px;}#d-daca7279c13b0558-dark .edge-thickness-thick{stroke-width:3.5px;}#d-daca7279c13b0558-dark .edge-pattern-solid{stroke-dasharray:0;}#d-daca7279c13b0558-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-daca7279c13b0558-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-daca7279c13b0558-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-daca7279c13b0558-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-daca7279c13b0558-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-daca7279c13b0558-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-daca7279c13b0558-dark p{margin:0;}#d-daca7279c13b0558-dark .commit-id,#d-daca7279c13b0558-dark .commit-msg,#d-daca7279c13b0558-dark .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#d-daca7279c13b0558-dark .branch-label0{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit0{stroke:rgb(55, 146, 253);fill:rgb(55, 146, 253);}#d-daca7279c13b0558-dark .commit-highlight0{stroke:rgb(253.2128712871, 171.8985148515, 76.2871287131);fill:rgb(253.2128712871, 171.8985148515, 76.2871287131);}#d-daca7279c13b0558-dark .label0{fill:rgb(55, 146, 253);}#d-daca7279c13b0558-dark .arrow0{stroke:rgb(55, 146, 253);}#d-daca7279c13b0558-dark .branch-label1{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit1{stroke:rgb(143, 105, 255);fill:rgb(143, 105, 255);}#d-daca7279c13b0558-dark .commit-highlight1{stroke:rgb(196.1, 255, 22.5000000001);fill:rgb(196.1, 255, 22.5000000001);}#d-daca7279c13b0558-dark .label1{fill:rgb(143, 105, 255);}#d-daca7279c13b0558-dark .arrow1{stroke:rgb(143, 105, 255);}#d-daca7279c13b0558-dark .branch-label2{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit2{stroke:rgb(67, 192, 122);fill:rgb(67, 192, 122);}#d-daca7279c13b0558-dark .commit-highlight2{stroke:rgb(221.9940239043, 156.5059760956, 193.1792828685);fill:rgb(221.9940239043, 156.5059760956, 193.1792828685);}#d-daca7279c13b0558-dark .label2{fill:rgb(67, 192, 122);}#d-daca7279c13b0558-dark .arrow2{stroke:rgb(67, 192, 122);}#d-daca7279c13b0558-dark .branch-label3{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit3{stroke:rgb(248, 161, 63);fill:rgb(248, 161, 63);}#d-daca7279c13b0558-dark .commit-highlight3{stroke:rgb(77.9547738692, 158.1783919597, 248.5452261306);fill:rgb(77.9547738692, 158.1783919597, 248.5452261306);}#d-daca7279c13b0558-dark .label3{fill:rgb(248, 161, 63);}#d-daca7279c13b0558-dark .arrow3{stroke:rgb(248, 161, 63);}#d-daca7279c13b0558-dark .branch-label4{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .commit4{stroke:hsl(150, 4.5454545455%, 0%);fill:hsl(150, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .commit-highlight4{stroke:#ffffff;fill:#ffffff;}#d-daca7279c13b0558-dark .label4{fill:hsl(150, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .arrow4{stroke:hsl(150, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .branch-label5{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .commit5{stroke:hsl(120, 4.5454545455%, 0%);fill:hsl(120, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .commit-highlight5{stroke:#ffffff;fill:#ffffff;}#d-daca7279c13b0558-dark .label5{fill:hsl(120, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .arrow5{stroke:hsl(120, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .branch-label6{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .commit6{stroke:hsl(270, 4.5454545455%, 0%);fill:hsl(270, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .commit-highlight6{stroke:#ffffff;fill:#ffffff;}#d-daca7279c13b0558-dark .label6{fill:hsl(270, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .arrow6{stroke:hsl(270, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .branch-label7{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .commit7{stroke:hsl(330, 4.5454545455%, 0%);fill:hsl(330, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .commit-highlight7{stroke:#ffffff;fill:#ffffff;}#d-daca7279c13b0558-dark .label7{fill:hsl(330, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .arrow7{stroke:hsl(330, 4.5454545455%, 0%);}#d-daca7279c13b0558-dark .branch-label8{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit8{stroke:rgb(55, 146, 253);fill:rgb(55, 146, 253);}#d-daca7279c13b0558-dark .commit-highlight8{stroke:rgb(253.2128712871, 171.8985148515, 76.2871287131);fill:rgb(253.2128712871, 171.8985148515, 76.2871287131);}#d-daca7279c13b0558-dark .label8{fill:rgb(55, 146, 253);}#d-daca7279c13b0558-dark .arrow8{stroke:rgb(55, 146, 253);}#d-daca7279c13b0558-dark .branch-label9{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit9{stroke:rgb(143, 105, 255);fill:rgb(143, 105, 255);}#d-daca7279c13b0558-dark .commit-highlight9{stroke:rgb(196.1, 255, 22.5000000001);fill:rgb(196.1, 255, 22.5000000001);}#d-daca7279c13b0558-dark .label9{fill:rgb(143, 105, 255);}#d-daca7279c13b0558-dark .arrow9{stroke:rgb(143, 105, 255);}#d-daca7279c13b0558-dark .branch-label10{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit10{stroke:rgb(67, 192, 122);fill:rgb(67, 192, 122);}#d-daca7279c13b0558-dark .commit-highlight10{stroke:rgb(221.9940239043, 156.5059760956, 193.1792828685);fill:rgb(221.9940239043, 156.5059760956, 193.1792828685);}#d-daca7279c13b0558-dark .label10{fill:rgb(67, 192, 122);}#d-daca7279c13b0558-dark .arrow10{stroke:rgb(67, 192, 122);}#d-daca7279c13b0558-dark .branch-label11{fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit11{stroke:rgb(248, 161, 63);fill:rgb(248, 161, 63);}#d-daca7279c13b0558-dark .commit-highlight11{stroke:rgb(77.9547738692, 158.1783919597, 248.5452261306);fill:rgb(77.9547738692, 158.1783919597, 248.5452261306);}#d-daca7279c13b0558-dark .label11{fill:rgb(248, 161, 63);}#d-daca7279c13b0558-dark .arrow11{stroke:rgb(248, 161, 63);}#d-daca7279c13b0558-dark .branch{stroke-width:1;stroke:rgb(220, 222, 224);stroke-dasharray:2;}#d-daca7279c13b0558-dark .commit-label{font-size:10px;fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .commit-label-bkg{font-size:10px;fill:rgb(21, 22, 23);opacity:0.5;}#d-daca7279c13b0558-dark .tag-label{font-size:10px;fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .tag-label-bkg{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);}#d-daca7279c13b0558-dark .tag-hole{fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .commit-merge{stroke:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .commit-reverse{stroke:rgb(21, 22, 23);fill:rgb(21, 22, 23);stroke-width:3;}#d-daca7279c13b0558-dark .commit-highlight-inner{stroke:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-daca7279c13b0558-dark .arrow{stroke-width:8;stroke-linecap:round;fill:none;}#d-daca7279c13b0558-dark .gitTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-daca7279c13b0558-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-daca7279c13b0558-dark [data-look=\"neo\"].node rect,#d-daca7279c13b0558-dark [data-look=\"neo\"].cluster rect,#d-daca7279c13b0558-dark [data-look=\"neo\"].node polygon{stroke:url(#d-daca7279c13b0558-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-daca7279c13b0558-dark [data-look=\"neo\"].node path{stroke:url(#d-daca7279c13b0558-dark-gradient);stroke-width:1px;}#d-daca7279c13b0558-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-daca7279c13b0558-dark [data-look=\"neo\"].node circle{stroke:url(#d-daca7279c13b0558-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-daca7279c13b0558-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-daca7279c13b0558-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-daca7279c13b0558-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-daca7279c13b0558-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><linearGradient id=\"d-daca7279c13b0558-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></defs><g class=\"commit-bullets\"></g><g class=\"commit-labels\"></g><g><line x1=\"0\" y1=\"-2\" x2=\"350\" y2=\"-2\" class=\"branch branch0\"></line><rect class=\"branchLabelBkg label0\" style=\"\" rx=\"4\" ry=\"4\" x=\"-63.53125\" y=\"2\" width=\"47.53125\" height=\"20\" transform=\"translate(-19, -14)\"></rect><g class=\"branchLabel\"><g class=\"label branch-label0\" transform=\"translate(-73.53125, -12)\"><text><tspan xml:space=\"preserve\" dy=\"1em\" x=\"0\" class=\"row\">main</tspan></text></g></g><line x1=\"0\" y1=\"88\" x2=\"350\" y2=\"88\" class=\"branch branch1\"></line><rect class=\"branchLabelBkg label1\" style=\"\" rx=\"4\" ry=\"4\" x=\"-138.578125\" y=\"2\" width=\"122.578125\" height=\"20\" transform=\"translate(-19, 76)\"></rect><g class=\"branchLabel\"><g class=\"label branch-label1\" transform=\"translate(-148.578125, 78)\"><text><tspan xml:space=\"preserve\" dy=\"1em\" x=\"0\" class=\"row\">feature-rate-limit</tspan></text></g></g></g><g class=\"commit-arrows\"><path d=\"M 10 -2 L 10 68 A 20 20, 0, 0, 0, 30 88 L 60 88\" class=\"arrow arrow1\"></path><path d=\"M 60 88 L 110 88\" class=\"arrow arrow1\"></path><path d=\"M 110 88 L 160 88\" class=\"arrow arrow1\"></path><path d=\"M 10 -2 L 210 -2\" class=\"arrow arrow0\"></path><path d=\"M 160 88 L 260 88\" class=\"arrow arrow1\"></path><path d=\"M 210 -2 L 240 -2 A 20 20, 0, 0, 1, 260 18 L 260 88\" class=\"arrow arrow0\"></path><path d=\"M 210 -2 L 310 -2\" class=\"arrow arrow0\"></path><path d=\"M 260 88 L 290 88 A 20 20, 0, 0, 0, 310 68 L 310 -2\" class=\"arrow arrow1\"></path></g><g class=\"commit-bullets\"><circle cx=\"10\" cy=\"-2\" r=\"10\" class=\"commit v2.1.0 commit0\"></circle><circle cx=\"60\" cy=\"88\" r=\"10\" class=\"commit feat: add token bucket commit1\"></circle><circle cx=\"110\" cy=\"88\" r=\"10\" class=\"commit fixup: adjust refill math commit1\"></circle><circle cx=\"160\" cy=\"88\" r=\"10\" class=\"commit test: add burst tests commit1\"></circle><circle cx=\"210\" cy=\"-2\" r=\"10\" class=\"commit hotfix: patch timeout commit0\"></circle><circle cx=\"260\" cy=\"88\" r=\"10\" class=\"commit rebase &amp; autosquash commit1\"></circle><circle cx=\"260\" cy=\"88\" r=\"6\" class=\"commit commit-merge rebase &amp; autosquash commit1\"></circle><circle cx=\"310\" cy=\"-2\" r=\"10\" class=\"commit clean linear history commit0\"></circle><circle cx=\"310\" cy=\"-2\" r=\"6\" class=\"commit commit-merge clean linear history commit0\"></circle></g><g class=\"commit-labels\"><g transform=\"translate(-21.465, 19.095) rotate(-45, 0, -2)\"><rect class=\"commit-label-bkg\" x=\"-5.375\" y=\"11.5\" width=\"30.75\" height=\"16\"></rect><text x=\"-3.375\" y=\"23\" class=\"commit-label\">v2.1.0</text></g><g transform=\"translate(-51.4671875, 45.939062500000006) rotate(-45, 50, 88)\"><rect class=\"commit-label-bkg\" x=\"5.1484375\" y=\"101.5\" width=\"109.703125\" height=\"16\"></rect><text x=\"7.1484375\" y=\"113\" class=\"commit-label\">feat: add token bucket</text></g><g transform=\"translate(-52.15593749999999, 46.5553125) rotate(-45, 100, 88)\"><rect class=\"commit-label-bkg\" x=\"54.2421875\" y=\"101.5\" width=\"111.515625\" height=\"16.041015625\"></rect><text x=\"56.2421875\" y=\"113\" class=\"commit-label\">fixup: adjust refill math</text></g><g transform=\"translate(-46.9546875, 41.9015625) rotate(-45, 150, 88)\"><rect class=\"commit-label-bkg\" x=\"111.0859375\" y=\"101.5\" width=\"97.828125\" height=\"16\"></rect><text x=\"113.0859375\" y=\"113\" class=\"commit-label\">test: add burst tests</text></g><g transform=\"translate(-48.2075, 43.0225) rotate(-45, 200, -2)\"><rect class=\"commit-label-bkg\" x=\"159.4375\" y=\"11.5\" width=\"101.125\" height=\"16.041015625\"></rect><text x=\"161.4375\" y=\"23\" class=\"commit-label\">hotfix: patch timeout</text></g><g transform=\"translate(-49.0209375, 43.7503125) rotate(-45, 250, 88)\"><rect class=\"commit-label-bkg\" x=\"208.3671875\" y=\"101.5\" width=\"103.265625\" height=\"16.041015625\"></rect><text x=\"210.3671875\" y=\"113\" class=\"commit-label\">rebase &amp; autosquash</text></g><g transform=\"translate(-45.3515625, 40.4671875) rotate(-45, 300, -2)\"><rect class=\"commit-label-bkg\" x=\"263.1953125\" y=\"11.5\" width=\"93.609375\" height=\"16.080078125\"></rect><text x=\"265.1953125\" y=\"23\" class=\"commit-label\">clean linear history</text></g></g></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>A clean, linear commit history ensures individual bug fixes can be cleanly cherry-picked into release maintenance branches (<code>git cherry-pick &lt;sha&gt;</code>) without dragging in unrelated in-flight changes.</p>\n<h2 id=\"4-cryptographic-commit-signing-soc-2--pci-dss\">4. Cryptographic Commit Signing (SOC 2 / PCI-DSS)<a class=\"h-anchor\" href=\"#4-cryptographic-commit-signing-soc-2--pci-dss\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>In regulated environments, commit provenance must be cryptographically verifiable to prevent unauthorized code injection into CI/CD pipelines:</p>\n<div class=\"code-figure\" data-language=\"bash\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"># Configure SSH or GPG signing globally:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> config</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> --global</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> user.signingkey</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ~/.ssh/id_ed25519.pub</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> config</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> --global</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> gpg.format</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> ssh</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">git</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> config</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> --global</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> commit.gpgsign</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> true</span></span></code></pre></div>\n<p>GitHub and GitLab branch protection rules should enforce:</p>\n<ol>\n<li><strong>Require signed commits</strong>: Blocks unsigned code from merging to release branches.</li>\n<li><strong>Require linear history</strong>: Eliminates messy multi-parent merge bubbles.</li>\n<li><strong>Require branch to be up to date before merging</strong>: Ensures CI validates the exact merged state.</li>\n</ol>\n<h2 id=\"operational-takeaways\">Operational Takeaways<a class=\"h-anchor\" href=\"#operational-takeaways\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Every commit must compile and pass tests</strong>: Never commit broken intermediate states to shared branch history.</li>\n<li><strong>Write commit messages in imperative mood</strong>: “Add token bucket”, not “Added token bucket” or “Adds token bucket”.</li>\n<li><strong>Isolate refactors from features</strong>: Submit refactor PRs separately from functional feature PRs to keep code diffs small and easily reviewable.</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-constants-beyond-basics/",
      "url": "https://ashwingopalsamy.in/blog/go-constants-beyond-basics/",
      "title": "Go Constants Beyond the Basics",
      "content_text": "Untyped constants, exact compile-time arithmetic, iota bitmasks, and dead-code elimination in Go.",
      "date_published": "2024-11-13T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>In Go, constants are not merely immutable variables. They are compile-time values evaluated with arbitrary-precision arithmetic, capable of remaining untyped until assigned or used in an expression.</p>\n<p>Understanding how the compiler evaluates untyped constants unlocks cleaner APIs, compile-time assertions, and dead-code elimination.</p>\n<h2 id=\"untyped-constants-and-default-kinds\">Untyped Constants and Default Kinds<a class=\"h-anchor\" href=\"#untyped-constants-and-default-kinds\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>When declared without an explicit type, a constant in Go is <strong>untyped</strong>. Untyped constants have a default kind (<code>int</code>, <code>rune</code>, <code>float64</code>, <code>complex128</code>, <code>string</code>, or <code>bool</code>) that determines their type when assigned to a variable without explicit type annotations:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> x</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 10</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // untyped int (default type: int)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> i </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> x</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> f </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">float64</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> x </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// allowed: 10 represents a valid float64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> b </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">byte</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> x    </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// allowed: 10 fits in uint8</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"071bcc71bf56759d\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-071bcc71bf56759d-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 583.2265625px;\" viewBox=\"0 0 583.2265625 284\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-071bcc71bf56759d-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-071bcc71bf56759d-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-071bcc71bf56759d-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-071bcc71bf56759d-light .error-icon{fill:rgb(255, 255, 255);}#d-071bcc71bf56759d-light .error-text{fill:#000000;stroke:#000000;}#d-071bcc71bf56759d-light .edge-thickness-normal{stroke-width:1px;}#d-071bcc71bf56759d-light .edge-thickness-thick{stroke-width:3.5px;}#d-071bcc71bf56759d-light .edge-pattern-solid{stroke-dasharray:0;}#d-071bcc71bf56759d-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-071bcc71bf56759d-light .edge-pattern-dashed{stroke-dasharray:3;}#d-071bcc71bf56759d-light .edge-pattern-dotted{stroke-dasharray:2;}#d-071bcc71bf56759d-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-071bcc71bf56759d-light .marker.cross{stroke:rgb(44, 46, 48);}#d-071bcc71bf56759d-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-071bcc71bf56759d-light p{margin:0;}#d-071bcc71bf56759d-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-071bcc71bf56759d-light .cluster-label text{fill:#000000;}#d-071bcc71bf56759d-light .cluster-label span{color:#000000;}#d-071bcc71bf56759d-light .cluster-label span p{background-color:transparent;}#d-071bcc71bf56759d-light .label text,#d-071bcc71bf56759d-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-071bcc71bf56759d-light .node rect,#d-071bcc71bf56759d-light .node circle,#d-071bcc71bf56759d-light .node ellipse,#d-071bcc71bf56759d-light .node polygon,#d-071bcc71bf56759d-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-071bcc71bf56759d-light .rough-node .label text,#d-071bcc71bf56759d-light .node .label text,#d-071bcc71bf56759d-light .image-shape .label,#d-071bcc71bf56759d-light .icon-shape .label{text-anchor:middle;}#d-071bcc71bf56759d-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-071bcc71bf56759d-light .rough-node .label,#d-071bcc71bf56759d-light .node .label,#d-071bcc71bf56759d-light .image-shape .label,#d-071bcc71bf56759d-light .icon-shape .label{text-align:center;}#d-071bcc71bf56759d-light .node.clickable{cursor:pointer;}#d-071bcc71bf56759d-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-071bcc71bf56759d-light .arrowheadPath{fill:#000000;}#d-071bcc71bf56759d-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-071bcc71bf56759d-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-071bcc71bf56759d-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-071bcc71bf56759d-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-071bcc71bf56759d-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-071bcc71bf56759d-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-071bcc71bf56759d-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-071bcc71bf56759d-light .cluster text{fill:#000000;}#d-071bcc71bf56759d-light .cluster span{color:#000000;}#d-071bcc71bf56759d-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-071bcc71bf56759d-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-071bcc71bf56759d-light rect.text{fill:none;stroke-width:0;}#d-071bcc71bf56759d-light .icon-shape,#d-071bcc71bf56759d-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-071bcc71bf56759d-light .icon-shape p,#d-071bcc71bf56759d-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-071bcc71bf56759d-light .icon-shape .label rect,#d-071bcc71bf56759d-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-071bcc71bf56759d-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-071bcc71bf56759d-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-071bcc71bf56759d-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-071bcc71bf56759d-light [data-look=\"neo\"].node rect,#d-071bcc71bf56759d-light [data-look=\"neo\"].cluster rect,#d-071bcc71bf56759d-light [data-look=\"neo\"].node polygon{stroke:url(#d-071bcc71bf56759d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-071bcc71bf56759d-light [data-look=\"neo\"].node path{stroke:url(#d-071bcc71bf56759d-light-gradient);stroke-width:1px;}#d-071bcc71bf56759d-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-071bcc71bf56759d-light [data-look=\"neo\"].node circle{stroke:url(#d-071bcc71bf56759d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-071bcc71bf56759d-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-071bcc71bf56759d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-071bcc71bf56759d-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-071bcc71bf56759d-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M217.945,65.875L196.462,71.896C174.979,77.917,132.013,89.958,110.53,99.479C89.047,109,89.047,116,89.047,119.5L89.047,123\" id=\"d-071bcc71bf56759d-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjE3Ljk0NTMxMjUsInkiOjY1Ljg3NTIzNDU5MDYxNjM3fSx7IngiOjg5LjA0Njg3NSwieSI6MTAyfSx7IngiOjg5LjA0Njg3NSwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-light_flowchart-v2-pointEnd)\"></path><path d=\"M301.352,77L301.352,81.167C301.352,85.333,301.352,93.667,301.352,101.333C301.352,109,301.352,116,301.352,119.5L301.352,123\" id=\"d-071bcc71bf56759d-light-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MzAxLjM1MTU2MjUsInkiOjc3fSx7IngiOjMwMS4zNTE1NjI1LCJ5IjoxMDJ9LHsieCI6MzAxLjM1MTU2MjUsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-light_flowchart-v2-pointEnd)\"></path><path d=\"M384.758,67.122L404.449,72.935C424.141,78.748,463.523,90.374,483.215,99.687C502.906,109,502.906,116,502.906,119.5L502.906,123\" id=\"d-071bcc71bf56759d-light-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6Mzg0Ljc1NzgxMjUsInkiOjY3LjEyMTk2MjA5MTU1Mzk0fSx7IngiOjUwMi45MDYyNSwieSI6MTAyfSx7IngiOjUwMi45MDYyNSwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-light_flowchart-v2-pointEnd)\"></path><path d=\"M89.047,176.5L89.047,180.667C89.047,184.833,89.047,193.167,89.047,200.833C89.047,208.5,89.047,215.5,89.047,219L89.047,222.5\" id=\"d-071bcc71bf56759d-light-L_B_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_E_0\" data-points=\"W3sieCI6ODkuMDQ2ODc1LCJ5IjoxNzYuNX0seyJ4Ijo4OS4wNDY4NzUsInkiOjIwMS41fSx7IngiOjg5LjA0Njg3NSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-light_flowchart-v2-pointEnd)\"></path><path d=\"M301.352,176.5L301.352,180.667C301.352,184.833,301.352,193.167,301.352,200.833C301.352,208.5,301.352,215.5,301.352,219L301.352,222.5\" id=\"d-071bcc71bf56759d-light-L_C_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_F_0\" data-points=\"W3sieCI6MzAxLjM1MTU2MjUsInkiOjE3Ni41fSx7IngiOjMwMS4zNTE1NjI1LCJ5IjoyMDEuNX0seyJ4IjozMDEuMzUxNTYyNSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-light_flowchart-v2-pointEnd)\"></path><path d=\"M502.906,176.5L502.906,180.667C502.906,184.833,502.906,193.167,502.906,200.833C502.906,208.5,502.906,215.5,502.906,219L502.906,222.5\" id=\"d-071bcc71bf56759d-light-L_D_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_G_0\" data-points=\"W3sieCI6NTAyLjkwNjI1LCJ5IjoxNzYuNX0seyJ4Ijo1MDIuOTA2MjUsInkiOjIwMS41fSx7IngiOjUwMi45MDYyNSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-071bcc71bf56759d-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(301.3515625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.40625\" y=\"-34.5\" width=\"166.8125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.40625, -19.5)\"><rect></rect><foreignObject width=\"106.8125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>const x = 10<br>(untyped integer)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-071bcc71bf56759d-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(89.046875, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-64\" y=\"-24.75\" width=\"128\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34, -9.75)\"><rect></rect><foreignObject width=\"68\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>var i int = x</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-071bcc71bf56759d-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(301.3515625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-79.234375\" y=\"-24.75\" width=\"158.46875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-49.234375, -9.75)\"><rect></rect><foreignObject width=\"98.46875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>var f float64 = x</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-071bcc71bf56759d-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(502.90625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.3203125\" y=\"-24.75\" width=\"144.640625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.3203125, -9.75)\"><rect></rect><foreignObject width=\"84.640625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>var b byte = x</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-071bcc71bf56759d-light-flowchart-E-7\" data-look=\"classic\" transform=\"translate(89.046875, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.046875\" y=\"-24.75\" width=\"162.09375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.046875, -9.75)\"><rect></rect><foreignObject width=\"102.09375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>int (4 or 8 bytes)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-071bcc71bf56759d-light-flowchart-F-9\" data-look=\"classic\" transform=\"translate(301.3515625, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.2578125\" y=\"-24.75\" width=\"162.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.2578125, -9.75)\"><rect></rect><foreignObject width=\"102.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>float64 (8 bytes)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-071bcc71bf56759d-light-flowchart-G-11\" data-look=\"classic\" transform=\"translate(502.90625, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.90625\" y=\"-24.75\" width=\"139.8125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.90625, -9.75)\"><rect></rect><foreignObject width=\"79.8125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>uint8 (1 byte)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-071bcc71bf56759d-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-071bcc71bf56759d-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-071bcc71bf56759d-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-071bcc71bf56759d-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 583.2265625px;\" viewBox=\"0 0 583.2265625 284\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-071bcc71bf56759d-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-071bcc71bf56759d-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-071bcc71bf56759d-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-071bcc71bf56759d-dark .error-icon{fill:rgb(21, 22, 23);}#d-071bcc71bf56759d-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-071bcc71bf56759d-dark .edge-thickness-normal{stroke-width:1px;}#d-071bcc71bf56759d-dark .edge-thickness-thick{stroke-width:3.5px;}#d-071bcc71bf56759d-dark .edge-pattern-solid{stroke-dasharray:0;}#d-071bcc71bf56759d-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-071bcc71bf56759d-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-071bcc71bf56759d-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-071bcc71bf56759d-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-071bcc71bf56759d-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-071bcc71bf56759d-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-071bcc71bf56759d-dark p{margin:0;}#d-071bcc71bf56759d-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-071bcc71bf56759d-dark .cluster-label text{fill:#eae9e8;}#d-071bcc71bf56759d-dark .cluster-label span{color:#eae9e8;}#d-071bcc71bf56759d-dark .cluster-label span p{background-color:transparent;}#d-071bcc71bf56759d-dark .label text,#d-071bcc71bf56759d-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-071bcc71bf56759d-dark .node rect,#d-071bcc71bf56759d-dark .node circle,#d-071bcc71bf56759d-dark .node ellipse,#d-071bcc71bf56759d-dark .node polygon,#d-071bcc71bf56759d-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-071bcc71bf56759d-dark .rough-node .label text,#d-071bcc71bf56759d-dark .node .label text,#d-071bcc71bf56759d-dark .image-shape .label,#d-071bcc71bf56759d-dark .icon-shape .label{text-anchor:middle;}#d-071bcc71bf56759d-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-071bcc71bf56759d-dark .rough-node .label,#d-071bcc71bf56759d-dark .node .label,#d-071bcc71bf56759d-dark .image-shape .label,#d-071bcc71bf56759d-dark .icon-shape .label{text-align:center;}#d-071bcc71bf56759d-dark .node.clickable{cursor:pointer;}#d-071bcc71bf56759d-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-071bcc71bf56759d-dark .arrowheadPath{fill:#eae9e8;}#d-071bcc71bf56759d-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-071bcc71bf56759d-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-071bcc71bf56759d-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-071bcc71bf56759d-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-071bcc71bf56759d-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-071bcc71bf56759d-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-071bcc71bf56759d-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-071bcc71bf56759d-dark .cluster text{fill:#eae9e8;}#d-071bcc71bf56759d-dark .cluster span{color:#eae9e8;}#d-071bcc71bf56759d-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-071bcc71bf56759d-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-071bcc71bf56759d-dark rect.text{fill:none;stroke-width:0;}#d-071bcc71bf56759d-dark .icon-shape,#d-071bcc71bf56759d-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-071bcc71bf56759d-dark .icon-shape p,#d-071bcc71bf56759d-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-071bcc71bf56759d-dark .icon-shape .label rect,#d-071bcc71bf56759d-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-071bcc71bf56759d-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-071bcc71bf56759d-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-071bcc71bf56759d-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-071bcc71bf56759d-dark [data-look=\"neo\"].node rect,#d-071bcc71bf56759d-dark [data-look=\"neo\"].cluster rect,#d-071bcc71bf56759d-dark [data-look=\"neo\"].node polygon{stroke:url(#d-071bcc71bf56759d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-071bcc71bf56759d-dark [data-look=\"neo\"].node path{stroke:url(#d-071bcc71bf56759d-dark-gradient);stroke-width:1px;}#d-071bcc71bf56759d-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-071bcc71bf56759d-dark [data-look=\"neo\"].node circle{stroke:url(#d-071bcc71bf56759d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-071bcc71bf56759d-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-071bcc71bf56759d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-071bcc71bf56759d-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-071bcc71bf56759d-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-071bcc71bf56759d-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M217.945,65.875L196.462,71.896C174.979,77.917,132.013,89.958,110.53,99.479C89.047,109,89.047,116,89.047,119.5L89.047,123\" id=\"d-071bcc71bf56759d-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjE3Ljk0NTMxMjUsInkiOjY1Ljg3NTIzNDU5MDYxNjM3fSx7IngiOjg5LjA0Njg3NSwieSI6MTAyfSx7IngiOjg5LjA0Njg3NSwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M301.352,77L301.352,81.167C301.352,85.333,301.352,93.667,301.352,101.333C301.352,109,301.352,116,301.352,119.5L301.352,123\" id=\"d-071bcc71bf56759d-dark-L_A_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_C_0\" data-points=\"W3sieCI6MzAxLjM1MTU2MjUsInkiOjc3fSx7IngiOjMwMS4zNTE1NjI1LCJ5IjoxMDJ9LHsieCI6MzAxLjM1MTU2MjUsInkiOjEyN31d\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M384.758,67.122L404.449,72.935C424.141,78.748,463.523,90.374,483.215,99.687C502.906,109,502.906,116,502.906,119.5L502.906,123\" id=\"d-071bcc71bf56759d-dark-L_A_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_D_0\" data-points=\"W3sieCI6Mzg0Ljc1NzgxMjUsInkiOjY3LjEyMTk2MjA5MTU1Mzk0fSx7IngiOjUwMi45MDYyNSwieSI6MTAyfSx7IngiOjUwMi45MDYyNSwieSI6MTI3fV0=\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M89.047,176.5L89.047,180.667C89.047,184.833,89.047,193.167,89.047,200.833C89.047,208.5,89.047,215.5,89.047,219L89.047,222.5\" id=\"d-071bcc71bf56759d-dark-L_B_E_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_E_0\" data-points=\"W3sieCI6ODkuMDQ2ODc1LCJ5IjoxNzYuNX0seyJ4Ijo4OS4wNDY4NzUsInkiOjIwMS41fSx7IngiOjg5LjA0Njg3NSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M301.352,176.5L301.352,180.667C301.352,184.833,301.352,193.167,301.352,200.833C301.352,208.5,301.352,215.5,301.352,219L301.352,222.5\" id=\"d-071bcc71bf56759d-dark-L_C_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_F_0\" data-points=\"W3sieCI6MzAxLjM1MTU2MjUsInkiOjE3Ni41fSx7IngiOjMwMS4zNTE1NjI1LCJ5IjoyMDEuNX0seyJ4IjozMDEuMzUxNTYyNSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-dark_flowchart-v2-pointEnd)\"></path><path d=\"M502.906,176.5L502.906,180.667C502.906,184.833,502.906,193.167,502.906,200.833C502.906,208.5,502.906,215.5,502.906,219L502.906,222.5\" id=\"d-071bcc71bf56759d-dark-L_D_G_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_G_0\" data-points=\"W3sieCI6NTAyLjkwNjI1LCJ5IjoxNzYuNX0seyJ4Ijo1MDIuOTA2MjUsInkiOjIwMS41fSx7IngiOjUwMi45MDYyNSwieSI6MjI2LjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-071bcc71bf56759d-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-071bcc71bf56759d-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(301.3515625, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.40625\" y=\"-34.5\" width=\"166.8125\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.40625, -19.5)\"><rect></rect><foreignObject width=\"106.8125\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>const x = 10<br>(untyped integer)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-071bcc71bf56759d-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(89.046875, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-64\" y=\"-24.75\" width=\"128\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34, -9.75)\"><rect></rect><foreignObject width=\"68\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>var i int = x</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-071bcc71bf56759d-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(301.3515625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-79.234375\" y=\"-24.75\" width=\"158.46875\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-49.234375, -9.75)\"><rect></rect><foreignObject width=\"98.46875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>var f float64 = x</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-071bcc71bf56759d-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(502.90625, 151.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-72.3203125\" y=\"-24.75\" width=\"144.640625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-42.3203125, -9.75)\"><rect></rect><foreignObject width=\"84.640625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>var b byte = x</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-071bcc71bf56759d-dark-flowchart-E-7\" data-look=\"classic\" transform=\"translate(89.046875, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.046875\" y=\"-24.75\" width=\"162.09375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.046875, -9.75)\"><rect></rect><foreignObject width=\"102.09375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>int (4 or 8 bytes)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-071bcc71bf56759d-dark-flowchart-F-9\" data-look=\"classic\" transform=\"translate(301.3515625, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-81.2578125\" y=\"-24.75\" width=\"162.515625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-51.2578125, -9.75)\"><rect></rect><foreignObject width=\"102.515625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>float64 (8 bytes)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-071bcc71bf56759d-dark-flowchart-G-11\" data-look=\"classic\" transform=\"translate(502.90625, 251.25)\"><rect class=\"basic label-container\" style=\"\" x=\"-69.90625\" y=\"-24.75\" width=\"139.8125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-39.90625, -9.75)\"><rect></rect><foreignObject width=\"79.8125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>uint8 (1 byte)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-071bcc71bf56759d-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-071bcc71bf56759d-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-071bcc71bf56759d-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<p>Untyped constants allow mixing numeric literals without explicit type conversions, provided the values are representable without precision loss:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> a</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1.5</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // untyped float</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> b</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 2</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">   // untyped int</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> result</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> a </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">*</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> b </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// result is untyped float (3.0)</span></span></code></pre></div>\n<h2 id=\"high-precision-compile-time-arithmetic\">High-Precision Compile-Time Arithmetic<a class=\"h-anchor\" href=\"#high-precision-compile-time-arithmetic\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The Go language specification (§Constants) mandates that numeric constants represent exact values of high precision:</p>\n<ul>\n<li>Integer constants must have <strong>at least 256 bits</strong> of precision.</li>\n<li>Floating-point constants must have <strong>at least 256 bits of mantissa</strong> and a 16-bit signed exponent.</li>\n</ul>\n<p>The Go compiler (<code>gc</code>) evaluates constant expressions using multi-precision math at compile time. You can compute with numbers that far exceed the limits of <code>int64</code> or <code>float64</code>:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Exact 512-bit intermediate representation at compile time</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    largeA</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &lt;&lt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 100</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    largeB</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> largeA </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">&gt;&gt;</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 90</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // 1 &lt;&lt; 10 = 1024</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">var</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> count </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> largeB </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Valid: 1024 fits in standard int</span></span></code></pre></div>\n<p>If you attempt to assign <code>largeA</code> directly to an <code>int64</code>, compilation fails with <code>constant 1267650600228229401496703205376 overflows int64</code>.</p>\n<h2 id=\"typed-constants-and-iota-bitmasks\">Typed Constants and <code>iota</code> Bitmasks<a class=\"h-anchor\" href=\"#typed-constants-and-iota-bitmasks\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The <code>iota</code> identifier represents successive untyped integer constants starting at <code>0</code> within a constant block. It is especially powerful for declaring bitwise flags and binary byte magnitudes:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> ByteSize</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> uint64</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    _</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">           =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> iota</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // ignore first value (0)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    KB</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> ByteSize</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> &lt;&lt;</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> (</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">10</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> *</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> iota</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 1 &lt;&lt; 10 = 1024</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    MB</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">                             // 1 &lt;&lt; 20 = 1048576</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    GB</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">                             // 1 &lt;&lt; 30 = 1073741824</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">    TB</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">                             // 1 &lt;&lt; 40 = 1099511627776</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)</span></span></code></pre></div>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"1baaec5329fe668b\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-1baaec5329fe668b-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 453.015625px;\" viewBox=\"0 0 453.015625 442\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-1baaec5329fe668b-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-1baaec5329fe668b-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-1baaec5329fe668b-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-1baaec5329fe668b-light .error-icon{fill:rgb(255, 255, 255);}#d-1baaec5329fe668b-light .error-text{fill:#000000;stroke:#000000;}#d-1baaec5329fe668b-light .edge-thickness-normal{stroke-width:1px;}#d-1baaec5329fe668b-light .edge-thickness-thick{stroke-width:3.5px;}#d-1baaec5329fe668b-light .edge-pattern-solid{stroke-dasharray:0;}#d-1baaec5329fe668b-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-1baaec5329fe668b-light .edge-pattern-dashed{stroke-dasharray:3;}#d-1baaec5329fe668b-light .edge-pattern-dotted{stroke-dasharray:2;}#d-1baaec5329fe668b-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-1baaec5329fe668b-light .marker.cross{stroke:rgb(44, 46, 48);}#d-1baaec5329fe668b-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-1baaec5329fe668b-light p{margin:0;}#d-1baaec5329fe668b-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-1baaec5329fe668b-light .cluster-label text{fill:#000000;}#d-1baaec5329fe668b-light .cluster-label span{color:#000000;}#d-1baaec5329fe668b-light .cluster-label span p{background-color:transparent;}#d-1baaec5329fe668b-light .label text,#d-1baaec5329fe668b-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-1baaec5329fe668b-light .node rect,#d-1baaec5329fe668b-light .node circle,#d-1baaec5329fe668b-light .node ellipse,#d-1baaec5329fe668b-light .node polygon,#d-1baaec5329fe668b-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-1baaec5329fe668b-light .rough-node .label text,#d-1baaec5329fe668b-light .node .label text,#d-1baaec5329fe668b-light .image-shape .label,#d-1baaec5329fe668b-light .icon-shape .label{text-anchor:middle;}#d-1baaec5329fe668b-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-1baaec5329fe668b-light .rough-node .label,#d-1baaec5329fe668b-light .node .label,#d-1baaec5329fe668b-light .image-shape .label,#d-1baaec5329fe668b-light .icon-shape .label{text-align:center;}#d-1baaec5329fe668b-light .node.clickable{cursor:pointer;}#d-1baaec5329fe668b-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-1baaec5329fe668b-light .arrowheadPath{fill:#000000;}#d-1baaec5329fe668b-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-1baaec5329fe668b-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-1baaec5329fe668b-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-1baaec5329fe668b-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-1baaec5329fe668b-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-1baaec5329fe668b-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-1baaec5329fe668b-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-1baaec5329fe668b-light .cluster text{fill:#000000;}#d-1baaec5329fe668b-light .cluster span{color:#000000;}#d-1baaec5329fe668b-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-1baaec5329fe668b-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-1baaec5329fe668b-light rect.text{fill:none;stroke-width:0;}#d-1baaec5329fe668b-light .icon-shape,#d-1baaec5329fe668b-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-1baaec5329fe668b-light .icon-shape p,#d-1baaec5329fe668b-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-1baaec5329fe668b-light .icon-shape .label rect,#d-1baaec5329fe668b-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-1baaec5329fe668b-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-1baaec5329fe668b-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-1baaec5329fe668b-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-1baaec5329fe668b-light [data-look=\"neo\"].node rect,#d-1baaec5329fe668b-light [data-look=\"neo\"].cluster rect,#d-1baaec5329fe668b-light [data-look=\"neo\"].node polygon{stroke:url(#d-1baaec5329fe668b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-1baaec5329fe668b-light [data-look=\"neo\"].node path{stroke:url(#d-1baaec5329fe668b-light-gradient);stroke-width:1px;}#d-1baaec5329fe668b-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-1baaec5329fe668b-light [data-look=\"neo\"].node circle{stroke:url(#d-1baaec5329fe668b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-1baaec5329fe668b-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-1baaec5329fe668b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-1baaec5329fe668b-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-1baaec5329fe668b-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M178.156,42.5L182.323,42.5C186.49,42.5,194.823,42.5,209.853,42.5C224.883,42.5,246.609,42.5,257.473,42.5L268.336,42.5\" id=\"d-1baaec5329fe668b-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTc4LjE1NjI1LCJ5Ijo0Mi41fSx7IngiOjIwMy4xNTYyNSwieSI6NDIuNX0seyJ4IjoyNzIuMzM1OTM3NSwieSI6NDIuNX1d\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-light_flowchart-v2-pointEnd)\"></path><path d=\"M144.961,161.5L154.66,161.5C164.359,161.5,183.758,161.5,201.328,161.5C218.898,161.5,234.641,161.5,242.512,161.5L250.383,161.5\" id=\"d-1baaec5329fe668b-light-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTQ0Ljk2MDkzNzUsInkiOjE2MS41fSx7IngiOjIwMy4xNTYyNSwieSI6MTYxLjV9LHsieCI6MjU0LjM4MjgxMjUsInkiOjE2MS41fV0=\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-light_flowchart-v2-pointEnd)\"></path><path d=\"M146.281,280.5L155.76,280.5C165.24,280.5,184.198,280.5,199.118,280.5C214.039,280.5,224.922,280.5,230.363,280.5L235.805,280.5\" id=\"d-1baaec5329fe668b-light-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTQ2LjI4MTI1LCJ5IjoyODAuNX0seyJ4IjoyMDMuMTU2MjUsInkiOjI4MC41fSx7IngiOjIzOS44MDQ2ODc1LCJ5IjoyODAuNX1d\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-light_flowchart-v2-pointEnd)\"></path><path d=\"M146.336,399.5L155.806,399.5C165.276,399.5,184.216,399.5,197.186,399.5C210.156,399.5,217.156,399.5,220.656,399.5L224.156,399.5\" id=\"d-1baaec5329fe668b-light-L_G_H_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_H_0\" data-points=\"W3sieCI6MTQ2LjMzNTkzNzUsInkiOjM5OS41fSx7IngiOjIwMy4xNTYyNSwieSI6Mzk5LjV9LHsieCI6MjI4LjE1NjI1LCJ5IjozOTkuNX1d\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_H_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-slow \" id=\"d-1baaec5329fe668b-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(93.078125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-85.078125\" y=\"-34.5\" width=\"170.15625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-55.078125, -19.5)\"><rect></rect><foreignObject width=\"110.15625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 0<br>(blank identifier _)</p></span></div></foreignObject></g></g><g class=\"node default diag-slow \" id=\"d-1baaec5329fe668b-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(336.5859375, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.25\" y=\"-24.75\" width=\"128.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.25, -9.75)\"><rect></rect><foreignObject width=\"68.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Ignored (0)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-1baaec5329fe668b-light-flowchart-C-2\" data-look=\"classic\" transform=\"translate(93.078125, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-51.8828125\" y=\"-34.5\" width=\"103.765625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-21.8828125, -19.5)\"><rect></rect><foreignObject width=\"43.765625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 1<br>(KB)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-1baaec5329fe668b-light-flowchart-D-3\" data-look=\"classic\" transform=\"translate(336.5859375, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.203125\" y=\"-24.75\" width=\"164.40625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.203125, -9.75)\"><rect></rect><foreignObject width=\"104.40625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 &lt;&lt; 10 = 1,024 B</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1baaec5329fe668b-light-flowchart-E-4\" data-look=\"classic\" transform=\"translate(93.078125, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.203125\" y=\"-34.5\" width=\"106.40625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.203125, -19.5)\"><rect></rect><foreignObject width=\"46.40625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 2<br>(MB)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1baaec5329fe668b-light-flowchart-F-5\" data-look=\"classic\" transform=\"translate(336.5859375, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.78125\" y=\"-24.75\" width=\"193.5625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.78125, -9.75)\"><rect></rect><foreignObject width=\"133.5625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 &lt;&lt; 20 = 1,048,576 B</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-1baaec5329fe668b-light-flowchart-G-6\" data-look=\"classic\" transform=\"translate(93.078125, 399.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.2578125\" y=\"-34.5\" width=\"106.515625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.2578125, -19.5)\"><rect></rect><foreignObject width=\"46.515625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 3<br>(GB)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-1baaec5329fe668b-light-flowchart-H-7\" data-look=\"classic\" transform=\"translate(336.5859375, 399.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.4296875\" y=\"-24.75\" width=\"216.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.4296875, -9.75)\"><rect></rect><foreignObject width=\"156.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 &lt;&lt; 30 = 1,073,741,824 B</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-1baaec5329fe668b-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-1baaec5329fe668b-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-1baaec5329fe668b-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-1baaec5329fe668b-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 453.015625px;\" viewBox=\"0 0 453.015625 442\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-1baaec5329fe668b-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-1baaec5329fe668b-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-1baaec5329fe668b-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-1baaec5329fe668b-dark .error-icon{fill:rgb(21, 22, 23);}#d-1baaec5329fe668b-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-1baaec5329fe668b-dark .edge-thickness-normal{stroke-width:1px;}#d-1baaec5329fe668b-dark .edge-thickness-thick{stroke-width:3.5px;}#d-1baaec5329fe668b-dark .edge-pattern-solid{stroke-dasharray:0;}#d-1baaec5329fe668b-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-1baaec5329fe668b-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-1baaec5329fe668b-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-1baaec5329fe668b-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-1baaec5329fe668b-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-1baaec5329fe668b-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-1baaec5329fe668b-dark p{margin:0;}#d-1baaec5329fe668b-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-1baaec5329fe668b-dark .cluster-label text{fill:#eae9e8;}#d-1baaec5329fe668b-dark .cluster-label span{color:#eae9e8;}#d-1baaec5329fe668b-dark .cluster-label span p{background-color:transparent;}#d-1baaec5329fe668b-dark .label text,#d-1baaec5329fe668b-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-1baaec5329fe668b-dark .node rect,#d-1baaec5329fe668b-dark .node circle,#d-1baaec5329fe668b-dark .node ellipse,#d-1baaec5329fe668b-dark .node polygon,#d-1baaec5329fe668b-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-1baaec5329fe668b-dark .rough-node .label text,#d-1baaec5329fe668b-dark .node .label text,#d-1baaec5329fe668b-dark .image-shape .label,#d-1baaec5329fe668b-dark .icon-shape .label{text-anchor:middle;}#d-1baaec5329fe668b-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-1baaec5329fe668b-dark .rough-node .label,#d-1baaec5329fe668b-dark .node .label,#d-1baaec5329fe668b-dark .image-shape .label,#d-1baaec5329fe668b-dark .icon-shape .label{text-align:center;}#d-1baaec5329fe668b-dark .node.clickable{cursor:pointer;}#d-1baaec5329fe668b-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-1baaec5329fe668b-dark .arrowheadPath{fill:#eae9e8;}#d-1baaec5329fe668b-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-1baaec5329fe668b-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-1baaec5329fe668b-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-1baaec5329fe668b-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-1baaec5329fe668b-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-1baaec5329fe668b-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-1baaec5329fe668b-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-1baaec5329fe668b-dark .cluster text{fill:#eae9e8;}#d-1baaec5329fe668b-dark .cluster span{color:#eae9e8;}#d-1baaec5329fe668b-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-1baaec5329fe668b-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-1baaec5329fe668b-dark rect.text{fill:none;stroke-width:0;}#d-1baaec5329fe668b-dark .icon-shape,#d-1baaec5329fe668b-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-1baaec5329fe668b-dark .icon-shape p,#d-1baaec5329fe668b-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-1baaec5329fe668b-dark .icon-shape .label rect,#d-1baaec5329fe668b-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-1baaec5329fe668b-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-1baaec5329fe668b-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-1baaec5329fe668b-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-1baaec5329fe668b-dark [data-look=\"neo\"].node rect,#d-1baaec5329fe668b-dark [data-look=\"neo\"].cluster rect,#d-1baaec5329fe668b-dark [data-look=\"neo\"].node polygon{stroke:url(#d-1baaec5329fe668b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-1baaec5329fe668b-dark [data-look=\"neo\"].node path{stroke:url(#d-1baaec5329fe668b-dark-gradient);stroke-width:1px;}#d-1baaec5329fe668b-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-1baaec5329fe668b-dark [data-look=\"neo\"].node circle{stroke:url(#d-1baaec5329fe668b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-1baaec5329fe668b-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-1baaec5329fe668b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-1baaec5329fe668b-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-1baaec5329fe668b-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-1baaec5329fe668b-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M178.156,42.5L182.323,42.5C186.49,42.5,194.823,42.5,209.853,42.5C224.883,42.5,246.609,42.5,257.473,42.5L268.336,42.5\" id=\"d-1baaec5329fe668b-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTc4LjE1NjI1LCJ5Ijo0Mi41fSx7IngiOjIwMy4xNTYyNSwieSI6NDIuNX0seyJ4IjoyNzIuMzM1OTM3NSwieSI6NDIuNX1d\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-dark_flowchart-v2-pointEnd)\"></path><path d=\"M144.961,161.5L154.66,161.5C164.359,161.5,183.758,161.5,201.328,161.5C218.898,161.5,234.641,161.5,242.512,161.5L250.383,161.5\" id=\"d-1baaec5329fe668b-dark-L_C_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTQ0Ljk2MDkzNzUsInkiOjE2MS41fSx7IngiOjIwMy4xNTYyNSwieSI6MTYxLjV9LHsieCI6MjU0LjM4MjgxMjUsInkiOjE2MS41fV0=\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-dark_flowchart-v2-pointEnd)\"></path><path d=\"M146.281,280.5L155.76,280.5C165.24,280.5,184.198,280.5,199.118,280.5C214.039,280.5,224.922,280.5,230.363,280.5L235.805,280.5\" id=\"d-1baaec5329fe668b-dark-L_E_F_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTQ2LjI4MTI1LCJ5IjoyODAuNX0seyJ4IjoyMDMuMTU2MjUsInkiOjI4MC41fSx7IngiOjIzOS44MDQ2ODc1LCJ5IjoyODAuNX1d\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-dark_flowchart-v2-pointEnd)\"></path><path d=\"M146.336,399.5L155.806,399.5C165.276,399.5,184.216,399.5,197.186,399.5C210.156,399.5,217.156,399.5,220.656,399.5L224.156,399.5\" id=\"d-1baaec5329fe668b-dark-L_G_H_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_H_0\" data-points=\"W3sieCI6MTQ2LjMzNTkzNzUsInkiOjM5OS41fSx7IngiOjIwMy4xNTYyNSwieSI6Mzk5LjV9LHsieCI6MjI4LjE1NjI1LCJ5IjozOTkuNX1d\" data-look=\"classic\" marker-end=\"url(#d-1baaec5329fe668b-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_H_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-slow \" id=\"d-1baaec5329fe668b-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(93.078125, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-85.078125\" y=\"-34.5\" width=\"170.15625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-55.078125, -19.5)\"><rect></rect><foreignObject width=\"110.15625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 0<br>(blank identifier _)</p></span></div></foreignObject></g></g><g class=\"node default diag-slow \" id=\"d-1baaec5329fe668b-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(336.5859375, 42.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-64.25\" y=\"-24.75\" width=\"128.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-34.25, -9.75)\"><rect></rect><foreignObject width=\"68.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Ignored (0)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-1baaec5329fe668b-dark-flowchart-C-2\" data-look=\"classic\" transform=\"translate(93.078125, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-51.8828125\" y=\"-34.5\" width=\"103.765625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-21.8828125, -19.5)\"><rect></rect><foreignObject width=\"43.765625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 1<br>(KB)</p></span></div></foreignObject></g></g><g class=\"node default diag-ingress \" id=\"d-1baaec5329fe668b-dark-flowchart-D-3\" data-look=\"classic\" transform=\"translate(336.5859375, 161.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.203125\" y=\"-24.75\" width=\"164.40625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.203125, -9.75)\"><rect></rect><foreignObject width=\"104.40625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 &lt;&lt; 10 = 1,024 B</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1baaec5329fe668b-dark-flowchart-E-4\" data-look=\"classic\" transform=\"translate(93.078125, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.203125\" y=\"-34.5\" width=\"106.40625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.203125, -19.5)\"><rect></rect><foreignObject width=\"46.40625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 2<br>(MB)</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-1baaec5329fe668b-dark-flowchart-F-5\" data-look=\"classic\" transform=\"translate(336.5859375, 280.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-96.78125\" y=\"-24.75\" width=\"193.5625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-66.78125, -9.75)\"><rect></rect><foreignObject width=\"133.5625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 &lt;&lt; 20 = 1,048,576 B</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-1baaec5329fe668b-dark-flowchart-G-6\" data-look=\"classic\" transform=\"translate(93.078125, 399.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-53.2578125\" y=\"-34.5\" width=\"106.515625\" height=\"69\"></rect><g class=\"label\" style=\"\" transform=\"translate(-23.2578125, -19.5)\"><rect></rect><foreignObject width=\"46.515625\" height=\"39\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>iota = 3<br>(GB)</p></span></div></foreignObject></g></g><g class=\"node default diag-storage \" id=\"d-1baaec5329fe668b-dark-flowchart-H-7\" data-look=\"classic\" transform=\"translate(336.5859375, 399.5)\"><rect class=\"basic label-container\" style=\"\" x=\"-108.4296875\" y=\"-24.75\" width=\"216.859375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-78.4296875, -9.75)\"><rect></rect><foreignObject width=\"156.859375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>1 &lt;&lt; 30 = 1,073,741,824 B</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-1baaec5329fe668b-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-1baaec5329fe668b-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-1baaec5329fe668b-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"compile-time-dead-code-elimination\">Compile-Time Dead-Code Elimination<a class=\"h-anchor\" href=\"#compile-time-dead-code-elimination\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Because constant expressions are evaluated during compilation, constant boolean guards in <code>if</code> statements allow zero-cost conditional compilation:</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> EnableMetrics</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> false</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> RecordMetric</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">name</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> string</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">, </span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">val</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> float64</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">    if</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> !</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">EnableMetrics {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">        return</span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\"> // Compiler eliminates all subsequent code in this block</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">    pushToCollector</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(name, val)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>When <code>EnableMetrics</code> is <code>false</code>, the compiler’s SSA backend optimizes away the <code>pushToCollector</code> call entirely, reducing final binary size and removing branches without runtime overhead.</p>\n<h2 id=\"constant-expression-built-ins\">Constant Expression Built-Ins<a class=\"h-anchor\" href=\"#constant-expression-built-ins\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Under the Go specification, only specific built-in functions can be evaluated in constant expressions:</p>\n<ul>\n<li><code>len</code> and <code>cap</code> (when applied to strings, arrays, or array pointers)</li>\n<li><code>real</code>, <code>imag</code>, and <code>complex</code> (for complex numbers)</li>\n<li><code>min</code> and <code>max</code> (introduced in Go 1.21, valid when all arguments are constants)</li>\n<li><code>unsafe.Sizeof</code>, <code>unsafe.Alignof</code>, and <code>unsafe.Offsetof</code></li>\n</ul>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> bufferLen</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 128</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> maxCapacity</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> max</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(bufferLen, </span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">256</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Compile-time constant (256)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">const</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> ptrSize</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> =</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> unsafe.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Sizeof</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">uintptr</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\">0</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">)) </span><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// 8 on 64-bit platforms</span></span></code></pre></div>\n<p>Standard library functions like <code>math.Sqrt</code> or <code>math.Pow</code> cannot be used in constant declarations because they execute runtime code.</p>\n<h2 id=\"language-invariants\">Language Invariants<a class=\"h-anchor\" href=\"#language-invariants\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Constants have no memory address</strong>: You cannot take the address of a constant (<code>&amp;x</code> is invalid). Constants are inlined as literals or registers directly in compiled machine instructions.</li>\n<li><strong>Untyped string literals are UTF-8</strong>: String constants represent immutable byte sequences guaranteed to be valid UTF-8 source code representations.</li>\n<li><strong>No runtime overhead</strong>: Constant folding and arithmetic evaluation happen entirely during compiler passes, incurring zero CPU cycles at application runtime.</li>\n</ol>\n"
    },
    {
      "id": "https://ashwingopalsamy.in/blog/go-utf8-identifier-limitation/",
      "url": "https://ashwingopalsamy.in/blog/go-utf8-identifier-limitation/",
      "title": "Go's UTF-8 Identifier Limitation",
      "content_text": "Why Go identifiers support Chinese but reject Indic scripts: Go Spec §Identifiers vs Unicode UAX #31, and exportability rules.",
      "date_published": "2024-11-12T00:00:00.000Z",
      "tags": [
        "notes"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ],
      "content_html": "<p>Go source files are UTF-8 encoded by definition, and the language allows Unicode characters in variable, type, and function names.</p>\n<p>However, while standalone ideographic scripts (like Chinese or Japanese Hanzi/Kanji) compile without issues, abugida scripts (including Tamil, Hindi, Telugu, and Thai) trigger compiler errors when writing natural words.</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\">fmt</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\">\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">func</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\"> main</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">() {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Compiles cleanly: Chinese Hanzi belongs to category Lo (Letter, Other)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    消息 </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0A3069;--shiki-dark:#A5D6FF\"> \"Hello, World!\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(消息)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // Fails to compile: Tamil syllable contains combining mark U+0BCD</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">    // ./main.go:10:5: invalid character U+0BCD '்' in identifier</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    எண்ணிக்கை </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">:=</span><span style=\"--shiki-light:#0550AE;--shiki-dark:#79C0FF\"> 42</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    fmt.</span><span style=\"--shiki-light:#8250DF;--shiki-dark:#D2A8FF\">Println</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">(எண்ணிக்கை)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<h2 id=\"go-spec-identifiers-vs-unicode-general-categories\">Go Spec §Identifiers vs Unicode General Categories<a class=\"h-anchor\" href=\"#go-spec-identifiers-vs-unicode-general-categories\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>The Go language specification (§Identifiers) strictly defines valid identifier characters using Unicode General Categories:</p>\n<div class=\"code-figure\" data-language=\"plaintext\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\"><code><span class=\"line\"><span>identifier     = letter { letter | unicode_digit } .</span></span>\n<span class=\"line\"><span>letter         = unicode_letter | \"_\" .</span></span>\n<span class=\"line\"><span>unicode_letter = /* a Unicode code point categorized as Lu, Ll, Lt, Lm, or Lo */ .</span></span></code></pre></div>\n<p>The allowed categories are:</p>\n<ul>\n<li><code>Lu</code>: Uppercase Letter (e.g. Latin, Greek, Cyrillic)</li>\n<li><code>Ll</code>: Lowercase Letter</li>\n<li><code>Lt</code>: Titlecase Letter</li>\n<li><code>Lm</code>: Modifier Letter</li>\n<li><code>Lo</code>: Other Letter (e.g. Chinese <code>消</code>, Tamil base consonant <code>எ</code>)</li>\n</ul>\n<figure class=\"diagram is-enhanced is-rendered\" data-diagram data-diagram-key=\"e7c9cb0abb1c9ab4\" data-prerendered><div class=\"diagram-canvas\" role=\"img\" aria-label=\"Mermaid diagram\"><svg data-variant=\"light\" id=\"d-e7c9cb0abb1c9ab4-light\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1026.359375px;\" viewBox=\"0 0 1026.359375 405.03125\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-e7c9cb0abb1c9ab4-light{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(21, 22, 23);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-e7c9cb0abb1c9ab4-light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-e7c9cb0abb1c9ab4-light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-e7c9cb0abb1c9ab4-light .error-icon{fill:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-light .error-text{fill:#000000;stroke:#000000;}#d-e7c9cb0abb1c9ab4-light .edge-thickness-normal{stroke-width:1px;}#d-e7c9cb0abb1c9ab4-light .edge-thickness-thick{stroke-width:3.5px;}#d-e7c9cb0abb1c9ab4-light .edge-pattern-solid{stroke-dasharray:0;}#d-e7c9cb0abb1c9ab4-light .edge-thickness-invisible{stroke-width:0;fill:none;}#d-e7c9cb0abb1c9ab4-light .edge-pattern-dashed{stroke-dasharray:3;}#d-e7c9cb0abb1c9ab4-light .edge-pattern-dotted{stroke-dasharray:2;}#d-e7c9cb0abb1c9ab4-light .marker{fill:rgb(44, 46, 48);stroke:rgb(44, 46, 48);}#d-e7c9cb0abb1c9ab4-light .marker.cross{stroke:rgb(44, 46, 48);}#d-e7c9cb0abb1c9ab4-light svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-e7c9cb0abb1c9ab4-light p{margin:0;}#d-e7c9cb0abb1c9ab4-light .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-light .cluster-label text{fill:#000000;}#d-e7c9cb0abb1c9ab4-light .cluster-label span{color:#000000;}#d-e7c9cb0abb1c9ab4-light .cluster-label span p{background-color:transparent;}#d-e7c9cb0abb1c9ab4-light .label text,#d-e7c9cb0abb1c9ab4-light span{fill:rgb(21, 22, 23);color:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-light .node rect,#d-e7c9cb0abb1c9ab4-light .node circle,#d-e7c9cb0abb1c9ab4-light .node ellipse,#d-e7c9cb0abb1c9ab4-light .node polygon,#d-e7c9cb0abb1c9ab4-light .node path{fill:rgb(255, 255, 255);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-light .rough-node .label text,#d-e7c9cb0abb1c9ab4-light .node .label text,#d-e7c9cb0abb1c9ab4-light .image-shape .label,#d-e7c9cb0abb1c9ab4-light .icon-shape .label{text-anchor:middle;}#d-e7c9cb0abb1c9ab4-light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-e7c9cb0abb1c9ab4-light .rough-node .label,#d-e7c9cb0abb1c9ab4-light .node .label,#d-e7c9cb0abb1c9ab4-light .image-shape .label,#d-e7c9cb0abb1c9ab4-light .icon-shape .label{text-align:center;}#d-e7c9cb0abb1c9ab4-light .node.clickable{cursor:pointer;}#d-e7c9cb0abb1c9ab4-light .root .anchor path{fill:rgb(44, 46, 48)!important;stroke-width:0;stroke:rgb(44, 46, 48);}#d-e7c9cb0abb1c9ab4-light .arrowheadPath{fill:#000000;}#d-e7c9cb0abb1c9ab4-light .edgePath .path{stroke:rgb(44, 46, 48);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-light .flowchart-link{stroke:rgb(44, 46, 48);fill:none;}#d-e7c9cb0abb1c9ab4-light .edgeLabel{background-color:rgb(255, 255, 255);text-align:center;}#d-e7c9cb0abb1c9ab4-light .edgeLabel p{background-color:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-light .edgeLabel rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-light .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#d-e7c9cb0abb1c9ab4-light .cluster rect{fill:rgb(220, 222, 224);stroke:rgb(203, 206, 208);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-light .cluster text{fill:#000000;}#d-e7c9cb0abb1c9ab4-light .cluster span{color:#000000;}#d-e7c9cb0abb1c9ab4-light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#d-e7c9cb0abb1c9ab4-light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-light rect.text{fill:none;stroke-width:0;}#d-e7c9cb0abb1c9ab4-light .icon-shape,#d-e7c9cb0abb1c9ab4-light .image-shape{background-color:rgb(255, 255, 255);text-align:center;}#d-e7c9cb0abb1c9ab4-light .icon-shape p,#d-e7c9cb0abb1c9ab4-light .image-shape p{background-color:rgb(255, 255, 255);padding:2px;}#d-e7c9cb0abb1c9ab4-light .icon-shape .label rect,#d-e7c9cb0abb1c9ab4-light .image-shape .label rect{opacity:0.5;background-color:rgb(255, 255, 255);fill:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-e7c9cb0abb1c9ab4-light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-e7c9cb0abb1c9ab4-light .node .neo-node{stroke:rgb(203, 206, 208);}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node rect,#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].cluster rect,#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node polygon{stroke:url(#d-e7c9cb0abb1c9ab4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node path{stroke:url(#d-e7c9cb0abb1c9ab4-light-gradient);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node .neo-line path{stroke:rgb(203, 206, 208);filter:none;}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node circle{stroke:url(#d-e7c9cb0abb1c9ab4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].icon-shape .icon{fill:url(#d-e7c9cb0abb1c9ab4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-light [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-e7c9cb0abb1c9ab4-light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-light :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-light_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M898.656,57.5L898.656,61.667C898.656,65.833,898.656,74.167,898.656,81.833C898.656,89.5,898.656,96.5,898.656,100L898.656,103.5\" id=\"d-e7c9cb0abb1c9ab4-light-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6ODk4LjY1NjI1LCJ5Ijo1Ny41fSx7IngiOjg5OC42NTYyNSwieSI6ODIuNX0seyJ4Ijo4OTguNjU2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd)\"></path><path d=\"M833.399,212.774L779.035,229.442C724.672,246.11,615.945,279.445,549.521,301.628C483.096,323.81,458.973,334.839,446.912,340.354L434.85,345.868\" id=\"d-e7c9cb0abb1c9ab4-light-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6ODMzLjM5ODcyODkyMDM1NTYsInkiOjIxMi43NzM3Mjg5MjAzNTU2fSx7IngiOjUwNy4yMTg3NSwieSI6MzEyLjc4MTI1fSx7IngiOjQzMS4yMTIyNTA1MjUyMTAxLCJ5IjozNDcuNTMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd)\"></path><path d=\"M898.656,278.031L898.656,283.823C898.656,289.615,898.656,301.198,898.656,312.115C898.656,323.031,898.656,333.281,898.656,338.406L898.656,343.531\" id=\"d-e7c9cb0abb1c9ab4-light-L_B_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6ODk4LjY1NjI1LCJ5IjoyNzguMDMxMjV9LHsieCI6ODk4LjY1NjI1LCJ5IjozMTIuNzgxMjV9LHsieCI6ODk4LjY1NjI1LCJ5IjozNDcuNTMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd)\"></path><path d=\"M377.078,217.516L377.078,233.393C377.078,249.271,377.078,281.026,377.078,302.029C377.078,323.031,377.078,333.281,377.078,338.406L377.078,343.531\" id=\"d-e7c9cb0abb1c9ab4-light-L_C1_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C1_C_0\" data-points=\"W3sieCI6Mzc3LjA3ODEyNSwieSI6MjE3LjUxNTYyNX0seyJ4IjozNzcuMDc4MTI1LCJ5IjozMTIuNzgxMjV9LHsieCI6Mzc3LjA3ODEyNSwieSI6MzQ3LjUzMTI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd)\"></path><path d=\"M125.414,217.516L125.414,233.393C125.414,249.271,125.414,281.026,150.959,302.943C176.505,324.86,227.595,336.94,253.14,342.979L278.685,349.019\" id=\"d-e7c9cb0abb1c9ab4-light-L_C2_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C2_C_0\" data-points=\"W3sieCI6MTI1LjQxNDA2MjUsInkiOjIxNy41MTU2MjV9LHsieCI6MTI1LjQxNDA2MjUsInkiOjMxMi43ODEyNX0seyJ4IjoyODIuNTc4MTI1LCJ5IjozNDkuOTM4OTY1ODI5MDEzMX1d\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd)\"></path><path d=\"M637.359,217.516L637.359,233.393C637.359,249.271,637.359,281.026,662.144,302.547C686.928,324.069,736.497,335.356,761.281,340.999L786.065,346.643\" id=\"d-e7c9cb0abb1c9ab4-light-L_C3_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C3_D_0\" data-points=\"W3sieCI6NjM3LjM1OTM3NSwieSI6MjE3LjUxNTYyNX0seyJ4Ijo2MzcuMzU5Mzc1LCJ5IjozMTIuNzgxMjV9LHsieCI6Nzg5Ljk2NTUzMzA4ODIzNTIsInkiOjM0Ny41MzEyNX1d\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-light_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(630.35756, 275.02661)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-50.171875, -9.75)\"><foreignObject width=\"100.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Lu, Ll, Lt, Lm, Lo</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(898.65625, 312.78125)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-96.9609375, -9.75)\"><foreignObject width=\"193.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Mn, Mc, Me (Combining Marks)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C1_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C2_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C3_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-A-0\" data-look=\"classic\" transform=\"translate(898.65625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.3046875\" y=\"-24.75\" width=\"178.609375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.3046875, -9.75)\"><rect></rect><foreignObject width=\"118.609375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Go Lexer Tokenizer</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-B-1\" data-look=\"classic\" transform=\"translate(898.65625, 192.765625)\"><polygon points=\"85.265625,0 170.53125,-85.265625 85.265625,-170.53125 0,-85.265625\" class=\"label-container\" transform=\"translate(-84.765625, 85.265625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-60.515625, -9.75)\"><rect></rect><foreignObject width=\"121.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Character Category</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-C-3\" data-look=\"classic\" transform=\"translate(377.078125, 372.28125)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.5\" y=\"-24.75\" width=\"189\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.5, -9.75)\"><rect></rect><foreignObject width=\"129\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Valid Identifier Token</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-D-5\" data-look=\"classic\" transform=\"translate(898.65625, 372.28125)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.703125\" y=\"-24.75\" width=\"239.40625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.703125, -9.75)\"><rect></rect><foreignObject width=\"179.40625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Lexer Error: Invalid Character</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-C1-6\" data-look=\"classic\" transform=\"translate(377.078125, 192.765625)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.25\" y=\"-24.75\" width=\"168.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.25, -9.75)\"><rect></rect><foreignObject width=\"108.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Chinese 消息 (Lo)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-C2-8\" data-look=\"classic\" transform=\"translate(125.4140625, 192.765625)\"><rect class=\"basic label-container\" style=\"\" x=\"-117.4140625\" y=\"-24.75\" width=\"234.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-87.4140625, -9.75)\"><rect></rect><foreignObject width=\"174.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Tamil base consonant எ (Lo)</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-e7c9cb0abb1c9ab4-light-flowchart-C3-10\" data-look=\"classic\" transform=\"translate(637.359375, 192.765625)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.03125\" y=\"-24.75\" width=\"252.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.03125, -9.75)\"><rect></rect><foreignObject width=\"192.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Tamil Virama / Pulli ் (Mn / Mc)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-e7c9cb0abb1c9ab4-light-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-e7c9cb0abb1c9ab4-light-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-e7c9cb0abb1c9ab4-light-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(203, 206, 208)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(210, 0%, 77.0588235294%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n<svg data-variant=\"dark\" id=\"d-e7c9cb0abb1c9ab4-dark\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1026.359375px;\" viewBox=\"0 0 1026.359375 405.03125\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#d-e7c9cb0abb1c9ab4-dark{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;fill:rgb(255, 255, 255);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-e7c9cb0abb1c9ab4-dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-e7c9cb0abb1c9ab4-dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-e7c9cb0abb1c9ab4-dark .error-icon{fill:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-dark .error-text{fill:#eae9e8;stroke:#eae9e8;}#d-e7c9cb0abb1c9ab4-dark .edge-thickness-normal{stroke-width:1px;}#d-e7c9cb0abb1c9ab4-dark .edge-thickness-thick{stroke-width:3.5px;}#d-e7c9cb0abb1c9ab4-dark .edge-pattern-solid{stroke-dasharray:0;}#d-e7c9cb0abb1c9ab4-dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d-e7c9cb0abb1c9ab4-dark .edge-pattern-dashed{stroke-dasharray:3;}#d-e7c9cb0abb1c9ab4-dark .edge-pattern-dotted{stroke-dasharray:2;}#d-e7c9cb0abb1c9ab4-dark .marker{fill:rgb(220, 222, 224);stroke:rgb(220, 222, 224);}#d-e7c9cb0abb1c9ab4-dark .marker.cross{stroke:rgb(220, 222, 224);}#d-e7c9cb0abb1c9ab4-dark svg{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:13px;}#d-e7c9cb0abb1c9ab4-dark p{margin:0;}#d-e7c9cb0abb1c9ab4-dark .label{font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;color:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-dark .cluster-label text{fill:#eae9e8;}#d-e7c9cb0abb1c9ab4-dark .cluster-label span{color:#eae9e8;}#d-e7c9cb0abb1c9ab4-dark .cluster-label span p{background-color:transparent;}#d-e7c9cb0abb1c9ab4-dark .label text,#d-e7c9cb0abb1c9ab4-dark span{fill:rgb(255, 255, 255);color:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-dark .node rect,#d-e7c9cb0abb1c9ab4-dark .node circle,#d-e7c9cb0abb1c9ab4-dark .node ellipse,#d-e7c9cb0abb1c9ab4-dark .node polygon,#d-e7c9cb0abb1c9ab4-dark .node path{fill:rgb(21, 22, 23);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-dark .rough-node .label text,#d-e7c9cb0abb1c9ab4-dark .node .label text,#d-e7c9cb0abb1c9ab4-dark .image-shape .label,#d-e7c9cb0abb1c9ab4-dark .icon-shape .label{text-anchor:middle;}#d-e7c9cb0abb1c9ab4-dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-e7c9cb0abb1c9ab4-dark .rough-node .label,#d-e7c9cb0abb1c9ab4-dark .node .label,#d-e7c9cb0abb1c9ab4-dark .image-shape .label,#d-e7c9cb0abb1c9ab4-dark .icon-shape .label{text-align:center;}#d-e7c9cb0abb1c9ab4-dark .node.clickable{cursor:pointer;}#d-e7c9cb0abb1c9ab4-dark .root .anchor path{fill:rgb(220, 222, 224)!important;stroke-width:0;stroke:rgb(220, 222, 224);}#d-e7c9cb0abb1c9ab4-dark .arrowheadPath{fill:#eae9e8;}#d-e7c9cb0abb1c9ab4-dark .edgePath .path{stroke:rgb(220, 222, 224);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-dark .flowchart-link{stroke:rgb(220, 222, 224);fill:none;}#d-e7c9cb0abb1c9ab4-dark .edgeLabel{background-color:rgb(21, 22, 23);text-align:center;}#d-e7c9cb0abb1c9ab4-dark .edgeLabel p{background-color:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-dark .edgeLabel rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-dark .labelBkg{background-color:rgba(21, 22, 23, 0.5);}#d-e7c9cb0abb1c9ab4-dark .cluster rect{fill:rgb(69, 72, 74);stroke:rgb(108, 111, 114);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-dark .cluster text{fill:#eae9e8;}#d-e7c9cb0abb1c9ab4-dark .cluster span{color:#eae9e8;}#d-e7c9cb0abb1c9ab4-dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Inter Variable\",system-ui,-apple-system,sans-serif;font-size:12px;background:rgb(21, 22, 23);border:1px solid hsl(210, 0%, 0%);border-radius:2px;pointer-events:none;z-index:100;}#d-e7c9cb0abb1c9ab4-dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:rgb(255, 255, 255);}#d-e7c9cb0abb1c9ab4-dark rect.text{fill:none;stroke-width:0;}#d-e7c9cb0abb1c9ab4-dark .icon-shape,#d-e7c9cb0abb1c9ab4-dark .image-shape{background-color:rgb(21, 22, 23);text-align:center;}#d-e7c9cb0abb1c9ab4-dark .icon-shape p,#d-e7c9cb0abb1c9ab4-dark .image-shape p{background-color:rgb(21, 22, 23);padding:2px;}#d-e7c9cb0abb1c9ab4-dark .icon-shape .label rect,#d-e7c9cb0abb1c9ab4-dark .image-shape .label rect{opacity:0.5;background-color:rgb(21, 22, 23);fill:rgb(21, 22, 23);}#d-e7c9cb0abb1c9ab4-dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-e7c9cb0abb1c9ab4-dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-e7c9cb0abb1c9ab4-dark .node .neo-node{stroke:rgb(108, 111, 114);}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node rect,#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].cluster rect,#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node polygon{stroke:url(#d-e7c9cb0abb1c9ab4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node path{stroke:url(#d-e7c9cb0abb1c9ab4-dark-gradient);stroke-width:1px;}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node .neo-line path{stroke:rgb(108, 111, 114);filter:none;}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node circle{stroke:url(#d-e7c9cb0abb1c9ab4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].node circle .state-start{fill:#000000;}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].icon-shape .icon{fill:url(#d-e7c9cb0abb1c9ab4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-dark [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#d-e7c9cb0abb1c9ab4-dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-e7c9cb0abb1c9ab4-dark :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"d-e7c9cb0abb1c9ab4-dark_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M898.656,57.5L898.656,61.667C898.656,65.833,898.656,74.167,898.656,81.833C898.656,89.5,898.656,96.5,898.656,100L898.656,103.5\" id=\"d-e7c9cb0abb1c9ab4-dark-L_A_B_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6ODk4LjY1NjI1LCJ5Ijo1Ny41fSx7IngiOjg5OC42NTYyNSwieSI6ODIuNX0seyJ4Ijo4OTguNjU2MjUsInkiOjEwNy41fV0=\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M833.399,212.774L779.035,229.442C724.672,246.11,615.945,279.445,549.521,301.628C483.096,323.81,458.973,334.839,446.912,340.354L434.85,345.868\" id=\"d-e7c9cb0abb1c9ab4-dark-L_B_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6ODMzLjM5ODcyODkyMDM1NTYsInkiOjIxMi43NzM3Mjg5MjAzNTU2fSx7IngiOjUwNy4yMTg3NSwieSI6MzEyLjc4MTI1fSx7IngiOjQzMS4yMTIyNTA1MjUyMTAxLCJ5IjozNDcuNTMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M898.656,278.031L898.656,283.823C898.656,289.615,898.656,301.198,898.656,312.115C898.656,323.031,898.656,333.281,898.656,338.406L898.656,343.531\" id=\"d-e7c9cb0abb1c9ab4-dark-L_B_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_D_0\" data-points=\"W3sieCI6ODk4LjY1NjI1LCJ5IjoyNzguMDMxMjV9LHsieCI6ODk4LjY1NjI1LCJ5IjozMTIuNzgxMjV9LHsieCI6ODk4LjY1NjI1LCJ5IjozNDcuNTMxMjV9XQ==\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M377.078,217.516L377.078,233.393C377.078,249.271,377.078,281.026,377.078,302.029C377.078,323.031,377.078,333.281,377.078,338.406L377.078,343.531\" id=\"d-e7c9cb0abb1c9ab4-dark-L_C1_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C1_C_0\" data-points=\"W3sieCI6Mzc3LjA3ODEyNSwieSI6MjE3LjUxNTYyNX0seyJ4IjozNzcuMDc4MTI1LCJ5IjozMTIuNzgxMjV9LHsieCI6Mzc3LjA3ODEyNSwieSI6MzQ3LjUzMTI1fV0=\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M125.414,217.516L125.414,233.393C125.414,249.271,125.414,281.026,150.959,302.943C176.505,324.86,227.595,336.94,253.14,342.979L278.685,349.019\" id=\"d-e7c9cb0abb1c9ab4-dark-L_C2_C_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C2_C_0\" data-points=\"W3sieCI6MTI1LjQxNDA2MjUsInkiOjIxNy41MTU2MjV9LHsieCI6MTI1LjQxNDA2MjUsInkiOjMxMi43ODEyNX0seyJ4IjoyODIuNTc4MTI1LCJ5IjozNDkuOTM4OTY1ODI5MDEzMX1d\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd)\"></path><path d=\"M637.359,217.516L637.359,233.393C637.359,249.271,637.359,281.026,662.144,302.547C686.928,324.069,736.497,335.356,761.281,340.999L786.065,346.643\" id=\"d-e7c9cb0abb1c9ab4-dark-L_C3_D_0\" class=\" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C3_D_0\" data-points=\"W3sieCI6NjM3LjM1OTM3NSwieSI6MjE3LjUxNTYyNX0seyJ4Ijo2MzcuMzU5Mzc1LCJ5IjozMTIuNzgxMjV9LHsieCI6Nzg5Ljk2NTUzMzA4ODIzNTIsInkiOjM0Ny41MzEyNX1d\" data-look=\"classic\" marker-end=\"url(#d-e7c9cb0abb1c9ab4-dark_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(630.35756, 275.02661)\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(-50.171875, -9.75)\"><foreignObject width=\"100.34375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Lu, Ll, Lt, Lm, Lo</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(898.65625, 312.78125)\"><g class=\"label\" data-id=\"L_B_D_0\" transform=\"translate(-96.9609375, -9.75)\"><foreignObject width=\"193.921875\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"><p>Mn, Mc, Me (Combining Marks)</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C1_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C2_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C3_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel \"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default diag-ingress \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-A-0\" data-look=\"classic\" transform=\"translate(898.65625, 32.75)\"><rect class=\"basic label-container\" style=\"\" x=\"-89.3046875\" y=\"-24.75\" width=\"178.609375\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-59.3046875, -9.75)\"><rect></rect><foreignObject width=\"118.609375\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Go Lexer Tokenizer</p></span></div></foreignObject></g></g><g class=\"node default diag-compute \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-B-1\" data-look=\"classic\" transform=\"translate(898.65625, 192.765625)\"><polygon points=\"85.265625,0 170.53125,-85.265625 85.265625,-170.53125 0,-85.265625\" class=\"label-container\" transform=\"translate(-84.765625, 85.265625)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-60.515625, -9.75)\"><rect></rect><foreignObject width=\"121.03125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Character Category</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-C-3\" data-look=\"classic\" transform=\"translate(377.078125, 372.28125)\"><rect class=\"basic label-container\" style=\"\" x=\"-94.5\" y=\"-24.75\" width=\"189\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-64.5, -9.75)\"><rect></rect><foreignObject width=\"129\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Valid Identifier Token</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-D-5\" data-look=\"classic\" transform=\"translate(898.65625, 372.28125)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.703125\" y=\"-24.75\" width=\"239.40625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.703125, -9.75)\"><rect></rect><foreignObject width=\"179.40625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Lexer Error: Invalid Character</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-C1-6\" data-look=\"classic\" transform=\"translate(377.078125, 192.765625)\"><rect class=\"basic label-container\" style=\"\" x=\"-84.25\" y=\"-24.75\" width=\"168.5\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-54.25, -9.75)\"><rect></rect><foreignObject width=\"108.5\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Chinese 消息 (Lo)</p></span></div></foreignObject></g></g><g class=\"node default diag-success \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-C2-8\" data-look=\"classic\" transform=\"translate(125.4140625, 192.765625)\"><rect class=\"basic label-container\" style=\"\" x=\"-117.4140625\" y=\"-24.75\" width=\"234.828125\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-87.4140625, -9.75)\"><rect></rect><foreignObject width=\"174.828125\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Tamil base consonant எ (Lo)</p></span></div></foreignObject></g></g><g class=\"node default diag-error \" id=\"d-e7c9cb0abb1c9ab4-dark-flowchart-C3-10\" data-look=\"classic\" transform=\"translate(637.359375, 192.765625)\"><rect class=\"basic label-container\" style=\"\" x=\"-126.03125\" y=\"-24.75\" width=\"252.0625\" height=\"49.5\"></rect><g class=\"label\" style=\"\" transform=\"translate(-96.03125, -9.75)\"><rect></rect><foreignObject width=\"192.0625\" height=\"19.5\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel \"><p>Tamil Virama / Pulli ் (Mn / Mc)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"d-e7c9cb0abb1c9ab4-dark-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"d-e7c9cb0abb1c9ab4-dark-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><linearGradient id=\"d-e7c9cb0abb1c9ab4-dark-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"rgb(108, 111, 114)\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(204, 0%, 18.0392156863%)\" stop-opacity=\"1\"></stop></linearGradient></svg>\n</div><div class=\"diagram-toolbar\"><button type=\"button\" class=\"diagram-expand\" aria-label=\"Expand diagram\" data-pending><svg class=\"ui-icon\" viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"m21 3-7 7\"></path><path d=\"m3 21 7-7\"></path><path d=\"M9 21H3v-6\"></path></svg></button></div></figure>\n<h2 id=\"why-abugida-scripts-fail-in-go\">Why Abugida Scripts Fail in Go<a class=\"h-anchor\" href=\"#why-abugida-scripts-fail-in-go\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Tamil is an abugida script. Vowelized consonants are composed of a base consonant followed by a combining vowel sign or virama (pulli):</p>\n<ul>\n<li>In <code>\"எண்ணிக்கை\"</code>, the base character <code>\"ண\"</code> (<code>U+0BA3</code>) is categorized as <code>Lo</code> (valid letter).</li>\n<li>The virama <code>\"்\"</code> (<code>U+0BCD</code>) is categorized as <code>Mn</code> (Nonspacing Mark).</li>\n</ul>\n<p>Because the Go specification excludes all combining marks (<code>Mn</code>, <code>Mc</code>, and <code>Me</code>) from the definition of <code>unicode_letter</code>, any word containing a diacritic or combining mark is rejected at tokenization time.</p>\n<h2 id=\"go-spec-vs-unicode-uax-31\">Go Spec vs Unicode UAX #31<a class=\"h-anchor\" href=\"#go-spec-vs-unicode-uax-31\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Modern programming languages (such as Rust, Swift, and Python 3) implement <strong>Unicode Standard Annex #31</strong> (UAX #31: Identifier and Pattern Syntax):</p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mtext>Identifier</mtext><mo>=</mo><mtext>XID_Start</mtext><mo>+</mo><msup><mtext>XID_Continue</mtext><mo>∗</mo></msup></mrow><annotation encoding=\"application/x-tex\">\\text{Identifier} = \\text{XID\\_Start} + \\text{XID\\_Continue}^*</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.6944em;\"></span><span class=\"mord text\"><span class=\"mord\">Identifier</span></span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span><span class=\"mrel\">=</span><span class=\"mspace\" style=\"margin-right:0.2778em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:0.9933em;vertical-align:-0.31em;\"></span><span class=\"mord text\"><span class=\"mord\">XID_Start</span></span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span><span class=\"mbin\">+</span><span class=\"mspace\" style=\"margin-right:0.2222em;\"></span></span><span class=\"katex-base\"><span class=\"katex-strut\" style=\"height:1.0719em;vertical-align:-0.31em;\"></span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">XID_Continue</span></span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.7619em;\"><span style=\"top:-3.1362em;margin-right:0.05em;\"><span class=\"pstrut\" style=\"height:2.7em;\"></span><span class=\"katex-sizing reset-size6 size3 mtight\"><span class=\"mbin mtight\">∗</span></span></span></span></span></span></span></span></span></span></span></span></div>\n<p>Under UAX #31:</p>\n<ul>\n<li><code>XID_Start</code> permits initial letters (<code>L*</code>, <code>Nl</code>).</li>\n<li><code>XID_Continue</code> permits continuation letters, digits, and critically <strong>combining marks</strong> (<code>Mn</code>, <code>Mc</code>).</li>\n</ul>\n<p>Go intentionally chose a simpler, static character-class filter over full UAX #31 parsing to keep the compiler lexer fast, predictable, and free of complex Unicode normalization lookahead passes.</p>\n<h2 id=\"the-exportability-invariant\">The Exportability Invariant<a class=\"h-anchor\" href=\"#the-exportability-invariant\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<p>Even for scripts that compile cleanly (such as Chinese), Go enforces an exportability rule based on Unicode casing:</p>\n<blockquote>\n<p>An identifier is exported if the first character of the identifier’s name is a Unicode uppercase letter (category Lu).</p>\n</blockquote>\n<p>Because non-cased writing systems (Chinese, Japanese, Arabic, Hebrew, Devanagari, Tamil) belong exclusively to category <code>Lo</code> (“Letter, Other”), <code>unicode.IsUpper()</code> returns <code>false</code> for every character.</p>\n<div class=\"code-figure\" data-language=\"go\"><pre class=\"astro-code astro-code-themes github-light-default github-dark-default\" style=\"--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">package</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> ledger</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#6E7781;--shiki-dark:#8B949E\">// Private to package ledger: 交易 is category Lo, not Lu (cannot be exported)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">type</span><span style=\"--shiki-light:#953800;--shiki-dark:#FFA657\"> 交易</span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\"> struct</span><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">    Amount </span><span style=\"--shiki-light:#CF222E;--shiki-dark:#FF7B72\">int64</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>In Go, <strong>all non-cased Unicode identifiers are permanently unexported (package-private)</strong>. To export a symbol across package boundaries, the identifier must begin with an ASCII or cased Latin/Cyrillic/Greek uppercase letter (<code>A-Z</code>).</p>\n<h2 id=\"architectural-takeaways\">Architectural Takeaways<a class=\"h-anchor\" href=\"#architectural-takeaways\" aria-label=\"Copy link to this section\"><svg class=\"ui-icon heading-link-icon\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path></svg></a></h2>\n<ol>\n<li><strong>Use ASCII for public APIs and identifiers</strong>: Restricting identifiers to ASCII guarantees compatibility across international developer teams, CLI tooling, and debugger symbol tables.</li>\n<li><strong>UTF-8 in string literals and comments</strong>: Go provides full Unicode support in string values, raw bytes, and documentation comments where combining marks and ZWJ sequences are fully valid.</li>\n<li><strong>Lexer speed over UAX #31</strong>: Go’s identifier rules reflect a deliberate design trade-off prioritizing sub-second compiler compilation speeds over complex Unicode normalization.</li>\n</ol>\n"
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-07-20:watch/avatar-the-last-airbender",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Avatar: The Last Airbender",
      "content_text": "",
      "date_published": "2024-07-20T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-06-10:books/learning-go",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Learning Go",
      "content_text": "",
      "date_published": "2024-06-10T00:00:00.000Z",
      "tags": [
        "books"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-05-01:watch/chotta-bheem",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Chotta Bheem",
      "content_text": "",
      "date_published": "2024-05-01T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-03-10:watch/suits",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Suits",
      "content_text": "",
      "date_published": "2024-03-10T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2024-01-20:watch/the-social-network",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "The Social Network",
      "content_text": "",
      "date_published": "2024-01-20T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2023-10-14:watch/bojack-horseman",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "BoJack Horseman",
      "content_text": "",
      "date_published": "2023-10-14T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2023-08-14:watch/breaking-bad",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Breaking Bad",
      "content_text": "",
      "date_published": "2023-08-14T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2023-06-08:watch/never-have-i-ever",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Never Have I Ever",
      "content_text": "",
      "date_published": "2023-06-08T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2023-02-12:watch/ben-10",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Ben 10",
      "content_text": "",
      "date_published": "2023-02-12T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2022-09-30:watch/vikings",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Vikings",
      "content_text": "",
      "date_published": "2022-09-30T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2021-12-03:watch/money-heist",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Money Heist",
      "content_text": "",
      "date_published": "2021-12-03T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2020-08-22:watch/mr-robot",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Mr. Robot",
      "content_text": "",
      "date_published": "2020-08-22T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2020-06-05:watch/13-reasons-why",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "13 Reasons Why",
      "content_text": "",
      "date_published": "2020-06-05T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2020-05-01:watch/silicon-valley",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Silicon Valley",
      "content_text": "",
      "date_published": "2020-05-01T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2019-06-03:watch/chernobyl",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Chernobyl",
      "content_text": "",
      "date_published": "2019-06-03T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    },
    {
      "id": "tag:ashwingopalsamy.in,2019-05-20:watch/game-of-thrones",
      "url": "https://ashwingopalsamy.in/library/",
      "title": "Game of Thrones",
      "content_text": "",
      "date_published": "2019-05-20T00:00:00.000Z",
      "tags": [
        "watch"
      ],
      "authors": [
        {
          "name": "Ashwin Gopalsamy",
          "url": "https://ashwingopalsamy.in/"
        }
      ]
    }
  ]
}