if (cc.depth == 0 && cc.condSets != null) {
Vector remainingSets = (Vector) cc.depthCondSets.get(cc.getDepth()); if (remainingSets != null) {
	public void internalCheckPermission(Permission perm, Object context) {		AccessControlContext acc = (AccessControlContext) context;		CheckContext cc = (CheckContext) localCheckContext.get();		if (cc != null) {			cc.depth++;		} else {			cc = new CheckContext();			localCheckContext.set(cc);		}		try {			acc.checkPermission(perm);			if (cc.depth == 0 && cc.condSets != null) {				/*				 * In this bit of code we have to try every possible combination				 * of conditional permissions that still need to be evaluated. We				 * do this using recursion to keep track of the different				 * combinations we have tried. The top call will setup the different				 * combinations for the first protection domain with unevaluated 				 * conditions. The final call will actually evaluate the condition.				 * If a good combination is found, it will immediately bubble				 * up.				 */				Hashtable condContextDict = new Hashtable(2);				boolean passed = false;				// We want to pop the first set of conditions and process them				// The remainder we will process recursively.				Condition conds[][] = (Condition[][]) cc.condSets.get(0);				cc.condSets.removeElementAt(0);				for (int i = 0; i < conds.length && !passed; i++) {					passed = recursiveCheck(cc.condSets, conds[i], new Hashtable(2), condContextDict);				}				if (!passed)					throw new SecurityException("Conditions not satisfied");			}		} finally {			if (cc.depth == 0) {				localCheckContext.set(null);			}			cc.depth--;		}	}