code: def _FormatSubjectExOrProcessExToken(self, token_data):
      
      if token_data.net_type == 4:
        ip_address = self._FormatPackedIPv4Address(token_data.ip_address)
      elif token_data.net_type == 16:
        ip_address = self._FormatPackedIPv6Address(token_data.ip_address)
      else:
        ip_address = 'unknown'
  
      return {
          'aid': token_data.audit_user_identifier,
          'euid': token_data.effective_user_identifier,
          'egid': token_data.effective_group_identifier,
          'uid': token_data.real_user_identifier,
          'gid': token_data.real_group_identifier,
          'pid': token_data.process_identifier,
          'session_id': token_data.session_identifier,
          'terminal_port': token_data.terminal_port,
          'terminal_ip': ip_address}
docs: Formats a subject or process token as a dictionary of values.
  
      Args:
        token_data (bsm_token_data_subject32_ex|bsm_token_data_subject64_ex):
            AUT_SUBJECT32_EX, AUT_PROCESS32_EX, AUT_SUBJECT64_EX or
            AUT_PROCESS64_EX token data.
  
      Returns:
        dict[str, str]: token values.