code: public Tree waitFor(long timeout, TimeUnit unit) throws Exception {
  		try {
  			return future.get(timeout, unit);			
  		} catch (ExecutionException outerError) {
  			Throwable cause = outerError.getCause();
  			if (cause != null && cause instanceof Exception) {
  				throw (Exception) cause;
  			}
  			throw outerError;
  		}
  	}
docs: Waits if necessary for this future to complete, and then returns its
  result. It's a blocking operation, do not use this method unless it is
  absolutely necessary for something. Rather use the "then" and
  "catchError" methods.
  
  @param timeout
  the maximum time to wait
  @param unit
  the time unit of the timeout argument
  
  @return result Tree structure
  
  @throws Exception
  any (interruption, execution, user-level, etc.) exception