code: def setting_address(key):
          
          # split the key into 4 parts, maximum
          key_parts = key.split('.', maxsplit=_MAX_KEY_PARTS - 1)
          # compute the short hash of each part
          addr_parts = [_short_hash(x.encode()) for x in key_parts]
          # pad the parts with the empty hash, if needed
          addr_parts.extend([_EMPTY_PART] * (_MAX_KEY_PARTS - len(addr_parts)))
  
          return CONFIG_STATE_NAMESPACE + ''.join(addr_parts)
docs: Computes the radix address for the given setting key.
  
          Keys are broken into four parts, based on the dots in the string. For
          example, the key `a.b.c` address is computed based on `a`, `b`, `c` and
          the empty string. A longer key, for example `a.b.c.d.e`, is still
          broken into four parts, but the remaining pieces are in the last part:
          `a`, `b`, `c` and `d.e`.
  
          Each of these peices has a short hash computed (the first 16 characters
          of its SHA256 hash in hex), and is joined into a single address, with
          the config namespace (`000000`) added at the beginning.
  
          Args:
              key (str): the setting key
          Returns:
              str: the computed address