<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def declare_config_variable(self, name, config_id, type_name, default=None, convert=None):
 #pylint:disable=too-many-arguments;These are all necessary with sane defaults. """Declare a config variable that this emulated tile accepts. The default value (if passed) may be specified as either a `bytes` object or a python int or list of ints. If an int or list of ints is passed, it is converted to binary. Otherwise, the raw binary data is used. Passing a unicode string is only allowed if as_string is True and it will be encoded as utf-8 and null terminated for use as a default value. Args: name (str):
 A user friendly name for this config variable so that it can be printed nicely. config_id (int):
 A 16-bit integer id number to identify the config variable. type_name (str):
 An encoded type name that will be parsed by parse_size_name() default (object):
 The default value if there is one. This should be a python object that will be converted to binary according to the rules for the config variable type specified in type_name. convert (str):
 whether this variable should be converted to a python string or bool rather than an int or a list of ints. You can pass either 'bool', 'string' or None """


        config = ConfigDescriptor(config_id, type_name, default, name=name, python_type=convert)
        self._config_variables[config_id] = config