docs: public static RandomVariable[] createZeroRates(double time, double[] maturities, LIBORModelMonteCarloSimulationModel model) throws CalculationException{
  
  		// get time index of first libor fixing time after time
  		int firstLiborIndex = model.getLiborPeriodDiscretization().getTimeIndexNearestGreaterOrEqual(time);
  		int remainingLibors = model.getNumberOfLibors()-firstLiborIndex;
  		RandomVariable[] forwardRates;
  		double[] liborTimes;
  		int indexOffset;
  		double periodStart;
  		double periodEnd;
  
  		if(model.getLiborPeriodDiscretization().getTime(firstLiborIndex)>time) {
  			periodStart = time;
  			periodEnd   = model.getLiborPeriodDiscretization().getTime(firstLiborIndex);
  			forwardRates = new RandomVariable[remainingLibors+1];
  			forwardRates[0] = model.getLIBOR(time, periodStart, periodEnd);
  			indexOffset = 1;
  			liborTimes = new double[forwardRates.length+1];
  			liborTimes[0] = 0;
  		}
  		else {
  			forwardRates = new RandomVariable[remainingLibors];
  			indexOffset = 0;
  			liborTimes = new double[forwardRates.length+1];
  		}
  
  		for(int liborIndex=firstLiborIndex;liborIndex<model.getNumberOfLibors();liborIndex++){
  			periodStart = model.getLiborPeriodDiscretization().getTime(liborIndex);
  			periodEnd   = model.getLiborPeriodDiscretization().getTime(liborIndex+1);
  			forwardRates[liborIndex-firstLiborIndex+indexOffset]=model.getLIBOR(time, periodStart, periodEnd);
  		}
  
  		for(int i=indexOffset;i<liborTimes.length;i++) {
  			liborTimes[i]=model.getLiborPeriod(firstLiborIndex+i-indexOffset)-time;
  		}
  		DiscountCurveInterpolation df = (DiscountCurveInterpolation) createDiscountFactorsFromForwardRates("",new TimeDiscretizationFromArray(liborTimes), forwardRates);
  		return df.getZeroRates(maturities);
  	}