anchor.diff:          let p, s = remove()
           //postrace.Add(sprintf "%d %A" s.Ind p)
           let cont = fun (res: GParserResult<'a>) ->
  -            match popped.TryGetValue(s) with
  -            | true, parsers-> 
  +            while popped.Count <= s do popped.Add(null)
  +            if popped.[s] <> null then
  +                let parsers = popped.[s]
                   if not <| parsers.ContainsKey(p) then
                       parsers.Add(p, new SSet<'a>() )
  -            | _, _ ->
  +            else
                   let nmap = new HOMap<GParser<'a>, SSet<'a> >() in nmap.Add(p, new SSet<'a>() )
  -                popped.Add(s, nmap)
  +                popped.[s] <- nmap
   
               if res.Succeeded then
                   popped.[s].[p].Add(res) |> ignore
  
positive.code:             let part = new GPartial<'a, 'r>(new PartialParser<'a, 'r>(t, successes, failures)) :> GParserResult<'a>
              part :: (successes |> Seq.toList)
          else (if successes.Count = 0 then failures else successes) |> Seq.toList
  
  and PartialParser<'a, 'r when 'r : equality> (t: Trampoline<'a>, successes: HashSet<GParserResult<'a> >, failures: HashSet<GParserResult<'a> >) = 
      inherit Parser<'a, 'r> ()
      let stream: InputStream<'a> = t.Stream
      let _pastEnd = new HashSet<_>(t.PastEnd |> Seq.map id)
      override this.Apply(inp: InputStream<'a>) = 
          let ind = stream.End
  
          t.PrepareReparse(ind + 1)
  
          t.Stream <- stream.Extend(inp)
          for (p, f) in _pastEnd do
              p.Chain(t, ind) f
              //t.Add (p, s) f
          t.Run()
          if t.PastEnd.Count > 0 then 
              let part = new GPartial<'a, 'r>(new PartialParser<'a, 'r>(t, successes, failures)) :> GParserResult<'a>
  
negative.code:         )
      //interface IComparable with
          //member x.CompareTo y = compare (x.GetHashCode()) (y.GetHashCode())
  and Trampoline<'a>(initStream: InputStream<'a>, 
                     _done: ResizeArray<HashSet<GParser<'a> > >,
                     popped: ResizeArray<HOMap<GParser<'a>, SSet<'a> > >,
                     backlinks: ResizeArray<HOMap<GParser<'a>, FSet<'a> > >,
                     saved: HOMap<GParserResult<'a>, FSet<'a> >) as tram =
      let mutable stream = initStream
      // R
      let _queue = new ResizeArray<GParser<'a> * StreamIndex>() 
      let _pastEnd = new HashSet<GParser<'a> * Continuation<'a> >()
  
      let remove() = 
          let ind = _queue.Count - 1
  