// Path: okhttp/src/main/java/net/qiujuer/common/okhttp/Util.java
// @SuppressWarnings("ALL")
// public final class Util {
// 
//     private static final String LOG_TAG = "QOK";
// 
//     public static <T> T[] listToParams(List<T> params, Class<T> tClass) {
//         if (params == null || params.size() == 0)
//             return (T[]) Array.newInstance(tClass, 0);
// 
//         int size = params.size();
// 
//         try {
//             T[] array = (T[]) Array.newInstance(tClass, size);
//             return (T[]) params.toArray(array);
//         } catch (Exception e) {
//             e.printStackTrace();
//             return (T[]) Array.newInstance(tClass, 0);
//         }
//     }
// 
//     public static StrParam[] mapToStringParams(Map<String, String> params) {
//         if (params == null) return new StrParam[0];
//         int size = params.size();
//         if (size == 0) return new StrParam[0];
//         StrParam[] res = new StrParam[size];
//         Set<Map.Entry<String, String>> entries = params.entrySet();
//         int i = 0;
//         for (Map.Entry<String, String> entry : entries) {
//             res[i++] = new StrParam(entry.getKey(), entry.getValue());
//         }
//         return res;
//     }
// 
//     public static IOParam[] mapToFileParams(Map<String, File> params) {
//         if (params == null) return new IOParam[0];
//         int size = params.size();
//         if (size == 0) return new IOParam[0];
//         IOParam[] res = new IOParam[size];
//         Set<Map.Entry<String, File>> entries = params.entrySet();
//         int i = 0;
//         for (Map.Entry<String, File> entry : entries) {
//             res[i++] = new IOParam(entry.getKey(), entry.getValue());
//         }
//         return res;
//     }
// 
//     public static String getFileMimeType(String path) {
//         FileNameMap fileNameMap = URLConnection.getFileNameMap();
//         String contentTypeFor = fileNameMap.getContentTypeFor(path);
//         if (contentTypeFor == null) {
//             contentTypeFor = "application/octet-stream";
//         }
//         return contentTypeFor;
//     }
// 
//     public static File getFile(String fileDir, String fileName, String url) {
//         // check the file dir
//         if (TextUtils.isEmpty(fileDir))
//             throw new NullPointerException("File Dir is not null.");
// 
//         // make dir
//         File dir = new File(fileDir);
//         if (!dir.exists()) {
//             dir.mkdirs();
//         }
// 
//         // check the file name
//         if (TextUtils.isEmpty(fileName)) {
//             int separatorIndex = url.lastIndexOf("/");
//             fileName = (separatorIndex < 0) ? url : url.substring(separatorIndex + 1, url.length());
//             if (TextUtils.isEmpty(fileName) || !fileName.contains("."))
//                 fileName = String.valueOf(System.currentTimeMillis()) + ".cache";
//         }
// 
//         return new File(dir, fileName);
//     }
// 
//     public static File makeFile(File file) {
//         if (file.exists()) {
//             file.delete();
//         }
// 
//         if (!file.exists()) {
//             try {
//                 file.createNewFile();
//             } catch (IOException e) {
//                 e.printStackTrace();
//             }
//         }
//         return file;
//     }
// 
//     public static String cookieHeader(List<Cookie> cookies) {
//         StringBuilder cookieHeader = new StringBuilder();
//         for (int i = 0, size = cookies.size(); i < size; i++) {
//             if (i > 0) {
//                 cookieHeader.append("; ");
//             }
//             Cookie cookie = cookies.get(i);
//             cookieHeader.append(cookie.name()).append('=').append(cookie.value());
//         }
//         return cookieHeader.toString();
//     }
// 
//     // Show log
//     public static void log(String msg) {
//         if (HttpCore.DEBUG && !TextUtils.isEmpty(msg))
//             Log.d(LOG_TAG, msg);
//     }
// 
//     public static void log(String fromat, Object... strs) {
//         if (HttpCore.DEBUG && !TextUtils.isEmpty(fromat) && strs != null)
//             Log.d(LOG_TAG, String.format(fromat, strs));
//     }
// 
// 
//     public static void log(String msg, Throwable tr) {
//         if (HttpCore.DEBUG && !TextUtils.isEmpty(msg))
//             Log.d(LOG_TAG, msg, tr);
//     }
// 
//     // Show Error
//     public static void exception(Exception e) {
//         if (HttpCore.DEBUG && e != null)
//             e.printStackTrace();
//     }
// }


import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import net.qiujuer.common.okhttp.Util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
        return ret;
    }

    @Override
    public List<HttpUrl> getHttpUrls() {
        ArrayList<HttpUrl> ret = new ArrayList<HttpUrl>();
        for (String key : cookies.keySet())
            try {
                ret.add(new HttpUrl.Builder().host(key).build());
            } catch (Exception e) {
                e.printStackTrace();
            }

        return ret;
    }

    /**
     * Serializes Cookie object into String
     *
     * @param cookie cookie to be encoded, can be null
     * @return cookie encoded as String
     */
    protected String encodeCookie(SerializableHttpCookie cookie) {
        if (cookie == null)
            return null;
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            ObjectOutputStream outputStream = new ObjectOutputStream(os);
            outputStream.writeObject(cookie);
        } catch (IOException e) {
// Path: okhttp/src/main/java/net/qiujuer/common/okhttp/Util.java
// @SuppressWarnings("ALL")
// public final class Util {
// 
//     private static final String LOG_TAG = "QOK";
// 
//     public static <T> T[] listToParams(List<T> params, Class<T> tClass) {
//         if (params == null || params.size() == 0)
//             return (T[]) Array.newInstance(tClass, 0);
// 
//         int size = params.size();
// 
//         try {
//             T[] array = (T[]) Array.newInstance(tClass, size);
//             return (T[]) params.toArray(array);
//         } catch (Exception e) {
//             e.printStackTrace();
//             return (T[]) Array.newInstance(tClass, 0);
//         }
//     }
// 
//     public static StrParam[] mapToStringParams(Map<String, String> params) {
//         if (params == null) return new StrParam[0];
//         int size = params.size();
//         if (size == 0) return new StrParam[0];
//         StrParam[] res = new StrParam[size];
//         Set<Map.Entry<String, String>> entries = params.entrySet();
//         int i = 0;
//         for (Map.Entry<String, String> entry : entries) {
//             res[i++] = new StrParam(entry.getKey(), entry.getValue());
//         }
//         return res;
//     }
// 
//     public static IOParam[] mapToFileParams(Map<String, File> params) {
//         if (params == null) return new IOParam[0];
//         int size = params.size();
//         if (size == 0) return new IOParam[0];
//         IOParam[] res = new IOParam[size];
//         Set<Map.Entry<String, File>> entries = params.entrySet();
//         int i = 0;
//         for (Map.Entry<String, File> entry : entries) {
//             res[i++] = new IOParam(entry.getKey(), entry.getValue());
//         }
//         return res;
//     }
// 
//     public static String getFileMimeType(String path) {
//         FileNameMap fileNameMap = URLConnection.getFileNameMap();
//         String contentTypeFor = fileNameMap.getContentTypeFor(path);
//         if (contentTypeFor == null) {
//             contentTypeFor = "application/octet-stream";
//         }
//         return contentTypeFor;
//     }
// 
//     public static File getFile(String fileDir, String fileName, String url) {
//         // check the file dir
//         if (TextUtils.isEmpty(fileDir))
//             throw new NullPointerException("File Dir is not null.");
// 
//         // make dir
//         File dir = new File(fileDir);
//         if (!dir.exists()) {
//             dir.mkdirs();
//         }
// 
//         // check the file name
//         if (TextUtils.isEmpty(fileName)) {
//             int separatorIndex = url.lastIndexOf("/");
//             fileName = (separatorIndex < 0) ? url : url.substring(separatorIndex + 1, url.length());
//             if (TextUtils.isEmpty(fileName) || !fileName.contains("."))
//                 fileName = String.valueOf(System.currentTimeMillis()) + ".cache";
//         }
// 
//         return new File(dir, fileName);
//     }
// 
//     public static File makeFile(File file) {
//         if (file.exists()) {
//             file.delete();
//         }
// 
//         if (!file.exists()) {
//             try {
//                 file.createNewFile();
//             } catch (IOException e) {
//                 e.printStackTrace();
//             }
//         }
//         return file;
//     }
// 
//     public static String cookieHeader(List<Cookie> cookies) {
//         StringBuilder cookieHeader = new StringBuilder();
//         for (int i = 0, size = cookies.size(); i < size; i++) {
//             if (i > 0) {
//                 cookieHeader.append("; ");
//             }
//             Cookie cookie = cookies.get(i);
//             cookieHeader.append(cookie.name()).append('=').append(cookie.value());
//         }
//         return cookieHeader.toString();
//     }
// 
//     // Show log
//     public static void log(String msg) {
//         if (HttpCore.DEBUG && !TextUtils.isEmpty(msg))
//             Log.d(LOG_TAG, msg);
//     }
// 
//     public static void log(String fromat, Object... strs) {
//         if (HttpCore.DEBUG && !TextUtils.isEmpty(fromat) && strs != null)
//             Log.d(LOG_TAG, String.format(fromat, strs));
//     }
// 
// 
//     public static void log(String msg, Throwable tr) {
//         if (HttpCore.DEBUG && !TextUtils.isEmpty(msg))
//             Log.d(LOG_TAG, msg, tr);
//     }
// 
//     // Show Error
//     public static void exception(Exception e) {
//         if (HttpCore.DEBUG && e != null)
//             e.printStackTrace();
//     }
// }


// Path: okhttp/src/main/java/net/qiujuer/common/okhttp/cookie/PersistentCookieStore.java
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import net.qiujuer.common.okhttp.Util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;

        return ret;
    }

    @Override
    public List<HttpUrl> getHttpUrls() {
        ArrayList<HttpUrl> ret = new ArrayList<HttpUrl>();
        for (String key : cookies.keySet())
            try {
                ret.add(new HttpUrl.Builder().host(key).build());
            } catch (Exception e) {
                e.printStackTrace();
            }

        return ret;
    }

    /**
     * Serializes Cookie object into String
     *
     * @param cookie cookie to be encoded, can be null
     * @return cookie encoded as String
     */
    protected String encodeCookie(SerializableHttpCookie cookie) {
        if (cookie == null)
            return null;
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            ObjectOutputStream outputStream = new ObjectOutputStream(os);
            outputStream.writeObject(cookie);
        } catch (IOException e) {
            Util.log("IOException in encodeCookie", e);