docs: private void waitForConditionOrTimeout() throws InterruptedException {
          waitStart = System.currentTimeMillis();
          while (state == State.RequestSent || state == State.Initial) {
              long timeout = connection.getReplyTimeout();
              long remainingWaitMillis = timeout - (System.currentTimeMillis() - waitStart);
              long remainingWait = TimeUnit.MILLISECONDS.toNanos(remainingWaitMillis);
  
              if (remainingWait <= 0) {
                  state = State.NoResponse;
                  break;
              }
  
              try {
                  condition.awaitNanos(remainingWait);
              } catch (InterruptedException e) {
                  state = State.Interrupted;
                  throw e;
              }
          }
      }