@Override
  public Throwable getThrowable(Throwable theThrowable, KnownVersion clientVersion) {

    if (theThrowable == null) {
      return theThrowable;
    }

    // backward compatibility for authentication expiration
    if (clientVersion.isOlderThan(ClientReAuthenticateMessage.RE_AUTHENTICATION_START_VERSION)) {
      if (theThrowable instanceof AuthenticationExpiredException) {
        return new AuthenticationRequiredException(USER_NOT_FOUND);
      }
      Throwable cause = theThrowable.getCause();
      if (cause instanceof AuthenticationExpiredException) {
        return new AuthenticationRequiredException(USER_NOT_FOUND);
      }
    }

    if (clientVersion.isNotOlderThan(KnownVersion.GFE_90)) {
      return theThrowable;
    }

    String className = theThrowable.getClass().getName();
    // this class has been renamed, so it cannot be automatically translated
    // during java deserialization
    if (className.equals("org.apache.geode.cache.execute.EmptyRegionFunctionException")) {
      return new EmtpyRegionFunctionException(theThrowable.getMessage(), theThrowable.getCause());
    }

    // other exceptions will be translated automatically by receivers
    return theThrowable;
  }
whether to always convert new package names to old on outgoing serialization
geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java