docs: private synchronized VirtualConnectionFactory getNestedOutboundVCFactory(String channelName) throws ChannelException, ChainException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "getNestedOutboundVCFactory");
          }
          OutboundVirtualConnectionFactoryImpl vc = null;
  
          // The chain name parameter contains an internal runtime channel subname.
          // This triggers of logic to
          // build a VCF based on all channels below the specifed on in its chain.
          // Search for the runtime chain including the named channel.
          ChainData[] chainDataArray = getInternalRunningChains(channelName);
          // Ensure the specified name is correct and a chain is found.
          if (chainDataArray.length != 0) {
              // Extract the chain data from the array. There should only be one.
              ChainData chainData = chainDataArray[0];
              // Find the specified channel in the chainData array of channels.
              // Note that the name of the channel in the chainData is the external one.
              ChannelData[] existingChannelData = chainData.getChannelList();
              int channelIndex = 0;
              boolean foundChannel = false;
              for (channelIndex = 0; channelIndex < existingChannelData.length; channelIndex++) {
                  if (channelName.startsWith(existingChannelData[channelIndex].getName() + ChannelDataImpl.CHILD_STRING)) {
                      // Found the named channel in the chain.
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "Found named channel, " + channelName + " in chain " + chainData.getName() + " at index " + channelIndex);
                      }
                      foundChannel = true;
                      break;
                  }
              }
              // Verify that the channel was found in the chain.
              if (foundChannel) {
                  // Found the channel in the chain. Create the subset of channels.
                  int length = existingChannelData.length - channelIndex - 1;
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Length of chain to build: " + length);
                  }
                  ChannelData newChannelData[] = new ChannelData[length];
                  String newChannelNames[] = new String[length];
                  int newIndex = 0;
                  for (int i = channelIndex + 1; i < existingChannelData.length; i++) {
                      newChannelData[newIndex] = existingChannelData[i];
                      newChannelNames[newIndex] = newChannelData[newIndex].getName();
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "Channel '" + newChannelData[newIndex].getName() + "' added to new nested chain, index=" + newIndex);
                      }
                      newIndex++;
                  }
                  // Create the new chain data based on the subset of channels.
                  ChainDataImpl newChainData = new ChainDataImpl(channelName, FlowType.OUTBOUND, newChannelData, null);
                  // Track this chain in our configuration.
                  addChain(channelName, FlowType.OUTBOUND, newChannelNames);
                  // Create new VCF. Note this initializes the chain and sets the ref
                  // count to 1.
                  vc = createVirtualConnectionFactory(newChainData);
                  // Use the internal channel name as this internal chain name for future
                  // lookups (this method).
                  outboundVCFactories.put(channelName, vc);
              } else {
                  // Did not find the channel.
                  InvalidChainNameException exp = new InvalidChainNameException("Chain or channel not found in framework, " + channelName);
                  FFDCFilter.processException(exp, getClass().getName() + ".getNestedOutboundVCFactory", "543", this, new Object[] { chainData });
                  throw exp;
              }
          } else {
              InvalidChainNameException exp = new InvalidChainNameException("Chain or channel not found in framework, " + channelName);
              FFDCFilter.processException(exp, getClass().getName() + ".getNestedOutboundVCFactory", "548", this, new Object[] { channelName });
              throw exp;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "getNestedOutboundVCFactory");
          }
          return vc;
      }