anchor.diff:      LOOP AT lt_lines INTO lv_line.
   
         SPLIT lv_line AT space INTO lv_command lv_rest.
  +
         IF lv_command(4) = '0000'.
  -        RETURN.
  +        lv_command = lv_command+4.
         ENDIF.
  -
  -      lv_command = lv_command+4.
  +      IF strlen( lv_command ) >= 4.
  +        lv_command = lv_command+4.
  +      ENDIF.
   
         CASE lv_command.
           WHEN 'want'.
  +          IF lines( rs_request-want ) = 0.
  +            SPLIT lv_rest AT space INTO lv_rest lv_capabilities.
  +            SPLIT lv_capabilities AT space INTO TABLE rs_request-capabilities.
  +          ENDIF.
             APPEND lv_rest TO rs_request-want.
  +        WHEN 'have'.
  +          APPEND lv_rest TO rs_request-have.
           WHEN 'deepen'.
             rs_request-deepen = lv_rest.
  +        WHEN '' OR 'done'.
  +          RETURN.
           WHEN OTHERS.
   * todo, unknown command
             ASSERT 0 = 1.
  
positive.code: 
  
    METHOD decode_request.
  
      DATA: lv_line    TYPE string,
            lv_command TYPE string,
            lv_rest    TYPE string,
            lt_lines   TYPE TABLE OF string.
  
  
      SPLIT iv_string AT cl_abap_char_utilities=>newline INTO TABLE lt_lines.
  
negative.code:       END OF ty_push .
      TYPES:
        BEGIN OF ty_request,
          want         TYPE STANDARD TABLE OF zags_sha1 WITH DEFAULT KEY,
          have         TYPE STANDARD TABLE OF zags_sha1 WITH DEFAULT KEY,
          capabilities TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
          deepen       TYPE i,
        END OF ty_request .
  
      DATA mi_server TYPE REF TO if_http_server .
  