@Override
	public byte[] runBinaryMacro(HTTPRequest httpReq, String parm) throws HTTPServerException
	 {
		 final ByteArrayOutputStream bout=new ByteArrayOutputStream();
		 try
		 {
			 synchronized(sync)
			 {
				 final boolean imageRequest=httpReq.isUrlParameter("IMAGE");
				 final SLinkedList<ImgCacheEntry> cache = getVerifyCache();
				 String value=null;
				 String key=null;
				 final String hisIp=httpReq.getClientAddress().getHostAddress();
				 if(imageRequest)
				 {
		 		   	for(final Iterator<ImageVerificationImage.ImgCacheEntry> p =cache.descendingIterator();p.hasNext();)
				   	{
				   		 final ImageVerificationImage.ImgCacheEntry entry=p.next();
						 if(entry.ip.equalsIgnoreCase(hisIp))
						 {
							 value=entry.value;
							 key=entry.key;
							 break;
						 }
				   	}
				 }
				 final ImageVerificationImage  img=new ImageVerificationImage(value,bout);
				 if(key==null)
					 key=Long.toHexString(Math.round(Math.abs(rand.nextDouble() * (Long.MAX_VALUE/2.0))));
				 if(value==null)
				 {
					 final ImgCacheEntry entry=new ImgCacheEntry();
					 entry.ip=hisIp;
					 entry.key=key;
					 entry.value=img.getVerificationValue();
					 cache.addLast(entry);
				 }
				 if(!imageRequest)
				 {
					 bout.reset();
					 bout.write(key.getBytes());
				 }
				 httpReq.addFakeUrlParameter("IMGVERKEY", key);
			 }
		 }
		 catch(final IOException ioe)
		 {
			 Log.errOut("ImgVerWM",ioe);
		 }
		 return bout.toByteArray();
	 }