   end
 
   @doc false
+  @impl true
   def handle_pdu(pdu, st) do
     {:ok, push_to_waiting({:pdu, pdu}, st)}
   end
 
   @doc false
+  @impl true
   def terminate(_reason, _los_pdus, st) do
     case st.from do
       nil -> :nop

  end

  @doc false
  def handle_resp_timeout(pdus, st) do
    {:ok, process_timeouts(pdus, st)}
  end

  def process_timeouts([], st), do: st
  def process_timeouts([pdu | pdus], st) do
    if st.pdu && Pdu.same?(pdu, st.pdu) && st.state == :wait_for_resp do
      reply(st.from, :timeout)
      process_timeouts(pdus, set_free(st))

  end

  @doc false
  @impl true
  def handle_resp(pdu, original_pdu, st) do
    case st.pdu != nil and Pdu.same?(original_pdu, st.pdu) and st.state == :wait_for_resp do
      true ->
