// Path: src/main/java/com/xiaomi/infra/galaxy/fds/android/auth/GalaxyFDSCredential.java
// public interface GalaxyFDSCredential {
// 
//   /**
//    * Add HTTP header to request
//    * @param request
//    */
//   void addHeader(HttpRequestBase request) throws GalaxyFDSClientException;
// 
//   /**
//    * Adds parameter to the URL string
//    * @param uri
//    * @return
//    */
//   String addParam(String uri);
// }
// 
// Path: src/main/java/com/xiaomi/infra/galaxy/fds/android/util/Args.java
// public class Args {
// 
//   public static void check(final boolean expression, final String message) {
//     if (!expression) {
//       throw new IllegalArgumentException(message);
//     }
//   }
// 
//   public static void check(final boolean expression, final String message,
//       final Object... args) {
//     if (!expression) {
//       throw new IllegalArgumentException(String.format(message, args));
//     }
//   }
// 
//   public static void check(final boolean expression, final String message,
//       final Object arg) {
//     if (!expression) {
//       throw new IllegalArgumentException(String.format(message, arg));
//     }
//   }
// 
//   public static <T> T notNull(final T argument, final String name) {
//     if (argument == null) {
//       throw new IllegalArgumentException(name + " may not be null");
//     }
//     return argument;
//   }
// 
//   public static <T extends CharSequence> T notEmpty(final T argument,
//       final String name) {
//     if (argument == null) {
//       throw new IllegalArgumentException(name + " may not be null");
//     }
//     if (argument.length() == 0) {
//       throw new IllegalArgumentException(name + " may not be empty");
//     }
//     return argument;
//   }
// 
//   public static int positive(final int n, final String name) {
//     if (n <= 0) {
//       throw new IllegalArgumentException(name + " may not be negative or zero");
//     }
//     return n;
//   }
// 
//   public static long positive(final long n, final String name) {
//     if (n <= 0) {
//       throw new IllegalArgumentException(name + " may not be negative or zero");
//     }
//     return n;
//   }
// 
//   public static int notNegative(final int n, final String name) {
//     if (n < 0) {
//       throw new IllegalArgumentException(name + " may not be negative");
//     }
//     return n;
//   }
// 
//   public static long notNegative(final long n, final String name) {
//     if (n < 0) {
//       throw new IllegalArgumentException(name + " may not be negative");
//     }
//     return n;
//   }
// 
// }


import com.xiaomi.infra.galaxy.fds.android.auth.GalaxyFDSCredential;
import com.xiaomi.infra.galaxy.fds.android.util.Args;

  public static final int DEFAULT_WORK_QUEUE_CAPACITY = 10240;

  private int workQueueCapacity = DEFAULT_WORK_QUEUE_CAPACITY;

  /**
   * The credential of FDS client
   */
  private GalaxyFDSCredential credential;

  private String regionName = "cnbj0";
  private boolean enableHttps = true;
  private boolean enableCdnForUpload = false;
  private boolean enableCdnForDownload = true;

  private boolean enableUnitTestMode = false;
  private String baseUriForUnitTest = "";
  private String endpoint;

  /**
   * Returns the maximum number of retry attempts for failed requests
   */
  public int getMaxRetryTimes() {
    return maxRetryTimes;
  }

  /**
   * Sets the maximum number of retry attempts for failed requests
   */
  public void setMaxRetryTimes(int maxRetryTimes) {
// Path: src/main/java/com/xiaomi/infra/galaxy/fds/android/auth/GalaxyFDSCredential.java
// public interface GalaxyFDSCredential {
// 
//   /**
//    * Add HTTP header to request
//    * @param request
//    */
//   void addHeader(HttpRequestBase request) throws GalaxyFDSClientException;
// 
//   /**
//    * Adds parameter to the URL string
//    * @param uri
//    * @return
//    */
//   String addParam(String uri);
// }
// 
// Path: src/main/java/com/xiaomi/infra/galaxy/fds/android/util/Args.java
// public class Args {
// 
//   public static void check(final boolean expression, final String message) {
//     if (!expression) {
//       throw new IllegalArgumentException(message);
//     }
//   }
// 
//   public static void check(final boolean expression, final String message,
//       final Object... args) {
//     if (!expression) {
//       throw new IllegalArgumentException(String.format(message, args));
//     }
//   }
// 
//   public static void check(final boolean expression, final String message,
//       final Object arg) {
//     if (!expression) {
//       throw new IllegalArgumentException(String.format(message, arg));
//     }
//   }
// 
//   public static <T> T notNull(final T argument, final String name) {
//     if (argument == null) {
//       throw new IllegalArgumentException(name + " may not be null");
//     }
//     return argument;
//   }
// 
//   public static <T extends CharSequence> T notEmpty(final T argument,
//       final String name) {
//     if (argument == null) {
//       throw new IllegalArgumentException(name + " may not be null");
//     }
//     if (argument.length() == 0) {
//       throw new IllegalArgumentException(name + " may not be empty");
//     }
//     return argument;
//   }
// 
//   public static int positive(final int n, final String name) {
//     if (n <= 0) {
//       throw new IllegalArgumentException(name + " may not be negative or zero");
//     }
//     return n;
//   }
// 
//   public static long positive(final long n, final String name) {
//     if (n <= 0) {
//       throw new IllegalArgumentException(name + " may not be negative or zero");
//     }
//     return n;
//   }
// 
//   public static int notNegative(final int n, final String name) {
//     if (n < 0) {
//       throw new IllegalArgumentException(name + " may not be negative");
//     }
//     return n;
//   }
// 
//   public static long notNegative(final long n, final String name) {
//     if (n < 0) {
//       throw new IllegalArgumentException(name + " may not be negative");
//     }
//     return n;
//   }
// 
// }


// Path: src/main/java/com/xiaomi/infra/galaxy/fds/android/FDSClientConfiguration.java
import com.xiaomi.infra.galaxy.fds.android.auth.GalaxyFDSCredential;
import com.xiaomi.infra.galaxy.fds.android.util.Args;


  public static final int DEFAULT_WORK_QUEUE_CAPACITY = 10240;

  private int workQueueCapacity = DEFAULT_WORK_QUEUE_CAPACITY;

  /**
   * The credential of FDS client
   */
  private GalaxyFDSCredential credential;

  private String regionName = "cnbj0";
  private boolean enableHttps = true;
  private boolean enableCdnForUpload = false;
  private boolean enableCdnForDownload = true;

  private boolean enableUnitTestMode = false;
  private String baseUriForUnitTest = "";
  private String endpoint;

  /**
   * Returns the maximum number of retry attempts for failed requests
   */
  public int getMaxRetryTimes() {
    return maxRetryTimes;
  }

  /**
   * Sets the maximum number of retry attempts for failed requests
   */
  public void setMaxRetryTimes(int maxRetryTimes) {
    Args.notNegative(maxRetryTimes, "max retry times");