[{"data":1,"prerenderedAt":414},["ShallowReactive",2],{"i-base:v-logo":3,"i-lucide:user":8,"i-lucide:folder-kanban":11,"i-lucide:heart":13,"i-lucide:file-text":15,"i-lucide:sun":17,"i-lucide:github":19,"i-lucide:twitter":22,"i-lucide:linkedin":24,"i-simple-icons:reddit":26,"i-lucide:globe":28,"article-dynamic-og-images-on-cloudflare-workers":30,"articles-all":368,"i-lucide:arrow-left":412},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,512,false,"\u003Cg fill=\"currentColor\">\u003Cg transform=\"translate(0,512) scale(0.1,-0.1)\">\n    \u003Cpath d=\"M2866 3193 c-203 -209 -341 -393 -541 -718 -57 -93 -198 -309 -212 -325 -9 -9 -22 26 -28 75 -4 27 -8 61 -10 75 -2 14 -7 70 -10 125 -21 363 -72 541 -187 656 -30 30 -54 64 -56 78 -7 55 -65 113 -130 130 -21 6 -34 1 -62 -23 -64 -57 -86 -84 -97 -119 -12 -41 -9 -201 7 -349 6 -57 12 -204 12 -327 0 -191 2 -232 18 -270 10 -27 20 -89 24 -148 5 -92 21 -182 84 -478 12 -56 30 -105 46 -129 14 -21 27 -48 27 -60 1 -12 3 -39 4 -61 1 -23 8 -41 16 -44 8 -2 39 -31 69 -63 66 -72 98 -90 159 -91 133 -1 245 118 254 271 4 67 7 74 45 114 22 24 50 55 61 70 33 42 81 138 81 162 0 12 21 44 50 74 27 28 63 80 80 114 57 114 131 230 244 378 48 64 213 266 249 305 78 85 167 207 167 230 0 14 11 47 23 73 34 67 29 133 -20 252 l-38 95 -50 6 c-28 3 -67 13 -87 22 -21 10 -47 17 -58 17 -13 0 -62 -43 -134 -117z\"\u002F>\n    \u003Cpath d=\"M3070 1649 c-30 -44 -76 -96 -102 -115 -27 -20 -48 -40 -48 -45 0 -5 8 -21 17 -36 17 -25 17 -27 -5 -41 l-22 -14 30 -35 c17 -18 30 -39 30 -47 0 -36 34 -118 58 -140 102 -92 120 -104 159 -100 108 10 153 24 153 49 0 7 27 28 59 45 62 33 92 74 90 121 -1 13 10 57 25 97 32 87 33 90 17 165 -15 70 -24 75 -177 111 -159 38 -194 48 -200 57 -12 21 -32 4 -84 -72z\"\u002F>\n  \u003C\u002Fg>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":10},24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"\u002F>\u003Ccircle cx=\"12\" cy=\"7\" r=\"4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":12},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2m4-10v4m4-4v2m4-2v6\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":14},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676a.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":16},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"\u002F>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5M10 9H8m8 4H8m8 4H8\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":18},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":20,"hidden":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5c.08-1.25-.27-2.48-1-3.5c.28-1.15.28-2.35 0-3.5c0 0-1 0-3 1.5c-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.4 5.4 0 0 0 4 9c0 3.5 3 5.5 6 5.5c-.39.49-.68 1.05-.85 1.65S8.93 17.38 9 18v4\"\u002F>\u003Cpath d=\"M9 18c-4.51 2-5-2-7-2\"\u002F>\u003C\u002Fg>",true,{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":23,"hidden":21},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6c2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4c-.9-4.2 4-6.6 7-3.8c1.1 0 3-1.2 3-1.2\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":25,"hidden":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2a2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6M2 9h4v12H2z\"\u002F>\u003Ccircle cx=\"4\" cy=\"4\" r=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":27},"\u003Cpath fill=\"currentColor\" d=\"M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286A.72.72 0 0 0 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0m4.388 3.199a1.999 1.999 0 1 1-1.947 2.46v.002a2.37 2.37 0 0 0-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363a2.802 2.802 0 1 1 2.908 4.753c-.088 3.256-3.637 5.876-7.997 5.876c-4.361 0-7.905-2.617-7.998-5.87a2.8 2.8 0 0 1 1.189-5.34c.645 0 1.239.218 1.712.585c1.275-.79 2.881-1.291 4.64-1.365v-.01a3.23 3.23 0 0 1 2.88-3.207a2 2 0 0 1 1.959-1.595m-8.085 8.376c-.784 0-1.459.78-1.506 1.797s.64 1.429 1.426 1.429s1.371-.369 1.418-1.385s-.553-1.841-1.338-1.841m7.406 0c-.786 0-1.385.824-1.338 1.841s.634 1.385 1.418 1.385c.785 0 1.473-.413 1.426-1.429c-.046-1.017-.721-1.797-1.506-1.797m-3.703 4.013c-.974 0-1.907.048-2.77.135a.222.222 0 0 0-.183.305a3.2 3.2 0 0 0 2.953 1.964a3.2 3.2 0 0 0 2.953-1.964a.222.222 0 0 0-.184-.305a28 28 0 0 0-2.769-.135\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":29},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 2a14.5 14.5 0 0 0 0 20a14.5 14.5 0 0 0 0-20M2 12h20\"\u002F>\u003C\u002Fg>",{"id":31,"title":32,"body":33,"category":351,"date":352,"description":353,"extension":354,"image":355,"meta":356,"navigation":21,"path":358,"seo":359,"status":360,"stem":361,"tags":362,"updatedAt":355,"__hash__":367},"articles\u002Farticles\u002F6.dynamic-og-images-on-cloudflare-workers.md","Generating dynamic Open Graph images on Cloudflare Workers",{"type":34,"value":35,"toc":345},"minimark",[36,53,56,61,68,166,173,276,280,283,299,317,320,324,327,334,338,341],[37,38,39,40,47,48,52],"p",{},"Every page and article on this site has its own Open Graph image, generated on demand at the edge. No design tool, no pre-baked PNGs checked into the repo. A single Worker route renders them with ",[41,42,46],"a",{"href":43,"rel":44},"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fsatori",[45],"nofollow","Satori"," and ",[49,50,51],"code",{},"@cf-wasm\u002Fog",".",[37,54,55],{},"The theme fits the brand: a starfield, a faint graticule grid, and a teal accent, so a shared link looks like a small piece of a map rather than a generic card.",[57,58,60],"h2",{"id":59},"the-route","The route",[37,62,63,64,67],{},"The endpoint is a catch-all under ",[49,65,66],{},"\u002Fog",". It takes a title and description from the query string, builds a Satori element tree, and returns a PNG:",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-ts shiki shiki-themes github-dark github-dark github-light","\u002F\u002F server\u002Froutes\u002Fog\u002F[...path].png.ts\nexport default defineEventHandler(async (event) => {\n  const { title, description } = getQuery(event);\n  \u002F\u002F build a Satori element tree, render to PNG, return it\n});\n","ts","",[49,76,77,86,123,154,160],{"__ignoreMap":74},[78,79,82],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"sxXm1","\u002F\u002F server\u002Froutes\u002Fog\u002F[...path].png.ts\n",[78,87,89,93,96,100,104,107,110,114,117,120],{"class":80,"line":88},2,[78,90,92],{"class":91},"s6ubI","export",[78,94,95],{"class":91}," default",[78,97,99],{"class":98},"s5n6i"," defineEventHandler",[78,101,103],{"class":102},"sAvwS","(",[78,105,106],{"class":91},"async",[78,108,109],{"class":102}," (",[78,111,113],{"class":112},"sAzo5","event",[78,115,116],{"class":102},") ",[78,118,119],{"class":91},"=>",[78,121,122],{"class":102}," {\n",[78,124,126,129,132,136,139,142,145,148,151],{"class":80,"line":125},3,[78,127,128],{"class":91},"  const",[78,130,131],{"class":102}," { ",[78,133,135],{"class":134},"sXWYR","title",[78,137,138],{"class":102},", ",[78,140,141],{"class":134},"description",[78,143,144],{"class":102}," } ",[78,146,147],{"class":91},"=",[78,149,150],{"class":98}," getQuery",[78,152,153],{"class":102},"(event);\n",[78,155,157],{"class":80,"line":156},4,[78,158,159],{"class":84},"  \u002F\u002F build a Satori element tree, render to PNG, return it\n",[78,161,163],{"class":80,"line":162},5,[78,164,165],{"class":102},"});\n",[37,167,168,169,172],{},"Pages reference their own card through ",[49,170,171],{},"useSeoMeta",", and articles build the URL from the post's title and description:",[69,174,176],{"className":71,"code":175,"language":73,"meta":74,"style":74},"const ogImageUrl = computed(() => {\n  const title = encodeURIComponent(article.value?.title ?? 'Articles');\n  const description = encodeURIComponent(article.value?.description ?? '');\n  return `https:\u002F\u002Fvinayakkulkarni.dev\u002Fog\u002Farticles\u002F${slug}.png?title=${title}&description=${description}`;\n});\n",[49,177,178,199,224,245,272],{"__ignoreMap":74},[78,179,180,183,186,189,192,195,197],{"class":80,"line":81},[78,181,182],{"class":91},"const",[78,184,185],{"class":134}," ogImageUrl",[78,187,188],{"class":91}," =",[78,190,191],{"class":98}," computed",[78,193,194],{"class":102},"(() ",[78,196,119],{"class":91},[78,198,122],{"class":102},[78,200,201,203,206,208,211,214,217,221],{"class":80,"line":88},[78,202,128],{"class":91},[78,204,205],{"class":134}," title",[78,207,188],{"class":91},[78,209,210],{"class":98}," encodeURIComponent",[78,212,213],{"class":102},"(article.value?.title ",[78,215,216],{"class":91},"??",[78,218,220],{"class":219},"s4Y1p"," 'Articles'",[78,222,223],{"class":102},");\n",[78,225,226,228,231,233,235,238,240,243],{"class":80,"line":125},[78,227,128],{"class":91},[78,229,230],{"class":134}," description",[78,232,188],{"class":91},[78,234,210],{"class":98},[78,236,237],{"class":102},"(article.value?.description ",[78,239,216],{"class":91},[78,241,242],{"class":219}," ''",[78,244,223],{"class":102},[78,246,247,250,253,256,259,261,264,266,269],{"class":80,"line":156},[78,248,249],{"class":91},"  return",[78,251,252],{"class":219}," `https:\u002F\u002Fvinayakkulkarni.dev\u002Fog\u002Farticles\u002F${",[78,254,255],{"class":102},"slug",[78,257,258],{"class":219},"}.png?title=${",[78,260,135],{"class":102},[78,262,263],{"class":219},"}&description=${",[78,265,141],{"class":102},[78,267,268],{"class":219},"}`",[78,270,271],{"class":102},";\n",[78,273,274],{"class":80,"line":162},[78,275,165],{"class":102},[57,277,279],{"id":278},"what-satori-refuses-to-do","What Satori refuses to do",[37,281,282],{},"Satori is not a browser. It renders a strict subset of layout, and it is unforgiving about it. Two rules cost me the most time:",[37,284,285,286,289,290,294,295,298],{},"Every ",[49,287,288],{},"div"," with two or more children ",[291,292,293],"strong",{},"must"," declare ",[49,296,297],{},"display: flex",". Satori throws otherwise. This means you cannot lay out a card the way you would in normal HTML; you are writing flexbox explicitly at every level.",[37,300,301,302,305,306,309,310,313,314,316],{},"Satori also chokes on an empty ",[49,303,304],{},"children: []",". A helper that constructs elements needs to omit the ",[49,307,308],{},"children"," key entirely when there are none, rather than passing an empty array. I ended up with a small ",[49,311,312],{},"el(type, style, ...children)"," helper that flattens and filters its children, sets ",[49,315,308],{}," to a single string when there is exactly one text child, and leaves the key off when there are none.",[37,318,319],{},"The upside of Satori being this strict is that once a card renders, it renders identically every time. There is no browser variance to chase.",[57,321,323],{"id":322},"the-numbers","The numbers",[37,325,326],{},"Cold renders land around 0.5 to 1.1 seconds. Warm renders, served from cache, are roughly 50 milliseconds. Because the cards are deterministic (same query string in, same PNG out) they cache cleanly with immutable cache headers, so the cold cost is paid once per unique card and never again.",[37,328,329,330,333],{},"The whole thing runs on ",[49,331,332],{},"workerd",", the same runtime the site itself runs on, with WebAssembly enabled for the font and rendering work. No separate image service, no build step that pre-generates hundreds of PNGs, and no stale cards when a title changes. Edit the title, the next request renders a fresh card.",[57,335,337],{"id":336},"why-bother","Why bother",[37,339,340],{},"Social cards are the first impression of a link before anyone clicks it. Hand-designing one per page does not scale, and pre-baked defaults make every share look the same. Generating them at the edge means every page and every article gets a card that reflects its actual content, for the cost of one small Worker route and a render that caches after the first hit.",[342,343,344],"style",{},"html pre.shiki code .sxXm1, html code.shiki .sxXm1{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-light:#6A737D}html pre.shiki code .s6ubI, html code.shiki .s6ubI{--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-light:#D73A49}html pre.shiki code .s5n6i, html code.shiki .s5n6i{--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-light:#6F42C1}html pre.shiki code .sAvwS, html code.shiki .sAvwS{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-light:#24292E}html pre.shiki code .sAzo5, html code.shiki .sAzo5{--shiki-default:#FFAB70;--shiki-dark:#FFAB70;--shiki-light:#E36209}html pre.shiki code .sXWYR, html code.shiki .sXWYR{--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-light:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .s4Y1p, html code.shiki .s4Y1p{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-light:#032F62}",{"title":74,"searchDepth":88,"depth":88,"links":346},[347,348,349,350],{"id":59,"depth":88,"text":60},{"id":278,"depth":88,"text":279},{"id":322,"depth":88,"text":323},{"id":336,"depth":88,"text":337},"cloudflare","2026-07-06T22:00:00.000+05:30","Rendering per-page and per-article social cards at the edge with Satori and @cf-wasm\u002Fog: how the route works, what Satori refuses to render, and the cold-versus-warm numbers.","md",null,{"position":357},6,"\u002Farticles\u002Fdynamic-og-images-on-cloudflare-workers",{"title":32,"description":353},"published","articles\u002F6.dynamic-og-images-on-cloudflare-workers",[351,363,364,365,366],"workers","open-graph","satori","nuxt","aIn8zUWPGjcl9jDQLrtvkfK3Lv82e6KYGk-R_LiRD38",[369,378,380,388,397,403],{"path":370,"title":371,"description":372,"date":373,"updatedAt":355,"category":366,"tags":374,"image":355,"status":360},"\u002Farticles\u002Ftil-shiki-multitheme-code-block-background","TIL: Shiki multi-theme highlighting does not switch the code-block background","Shiki multi-theme mode swaps token colours per colour scheme but leaves the pre background variable empty, so light-theme text can land on a dark block. You have to theme the container yourself.","2026-07-07T02:30:00.000+05:30",[366,375,376,377],"shiki","nuxt-content","dark-mode",{"path":358,"title":32,"description":353,"date":352,"updatedAt":355,"category":351,"tags":379,"image":355,"status":360},[351,363,364,365,366],{"path":381,"title":382,"description":383,"date":384,"updatedAt":355,"category":351,"tags":385,"image":355,"status":360},"\u002Farticles\u002Fmigrating-a-nuxt-site-from-cloudflare-pages-to-workers","Migrating a Nuxt site from Cloudflare Pages to Workers","The full path from the cloudflare-pages preset to a cloudflare_module Worker: the config changes, the custom-domain cutover that no deploy step handles for you, and the gotchas that only show up in CI.","2026-07-06T21:00:00.000+05:30",[351,363,366,386,387],"nitro","devops",{"path":389,"title":390,"description":391,"date":392,"updatedAt":355,"category":393,"tags":394,"image":355,"status":360},"\u002Farticles\u002Ftil-tailwind-v4-webkit-mask-prefix","TIL: Tailwind v4 mask utilities need the webkit prefix in plain CSS","Porting a Tailwind mask-composite utility to scoped CSS quietly breaks in Chrome and Safari unless you also write the -webkit-mask-* properties, because Tailwind was emitting them for you.","2026-07-06T20:15:00.000+05:30","css",[395,393,396],"tailwind","webkit",{"path":398,"title":399,"description":400,"date":401,"updatedAt":355,"category":351,"tags":402,"image":355,"status":360},"\u002Farticles\u002Ftil-workers-cache-nitro-passthrough","TIL: Enabling Workers Cache through Nitro without a native option","Nitro forwards arbitrary keys into the generated wrangler config, so you can turn on Cloudflare Workers Cache with a single line even though there is no dedicated Nitro option for it.","2026-07-06T14:30:00.000+05:30",[351,363,386,366],{"path":404,"title":405,"description":406,"date":407,"updatedAt":355,"category":408,"tags":409,"image":355,"status":360},"\u002Farticles\u002Fbuild-and-publish-vue-3-components-using-rollup","Build & Publish Vue 3 Components using Rollup.js","Let's build a reusable Vue 3 component using rollup","2022-07-04T16:20:09.000+05:30","vue",[410,411],"vue 3","rollup",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":413},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",1783374868970]