anchor.diff:              let x =
                   if next.dna.Length < 10 then
                       if verbose then
  -                        printf "WARNING: template dna (%s) (len=%d) %s too short for succcessful primer design\n"
  -                            next.description next.dna.Length (arr2seq next.dna)
  +                        printf "WARNING: template dna (%s) (len=%d) %O too short for succcessful primer design\n"
  +                            next.description next.dna.Length next.dna
                       None
                   else
                       if next.sourceFrApprox then
                           let task =
                              {tag ="PF";
  -                            temp = next.dna.[0..min (next.dna.Length-1) margin];
  +                            temp = next.dna.[0..min (next.dna.Length-1) margin].arr;
                               align = ANCHOR.CENTERLEFT;
                               strand = STRAND.TOP;
                               offset =0;
  
positive.code:                 let primerF =
                      if lenSF=0 then primerF
                      else {primerF with
                                    body = Array.concat [primerF.tail.[primerF.tail.Length-lenSF..]; primerF.body];
                                    tail = primerF.tail.[..primerF.tail.Length-lenSF-1]}
                  let primerR =
                      if lenSR=0 then primerR
                      else {primerR with
                                    body = Array.concat [primerR.tail.[primerR.tail.Length-lenSR..]; primerR.body];
                                    tail = primerR.tail.[..primerR.tail.Length-lenSR-1]}
                  // HACK FIXFIX - turning off for linkerless adventure 20140820
                  //assert ( primerF.tail.Length >= fwdTailLenMin)
                  //assert (primerR.tail.Length = 0 || primerR.tail.Length >= revTailLenMin)
  
                  if not (primerF.lenLE(dp.pp.maxLength)) then
                      failwithf "for %s primer design violates length constraint in procAssembly primerF %d not <= %d for %s"
                          errorName primerF.Primer.Length dp.pp.maxLength (arr2seq primerF.Primer)
                  if not (primerR.lenLE(dp.pp.maxLength)) then
                      failwithf "for %s primer design violates length constraint in procAssembly primerR %d not <= %d for %s"
                          errorName primerR.Primer.Length dp.pp.maxLength (arr2seq primerR.Primer)
                  assert(primerR.lenLE(dp.pp.maxLength))
  
                  // Ensure primers overlap
  
negative.code:     /// downstream rabit. Downstream rabit is included to deal with seamless designs without a linker
      let revTemplate =
          match revTailLenFixed with
          | Some(n) -> middleDNA.[..n-1].RevComp()
          | None ->
              DnaOps.append middleDNA fwd.body
              |> DnaOps.revComp
  
      /// the body part of the reverse oligo, which corresponds to the upstream rabit, + middleDNA (linker + sandwich seqs).
      /// Upstream rabit is included to deal with seamless designs without a linker
      let fwdTemplate =
          match fwdTailLenFixed with
          | Some(n) -> middleDNA.[middleDNA.Length-n..]
          | None -> DnaOps.append (rev.body.RevComp()) (middleDNA)
  
      /// The reverse primer body (end of upstream rabit) + middleDNA (linkers + sandwich sequence) + the forward
      /// primer body (beginning of downstream rabit)
      let fullTemplate = DnaOps.concat [ rev.body.RevComp() ; middleDNA ; fwd.body ]
  
      /// Target Tm for middle annealing part.  Cheat if it's a linker and we just want to keep this part (ideally) full length
      let annealTarget = match firmMiddle with | Some(x) -> x | None -> dp.seamlessOverlapTm
  