code: func xorRunRun(a, b *Container) *Container {
  	statsHit("xor/RunRun")
  	ra, rb := a.runs(), b.runs()
  	na, nb := len(ra), len(rb)
  	if na == 0 {
  		return b.Clone()
  	}
  	if nb == 0 {
  		return a.Clone()
  	}
  	output := NewContainerRun(nil)
  
  	lastI, lastJ := -1, -1
  
  	state := &xorstm{}
  
  	for i, j := 0, 0; i < na || j < nb; {
  		if i < na && lastI != i {
  			state.va = ra[i]
  			state.vaValid = true
  		}
  
  		if j < nb && lastJ != j {
  			state.vb = rb[j]
  			state.vbValid = true
  		}
  		lastI, lastJ = i, j
  
  		r1, ok := xorCompare(state)
  		if ok {
  			output.n += output.runAppendInterval(r1)
  		}
  		if !state.vaValid {
  			i++
  		}
  		if !state.vbValid {
  			j++
  		}
  
  	}
  
  	l := len(output.runs())
  	if output.n < ArrayMaxSize && int32(l) > output.n/2 {
  		output.runToArray()
  	} else if l > runMaxSize {
  		output.runToBitmap()
  	}
  	return output
  }
docs: // xorRunRun computes the exclusive or of two run containers.