code: public void addRk(RoutingKey rk, AsImpl asImpl) throws Exception {
          int dpc = rk.getDestinationPointCodes()[0].getPointCode();
          OPCList[] opcArray = rk.getOPCLists();
  
          int[] opcIntArr = null;
          if (opcArray == null) {
              opcIntArr = new int[] { -1 };
          } else {
              opcIntArr = opcArray[0].getPointCodes();
          }
  
          ServiceIndicators[] siArray = rk.getServiceIndicators();
          short[] siShortArr = null;
          if (siArray == null) {
              siShortArr = new short[] { -1 };
          } else {
              siShortArr = siArray[0].getIndicators();
          }
  
          for (FastList.Node<DPCNode> n = dpcList.head(), end = dpcList.tail(); (n = n.getNext()) != end;) {
              DPCNode dpcNode = n.getValue();
              if (dpcNode.dpc == dpc) {
                  this.addSi(dpcNode, opcIntArr, siShortArr, asImpl);
                  return;
              }
          }
  
          DPCNode dpcNode = new DPCNode(dpc);
          this.addSi(dpcNode, opcIntArr, siShortArr, asImpl);
          this.dpcList.add(dpcNode);
  
      }
docs: <p>
  Create a Tree structure adding the reference to passed As. The Tree is created starting from {@link DPCNode} as parent
  node containing 'n' {@link OPCNode} leafs where 'n' is list of OPC passed. For each {@link OPCNode} there will be 'm'
  {@link SINode} leafs where 'm' is number of Service Indicator passed.
  </p>
  
  <p>
  DPC is mandatory while OPC and SI list are optional. If OPC or SI is not passed the wild card '-1' leaf will be added to
  parent node
  </p>
  
  @param rk
  @param asImpl
  @throws Exception