private <T extends Enum<? extends IntValueHolder> & IntValueHolder> int getValue(String name, T[] values, int def) {
		String prop = props.getProperty(name);
		if (prop != null && prop.length() > 0) {
			String trimmed = prop.trim();
			String[] args = trimmed.split(" ");
			int base = 0;
			String offset;
			if (args.length == 2) {
				base = valueOf (args[0], values).getValue();
				if (base == def) {
					base = getValue(args[0], values, def);
				}
				offset = args[1];
			} else {
				offset = args[0];
			}
			if (offset.length() > 2 && offset.substring(0, 2).equals("0x")) {
				return Integer.parseInt(offset.substring(2), 16) + base;
			} else {
				return Integer.parseInt(offset) + base;
			}
		}
		return def;
	}