code: def _modify_new_lines(code_to_modify, offset, code_to_insert):
      
      # There's a nice overview of co_lnotab in
      # https://github.com/python/cpython/blob/3.6/Objects/lnotab_notes.txt
  
      new_list = list(code_to_modify.co_lnotab)
      if not new_list:
          # Could happen on a lambda (in this case, a breakpoint in the lambda should fallback to
          # tracing).
          return None
  
      # As all numbers are relative, what we want is to hide the code we inserted in the previous line
      # (it should be the last thing right before we increment the line so that we have a line event
      # right after the inserted code).
      bytecode_delta = len(code_to_insert)
  
      byte_increments = code_to_modify.co_lnotab[0::2]
      line_increments = code_to_modify.co_lnotab[1::2]
  
      if offset == 0:
          new_list[0] += bytecode_delta
      else:
          addr = 0
          it = zip(byte_increments, line_increments)
          for i, (byte_incr, _line_incr) in enumerate(it):
              addr += byte_incr
              if addr == offset:
                  new_list[i * 2] += bytecode_delta
                  break
  
      return bytes(new_list)
docs: Update new lines: the bytecode inserted should be the last instruction of the previous line.
      :return: bytes sequence of code with updated lines offsets