docs: public GetSessionResponse getSessionWithToken(String sessionId, Integer timeoutInMinute) {
          GetSessionResponse getSessionResponse = getSession(sessionId);
          if (timeoutInMinute == null) {
              return getSessionResponse;
          }
          DateTime dateTime = new DateTime(DateTimeZone.UTC);
          DateTime expireTime = dateTime.plusMinutes(timeoutInMinute);
          DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
          String expire = formatter.print(expireTime);
  
          GetSecurityPolicyResponse getSecurityPolicyResponse = getSecurityPolicy(getSessionResponse.getSecurityPolicy());
          Map<String, String> hlsUrls = new HashMap<String, String>();
          Map<String, String> rtmpUrls = new HashMap<String, String>();
          Map<String, String> flvUrls = new HashMap<String, String>();
          if (getSecurityPolicyResponse.getAuth().getPlay()) {
              if (getSessionResponse.getPlay().getHlsUrls() != null) {
                  for (Map.Entry<String, String> entry : getSessionResponse.getPlay().getHlsUrls().entrySet()) {
                      String line = entry.getKey();
                      String hlsUrl = entry.getValue();
                      if (hlsUrl != null) {
                          String hlsToken = null;
                          if (line.equals("L0")) {
                              hlsToken = LssUtils.hmacSha256(
                                      String.format("/%s/live.m3u8;%s", sessionId, expire),
                                      getSecurityPolicyResponse.getAuth().getKey());
                          } else {
                              hlsToken = LssUtils.hmacSha256(
                                      String.format("/%s-%s/live.m3u8;%s", sessionId, line, expire),
                                      getSecurityPolicyResponse.getAuth().getKey());
                          }
                          if (hlsUrl.lastIndexOf('?') == -1) {
                              hlsUrl += String.format("?token=%s&expire=%s", hlsToken, expire);
                          } else {
                              hlsUrl += String.format("&token=%s&expire=%s", hlsToken, expire);
                          }
                          hlsUrls.put(line, hlsUrl);
                      }
                  }
  
                  getSessionResponse.getPlay().setHlsUrls(hlsUrls);
              } else if (getSessionResponse.getPlay().getHlsUrl() != null) {
                  String hlsUrl = getSessionResponse.getPlay().getHlsUrl();
                  String hlsToken = LssUtils.hmacSha256(
                          String.format("/%s/live.m3u8;%s", sessionId, expire),
                          getSecurityPolicyResponse.getAuth().getKey());
                  if (hlsUrl.lastIndexOf('?') == -1) {
                      hlsUrl += String.format("?token=%s&expire=%s", hlsToken, expire);
                  } else {
                      hlsUrl += String.format("&token=%s&expire=%s", hlsToken, expire);
                  }
  
                  getSessionResponse.getPlay().setHlsUrl(hlsUrl);
              }
  
              if (getSessionResponse.getPlay().getRtmpUrls() != null) {
                  for (Map.Entry<String, String> entry : getSessionResponse.getPlay().getRtmpUrls().entrySet()) {
                      String line = entry.getKey();
                      String rtmpUrl = entry.getValue();
                      if (rtmpUrl != null) {
                          String rtmpToken = LssUtils.hmacSha256(
                                  String.format("%s;%s", sessionId, expire),
                                  getSecurityPolicyResponse.getAuth().getKey());
                          rtmpUrl += String.format("?token=%s&expire=%s", rtmpToken, expire);
                      }
                      rtmpUrls.put(line, rtmpUrl);
                  }
  
                  getSessionResponse.getPlay().setRtmpUrls(rtmpUrls);
              } else if (getSessionResponse.getPlay().getRtmpUrl() != null) {
                  String rtmpUrl = getSessionResponse.getPlay().getRtmpUrl();
                  String rtmpToken = LssUtils.hmacSha256(
                          String.format("%s;%s", sessionId, expire),
                          getSecurityPolicyResponse.getAuth().getKey());
                  rtmpUrl += String.format("?token=%s&expire=%s", rtmpToken, expire);
  
                  getSessionResponse.getPlay().setRtmpUrl(rtmpUrl);
              }
  
              if (getSessionResponse.getPlay().getFlvUrls() != null) {
                  for (Map.Entry<String, String> entry : getSessionResponse.getPlay().getFlvUrls().entrySet()) {
                      String line = entry.getKey();
                      String flvUrl = entry.getValue();
                      if (flvUrl != null) {
                          String flvToken = LssUtils.hmacSha256(
                                  String.format("%s;%s", flvUrl, expire),
                                  getSecurityPolicyResponse.getAuth().getKey());
                          flvUrl += String.format("?token=%s&expire=%s", flvToken, expire);
                      }
                      flvUrls.put(line, flvUrl);
                  }
  
                  getSessionResponse.getPlay().setFlvUrls(flvUrls);
              } else if (getSessionResponse.getPlay().getFlvUrl() != null) {
                  String flvUrl = getSessionResponse.getPlay().getFlvUrl();
                  String flvToken = LssUtils.hmacSha256(
                          String.format("%s;%s", flvUrl, expire),
                          getSecurityPolicyResponse.getAuth().getKey());
                  flvUrl += String.format("?token=%s&expire=%s", flvToken, expire);
  
                  getSessionResponse.getPlay().setFlvUrl(flvUrl);
  
              }
          }
  
          if (getSecurityPolicyResponse.getAuth().getPush()) {
              String pushUrl = getSessionResponse.getPublish().getPushUrl();
              String pushToken = LssUtils.hmacSha256(
                      String.format("%s;%s", getSessionResponse.getPublish().getPushStream(), expire),
                      getSecurityPolicyResponse.getAuth().getKey());
              pushUrl += String.format("?token=%s&expire=%s", pushToken, expire);
              getSessionResponse.getPublish().setPushUrl(pushUrl);
          }
  
          return getSessionResponse;
      }