code: @Override
      public boolean getPermission(final Duration timeoutDuration) {
          long timeoutInNanos = timeoutDuration.toNanos();
          State modifiedState = updateStateWithBackOff(timeoutInNanos);
          boolean result = waitForPermissionIfNecessary(timeoutInNanos, modifiedState.nanosToWait);
          publishRateLimiterEvent(result);
          return result;
      }
docs: {@inheritDoc}