docs: protected void performOutgoingBehavior(ActivityExecution execution,
            boolean checkConditions, boolean throwExceptionIfExecutionStuck, List<ActivityExecution> reusableExecutions) {
  
      LOG.leavingActivity(execution.getActivity().getId());
  
      String defaultSequenceFlow = (String) execution.getActivity().getProperty("default");
      List<PvmTransition> transitionsToTake = new ArrayList<PvmTransition>();
  
      List<PvmTransition> outgoingTransitions = execution.getActivity().getOutgoingTransitions();
      for (PvmTransition outgoingTransition : outgoingTransitions) {
        if (defaultSequenceFlow == null || !outgoingTransition.getId().equals(defaultSequenceFlow)) {
          Condition condition = (Condition) outgoingTransition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
          if (condition == null || !checkConditions || condition.evaluate(execution)) {
            transitionsToTake.add(outgoingTransition);
          }
        }
      }
  
      if (transitionsToTake.size() == 1) {
  
        execution.leaveActivityViaTransition(transitionsToTake.get(0));
  
      } else if (transitionsToTake.size() >= 1) {
  
        if (reusableExecutions == null || reusableExecutions.isEmpty()) {
          execution.leaveActivityViaTransitions(transitionsToTake, Arrays.asList(execution));
        } else {
          execution.leaveActivityViaTransitions(transitionsToTake, reusableExecutions);
        }
  
      } else {
  
        if (defaultSequenceFlow != null) {
          PvmTransition defaultTransition = execution.getActivity().findOutgoingTransition(defaultSequenceFlow);
          if (defaultTransition != null) {
            execution.leaveActivityViaTransition(defaultTransition);
          } else {
            throw LOG.missingDefaultFlowException(execution.getActivity().getId(), defaultSequenceFlow);
          }
  
        } else if (!outgoingTransitions.isEmpty()) {
          throw LOG.missingConditionalFlowException(execution.getActivity().getId());
  
        } else {
  
          if (((ActivityImpl) execution.getActivity()).isCompensationHandler() && isAncestorCompensationThrowing(execution)) {
  
           execution.endCompensation();
  
          } else {
            LOG.missingOutgoingSequenceFlow(execution.getActivity().getId());
            execution.end(true);
  
            if (throwExceptionIfExecutionStuck) {
              throw LOG.stuckExecutionException(execution.getActivity().getId());
            }
          }
  
        }
      }
    }