anchor.diff:  
   marshal(signature, Value, Pos) ->
       marshal_string(byte, Value, Pos);
  +
  +marshal({array, {struct, [_KeyType, _ValueType]}=SubType}, Value, Pos) when is_map(Value) ->
  +    Pad = pad(uint32, Pos),
  +    Pos0 = Pos + Pad div 8,
  +    Pos1 = Pos0 + 4,
  +    Pad1 = pad(SubType, Pos1),
  +    Pos1b = Pos1 + Pad1 div 8,
  +    {Value2, Pos2} = marshal_array(SubType, maps:to_list(Value), Pos1b),
  +    Length = Pos2 - Pos1b,
  +    {Value1, Pos1} = marshal(uint32, Length, Pos0),
  +    {[<<0:Pad>>, Value1, <<0:Pad1>>, Value2], Pos2};    
   
   marshal({array, byte}=Type, Value, Pos) when is_binary(Value) ->
       marshal(Type, binary_to_list(Value), Pos);
  
positive.code:     {Res1, Pos1} = marshal(Type, Value, Pos),
      marshal_list(T, V, Pos1, [Res, Res1]).
  
  marshal(byte, Value, Pos) ->
      marshal_uint(1, Value, Pos);
  
  marshal(boolean, Value, Pos) ->
      Int =
          case Value of
              true -> 1;
  
negative.code: 
  marshal(variant, Value, Pos) ->
      Type = infer_type(Value),
      marshal_variant(Type, Value, Pos);
  
  marshal(Type, Value, _) ->
      throw({marshaling, Type, Value}).
  
  
  
  infer_type(Value) when is_binary(Value)->
  