// Path: src/main/java/org/firepick/firebom/exception/ProxyResolutionException.java
// public class ProxyResolutionException extends RuntimeException {
//     public ProxyResolutionException(Exception e) {
//         super(e);
//     }
// 
//     public ProxyResolutionException(String message) {
//         super(message);
//     }
// 
//     public ProxyResolutionException(String message, Exception e) {
//         super(message, e);
//     }
// }


import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.util.Locale.US;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import org.firepick.firebom.exception.ProxyResolutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.*;
import javax.xml.bind.DatatypeConverter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.X509Certificate;
                    isr = new InputStreamReader(connection.getInputStream());
                    int responseCode = connection.getResponseCode();
		    if (!isCached) {
		      logger.info("get({}) => {}", url, responseCode);
		    }
                    switch (responseCode) {
                        case HttpURLConnection.HTTP_MOVED_PERM:
                        case HttpURLConnection.HTTP_MOVED_TEMP: {
                            String location = connection.getHeaderField("Location");
                            url = new URL(location);
                            followRedirect = true;
                            break;
                        }
                        default:
                            followRedirect = false;
                            break;
                    }
                } while (followRedirect && (++nFollows <= 5));
                BufferedReader br = new BufferedReader(isr);
                response = new StringBuilder();
                String inputLine;

                while ((inputLine = br.readLine()) != null) {
                    response.append(inputLine);
                }
                br.close();
            }
            catch (Exception e) {
                cacheElement = new Element(url, e);
                getCache("URL-contents").put(cacheElement);
// Path: src/main/java/org/firepick/firebom/exception/ProxyResolutionException.java
// public class ProxyResolutionException extends RuntimeException {
//     public ProxyResolutionException(Exception e) {
//         super(e);
//     }
// 
//     public ProxyResolutionException(String message) {
//         super(message);
//     }
// 
//     public ProxyResolutionException(String message, Exception e) {
//         super(message, e);
//     }
// }


// Path: src/main/java/org/firepick/firebom/part/CachedUrlResolver.java
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.util.Locale.US;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import org.firepick.firebom.exception.ProxyResolutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.*;
import javax.xml.bind.DatatypeConverter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.X509Certificate;

                    isr = new InputStreamReader(connection.getInputStream());
                    int responseCode = connection.getResponseCode();
		    if (!isCached) {
		      logger.info("get({}) => {}", url, responseCode);
		    }
                    switch (responseCode) {
                        case HttpURLConnection.HTTP_MOVED_PERM:
                        case HttpURLConnection.HTTP_MOVED_TEMP: {
                            String location = connection.getHeaderField("Location");
                            url = new URL(location);
                            followRedirect = true;
                            break;
                        }
                        default:
                            followRedirect = false;
                            break;
                    }
                } while (followRedirect && (++nFollows <= 5));
                BufferedReader br = new BufferedReader(isr);
                response = new StringBuilder();
                String inputLine;

                while ((inputLine = br.readLine()) != null) {
                    response.append(inputLine);
                }
                br.close();
            }
            catch (Exception e) {
                cacheElement = new Element(url, e);
                getCache("URL-contents").put(cacheElement);
                throw new ProxyResolutionException(url.toString(), e);