docs: @FFDCIgnore({ IndexOutOfBoundsException.class })
      public boolean validateReqParameters(ConvergedClientConfig clientConfig, Hashtable<String, String> reqParameters, String cookieValue) {
          boolean validCookie = true;
          String encoded = null;
          String cookieName = "WASOidcCode";
          String requestParameters = null;
  
          try {
              int lastindex = cookieValue.lastIndexOf("_");
              if (lastindex < 1) {
                  if (tc.isDebugEnabled()) {
                      Tr.debug(tc, "The cookie may have been tampered with.");
                      if (lastindex < 0) {
                          Tr.debug(tc, "The cookie does not contain an underscore.");
                      }
                      if (lastindex == 0) {
                          Tr.debug(tc, "The cookie does not contain a value before the underscore.");
                      }
                  }
                  return false;
              }
              encoded = cookieValue.substring(0, lastindex);
              String testCookie = OidcClientUtil.calculateOidcCodeCookieValue(encoded, clientConfig);
  
              if (!cookieValue.equals(testCookie)) {
                  String msg = "The value for the OIDC state cookie [" + cookieName + "] failed validation.";
                  if (tc.isDebugEnabled()) {
                      Tr.debug(tc, msg);
                  }
                  validCookie = false;
              }
          } catch (IndexOutOfBoundsException e) {
              // anything wrong indicated the requestParameter cookie is not right or is not in right format
              validCookie = false;
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "unexpected exception:", e);
              }
          }
  
          if (validCookie) {
              requestParameters = Base64Coder.toString(Base64Coder.base64DecodeString(encoded));
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "decodedRequestParameters:" + requestParameters);
              }
              JsonParser parser = new JsonParser();
              JsonObject jsonObject = (JsonObject) parser.parse(requestParameters);
              Set<Map.Entry<String, JsonElement>> entries = jsonObject.entrySet();
              for (Map.Entry<String, JsonElement> entry : entries) {
                  String key = entry.getKey();
                  JsonElement element = entry.getValue();
                  if (element.isJsonObject() || element.isJsonPrimitive()) {
                      reqParameters.put(key, element.getAsString());
                      if (tc.isDebugEnabled()) {
                          Tr.debug(tc, "parameterKey:" + key + "  value:" + element.getAsString());
                      }
                  } else { // this should not happen
                      if (tc.isDebugEnabled()) {
                          Tr.debug(tc, "unexpected json element:" + element.getClass().getName());
                      }
                      validCookie = false;
                  }
              }
          }
          return validCookie;
      }