(await require('https://unpkg.com/ganja.js'))(3, 0, 1, () => {
const ringsize = 0.5,
thickness = 0.15,
swirls=5,
lobes=2,
depth=0.45,
fibres=20,
fibrethickness=0.005;
var camera = 0e1 + 1;
var smooth = x=>x**2*(3-2*x);
var circle = (BV,r)=>x=>Math.E**(x*Math.PI*BV)*(1+r*1e01);
var f =(x,y)=>Math.E**(x*Math.PI*1e12)
*Math.E**(ringsize*1e01+Math.sin(x*Math.PI*2)*.025e01)
*Math.E**(((swirls*x+y)%1)*Math.PI*1e13)
*Math.E**(
(smooth(Math.sin(Math.max(0,x*3-2)*Math.PI))*0.4+thickness)*0.2e01
+smooth(Math.sin(Math.max(0,x*3-2)*Math.PI))*Math.sin(y*Math.PI*lobes)*Math.sin((y+0.25%1)*Math.PI)*depth*.1e01);
var threads = fibres?[...Array(fibres)].map((y,i)=>x=>f(x,i/fibres))*circle(1e13,fibrethickness):[f];
threads.forEach(t=>{t.dx=200; t.dy=5;});
f.dy=128; f.dx=256;
return( this.graph(()=>{
var t = performance.now() / 1234;
camera.set((Math.cos(t) + Math.sin(t) * 1e13)*(1+0.01e02));
return [0xffffcc,...threads];
},{ camera, gl: 1, animate: 1, width: "800px", height: "750px" }));
})