anchor.diff:  %% Single HEADERS frame headers block.
   frame(State, {headers, StreamID, IsFin, head_fin, HeaderBlock}) ->
   	%% @todo We probably need to validate StreamID here and in 4 next clauses.
  -	stream_init(State, StreamID, IsFin, HeaderBlock);
  +	stream_decode_init(State, StreamID, IsFin, HeaderBlock);
   %% HEADERS frame starting a headers block. Enter continuation mode.
   frame(State, {headers, StreamID, IsFin, head_nofin, HeaderBlockFragment}) ->
   	State#state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment}};
  
positive.code: 
  continuation_frame(State=#state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment0}},
  		{continuation, StreamID, head_fin, HeaderBlockFragment1}) ->
  	stream_init(State#state{parse_state=normal}, StreamID, IsFin,
  		<< HeaderBlockFragment0/binary, HeaderBlockFragment1/binary >>);
  continuation_frame(State=#state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment0}},
  		{continuation, StreamID, head_nofin, HeaderBlockFragment1}) ->
  
negative.code: 	Authority = case {Scheme, Port} of
  		{<<"http">>, 80} -> Host;
  		{<<"https">>, 443} -> Host;
  		_ -> iolist_to_binary([Host, $:, integer_to_binary(Port)])
  	end,
  	PathWithQs = case Qs of
  		<<>> -> Path;
  		_ -> [Path, $?, Qs]
  	end,
  	%% We need to make sure the header value is binary before we can
  	%% pass it to stream_req_init, as it expects them to be flat.
  	Headers1 = maps:map(fun(_, V) -> iolist_to_binary(V) end, Headers0),
  	Headers = Headers1#{
  		<<":method">> => Method,
  		<<":scheme">> => Scheme,
  		<<":authority">> => Authority,
  		<<":path">> => iolist_to_binary(PathWithQs)},
  	{HeaderBlock, EncodeState} = headers_encode(Headers, EncodeState0),
  	Transport:send(Socket, cow_http2:push_promise(StreamID, PromisedStreamID, HeaderBlock)),
  	State = stream_req_init(State0#state{server_streamid=PromisedStreamID + 2,
  		encode_state=EncodeState}, PromisedStreamID, fin, Headers),
  	commands(State, Stream, Tail);
  commands(State=#state{socket=Socket, transport=Transport, remote_window=ConnWindow},
  		Stream=#stream{id=StreamID, remote_window=StreamWindow},
  