docs: def encode_varint(value, write):
      """ Encode an integer to a varint presentation. See
      https://developers.google.com/protocol-buffers/docs/encoding?csw=1#varints
      on how those can be produced.
  
          Arguments:
              value (int): Value to encode
              write (function): Called per byte that needs to be writen
  
          Returns:
              int: Number of bytes written
      """
      value = (value << 1) ^ (value >> 63)
  
      if value <= 0x7f:  # 1 byte
          write(value)
          return 1
      if value <= 0x3fff:  # 2 bytes
          write(0x80 | (value & 0x7f))
          write(value >> 7)
          return 2
      if value <= 0x1fffff:  # 3 bytes
          write(0x80 | (value & 0x7f))
          write(0x80 | ((value >> 7) & 0x7f))
          write(value >> 14)
          return 3
      if value <= 0xfffffff:  # 4 bytes
          write(0x80 | (value & 0x7f))
          write(0x80 | ((value >> 7) & 0x7f))
          write(0x80 | ((value >> 14) & 0x7f))
          write(value >> 21)
          return 4
      if value <= 0x7ffffffff:  # 5 bytes
          write(0x80 | (value & 0x7f))
          write(0x80 | ((value >> 7) & 0x7f))
          write(0x80 | ((value >> 14) & 0x7f))
          write(0x80 | ((value >> 21) & 0x7f))
          write(value >> 28)
          return 5
      else:
          # Return to general algorithm
          bits = value & 0x7f
          value >>= 7
          i = 0
          while value:
              write(0x80 | bits)
              bits = value & 0x7f
              value >>= 7
              i += 1
      write(bits)
      return i