// Path: src/main/java/net/klakegg/pkix/ocsp/api/OcspFetcher.java
// public interface OcspFetcher {
// 
//     OcspFetcherResponse fetch(URI uri, byte[] content) throws IOException;
// 
// }
// 
// Path: src/main/java/net/klakegg/pkix/ocsp/builder/Properties.java
// public class Properties {
// 
//     private Map<Property<?>, Object> map;
// 
//     protected Properties(Map<Property<?>, Object> map) {
//         this.map = map;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <S> S get(Property<S> property) {
//         return map.containsKey(property) ? (S) map.get(property) : property.getDefaultValue();
//     }
// }
// 
// Path: src/main/java/net/klakegg/pkix/ocsp/builder/Property.java
// public class Property<T> {
// 
//     private final T defaultValue;
// 
//     public static <T> Property<T> create() {
//         return new Property<>(null);
//     }
// 
//     public static <T> Property<T> create(T defaultValue) {
//         return new Property<>(defaultValue);
//     }
// 
//     private Property(T defaultValue) {
//         this.defaultValue = defaultValue;
//     }
// 
//     public T getDefaultValue() {
//         return defaultValue;
//     }
// 
// }


import net.klakegg.pkix.ocsp.api.OcspFetcher;
import net.klakegg.pkix.ocsp.builder.Properties;
import net.klakegg.pkix.ocsp.builder.Property;
package net.klakegg.pkix.ocsp.fetcher;


/**
 * @author erlend
 */
abstract class AbstractOcspFetcher implements OcspFetcher {

    public static final Property<Integer> TIMEOUT_CONNECT = Property.create(15000);

    public static final Property<Integer> TIMEOUT_READ = Property.create(15000);

    protected final Properties properties;

    protected AbstractOcspFetcher(Properties properties) {
// Path: src/main/java/net/klakegg/pkix/ocsp/api/OcspFetcher.java
// public interface OcspFetcher {
// 
//     OcspFetcherResponse fetch(URI uri, byte[] content) throws IOException;
// 
// }
// 
// Path: src/main/java/net/klakegg/pkix/ocsp/builder/Properties.java
// public class Properties {
// 
//     private Map<Property<?>, Object> map;
// 
//     protected Properties(Map<Property<?>, Object> map) {
//         this.map = map;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <S> S get(Property<S> property) {
//         return map.containsKey(property) ? (S) map.get(property) : property.getDefaultValue();
//     }
// }
// 
// Path: src/main/java/net/klakegg/pkix/ocsp/builder/Property.java
// public class Property<T> {
// 
//     private final T defaultValue;
// 
//     public static <T> Property<T> create() {
//         return new Property<>(null);
//     }
// 
//     public static <T> Property<T> create(T defaultValue) {
//         return new Property<>(defaultValue);
//     }
// 
//     private Property(T defaultValue) {
//         this.defaultValue = defaultValue;
//     }
// 
//     public T getDefaultValue() {
//         return defaultValue;
//     }
// 
// }


// Path: src/main/java/net/klakegg/pkix/ocsp/fetcher/AbstractOcspFetcher.java
import net.klakegg.pkix.ocsp.api.OcspFetcher;
import net.klakegg.pkix.ocsp.builder.Properties;
import net.klakegg.pkix.ocsp.builder.Property;

package net.klakegg.pkix.ocsp.fetcher;


/**
 * @author erlend
 */
abstract class AbstractOcspFetcher implements OcspFetcher {

    public static final Property<Integer> TIMEOUT_CONNECT = Property.create(15000);

    public static final Property<Integer> TIMEOUT_READ = Property.create(15000);

    protected final Properties properties;

    protected AbstractOcspFetcher(Properties properties) {
        this.properties = properties;