decrementExecutionCounts(fire, executionCounts);
decrementExecutionCounts(fire, executionCounts, counters);
    private int fireMe(FlatNode fire, SimulationCounter counters, HashMap executionCounts)     {	if (fire.contents instanceof SIRFilter) {	    //	    System.out.println("Firing " + fire.contents.getName());	    //decrement the schedule execution counter	    decrementExecutionCounts(fire, executionCounts);	    	    //consume the date from the buffer	    counters.decrementBufferCount(fire, 					  itemsNeededToFire(fire, counters));	    	    //for a steady state execution return the normal push	    int ret = ((SIRFilter)fire.contents).getPushInt();	    //if the filter is a two stage, and it has not fired	    //return the initPush() unless the initWork does nothing	    if (fire.contents instanceof SIRTwoStageFilter)		if (!counters.hasFired(fire) && initSimulation) {		    SIRTwoStageFilter two = (SIRTwoStageFilter)fire.contents;		    if (!(two.getInitPeek() == 0 &&			  two.getInitPush() == 0 &&			  two.getInitPop() == 0))			ret = ((SIRTwoStageFilter)fire.contents).getInitPush();		}	    //now this node has fired	    counters.setFired(fire);	    return ret;	}	else if (fire.contents instanceof SIRJoiner) {	    return fireJoiner(fire, counters, executionCounts);	}    	Utils.fail("Trying to fire a non-filter or joiner");	return -1;    }