code: func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error {
  	for backoff.Steps > 0 {
  		if ok, err := condition(); err != nil || ok {
  			return err
  		}
  		if backoff.Steps == 1 {
  			break
  		}
  		time.Sleep(backoff.Step())
  	}
  	return ErrWaitTimeout
  }
docs: // ExponentialBackoff repeats a condition check with exponential backoff.
  //
  // It checks the condition up to Steps times, increasing the wait by multiplying
  // the previous duration by Factor.
  //
  // If Jitter is greater than zero, a random amount of each duration is added
  // (between duration and duration*(1+jitter)).
  //
  // If the condition never returns true, ErrWaitTimeout is returned. All other
  // errors terminate immediately.