anchor.diff:  type ByteArrayMemory(bytes: byte[], offset, length) =
       inherit ByteMemory()
   
  +    let checkCount count =
  +        if count < 0 then
  +            raise (ArgumentOutOfRangeException("count", "Count is less than zero."))
  +
       do
           if length < 0 || length > bytes.Length then
               raise (ArgumentOutOfRangeException("length"))
  
positive.code:     override _.Length = length
  
      override _.ReadUtf8String(pos, count) =
          check pos
          check (pos + count - 1)
          System.Text.Encoding.UTF8.GetString(NativePtr.add addr pos, count)
  
      override _.ReadBytes(pos, count) =
          check pos
          check (pos + count - 1)
          let res = Bytes.zeroCreate count
          Marshal.Copy(NativePtr.toNativeInt addr + nativeint pos, res, 0, count)
          res
  
      override _.ReadInt32 pos =
          check pos
  
negative.code:         ((uint16 bytes.[finalOffset + 1]) <<< 8)
  
      override _.ReadUtf8String(pos, count) =
          checkCount count
          if count > 0 then
              System.Text.Encoding.UTF8.GetString(bytes, offset + pos, count)
          else
              String.Empty
  
      override _.Slice(pos, count) =
          checkCount count
          if count > 0 then
              ByteArrayMemory(bytes, offset + pos, count) :> ByteMemory
          else
              ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory
  
      override _.CopyTo stream =
          if length > 0 then
              stream.Write(bytes, offset, length)
  
      override _.Copy(srcOffset, dest, destOffset, count) =
          checkCount count
          if count > 0 then
              Array.blit bytes (offset + srcOffset) dest destOffset count
  
      override _.ToArray() =
          if length > 0 then
              Array.sub bytes offset length
          else
              Array.empty
  
      override _.AsStream() =
          if length > 0 then
              new MemoryStream(bytes, offset, length) :> Stream
          else
              new MemoryStream([||], 0, 0, false) :> Stream
  
      override _.AsReadOnlyStream() =
          if length > 0 then
              new MemoryStream(bytes, offset, length, false) :> Stream
          else
              new MemoryStream([||], 0, 0, false) :> Stream
  
  [<Sealed>]
  type SafeUnmanagedMemoryStream =
  