// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/acl/ACLItemMethod.java
// public enum ACLItemMethod {
//     DIRECT,
//     PROXY,
//     REJECT
// }
// 
// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/acl/ACLItemType.java
// public enum ACLItemType {
//     DOMAIN,
//     DOMAIN_SUFFIX,
//     IPv4,
//     IPv4_CIDR,
//     IPv6,
//     IPv6_CIDR
// }
// 
// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/exception/InvalidAddressException.java
// public class InvalidAddressException extends Exception {
// 
//     public InvalidAddressException(final String msg) {
//         super(msg);
//     }
// 
// }


import com.vecsight.dragonite.proxy.acl.ACLItemMethod;
import com.vecsight.dragonite.proxy.acl.ACLItemType;
import com.vecsight.dragonite.proxy.exception.InvalidAddressException;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;
            throw new InvalidAddressException(string + " is not a valid IPv6 CIDR address");
        }

        final byte[] ipBytes;
        try {
            ipBytes = InetAddress.getByName(stringSplit[0]).getAddress();
            if (ipBytes.length != 16) throw new InvalidAddressException(string + " is not a valid IPv6 address");
        } catch (final UnknownHostException e) {
            throw new InvalidAddressException(stringSplit[0] + " is not a valid IPv6 address");
        }

        final int cidrShift;
        try {
            cidrShift = Integer.parseInt(stringSplit[1]);
            if (cidrShift < 1 || cidrShift > 128)
                throw new InvalidAddressException(string + " is not a valid IPv6 CIDR address");
        } catch (final NumberFormatException e) {
            throw new InvalidAddressException(string + " is not a valid IPv4 CIDR address");
        }

        final BigInteger mask = (new BigInteger(1, MASK_BASE)).not().shiftRight(cidrShift);

        final BigInteger ipVal = new BigInteger(1, ipBytes);

        lowest = ipVal.and(mask);

        highest = lowest.add(mask.not());
    }

    @Override
// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/acl/ACLItemMethod.java
// public enum ACLItemMethod {
//     DIRECT,
//     PROXY,
//     REJECT
// }
// 
// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/acl/ACLItemType.java
// public enum ACLItemType {
//     DOMAIN,
//     DOMAIN_SUFFIX,
//     IPv4,
//     IPv4_CIDR,
//     IPv6,
//     IPv6_CIDR
// }
// 
// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/exception/InvalidAddressException.java
// public class InvalidAddressException extends Exception {
// 
//     public InvalidAddressException(final String msg) {
//         super(msg);
//     }
// 
// }


// Path: dragonite-proxy/src/main/java/com/vecsight/dragonite/proxy/acl/item/IPv6CIDRACLItem.java
import com.vecsight.dragonite.proxy.acl.ACLItemMethod;
import com.vecsight.dragonite.proxy.acl.ACLItemType;
import com.vecsight.dragonite.proxy.exception.InvalidAddressException;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;

            throw new InvalidAddressException(string + " is not a valid IPv6 CIDR address");
        }

        final byte[] ipBytes;
        try {
            ipBytes = InetAddress.getByName(stringSplit[0]).getAddress();
            if (ipBytes.length != 16) throw new InvalidAddressException(string + " is not a valid IPv6 address");
        } catch (final UnknownHostException e) {
            throw new InvalidAddressException(stringSplit[0] + " is not a valid IPv6 address");
        }

        final int cidrShift;
        try {
            cidrShift = Integer.parseInt(stringSplit[1]);
            if (cidrShift < 1 || cidrShift > 128)
                throw new InvalidAddressException(string + " is not a valid IPv6 CIDR address");
        } catch (final NumberFormatException e) {
            throw new InvalidAddressException(string + " is not a valid IPv4 CIDR address");
        }

        final BigInteger mask = (new BigInteger(1, MASK_BASE)).not().shiftRight(cidrShift);

        final BigInteger ipVal = new BigInteger(1, ipBytes);

        lowest = ipVal.and(mask);

        highest = lowest.add(mask.not());
    }

    @Override
    public ACLItemType getType() {