docs: public Map<PvmActivity, PvmExecutionImpl> instantiateScopes(List<PvmActivity> activityStack,
                                                                boolean skipCustomListeners,
                                                                boolean skipIoMappings) {
  
      if (activityStack.isEmpty()) {
        return Collections.emptyMap();
      }
  
      this.skipCustomListeners = skipCustomListeners;
      this.skipIoMapping = skipIoMappings;
  
      ExecutionStartContext executionStartContext = new ExecutionStartContext(false);
  
      InstantiationStack instantiationStack = new InstantiationStack(new LinkedList<>(activityStack));
      executionStartContext.setInstantiationStack(instantiationStack);
      setStartContext(executionStartContext);
  
      performOperation(PvmAtomicOperation.ACTIVITY_INIT_STACK_AND_RETURN);
  
      Map<PvmActivity, PvmExecutionImpl> createdExecutions = new HashMap<>();
  
      PvmExecutionImpl currentExecution = this;
      for (PvmActivity instantiatedActivity : activityStack) {
        // there must exactly one child execution
        currentExecution = currentExecution.getNonEventScopeExecutions().get(0);
        if (currentExecution.isConcurrent()) {
          // there may be a non-scope execution that we have to skip (e.g. multi-instance)
          currentExecution = currentExecution.getNonEventScopeExecutions().get(0);
        }
  
        createdExecutions.put(instantiatedActivity, currentExecution);
      }
  
      return createdExecutions;
    }