$/=$_;$(=shift;$a=shift;i(shift);socket S,2,1,6;bind S,a($a);listen S,5;while(@ARGV&&($_="$( $a f".shift)||accept(C,S)&&($_=)&&close C){m!^(.*?) (.*?) ([e-i])([^/]*)/!s&&$(eq$1&&&$3($2,$4,$')}sub f{t($_,@_)for keys%k}sub a{pop=~/:/;pack'CxnC4x8',2,$',split'\.',$`}sub i{$k{$_[0]}=1}sub g{open(F,"<$_[1]")&& t($_[0],$a,"e$_[1]",);close F}sub h{t($_[0],$_,'i')for keys%k}sub t{socket X,2,1,6;if(connect X,a($w=shift)){print X "$( $_[0] $_[1]/$_[2]";close X}else{undef$k{$w}}}sub e{open F,">$_[1]";print F $_[2];close F}