anchor.diff:  %% Copied and modified from riak_kv_pb_coverage:convert_list. Would
   %% be nice to collapse them back together, probably with a closure,
   %% but time and effort.
  +-type ts_range() :: {FieldName::binary(),
  +                     {{StartVal::integer(), StartIncl::boolean()},
  +                      {EndVal::integer(), EndIncl::boolean()}}}.
  +
  +-spec encode_cover_list([{{IP::string(), Port::non_neg_integer()},
  +                          Context::binary(),
  +                          ts_range(),
  +                          SQLText::binary()}]) -> [#tscoverageentry{}].
   encode_cover_list(Entries) ->
       [#tscoverageentry{ip = IP, port = Port,
                         cover_context = Context,
                         range = encode_ts_range({Range, SQLText})}
        || {{IP, Port}, Context, Range, SQLText} <- Entries].
   
  +-spec decode_cover_list([#tscoverageentry{}]) ->
  +                               [{{IP::string(), Port::non_neg_integer()},
  +                                 CoverContext::binary(), ts_range(), Text::binary()}].
   decode_cover_list(Entries) ->
       [begin
            {RangeStruct, Text} = decode_ts_range(Range),
  
positive.code:                              cover_context = CoverContext,
                               range = Range} <- Entries].
  
  encode_ts_range({{FieldName, {{StartVal, StartIncl}, {EndVal, EndIncl}}}, Text}) ->
      #tsrange{field_name            = FieldName,
               lower_bound           = StartVal,
  
negative.code:              desc                  = Text
              }.
  
  -spec decode_ts_range(#tsrange{}) -> {ts_range(), binary()}.
  decode_ts_range(#tsrange{field_name            = FieldName,
                           lower_bound           = StartVal,
                           lower_bound_inclusive = StartIncl,
  