anchor.diff:                      timeout=if Timeout < 0 -> Timeout * -1; true -> Timeout*1000 end,
                       auth_token=AT,
                       id=binary:copy(Chan),
  -                    body=?raw(Body)};
  +                    body=Body};
  +                    %body=?raw(upgrade_body(Vsn, Body))};
   
  -decode_head(<<?VARINT_CHANNEL_CREATE, Chan:16/binary, Data/binary>>) ->
  -    {[Type, Svc, Timeout, AT], Body} =
  -        decode_chain(Data, [channel_type, atom, svarint64, uuid_notag]),
  -    #channel_create{service=Svc,
  -                    type=Type,
  +decode_head(<<?VARINT_CHANNEL_CREATE, Chan:16/binary, Type, Data/binary>>) ->
  +    {Sz, Data2} = decode_varint(Data),
  +    <<Svc:Sz/binary, Data3/binary>> = Data2,
  +    {Timeout, <<AT:16/binary, Data4/binary>>} = decode_varint(Data3),
  +    #channel_create{service=binary_to_atom(Svc, utf8),
  +                    type=channel_type(Type),
                       timeout=Timeout,
                       auth_token=AT,
                       id=binary:copy(Chan),
  -                    body=?raw(Body)};
  +                    body=?raw(Data4)};
   
   decode_head(<<?CHANNEL_MESSAGE, Chan:16/binary, Body/binary>>) ->
       #channel_message{id=Chan, body=?raw(Body)};
  
positive.code:     {E,Rem} = decode_obj(Bin),
      decode_array(Rem,Sz-1,[E|Acc]).
  
  
  decode_svarint(Bytes) ->
      {Value,Rest} = decode_varint(Bytes, 0, 0),
      {(Value bsr 1) bxor (-(Value band 1)),Rest}.
  
negative.code: channel_type(<<"C">>) -> call;
  channel_type(<<"S">>) -> sub.
  
  %% vim: ts=4:sts=4:sw=4:et:sta:
  