void mainImage( out vec4 Y, vec2 f )
{
    vec2 p = iResolution.xy;
    
    float d = length( p = ( f + f - p ) / p.y ) / .9,
          l = ceil( d ),
          t = iTime / ( 1.5 - l ) * .3 + iMouse.x / 1e3;

    p = p * asin( d / l ) / d - 5.;
    
    p.x -= t;
	f = min( abs( fract( p *= 6. ) - .1 ) * 9., 1. );
    p = ceil( p ) / 6.;
    p.x += t;

    Y = texture( iChannel0, p * .1 ) 
        * f.x * f.y 
        * ( l > 1. ? texture( iChannel3, p ).x : 1.5 );
}
