#define R(p,a,r)mix(a*dot(p,a),p,cos(r))+sin(r)*cross(p,a)
#define H(h)(cos((h)*6.3+vec3(0,23,21))*.5+.5)
void mainImage(out vec4 O, vec2 C)
{
    O=vec4(0);
    vec3 p,r=iResolution,d=normalize(vec3((C-.5*r.xy)/r.y,1.));
    for(float i=0.,g=0.,e,t=iTime;++i<99.;){
        p=g*d;
        p.z-=4.;
        p=R(p,normalize(vec3(1,2,3)),t*1.2);
        vec4 q=vec4(p,sin(t)*.7);
        q.xyw=R(q.xyw,vec3(0,1,0),t);
        g+=e=length(vec2(length(q.xy)-1.,length(q.wz)-1.5))-.3;
        O.xyz+=mix(vec3(1),H(atan(q.y,q.x)),.7)*.012*exp(-i*i*e);
    }
    O*=O;
}
