protected SnmpValue decodeValueContext()
                                                throws BerException {
        try {
            byte tag = (byte)decodeTag(-1);
            int length = decodeLength();
            if (debug) dump("Context " + tag + " length " + length + " " + SNMP_ENDOFMIBVIEW);
            if ((tag == SNMP_NOSUCHOBJECT) ||
                (tag == SNMP_NOSUCHINSTANCE) ||
                (tag == SNMP_ENDOFMIBVIEW)) {
                if (debug) dump("Known context " + tag + " length " + length);
                while (length > 0) {
                    read();
                }
                return new SnmpNull(ASN_TYPE & tag);
            }
            if (debug) dump("Unknown context " + tag + " length " + length + "(just skipping)");
            byte[] buffer = new byte[length];
            for (int i = 0 ; i < length ; i++) {
                buffer[i]= (byte)read();
            }
            return new SnmpOctetStr(buffer);
        } catch (SnmpValueException e) {
        }
        throw new BerException("A context encoding error");
    }