/*original https://www.shadertoy.com/view/dl3XDS*/

#define R(p,a,r)mix(a*dot(p,a),p,cos(r))+sin(r)*cross(p,a)
#define H(h)(cos((h)*1.3+vec3(0,23,21))*.5+.5)

mat2 rotationMatrix(float angle)
{
angle *= 3.14 / 180.0;
    float s=sin(angle), c=cos(angle);
    return mat2( c, s, -s, c );
}
void mainImage(out vec4 O, vec2 C)
{
    O=vec4(0);
    vec3 p,q,r=iResolution,
    d=normalize(vec3((C*2.-r.xy)/r.y,1));
    for(float i=0.,a,s,e,g=0.;
        ++i<110.;
        O.xyz+=mix(vec3(1),H(g*1.1),sin(1.8))*1./e/9e3
    )
    {
      float t = iTime * .1 + ((.25 + .05 * sin(iTime * .1))/(length(p.xy) + 0.2)) * 0.2;
float si = sin(t);
float co = cos(t);
mat2 ma = mat2(co, si, -si, co);


        p=g*d;


        p.z+=iTime*3.5;
        a=10.;
        p=mod(p-a,a*2.)-a;
        s=5.;
        p.xz*=rotationMatrix(5.*iTime);
          p.yz*=rotationMatrix(5.*iTime);
          p.xy*=rotationMatrix(5.*iTime);

        for(int i=0;i++<8;){
            p=1.01-abs((p));
           p.xz*=ma;

            p.x<p.z?p=p.zyx:p;
            p.z<p.y?p=p.xzy:p;

            s*=e=1.4+sin(iTime*.234)*.1;
            p=abs(p)*e-
                vec3(
                    5.+cos(iTime*.3+.5+fract(abs(iTime*.3)))*3.,
                    120,
                    8.+cos(iTime*.5)*5.
                 );
         }
         g+=e=length(p.yz)/s;
    }
}


