anchor.diff:  -type user_attr() :: [{binary(), binary()}].
   % An 'internal' token is also used by internal consumers, but never stored.
   -type token() :: 'null' | binary().
  +-type tokentype() :: 'read' | 'write'.
   -type replyto() :: {pid(), reference()}.
   
   -record(tagcontent, {id :: binary(),
  
positive.code: 
  handle_cast({{get, Attrib, Token}, ReplyTo}, #state{data = #tagcontent{} = D} = S) ->
      S1 = check_read_token(Token, ReplyTo, S,
                            fun () ->
                                    do_get(Attrib, ReplyTo, D, S)
                            end),
      {noreply, S1, S1#state.timeout};
  
  
negative.code:             S
      end.
  
  -spec do_get(tokentype(), attrib(), replyto(), tagcontent(), #state{}) ->
      #state{}.
  do_get(TokenType, Attrib, ReplyTo, D, S) ->
      R = case Attrib of
              all ->
                  make_api_tagdata(D, TokenType);
              urls ->
                  list_to_binary(mochijson2:encode(D#tagcontent.urls));
              read_token ->
                  % If we've got this far, the request carried at least
                  % read-privileges, so we don't need to check TokenType.
                  token_encode(D#tagcontent.read_token);
              write_token ->
                  case TokenType of
                      'read' ->
                          {error, unauthorized};
                      'write' ->
                          token_encode(D#tagcontent.write_token)
                  end;
              {user, A} ->
                  case proplists:lookup(A, D#tagcontent.user) of
                      {_, V} -> list_to_binary(mochijson2:encode(V));
  