mono_config_cleanup ()
{
  struct GHashTable * config_handlers.0;
  char * mono_cfg_dir_allocated.1;

  config_handlers.0 = config_handlers;
  if (config_handlers.0 != 0B) goto <D.16682>; else goto <D.16683>;
  <D.16682>:
  config_handlers.0 = config_handlers;
  monoeg_g_hash_table_destroy (config_handlers.0);
  <D.16683>:
  mono_cfg_dir_allocated.1 = mono_cfg_dir_allocated;
  monoeg_g_free (mono_cfg_dir_allocated.1);
}


mono_config_parse_memory (const char * buffer)
{
  long unsigned int D.16685;
  struct ParseState state;

  try
    {
      state = {};
      state.user_data = "<buffer>";
      D.16685 = strlen (buffer);
      mono_config_parse_xml_with_context (&state, buffer, D.16685);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_xml_with_context (struct ParseState * state, const char * text, gsize len)
{
  int inited.2;
  long int len.3;
  int D.16690;
  struct GMarkupParseContext * context;

  inited.2 = inited;
  if (inited.2 == 0) goto <D.16687>; else goto <D.16688>;
  <D.16687>:
  mono_config_init ();
  <D.16688>:
  context = monoeg_g_markup_parse_context_new (&mono_parser, 0, state, 0B);
  len.3 = (long int) len;
  D.16690 = monoeg_g_markup_parse_context_parse (context, text, len.3, 0B);
  if (D.16690 != 0) goto <D.16691>; else goto <D.16692>;
  <D.16691>:
  monoeg_g_markup_parse_context_end_parse (context, 0B);
  <D.16692>:
  monoeg_g_markup_parse_context_free (context);
}


parse_error (struct GMarkupParseContext * context, struct GError * error, void * user_data)
{
  const gchar * iftmp.4;
  void * D.16697;
  const gchar * iftmp.5;
  gchar * D.16703;
  struct ParseState * state;
  const gchar * msg;
  const gchar * filename;

  state = user_data;
  if (state != 0B) goto <D.16696>; else goto <D.16694>;
  <D.16696>:
  D.16697 = state->user_data;
  if (D.16697 != 0B) goto <D.16698>; else goto <D.16694>;
  <D.16698>:
  iftmp.4 = state->user_data;
  goto <D.16695>;
  <D.16694>:
  iftmp.4 = "<unknown>";
  <D.16695>:
  filename = iftmp.4;
  if (error != 0B) goto <D.16702>; else goto <D.16700>;
  <D.16702>:
  D.16703 = error->message;
  if (D.16703 != 0B) goto <D.16704>; else goto <D.16700>;
  <D.16704>:
  iftmp.5 = error->message;
  goto <D.16701>;
  <D.16700>:
  iftmp.5 = "";
  <D.16701>:
  msg = iftmp.5;
  monoeg_g_log (0B, 16, "Error parsing %s: %s", filename, msg);
}


passthrough (struct GMarkupParseContext * context, const gchar * text, gsize text_len, void * user_data, struct GError * * error)
{

}


parse_text (struct GMarkupParseContext * context, const gchar * text, gsize text_len, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.16705;
  void (*<T28a1>) (void *, const char *, gsize) D.16708;
  void * D.16711;
  struct ParseState * state;

  state = user_data;
  D.16705 = state->current;
  if (D.16705 != 0B) goto <D.16706>; else goto <D.16707>;
  <D.16706>:
  D.16705 = state->current;
  D.16708 = D.16705->text;
  if (D.16708 != 0B) goto <D.16709>; else goto <D.16710>;
  <D.16709>:
  D.16705 = state->current;
  D.16708 = D.16705->text;
  D.16711 = state->user_data;
  D.16708 (D.16711, text, text_len);
  <D.16710>:
  <D.16707>:
}


end_element (struct GMarkupParseContext * context, const gchar * element_name, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.16712;
  void (*<T28a5>) (void *, const char *) D.16715;
  void * D.16718;
  int D.16192;
  const char * D.16719;
  void (*<Tbd4>) (void *) D.16722;
  struct ParseState * state;

  state = user_data;
  D.16712 = state->current;
  if (D.16712 != 0B) goto <D.16713>; else goto <D.16714>;
  <D.16713>:
  D.16712 = state->current;
  D.16715 = D.16712->end;
  if (D.16715 != 0B) goto <D.16716>; else goto <D.16717>;
  <D.16716>:
  D.16712 = state->current;
  D.16715 = D.16712->end;
  D.16718 = state->user_data;
  D.16715 (D.16718, element_name);
  <D.16717>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.16712 = state->current;
    D.16719 = D.16712->element_name;
    D.16192 = __builtin_strcmp (D.16719, element_name);
  }
  if (D.16192 == 0) goto <D.16720>; else goto <D.16721>;
  <D.16720>:
  D.16712 = state->current;
  D.16722 = D.16712->finish;
  if (D.16722 != 0B) goto <D.16723>; else goto <D.16724>;
  <D.16723>:
  D.16712 = state->current;
  D.16722 = D.16712->finish;
  D.16718 = state->user_data;
  D.16722 (D.16718);
  <D.16724>:
  state->current = 0B;
  state->user_data = 0B;
  <D.16721>:
  <D.16714>:
}


start_element (struct GMarkupParseContext * context, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.16725;
  struct GHashTable * config_handlers.6;
  void * D.16729;
  void * (*<T2899>) (struct MonoImage *) D.16732;
  struct MonoImage * D.16735;
  void * D.16736;
  void (*<T289d>) (void *, const gchar *, const gchar * *, const gchar * *) D.16739;
  void * D.16742;
  struct ParseState * state;

  state = user_data;
  D.16725 = state->current;
  if (D.16725 == 0B) goto <D.16726>; else goto <D.16727>;
  <D.16726>:
  config_handlers.6 = config_handlers;
  D.16729 = monoeg_g_hash_table_lookup (config_handlers.6, element_name);
  state->current = D.16729;
  D.16725 = state->current;
  if (D.16725 != 0B) goto <D.16730>; else goto <D.16731>;
  <D.16730>:
  D.16725 = state->current;
  D.16732 = D.16725->init;
  if (D.16732 != 0B) goto <D.16733>; else goto <D.16734>;
  <D.16733>:
  D.16725 = state->current;
  D.16732 = D.16725->init;
  D.16735 = state->assembly;
  D.16736 = D.16732 (D.16735);
  state->user_data = D.16736;
  <D.16734>:
  <D.16731>:
  <D.16727>:
  D.16725 = state->current;
  if (D.16725 != 0B) goto <D.16737>; else goto <D.16738>;
  <D.16737>:
  D.16725 = state->current;
  D.16739 = D.16725->start;
  if (D.16739 != 0B) goto <D.16740>; else goto <D.16741>;
  <D.16740>:
  D.16725 = state->current;
  D.16739 = D.16725->start;
  D.16742 = state->user_data;
  D.16739 (D.16742, element_name, attribute_names, attribute_values);
  <D.16741>:
  <D.16738>:
}


mono_config_init ()
{
  struct GHashTable * config_handlers.7;
  const char * D.16744;
  struct GHashTable * config_handlers.8;
  const char * D.16746;

  inited = 1;
  config_handlers.7 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  config_handlers = config_handlers.7;
  D.16744 = "dllmap";
  config_handlers.8 = config_handlers;
  monoeg_g_hash_table_insert_replace (config_handlers.8, D.16744, &dllmap_handler, 0);
  D.16746 = "legacyUnhandledExceptionPolicy";
  config_handlers.8 = config_handlers;
  monoeg_g_hash_table_insert_replace (config_handlers.8, D.16746, &legacyUEP_handler, 0);
}


legacyUEP_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16399;
  int iftmp.9;
  int D.16398;
  const char[31] * D.16750;
  unsigned char D.16751;
  int D.16752;
  unsigned char D.16753;
  int D.16754;
  _Bool D.16755;
  _Bool D.16756;
  _Bool D.16757;
  const unsigned char * D.16760;
  unsigned char D.16761;
  int D.16762;
  const unsigned char * D.16763;
  unsigned char D.16764;
  int D.16765;
  _Bool D.16766;
  _Bool D.16767;
  const unsigned char * D.16770;
  unsigned char D.16771;
  int D.16772;
  const unsigned char * D.16773;
  unsigned char D.16774;
  int D.16775;
  _Bool D.16776;
  _Bool D.16777;
  const unsigned char * D.16780;
  unsigned char D.16781;
  int D.16782;
  const unsigned char * D.16783;
  unsigned char D.16784;
  int D.16785;
  const gchar * D.16789;
  int D.16408;
  int iftmp.10;
  int D.16407;
  const char[8] * D.16795;
  unsigned char D.16796;
  int D.16797;
  unsigned char D.16798;
  int D.16799;
  _Bool D.16800;
  _Bool D.16801;
  _Bool D.16802;
  const unsigned char * D.16805;
  unsigned char D.16806;
  int D.16807;
  const unsigned char * D.16808;
  unsigned char D.16809;
  int D.16810;
  _Bool D.16811;
  _Bool D.16812;
  const unsigned char * D.16815;
  unsigned char D.16816;
  int D.16817;
  const unsigned char * D.16818;
  unsigned char D.16819;
  int D.16820;
  _Bool D.16821;
  _Bool D.16822;
  const unsigned char * D.16825;
  unsigned char D.16826;
  int D.16827;
  const unsigned char * D.16828;
  unsigned char D.16829;
  int D.16830;
  int D.16417;
  int iftmp.11;
  int D.16416;
  const char[2] * D.16839;
  unsigned char D.16840;
  int D.16841;
  unsigned char D.16842;
  int D.16843;
  _Bool D.16844;
  _Bool D.16845;
  _Bool D.16846;
  const unsigned char * D.16849;
  unsigned char D.16850;
  int D.16851;
  const unsigned char * D.16852;
  unsigned char D.16853;
  int D.16854;
  _Bool D.16855;
  _Bool D.16856;
  const unsigned char * D.16859;
  unsigned char D.16860;
  int D.16861;
  const unsigned char * D.16862;
  unsigned char D.16863;
  int D.16864;
  _Bool D.16865;
  _Bool D.16866;
  const unsigned char * D.16869;
  unsigned char D.16870;
  int D.16871;
  const unsigned char * D.16872;
  unsigned char D.16873;
  int D.16874;
  const gchar * D.16876;
  int D.16878;

  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 30;
    if (__s2_len <= 3) goto <D.16748>; else goto <D.16749>;
    <D.16748>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.16750 = "legacyUnhandledExceptionPolicy";
      D.16751 = MEM[(const unsigned char *)D.16750];
      D.16752 = (int) D.16751;
      D.16753 = *__s2;
      D.16754 = (int) D.16753;
      __result = D.16752 - D.16754;
      {
        D.16755 = __s2_len != 0;
        D.16756 = __result == 0;
        D.16757 = D.16755 & D.16756;
        if (D.16757 != 0) goto <D.16758>; else goto <D.16759>;
        <D.16758>:
        D.16760 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 1B];
        D.16761 = *D.16760;
        D.16762 = (int) D.16761;
        D.16763 = __s2 + 1;
        D.16764 = *D.16763;
        D.16765 = (int) D.16764;
        __result = D.16762 - D.16765;
        D.16766 = __s2_len > 1;
        D.16756 = __result == 0;
        D.16767 = D.16766 & D.16756;
        if (D.16767 != 0) goto <D.16768>; else goto <D.16769>;
        <D.16768>:
        D.16770 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 2B];
        D.16771 = *D.16770;
        D.16772 = (int) D.16771;
        D.16773 = __s2 + 2;
        D.16774 = *D.16773;
        D.16775 = (int) D.16774;
        __result = D.16772 - D.16775;
        D.16776 = __s2_len > 2;
        D.16756 = __result == 0;
        D.16777 = D.16776 & D.16756;
        if (D.16777 != 0) goto <D.16778>; else goto <D.16779>;
        <D.16778>:
        D.16780 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 3B];
        D.16781 = *D.16780;
        D.16782 = (int) D.16781;
        D.16783 = __s2 + 3;
        D.16784 = *D.16783;
        D.16785 = (int) D.16784;
        __result = D.16782 - D.16785;
        <D.16779>:
        <D.16769>:
        <D.16759>:
      }
      D.16398 = __result;
    }
    iftmp.9 = -D.16398;
    goto <D.16786>;
    <D.16749>:
    iftmp.9 = __builtin_strcmp (element_name, "legacyUnhandledExceptionPolicy");
    <D.16786>:
    D.16399 = iftmp.9;
  }
  if (D.16399 == 0) goto <D.16787>; else goto <D.16788>;
  <D.16787>:
  D.16789 = *attribute_names;
  if (D.16789 != 0B) goto <D.16790>; else goto <D.16791>;
  <D.16790>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 7;
    if (__s2_len <= 3) goto <D.16793>; else goto <D.16794>;
    <D.16793>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = *attribute_names;
      D.16795 = "enabled";
      D.16796 = MEM[(const unsigned char *)D.16795];
      D.16797 = (int) D.16796;
      D.16798 = *__s2;
      D.16799 = (int) D.16798;
      __result = D.16797 - D.16799;
      {
        D.16800 = __s2_len != 0;
        D.16801 = __result == 0;
        D.16802 = D.16800 & D.16801;
        if (D.16802 != 0) goto <D.16803>; else goto <D.16804>;
        <D.16803>:
        D.16805 = &MEM[(void *)"enabled" + 1B];
        D.16806 = *D.16805;
        D.16807 = (int) D.16806;
        D.16808 = __s2 + 1;
        D.16809 = *D.16808;
        D.16810 = (int) D.16809;
        __result = D.16807 - D.16810;
        D.16811 = __s2_len > 1;
        D.16801 = __result == 0;
        D.16812 = D.16811 & D.16801;
        if (D.16812 != 0) goto <D.16813>; else goto <D.16814>;
        <D.16813>:
        D.16815 = &MEM[(void *)"enabled" + 2B];
        D.16816 = *D.16815;
        D.16817 = (int) D.16816;
        D.16818 = __s2 + 2;
        D.16819 = *D.16818;
        D.16820 = (int) D.16819;
        __result = D.16817 - D.16820;
        D.16821 = __s2_len > 2;
        D.16801 = __result == 0;
        D.16822 = D.16821 & D.16801;
        if (D.16822 != 0) goto <D.16823>; else goto <D.16824>;
        <D.16823>:
        D.16825 = &MEM[(void *)"enabled" + 3B];
        D.16826 = *D.16825;
        D.16827 = (int) D.16826;
        D.16828 = __s2 + 3;
        D.16829 = *D.16828;
        D.16830 = (int) D.16829;
        __result = D.16827 - D.16830;
        <D.16824>:
        <D.16814>:
        <D.16804>:
      }
      D.16407 = __result;
    }
    iftmp.10 = -D.16407;
    goto <D.16831>;
    <D.16794>:
    D.16789 = *attribute_names;
    iftmp.10 = __builtin_strcmp (D.16789, "enabled");
    <D.16831>:
    D.16408 = iftmp.10;
  }
  if (D.16408 == 0) goto <D.16832>; else goto <D.16833>;
  <D.16832>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 1;
    if (__s2_len <= 3) goto <D.16837>; else goto <D.16838>;
    <D.16837>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = *attribute_values;
      D.16839 = "1";
      D.16840 = MEM[(const unsigned char *)D.16839];
      D.16841 = (int) D.16840;
      D.16842 = *__s2;
      D.16843 = (int) D.16842;
      __result = D.16841 - D.16843;
      {
        D.16844 = __s2_len != 0;
        D.16845 = __result == 0;
        D.16846 = D.16844 & D.16845;
        if (D.16846 != 0) goto <D.16847>; else goto <D.16848>;
        <D.16847>:
        D.16849 = &MEM[(void *)"1" + 1B];
        D.16850 = *D.16849;
        D.16851 = (int) D.16850;
        D.16852 = __s2 + 1;
        D.16853 = *D.16852;
        D.16854 = (int) D.16853;
        __result = D.16851 - D.16854;
        D.16855 = __s2_len > 1;
        D.16845 = __result == 0;
        D.16856 = D.16855 & D.16845;
        if (D.16856 != 0) goto <D.16857>; else goto <D.16858>;
        <D.16857>:
        D.16859 = &MEM[(void *)"1" + 2B];
        D.16860 = *D.16859;
        D.16861 = (int) D.16860;
        D.16862 = __s2 + 2;
        D.16863 = *D.16862;
        D.16864 = (int) D.16863;
        __result = D.16861 - D.16864;
        D.16865 = __s2_len > 2;
        D.16845 = __result == 0;
        D.16866 = D.16865 & D.16845;
        if (D.16866 != 0) goto <D.16867>; else goto <D.16868>;
        <D.16867>:
        D.16869 = &MEM[(void *)"1" + 3B];
        D.16870 = *D.16869;
        D.16871 = (int) D.16870;
        D.16872 = __s2 + 3;
        D.16873 = *D.16872;
        D.16874 = (int) D.16873;
        __result = D.16871 - D.16874;
        <D.16868>:
        <D.16858>:
        <D.16848>:
      }
      D.16416 = __result;
    }
    iftmp.11 = -D.16416;
    goto <D.16875>;
    <D.16838>:
    D.16876 = *attribute_values;
    iftmp.11 = __builtin_strcmp (D.16876, "1");
    <D.16875>:
    D.16417 = iftmp.11;
  }
  if (D.16417 == 0) goto <D.16834>; else goto <D.16877>;
  <D.16877>:
  D.16876 = *attribute_values;
  D.16878 = monoeg_ascii_strcasecmp (D.16876, "true");
  if (D.16878 == 0) goto <D.16834>; else goto <D.16835>;
  <D.16834>:
  mono_runtime_unhandled_exception_policy_set (0);
  <D.16835>:
  <D.16833>:
  <D.16791>:
  <D.16788>:
}


dllmap_finish (void * user_data)
{
  char * D.16879;
  char * D.16880;
  struct DllInfo * info;

  info = user_data;
  D.16879 = info->dll;
  monoeg_g_free (D.16879);
  D.16880 = info->target;
  monoeg_g_free (D.16880);
  monoeg_g_free (info);
}


dllmap_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16261;
  int iftmp.12;
  int D.16260;
  const char[7] * D.16884;
  unsigned char D.16885;
  int D.16886;
  unsigned char D.16887;
  int D.16888;
  _Bool D.16889;
  _Bool D.16890;
  _Bool D.16891;
  const unsigned char * D.16894;
  unsigned char D.16895;
  int D.16896;
  const unsigned char * D.16897;
  unsigned char D.16898;
  int D.16899;
  _Bool D.16900;
  _Bool D.16901;
  const unsigned char * D.16904;
  unsigned char D.16905;
  int D.16906;
  const unsigned char * D.16907;
  unsigned char D.16908;
  int D.16909;
  _Bool D.16910;
  _Bool D.16911;
  const unsigned char * D.16914;
  unsigned char D.16915;
  int D.16916;
  const unsigned char * D.16917;
  unsigned char D.16918;
  int D.16919;
  char * D.16923;
  char * D.16924;
  int D.16270;
  int iftmp.13;
  int D.16269;
  long unsigned int D.16928;
  long unsigned int D.16929;
  const gchar * * D.16930;
  const char[4] * D.16931;
  unsigned char D.16932;
  int D.16933;
  unsigned char D.16934;
  int D.16935;
  _Bool D.16936;
  _Bool D.16937;
  _Bool D.16938;
  const unsigned char * D.16941;
  unsigned char D.16942;
  int D.16943;
  const unsigned char * D.16944;
  unsigned char D.16945;
  int D.16946;
  _Bool D.16947;
  _Bool D.16948;
  const unsigned char * D.16951;
  unsigned char D.16952;
  int D.16953;
  const unsigned char * D.16954;
  unsigned char D.16955;
  int D.16956;
  _Bool D.16957;
  _Bool D.16958;
  const unsigned char * D.16961;
  unsigned char D.16962;
  int D.16963;
  const unsigned char * D.16964;
  unsigned char D.16965;
  int D.16966;
  const gchar * D.16968;
  const gchar * * D.16971;
  const gchar * D.16972;
  gchar * D.16973;
  int D.16279;
  int iftmp.14;
  int D.16278;
  const char[7] * D.16978;
  unsigned char D.16979;
  int D.16980;
  unsigned char D.16981;
  int D.16982;
  _Bool D.16983;
  _Bool D.16984;
  _Bool D.16985;
  const unsigned char * D.16988;
  unsigned char D.16989;
  int D.16990;
  const unsigned char * D.16991;
  unsigned char D.16992;
  int D.16993;
  _Bool D.16994;
  _Bool D.16995;
  const unsigned char * D.16998;
  unsigned char D.16999;
  int D.17000;
  const unsigned char * D.17001;
  unsigned char D.17002;
  int D.17003;
  _Bool D.17004;
  _Bool D.17005;
  const unsigned char * D.17008;
  unsigned char D.17009;
  int D.17010;
  const unsigned char * D.17011;
  unsigned char D.17012;
  int D.17013;
  gchar * D.17017;
  int D.16288;
  int iftmp.15;
  int D.16287;
  const char[3] * D.17024;
  unsigned char D.17025;
  int D.17026;
  unsigned char D.17027;
  int D.17028;
  _Bool D.17029;
  _Bool D.17030;
  _Bool D.17031;
  const unsigned char * D.17034;
  unsigned char D.17035;
  int D.17036;
  const unsigned char * D.17037;
  unsigned char D.17038;
  int D.17039;
  _Bool D.17040;
  _Bool D.17041;
  const unsigned char * D.17044;
  unsigned char D.17045;
  int D.17046;
  const unsigned char * D.17047;
  unsigned char D.17048;
  int D.17049;
  _Bool D.17050;
  _Bool D.17051;
  const unsigned char * D.17054;
  unsigned char D.17055;
  int D.17056;
  const unsigned char * D.17057;
  unsigned char D.17058;
  int D.17059;
  int D.17062;
  int D.16297;
  int iftmp.16;
  int D.16296;
  const char[4] * D.17069;
  unsigned char D.17070;
  int D.17071;
  unsigned char D.17072;
  int D.17073;
  _Bool D.17074;
  _Bool D.17075;
  _Bool D.17076;
  const unsigned char * D.17079;
  unsigned char D.17080;
  int D.17081;
  const unsigned char * D.17082;
  unsigned char D.17083;
  int D.17084;
  _Bool D.17085;
  _Bool D.17086;
  const unsigned char * D.17089;
  unsigned char D.17090;
  int D.17091;
  const unsigned char * D.17092;
  unsigned char D.17093;
  int D.17094;
  _Bool D.17095;
  _Bool D.17096;
  const unsigned char * D.17099;
  unsigned char D.17100;
  int D.17101;
  const unsigned char * D.17102;
  unsigned char D.17103;
  int D.17104;
  int D.17107;
  int D.16306;
  int iftmp.17;
  int D.16305;
  const char[9] * D.17112;
  unsigned char D.17113;
  int D.17114;
  unsigned char D.17115;
  int D.17116;
  _Bool D.17117;
  _Bool D.17118;
  _Bool D.17119;
  const unsigned char * D.17122;
  unsigned char D.17123;
  int D.17124;
  const unsigned char * D.17125;
  unsigned char D.17126;
  int D.17127;
  _Bool D.17128;
  _Bool D.17129;
  const unsigned char * D.17132;
  unsigned char D.17133;
  int D.17134;
  const unsigned char * D.17135;
  unsigned char D.17136;
  int D.17137;
  _Bool D.17138;
  _Bool D.17139;
  const unsigned char * D.17142;
  unsigned char D.17143;
  int D.17144;
  const unsigned char * D.17145;
  unsigned char D.17146;
  int D.17147;
  int D.17151;
  int D.17154;
  struct MonoImage * D.17157;
  int D.16318;
  int iftmp.18;
  int D.16317;
  const char[9] * D.17162;
  unsigned char D.17163;
  int D.17164;
  unsigned char D.17165;
  int D.17166;
  _Bool D.17167;
  _Bool D.17168;
  _Bool D.17169;
  const unsigned char * D.17172;
  unsigned char D.17173;
  int D.17174;
  const unsigned char * D.17175;
  unsigned char D.17176;
  int D.17177;
  _Bool D.17178;
  _Bool D.17179;
  const unsigned char * D.17182;
  unsigned char D.17183;
  int D.17184;
  const unsigned char * D.17185;
  unsigned char D.17186;
  int D.17187;
  _Bool D.17188;
  _Bool D.17189;
  const unsigned char * D.17192;
  unsigned char D.17193;
  int D.17194;
  const unsigned char * D.17195;
  unsigned char D.17196;
  int D.17197;
  int D.16331;
  int iftmp.19;
  int D.16330;
  unsigned char D.17204;
  int D.17205;
  _Bool D.17206;
  _Bool D.17207;
  _Bool D.17208;
  const unsigned char * D.17211;
  unsigned char D.17212;
  int D.17213;
  _Bool D.17214;
  _Bool D.17215;
  const unsigned char * D.17218;
  unsigned char D.17219;
  int D.17220;
  _Bool D.17221;
  _Bool D.17222;
  const unsigned char * D.17225;
  unsigned char D.17226;
  int D.17227;
  int D.16340;
  int iftmp.20;
  int D.16339;
  unsigned char D.17235;
  int D.17236;
  _Bool D.17237;
  _Bool D.17238;
  _Bool D.17239;
  const unsigned char * D.17242;
  unsigned char D.17243;
  int D.17244;
  _Bool D.17245;
  _Bool D.17246;
  const unsigned char * D.17249;
  unsigned char D.17250;
  int D.17251;
  _Bool D.17252;
  _Bool D.17253;
  const unsigned char * D.17256;
  unsigned char D.17257;
  int D.17258;
  int D.16349;
  int iftmp.21;
  int D.16348;
  const char[5] * D.17266;
  unsigned char D.17267;
  int D.17268;
  unsigned char D.17269;
  int D.17270;
  _Bool D.17271;
  _Bool D.17272;
  _Bool D.17273;
  const unsigned char * D.17276;
  unsigned char D.17277;
  int D.17278;
  const unsigned char * D.17279;
  unsigned char D.17280;
  int D.17281;
  _Bool D.17282;
  _Bool D.17283;
  const unsigned char * D.17286;
  unsigned char D.17287;
  int D.17288;
  const unsigned char * D.17289;
  unsigned char D.17290;
  int D.17291;
  _Bool D.17292;
  _Bool D.17293;
  const unsigned char * D.17296;
  unsigned char D.17297;
  int D.17298;
  const unsigned char * D.17299;
  unsigned char D.17300;
  int D.17301;
  int D.16358;
  int iftmp.22;
  int D.16357;
  unsigned char D.17311;
  int D.17312;
  _Bool D.17313;
  _Bool D.17314;
  _Bool D.17315;
  const unsigned char * D.17318;
  unsigned char D.17319;
  int D.17320;
  _Bool D.17321;
  _Bool D.17322;
  const unsigned char * D.17325;
  unsigned char D.17326;
  int D.17327;
  _Bool D.17328;
  _Bool D.17329;
  const unsigned char * D.17332;
  unsigned char D.17333;
  int D.17334;
  int D.17337;
  int D.16367;
  int iftmp.23;
  int D.16366;
  unsigned char D.17344;
  int D.17345;
  _Bool D.17346;
  _Bool D.17347;
  _Bool D.17348;
  const unsigned char * D.17351;
  unsigned char D.17352;
  int D.17353;
  _Bool D.17354;
  _Bool D.17355;
  const unsigned char * D.17358;
  unsigned char D.17359;
  int D.17360;
  _Bool D.17361;
  _Bool D.17362;
  const unsigned char * D.17365;
  unsigned char D.17366;
  int D.17367;
  int D.17370;
  int D.16376;
  int iftmp.24;
  int D.16375;
  unsigned char D.17375;
  int D.17376;
  _Bool D.17377;
  _Bool D.17378;
  _Bool D.17379;
  const unsigned char * D.17382;
  unsigned char D.17383;
  int D.17384;
  _Bool D.17385;
  _Bool D.17386;
  const unsigned char * D.17389;
  unsigned char D.17390;
  int D.17391;
  _Bool D.17392;
  _Bool D.17393;
  const unsigned char * D.17396;
  unsigned char D.17397;
  int D.17398;
  int D.17402;
  int D.17407;
  int i;
  struct DllInfo * info;

  info = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.16882>; else goto <D.16883>;
    <D.16882>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.16884 = "dllmap";
      D.16885 = MEM[(const unsigned char *)D.16884];
      D.16886 = (int) D.16885;
      D.16887 = *__s2;
      D.16888 = (int) D.16887;
      __result = D.16886 - D.16888;
      {
        D.16889 = __s2_len != 0;
        D.16890 = __result == 0;
        D.16891 = D.16889 & D.16890;
        if (D.16891 != 0) goto <D.16892>; else goto <D.16893>;
        <D.16892>:
        D.16894 = &MEM[(void *)"dllmap" + 1B];
        D.16895 = *D.16894;
        D.16896 = (int) D.16895;
        D.16897 = __s2 + 1;
        D.16898 = *D.16897;
        D.16899 = (int) D.16898;
        __result = D.16896 - D.16899;
        D.16900 = __s2_len > 1;
        D.16890 = __result == 0;
        D.16901 = D.16900 & D.16890;
        if (D.16901 != 0) goto <D.16902>; else goto <D.16903>;
        <D.16902>:
        D.16904 = &MEM[(void *)"dllmap" + 2B];
        D.16905 = *D.16904;
        D.16906 = (int) D.16905;
        D.16907 = __s2 + 2;
        D.16908 = *D.16907;
        D.16909 = (int) D.16908;
        __result = D.16906 - D.16909;
        D.16910 = __s2_len > 2;
        D.16890 = __result == 0;
        D.16911 = D.16910 & D.16890;
        if (D.16911 != 0) goto <D.16912>; else goto <D.16913>;
        <D.16912>:
        D.16914 = &MEM[(void *)"dllmap" + 3B];
        D.16915 = *D.16914;
        D.16916 = (int) D.16915;
        D.16917 = __s2 + 3;
        D.16918 = *D.16917;
        D.16919 = (int) D.16918;
        __result = D.16916 - D.16919;
        <D.16913>:
        <D.16903>:
        <D.16893>:
      }
      D.16260 = __result;
    }
    iftmp.12 = -D.16260;
    goto <D.16920>;
    <D.16883>:
    iftmp.12 = __builtin_strcmp (element_name, "dllmap");
    <D.16920>:
    D.16261 = iftmp.12;
  }
  if (D.16261 == 0) goto <D.16921>; else goto <D.16922>;
  <D.16921>:
  D.16923 = info->dll;
  monoeg_g_free (D.16923);
  D.16924 = info->target;
  monoeg_g_free (D.16924);
  info->target = 0B;
  D.16924 = info->target;
  info->dll = D.16924;
  info->ignore = 0;
  i = 0;
  goto <D.16308>;
  <D.16307>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 3;
    if (__s2_len <= 3) goto <D.16926>; else goto <D.16927>;
    <D.16926>:
    {
      const unsigned char * __s2;
      int __result;

      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      __s2 = *D.16930;
      D.16931 = "dll";
      D.16932 = MEM[(const unsigned char *)D.16931];
      D.16933 = (int) D.16932;
      D.16934 = *__s2;
      D.16935 = (int) D.16934;
      __result = D.16933 - D.16935;
      {
        D.16936 = __s2_len != 0;
        D.16937 = __result == 0;
        D.16938 = D.16936 & D.16937;
        if (D.16938 != 0) goto <D.16939>; else goto <D.16940>;
        <D.16939>:
        D.16941 = &MEM[(void *)"dll" + 1B];
        D.16942 = *D.16941;
        D.16943 = (int) D.16942;
        D.16944 = __s2 + 1;
        D.16945 = *D.16944;
        D.16946 = (int) D.16945;
        __result = D.16943 - D.16946;
        D.16947 = __s2_len > 1;
        D.16937 = __result == 0;
        D.16948 = D.16947 & D.16937;
        if (D.16948 != 0) goto <D.16949>; else goto <D.16950>;
        <D.16949>:
        D.16951 = &MEM[(void *)"dll" + 2B];
        D.16952 = *D.16951;
        D.16953 = (int) D.16952;
        D.16954 = __s2 + 2;
        D.16955 = *D.16954;
        D.16956 = (int) D.16955;
        __result = D.16953 - D.16956;
        D.16957 = __s2_len > 2;
        D.16937 = __result == 0;
        D.16958 = D.16957 & D.16937;
        if (D.16958 != 0) goto <D.16959>; else goto <D.16960>;
        <D.16959>:
        D.16961 = &MEM[(void *)"dll" + 3B];
        D.16962 = *D.16961;
        D.16963 = (int) D.16962;
        D.16964 = __s2 + 3;
        D.16965 = *D.16964;
        D.16966 = (int) D.16965;
        __result = D.16963 - D.16966;
        <D.16960>:
        <D.16950>:
        <D.16940>:
      }
      D.16269 = __result;
    }
    iftmp.13 = -D.16269;
    goto <D.16967>;
    <D.16927>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16930 = attribute_names + D.16929;
    D.16968 = *D.16930;
    iftmp.13 = __builtin_strcmp (D.16968, "dll");
    <D.16967>:
    D.16270 = iftmp.13;
  }
  if (D.16270 == 0) goto <D.16969>; else goto <D.16970>;
  <D.16969>:
  D.16928 = (long unsigned int) i;
  D.16929 = D.16928 * 8;
  D.16971 = attribute_values + D.16929;
  D.16972 = *D.16971;
  D.16973 = monoeg_strdup (D.16972);
  info->dll = D.16973;
  goto <D.16974>;
  <D.16970>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.16976>; else goto <D.16977>;
    <D.16976>:
    {
      const unsigned char * __s2;
      int __result;

      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      __s2 = *D.16930;
      D.16978 = "target";
      D.16979 = MEM[(const unsigned char *)D.16978];
      D.16980 = (int) D.16979;
      D.16981 = *__s2;
      D.16982 = (int) D.16981;
      __result = D.16980 - D.16982;
      {
        D.16983 = __s2_len != 0;
        D.16984 = __result == 0;
        D.16985 = D.16983 & D.16984;
        if (D.16985 != 0) goto <D.16986>; else goto <D.16987>;
        <D.16986>:
        D.16988 = &MEM[(void *)"target" + 1B];
        D.16989 = *D.16988;
        D.16990 = (int) D.16989;
        D.16991 = __s2 + 1;
        D.16992 = *D.16991;
        D.16993 = (int) D.16992;
        __result = D.16990 - D.16993;
        D.16994 = __s2_len > 1;
        D.16984 = __result == 0;
        D.16995 = D.16994 & D.16984;
        if (D.16995 != 0) goto <D.16996>; else goto <D.16997>;
        <D.16996>:
        D.16998 = &MEM[(void *)"target" + 2B];
        D.16999 = *D.16998;
        D.17000 = (int) D.16999;
        D.17001 = __s2 + 2;
        D.17002 = *D.17001;
        D.17003 = (int) D.17002;
        __result = D.17000 - D.17003;
        D.17004 = __s2_len > 2;
        D.16984 = __result == 0;
        D.17005 = D.17004 & D.16984;
        if (D.17005 != 0) goto <D.17006>; else goto <D.17007>;
        <D.17006>:
        D.17008 = &MEM[(void *)"target" + 3B];
        D.17009 = *D.17008;
        D.17010 = (int) D.17009;
        D.17011 = __s2 + 3;
        D.17012 = *D.17011;
        D.17013 = (int) D.17012;
        __result = D.17010 - D.17013;
        <D.17007>:
        <D.16997>:
        <D.16987>:
      }
      D.16278 = __result;
    }
    iftmp.14 = -D.16278;
    goto <D.17014>;
    <D.16977>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16930 = attribute_names + D.16929;
    D.16968 = *D.16930;
    iftmp.14 = __builtin_strcmp (D.16968, "target");
    <D.17014>:
    D.16279 = iftmp.14;
  }
  if (D.16279 == 0) goto <D.17015>; else goto <D.17016>;
  <D.17015>:
  D.16928 = (long unsigned int) i;
  D.16929 = D.16928 * 8;
  D.16971 = attribute_values + D.16929;
  D.16972 = *D.16971;
  D.17017 = monoeg_strdup (D.16972);
  info->target = D.17017;
  goto <D.17018>;
  <D.17016>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 2;
    if (__s2_len <= 3) goto <D.17022>; else goto <D.17023>;
    <D.17022>:
    {
      const unsigned char * __s2;
      int __result;

      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      __s2 = *D.16930;
      D.17024 = "os";
      D.17025 = MEM[(const unsigned char *)D.17024];
      D.17026 = (int) D.17025;
      D.17027 = *__s2;
      D.17028 = (int) D.17027;
      __result = D.17026 - D.17028;
      {
        D.17029 = __s2_len != 0;
        D.17030 = __result == 0;
        D.17031 = D.17029 & D.17030;
        if (D.17031 != 0) goto <D.17032>; else goto <D.17033>;
        <D.17032>:
        D.17034 = &MEM[(void *)"os" + 1B];
        D.17035 = *D.17034;
        D.17036 = (int) D.17035;
        D.17037 = __s2 + 1;
        D.17038 = *D.17037;
        D.17039 = (int) D.17038;
        __result = D.17036 - D.17039;
        D.17040 = __s2_len > 1;
        D.17030 = __result == 0;
        D.17041 = D.17040 & D.17030;
        if (D.17041 != 0) goto <D.17042>; else goto <D.17043>;
        <D.17042>:
        D.17044 = &MEM[(void *)"os" + 2B];
        D.17045 = *D.17044;
        D.17046 = (int) D.17045;
        D.17047 = __s2 + 2;
        D.17048 = *D.17047;
        D.17049 = (int) D.17048;
        __result = D.17046 - D.17049;
        D.17050 = __s2_len > 2;
        D.17030 = __result == 0;
        D.17051 = D.17050 & D.17030;
        if (D.17051 != 0) goto <D.17052>; else goto <D.17053>;
        <D.17052>:
        D.17054 = &MEM[(void *)"os" + 3B];
        D.17055 = *D.17054;
        D.17056 = (int) D.17055;
        D.17057 = __s2 + 3;
        D.17058 = *D.17057;
        D.17059 = (int) D.17058;
        __result = D.17056 - D.17059;
        <D.17053>:
        <D.17043>:
        <D.17033>:
      }
      D.16287 = __result;
    }
    iftmp.15 = -D.16287;
    goto <D.17060>;
    <D.17023>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16930 = attribute_names + D.16929;
    D.16968 = *D.16930;
    iftmp.15 = __builtin_strcmp (D.16968, "os");
    <D.17060>:
    D.16288 = iftmp.15;
  }
  if (D.16288 == 0) goto <D.17061>; else goto <D.17019>;
  <D.17061>:
  D.16928 = (long unsigned int) i;
  D.16929 = D.16928 * 8;
  D.16971 = attribute_values + D.16929;
  D.16972 = *D.16971;
  D.17062 = arch_matches ("linux", D.16972);
  if (D.17062 == 0) goto <D.17063>; else goto <D.17019>;
  <D.17063>:
  info->ignore = 1;
  goto <D.17020>;
  <D.17019>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 3;
    if (__s2_len <= 3) goto <D.17067>; else goto <D.17068>;
    <D.17067>:
    {
      const unsigned char * __s2;
      int __result;

      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      __s2 = *D.16930;
      D.17069 = "cpu";
      D.17070 = MEM[(const unsigned char *)D.17069];
      D.17071 = (int) D.17070;
      D.17072 = *__s2;
      D.17073 = (int) D.17072;
      __result = D.17071 - D.17073;
      {
        D.17074 = __s2_len != 0;
        D.17075 = __result == 0;
        D.17076 = D.17074 & D.17075;
        if (D.17076 != 0) goto <D.17077>; else goto <D.17078>;
        <D.17077>:
        D.17079 = &MEM[(void *)"cpu" + 1B];
        D.17080 = *D.17079;
        D.17081 = (int) D.17080;
        D.17082 = __s2 + 1;
        D.17083 = *D.17082;
        D.17084 = (int) D.17083;
        __result = D.17081 - D.17084;
        D.17085 = __s2_len > 1;
        D.17075 = __result == 0;
        D.17086 = D.17085 & D.17075;
        if (D.17086 != 0) goto <D.17087>; else goto <D.17088>;
        <D.17087>:
        D.17089 = &MEM[(void *)"cpu" + 2B];
        D.17090 = *D.17089;
        D.17091 = (int) D.17090;
        D.17092 = __s2 + 2;
        D.17093 = *D.17092;
        D.17094 = (int) D.17093;
        __result = D.17091 - D.17094;
        D.17095 = __s2_len > 2;
        D.17075 = __result == 0;
        D.17096 = D.17095 & D.17075;
        if (D.17096 != 0) goto <D.17097>; else goto <D.17098>;
        <D.17097>:
        D.17099 = &MEM[(void *)"cpu" + 3B];
        D.17100 = *D.17099;
        D.17101 = (int) D.17100;
        D.17102 = __s2 + 3;
        D.17103 = *D.17102;
        D.17104 = (int) D.17103;
        __result = D.17101 - D.17104;
        <D.17098>:
        <D.17088>:
        <D.17078>:
      }
      D.16296 = __result;
    }
    iftmp.16 = -D.16296;
    goto <D.17105>;
    <D.17068>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16930 = attribute_names + D.16929;
    D.16968 = *D.16930;
    iftmp.16 = __builtin_strcmp (D.16968, "cpu");
    <D.17105>:
    D.16297 = iftmp.16;
  }
  if (D.16297 == 0) goto <D.17106>; else goto <D.17064>;
  <D.17106>:
  D.16928 = (long unsigned int) i;
  D.16929 = D.16928 * 8;
  D.16971 = attribute_values + D.16929;
  D.16972 = *D.16971;
  D.17107 = arch_matches ("x86-64", D.16972);
  if (D.17107 == 0) goto <D.17108>; else goto <D.17064>;
  <D.17108>:
  info->ignore = 1;
  goto <D.17065>;
  <D.17064>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.17110>; else goto <D.17111>;
    <D.17110>:
    {
      const unsigned char * __s2;
      int __result;

      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      __s2 = *D.16930;
      D.17112 = "wordsize";
      D.17113 = MEM[(const unsigned char *)D.17112];
      D.17114 = (int) D.17113;
      D.17115 = *__s2;
      D.17116 = (int) D.17115;
      __result = D.17114 - D.17116;
      {
        D.17117 = __s2_len != 0;
        D.17118 = __result == 0;
        D.17119 = D.17117 & D.17118;
        if (D.17119 != 0) goto <D.17120>; else goto <D.17121>;
        <D.17120>:
        D.17122 = &MEM[(void *)"wordsize" + 1B];
        D.17123 = *D.17122;
        D.17124 = (int) D.17123;
        D.17125 = __s2 + 1;
        D.17126 = *D.17125;
        D.17127 = (int) D.17126;
        __result = D.17124 - D.17127;
        D.17128 = __s2_len > 1;
        D.17118 = __result == 0;
        D.17129 = D.17128 & D.17118;
        if (D.17129 != 0) goto <D.17130>; else goto <D.17131>;
        <D.17130>:
        D.17132 = &MEM[(void *)"wordsize" + 2B];
        D.17133 = *D.17132;
        D.17134 = (int) D.17133;
        D.17135 = __s2 + 2;
        D.17136 = *D.17135;
        D.17137 = (int) D.17136;
        __result = D.17134 - D.17137;
        D.17138 = __s2_len > 2;
        D.17118 = __result == 0;
        D.17139 = D.17138 & D.17118;
        if (D.17139 != 0) goto <D.17140>; else goto <D.17141>;
        <D.17140>:
        D.17142 = &MEM[(void *)"wordsize" + 3B];
        D.17143 = *D.17142;
        D.17144 = (int) D.17143;
        D.17145 = __s2 + 3;
        D.17146 = *D.17145;
        D.17147 = (int) D.17146;
        __result = D.17144 - D.17147;
        <D.17141>:
        <D.17131>:
        <D.17121>:
      }
      D.16305 = __result;
    }
    iftmp.17 = -D.16305;
    goto <D.17148>;
    <D.17111>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16930 = attribute_names + D.16929;
    D.16968 = *D.16930;
    iftmp.17 = __builtin_strcmp (D.16968, "wordsize");
    <D.17148>:
    D.16306 = iftmp.17;
  }
  if (D.16306 == 0) goto <D.17149>; else goto <D.17150>;
  <D.17149>:
  D.16928 = (long unsigned int) i;
  D.16929 = D.16928 * 8;
  D.16971 = attribute_values + D.16929;
  D.16972 = *D.16971;
  D.17151 = arch_matches ("64", D.16972);
  if (D.17151 == 0) goto <D.17152>; else goto <D.17153>;
  <D.17152>:
  info->ignore = 1;
  <D.17153>:
  <D.17150>:
  <D.17065>:
  <D.17020>:
  <D.17018>:
  <D.16974>:
  i = i + 1;
  <D.16308>:
  D.16928 = (long unsigned int) i;
  D.16929 = D.16928 * 8;
  D.16930 = attribute_names + D.16929;
  D.16968 = *D.16930;
  if (D.16968 != 0B) goto <D.16307>; else goto <D.16309>;
  <D.16309>:
  D.17154 = info->ignore;
  if (D.17154 == 0) goto <D.17155>; else goto <D.17156>;
  <D.17155>:
  D.16924 = info->target;
  D.16923 = info->dll;
  D.17157 = info->assembly;
  mono_dllmap_insert (D.17157, D.16923, 0B, D.16924, 0B);
  <D.17156>:
  goto <D.17158>;
  <D.16922>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.17160>; else goto <D.17161>;
    <D.17160>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.17162 = "dllentry";
      D.17163 = MEM[(const unsigned char *)D.17162];
      D.17164 = (int) D.17163;
      D.17165 = *__s2;
      D.17166 = (int) D.17165;
      __result = D.17164 - D.17166;
      {
        D.17167 = __s2_len != 0;
        D.17168 = __result == 0;
        D.17169 = D.17167 & D.17168;
        if (D.17169 != 0) goto <D.17170>; else goto <D.17171>;
        <D.17170>:
        D.17172 = &MEM[(void *)"dllentry" + 1B];
        D.17173 = *D.17172;
        D.17174 = (int) D.17173;
        D.17175 = __s2 + 1;
        D.17176 = *D.17175;
        D.17177 = (int) D.17176;
        __result = D.17174 - D.17177;
        D.17178 = __s2_len > 1;
        D.17168 = __result == 0;
        D.17179 = D.17178 & D.17168;
        if (D.17179 != 0) goto <D.17180>; else goto <D.17181>;
        <D.17180>:
        D.17182 = &MEM[(void *)"dllentry" + 2B];
        D.17183 = *D.17182;
        D.17184 = (int) D.17183;
        D.17185 = __s2 + 2;
        D.17186 = *D.17185;
        D.17187 = (int) D.17186;
        __result = D.17184 - D.17187;
        D.17188 = __s2_len > 2;
        D.17168 = __result == 0;
        D.17189 = D.17188 & D.17168;
        if (D.17189 != 0) goto <D.17190>; else goto <D.17191>;
        <D.17190>:
        D.17192 = &MEM[(void *)"dllentry" + 3B];
        D.17193 = *D.17192;
        D.17194 = (int) D.17193;
        D.17195 = __s2 + 3;
        D.17196 = *D.17195;
        D.17197 = (int) D.17196;
        __result = D.17194 - D.17197;
        <D.17191>:
        <D.17181>:
        <D.17171>:
      }
      D.16317 = __result;
    }
    iftmp.18 = -D.16317;
    goto <D.17198>;
    <D.17161>:
    iftmp.18 = __builtin_strcmp (element_name, "dllentry");
    <D.17198>:
    D.16318 = iftmp.18;
  }
  if (D.16318 == 0) goto <D.17199>; else goto <D.17200>;
  <D.17199>:
  {
    const char * name;
    const char * target;
    const char * dll;
    int ignore;

    name = 0B;
    target = 0B;
    dll = 0B;
    ignore = 0;
    i = 0;
    goto <D.16378>;
    <D.16377>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 3;
      if (__s2_len <= 3) goto <D.17202>; else goto <D.17203>;
      <D.17202>:
      {
        const unsigned char * __s2;
        int __result;

        D.16928 = (long unsigned int) i;
        D.16929 = D.16928 * 8;
        D.16930 = attribute_names + D.16929;
        __s2 = *D.16930;
        D.16931 = "dll";
        D.16932 = MEM[(const unsigned char *)D.16931];
        D.16933 = (int) D.16932;
        D.17204 = *__s2;
        D.17205 = (int) D.17204;
        __result = D.16933 - D.17205;
        {
          D.17206 = __s2_len != 0;
          D.17207 = __result == 0;
          D.17208 = D.17206 & D.17207;
          if (D.17208 != 0) goto <D.17209>; else goto <D.17210>;
          <D.17209>:
          D.16941 = &MEM[(void *)"dll" + 1B];
          D.16942 = *D.16941;
          D.16943 = (int) D.16942;
          D.17211 = __s2 + 1;
          D.17212 = *D.17211;
          D.17213 = (int) D.17212;
          __result = D.16943 - D.17213;
          D.17214 = __s2_len > 1;
          D.17207 = __result == 0;
          D.17215 = D.17214 & D.17207;
          if (D.17215 != 0) goto <D.17216>; else goto <D.17217>;
          <D.17216>:
          D.16951 = &MEM[(void *)"dll" + 2B];
          D.16952 = *D.16951;
          D.16953 = (int) D.16952;
          D.17218 = __s2 + 2;
          D.17219 = *D.17218;
          D.17220 = (int) D.17219;
          __result = D.16953 - D.17220;
          D.17221 = __s2_len > 2;
          D.17207 = __result == 0;
          D.17222 = D.17221 & D.17207;
          if (D.17222 != 0) goto <D.17223>; else goto <D.17224>;
          <D.17223>:
          D.16961 = &MEM[(void *)"dll" + 3B];
          D.16962 = *D.16961;
          D.16963 = (int) D.16962;
          D.17225 = __s2 + 3;
          D.17226 = *D.17225;
          D.17227 = (int) D.17226;
          __result = D.16963 - D.17227;
          <D.17224>:
          <D.17217>:
          <D.17210>:
        }
        D.16330 = __result;
      }
      iftmp.19 = -D.16330;
      goto <D.17228>;
      <D.17203>:
      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      D.16968 = *D.16930;
      iftmp.19 = __builtin_strcmp (D.16968, "dll");
      <D.17228>:
      D.16331 = iftmp.19;
    }
    if (D.16331 == 0) goto <D.17229>; else goto <D.17230>;
    <D.17229>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16971 = attribute_values + D.16929;
    dll = *D.16971;
    goto <D.17231>;
    <D.17230>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.17233>; else goto <D.17234>;
      <D.17233>:
      {
        const unsigned char * __s2;
        int __result;

        D.16928 = (long unsigned int) i;
        D.16929 = D.16928 * 8;
        D.16930 = attribute_names + D.16929;
        __s2 = *D.16930;
        D.16978 = "target";
        D.16979 = MEM[(const unsigned char *)D.16978];
        D.16980 = (int) D.16979;
        D.17235 = *__s2;
        D.17236 = (int) D.17235;
        __result = D.16980 - D.17236;
        {
          D.17237 = __s2_len != 0;
          D.17238 = __result == 0;
          D.17239 = D.17237 & D.17238;
          if (D.17239 != 0) goto <D.17240>; else goto <D.17241>;
          <D.17240>:
          D.16988 = &MEM[(void *)"target" + 1B];
          D.16989 = *D.16988;
          D.16990 = (int) D.16989;
          D.17242 = __s2 + 1;
          D.17243 = *D.17242;
          D.17244 = (int) D.17243;
          __result = D.16990 - D.17244;
          D.17245 = __s2_len > 1;
          D.17238 = __result == 0;
          D.17246 = D.17245 & D.17238;
          if (D.17246 != 0) goto <D.17247>; else goto <D.17248>;
          <D.17247>:
          D.16998 = &MEM[(void *)"target" + 2B];
          D.16999 = *D.16998;
          D.17000 = (int) D.16999;
          D.17249 = __s2 + 2;
          D.17250 = *D.17249;
          D.17251 = (int) D.17250;
          __result = D.17000 - D.17251;
          D.17252 = __s2_len > 2;
          D.17238 = __result == 0;
          D.17253 = D.17252 & D.17238;
          if (D.17253 != 0) goto <D.17254>; else goto <D.17255>;
          <D.17254>:
          D.17008 = &MEM[(void *)"target" + 3B];
          D.17009 = *D.17008;
          D.17010 = (int) D.17009;
          D.17256 = __s2 + 3;
          D.17257 = *D.17256;
          D.17258 = (int) D.17257;
          __result = D.17010 - D.17258;
          <D.17255>:
          <D.17248>:
          <D.17241>:
        }
        D.16339 = __result;
      }
      iftmp.20 = -D.16339;
      goto <D.17259>;
      <D.17234>:
      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      D.16968 = *D.16930;
      iftmp.20 = __builtin_strcmp (D.16968, "target");
      <D.17259>:
      D.16340 = iftmp.20;
    }
    if (D.16340 == 0) goto <D.17260>; else goto <D.17261>;
    <D.17260>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16971 = attribute_values + D.16929;
    target = *D.16971;
    goto <D.17262>;
    <D.17261>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.17264>; else goto <D.17265>;
      <D.17264>:
      {
        const unsigned char * __s2;
        int __result;

        D.16928 = (long unsigned int) i;
        D.16929 = D.16928 * 8;
        D.16930 = attribute_names + D.16929;
        __s2 = *D.16930;
        D.17266 = "name";
        D.17267 = MEM[(const unsigned char *)D.17266];
        D.17268 = (int) D.17267;
        D.17269 = *__s2;
        D.17270 = (int) D.17269;
        __result = D.17268 - D.17270;
        {
          D.17271 = __s2_len != 0;
          D.17272 = __result == 0;
          D.17273 = D.17271 & D.17272;
          if (D.17273 != 0) goto <D.17274>; else goto <D.17275>;
          <D.17274>:
          D.17276 = &MEM[(void *)"name" + 1B];
          D.17277 = *D.17276;
          D.17278 = (int) D.17277;
          D.17279 = __s2 + 1;
          D.17280 = *D.17279;
          D.17281 = (int) D.17280;
          __result = D.17278 - D.17281;
          D.17282 = __s2_len > 1;
          D.17272 = __result == 0;
          D.17283 = D.17282 & D.17272;
          if (D.17283 != 0) goto <D.17284>; else goto <D.17285>;
          <D.17284>:
          D.17286 = &MEM[(void *)"name" + 2B];
          D.17287 = *D.17286;
          D.17288 = (int) D.17287;
          D.17289 = __s2 + 2;
          D.17290 = *D.17289;
          D.17291 = (int) D.17290;
          __result = D.17288 - D.17291;
          D.17292 = __s2_len > 2;
          D.17272 = __result == 0;
          D.17293 = D.17292 & D.17272;
          if (D.17293 != 0) goto <D.17294>; else goto <D.17295>;
          <D.17294>:
          D.17296 = &MEM[(void *)"name" + 3B];
          D.17297 = *D.17296;
          D.17298 = (int) D.17297;
          D.17299 = __s2 + 3;
          D.17300 = *D.17299;
          D.17301 = (int) D.17300;
          __result = D.17298 - D.17301;
          <D.17295>:
          <D.17285>:
          <D.17275>:
        }
        D.16348 = __result;
      }
      iftmp.21 = -D.16348;
      goto <D.17302>;
      <D.17265>:
      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      D.16968 = *D.16930;
      iftmp.21 = __builtin_strcmp (D.16968, "name");
      <D.17302>:
      D.16349 = iftmp.21;
    }
    if (D.16349 == 0) goto <D.17303>; else goto <D.17304>;
    <D.17303>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16971 = attribute_values + D.16929;
    name = *D.16971;
    goto <D.17305>;
    <D.17304>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 2;
      if (__s2_len <= 3) goto <D.17309>; else goto <D.17310>;
      <D.17309>:
      {
        const unsigned char * __s2;
        int __result;

        D.16928 = (long unsigned int) i;
        D.16929 = D.16928 * 8;
        D.16930 = attribute_names + D.16929;
        __s2 = *D.16930;
        D.17024 = "os";
        D.17025 = MEM[(const unsigned char *)D.17024];
        D.17026 = (int) D.17025;
        D.17311 = *__s2;
        D.17312 = (int) D.17311;
        __result = D.17026 - D.17312;
        {
          D.17313 = __s2_len != 0;
          D.17314 = __result == 0;
          D.17315 = D.17313 & D.17314;
          if (D.17315 != 0) goto <D.17316>; else goto <D.17317>;
          <D.17316>:
          D.17034 = &MEM[(void *)"os" + 1B];
          D.17035 = *D.17034;
          D.17036 = (int) D.17035;
          D.17318 = __s2 + 1;
          D.17319 = *D.17318;
          D.17320 = (int) D.17319;
          __result = D.17036 - D.17320;
          D.17321 = __s2_len > 1;
          D.17314 = __result == 0;
          D.17322 = D.17321 & D.17314;
          if (D.17322 != 0) goto <D.17323>; else goto <D.17324>;
          <D.17323>:
          D.17044 = &MEM[(void *)"os" + 2B];
          D.17045 = *D.17044;
          D.17046 = (int) D.17045;
          D.17325 = __s2 + 2;
          D.17326 = *D.17325;
          D.17327 = (int) D.17326;
          __result = D.17046 - D.17327;
          D.17328 = __s2_len > 2;
          D.17314 = __result == 0;
          D.17329 = D.17328 & D.17314;
          if (D.17329 != 0) goto <D.17330>; else goto <D.17331>;
          <D.17330>:
          D.17054 = &MEM[(void *)"os" + 3B];
          D.17055 = *D.17054;
          D.17056 = (int) D.17055;
          D.17332 = __s2 + 3;
          D.17333 = *D.17332;
          D.17334 = (int) D.17333;
          __result = D.17056 - D.17334;
          <D.17331>:
          <D.17324>:
          <D.17317>:
        }
        D.16357 = __result;
      }
      iftmp.22 = -D.16357;
      goto <D.17335>;
      <D.17310>:
      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      D.16968 = *D.16930;
      iftmp.22 = __builtin_strcmp (D.16968, "os");
      <D.17335>:
      D.16358 = iftmp.22;
    }
    if (D.16358 == 0) goto <D.17336>; else goto <D.17306>;
    <D.17336>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16971 = attribute_values + D.16929;
    D.16972 = *D.16971;
    D.17337 = arch_matches ("linux", D.16972);
    if (D.17337 == 0) goto <D.17338>; else goto <D.17306>;
    <D.17338>:
    ignore = 1;
    goto <D.17307>;
    <D.17306>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 3;
      if (__s2_len <= 3) goto <D.17342>; else goto <D.17343>;
      <D.17342>:
      {
        const unsigned char * __s2;
        int __result;

        D.16928 = (long unsigned int) i;
        D.16929 = D.16928 * 8;
        D.16930 = attribute_names + D.16929;
        __s2 = *D.16930;
        D.17069 = "cpu";
        D.17070 = MEM[(const unsigned char *)D.17069];
        D.17071 = (int) D.17070;
        D.17344 = *__s2;
        D.17345 = (int) D.17344;
        __result = D.17071 - D.17345;
        {
          D.17346 = __s2_len != 0;
          D.17347 = __result == 0;
          D.17348 = D.17346 & D.17347;
          if (D.17348 != 0) goto <D.17349>; else goto <D.17350>;
          <D.17349>:
          D.17079 = &MEM[(void *)"cpu" + 1B];
          D.17080 = *D.17079;
          D.17081 = (int) D.17080;
          D.17351 = __s2 + 1;
          D.17352 = *D.17351;
          D.17353 = (int) D.17352;
          __result = D.17081 - D.17353;
          D.17354 = __s2_len > 1;
          D.17347 = __result == 0;
          D.17355 = D.17354 & D.17347;
          if (D.17355 != 0) goto <D.17356>; else goto <D.17357>;
          <D.17356>:
          D.17089 = &MEM[(void *)"cpu" + 2B];
          D.17090 = *D.17089;
          D.17091 = (int) D.17090;
          D.17358 = __s2 + 2;
          D.17359 = *D.17358;
          D.17360 = (int) D.17359;
          __result = D.17091 - D.17360;
          D.17361 = __s2_len > 2;
          D.17347 = __result == 0;
          D.17362 = D.17361 & D.17347;
          if (D.17362 != 0) goto <D.17363>; else goto <D.17364>;
          <D.17363>:
          D.17099 = &MEM[(void *)"cpu" + 3B];
          D.17100 = *D.17099;
          D.17101 = (int) D.17100;
          D.17365 = __s2 + 3;
          D.17366 = *D.17365;
          D.17367 = (int) D.17366;
          __result = D.17101 - D.17367;
          <D.17364>:
          <D.17357>:
          <D.17350>:
        }
        D.16366 = __result;
      }
      iftmp.23 = -D.16366;
      goto <D.17368>;
      <D.17343>:
      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      D.16968 = *D.16930;
      iftmp.23 = __builtin_strcmp (D.16968, "cpu");
      <D.17368>:
      D.16367 = iftmp.23;
    }
    if (D.16367 == 0) goto <D.17369>; else goto <D.17339>;
    <D.17369>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16971 = attribute_values + D.16929;
    D.16972 = *D.16971;
    D.17370 = arch_matches ("x86-64", D.16972);
    if (D.17370 == 0) goto <D.17371>; else goto <D.17339>;
    <D.17371>:
    ignore = 1;
    goto <D.17340>;
    <D.17339>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 8;
      if (__s2_len <= 3) goto <D.17373>; else goto <D.17374>;
      <D.17373>:
      {
        const unsigned char * __s2;
        int __result;

        D.16928 = (long unsigned int) i;
        D.16929 = D.16928 * 8;
        D.16930 = attribute_names + D.16929;
        __s2 = *D.16930;
        D.17112 = "wordsize";
        D.17113 = MEM[(const unsigned char *)D.17112];
        D.17114 = (int) D.17113;
        D.17375 = *__s2;
        D.17376 = (int) D.17375;
        __result = D.17114 - D.17376;
        {
          D.17377 = __s2_len != 0;
          D.17378 = __result == 0;
          D.17379 = D.17377 & D.17378;
          if (D.17379 != 0) goto <D.17380>; else goto <D.17381>;
          <D.17380>:
          D.17122 = &MEM[(void *)"wordsize" + 1B];
          D.17123 = *D.17122;
          D.17124 = (int) D.17123;
          D.17382 = __s2 + 1;
          D.17383 = *D.17382;
          D.17384 = (int) D.17383;
          __result = D.17124 - D.17384;
          D.17385 = __s2_len > 1;
          D.17378 = __result == 0;
          D.17386 = D.17385 & D.17378;
          if (D.17386 != 0) goto <D.17387>; else goto <D.17388>;
          <D.17387>:
          D.17132 = &MEM[(void *)"wordsize" + 2B];
          D.17133 = *D.17132;
          D.17134 = (int) D.17133;
          D.17389 = __s2 + 2;
          D.17390 = *D.17389;
          D.17391 = (int) D.17390;
          __result = D.17134 - D.17391;
          D.17392 = __s2_len > 2;
          D.17378 = __result == 0;
          D.17393 = D.17392 & D.17378;
          if (D.17393 != 0) goto <D.17394>; else goto <D.17395>;
          <D.17394>:
          D.17142 = &MEM[(void *)"wordsize" + 3B];
          D.17143 = *D.17142;
          D.17144 = (int) D.17143;
          D.17396 = __s2 + 3;
          D.17397 = *D.17396;
          D.17398 = (int) D.17397;
          __result = D.17144 - D.17398;
          <D.17395>:
          <D.17388>:
          <D.17381>:
        }
        D.16375 = __result;
      }
      iftmp.24 = -D.16375;
      goto <D.17399>;
      <D.17374>:
      D.16928 = (long unsigned int) i;
      D.16929 = D.16928 * 8;
      D.16930 = attribute_names + D.16929;
      D.16968 = *D.16930;
      iftmp.24 = __builtin_strcmp (D.16968, "wordsize");
      <D.17399>:
      D.16376 = iftmp.24;
    }
    if (D.16376 == 0) goto <D.17400>; else goto <D.17401>;
    <D.17400>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16971 = attribute_values + D.16929;
    D.16972 = *D.16971;
    D.17402 = arch_matches ("64", D.16972);
    if (D.17402 == 0) goto <D.17403>; else goto <D.17404>;
    <D.17403>:
    ignore = 1;
    <D.17404>:
    <D.17401>:
    <D.17340>:
    <D.17307>:
    <D.17305>:
    <D.17262>:
    <D.17231>:
    i = i + 1;
    <D.16378>:
    D.16928 = (long unsigned int) i;
    D.16929 = D.16928 * 8;
    D.16930 = attribute_names + D.16929;
    D.16968 = *D.16930;
    if (D.16968 != 0B) goto <D.16377>; else goto <D.16379>;
    <D.16379>:
    if (dll == 0B) goto <D.17405>; else goto <D.17406>;
    <D.17405>:
    dll = info->dll;
    <D.17406>:
    D.17154 = info->ignore;
    D.17407 = D.17154 | ignore;
    if (D.17407 == 0) goto <D.17408>; else goto <D.17409>;
    <D.17408>:
    D.16923 = info->dll;
    D.17157 = info->assembly;
    mono_dllmap_insert (D.17157, D.16923, name, dll, target);
    <D.17409>:
  }
  <D.17200>:
  <D.17158>:
}


monoeg_strdup (const gchar * str)
{
  gchar * D.17412;

  if (str != 0B) goto <D.17410>; else goto <D.17411>;
  <D.17410>:
  D.17412 = __strdup (str);
  return D.17412;
  <D.17411>:
  D.17412 = 0B;
  return D.17412;
}


arch_matches (const char * arch, const char * value)
{
  char D.17414;
  int D.17417;
  const char * D.17418;
  int D.17419;
  _Bool D.17420;
  int D.16231;
  char * D.17421;
  char * * splitted;
  char * * p;
  int found;

  found = 0;
  D.17414 = *value;
  if (D.17414 == 33) goto <D.17415>; else goto <D.17416>;
  <D.17415>:
  D.17418 = value + 1;
  D.17419 = arch_matches (arch, D.17418);
  D.17420 = D.17419 == 0;
  D.17417 = (int) D.17420;
  return D.17417;
  <D.17416>:
  splitted = monoeg_g_strsplit (value, ",", 0);
  p = splitted;
  goto <D.16234>;
  <D.16233>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17421 = *p;
    D.16231 = __builtin_strcmp (arch, D.17421);
  }
  if (D.16231 == 0) goto <D.17422>; else goto <D.17423>;
  <D.17422>:
  found = 1;
  goto <D.16232>;
  <D.17423>:
  p = p + 8;
  <D.16234>:
  D.17421 = *p;
  if (D.17421 != 0B) goto <D.16233>; else goto <D.16232>;
  <D.16232>:
  monoeg_g_strfreev (splitted);
  D.17417 = found;
  return D.17417;
}


dllmap_init (struct MonoImage * assembly)
{
  void * D.17425;
  struct DllInfo * info;

  info = monoeg_malloc0 (32);
  info->assembly = assembly;
  D.17425 = info;
  return D.17425;
}


mono_register_config_for_assembly (const char * assembly_name, const char * config_xml)
{
  struct BundledConfig * bundled_configs.25;
  struct BundledConfig * bconfig;

  bconfig = monoeg_malloc0 (24);
  bconfig->aname = assembly_name;
  bconfig->config_xml = config_xml;
  bundled_configs.25 = bundled_configs;
  bconfig->next = bundled_configs.25;
  bundled_configs = bconfig;
}


mono_config_string_for_assembly_file (const char * filename)
{
  const char * D.17428;
  int D.16477;
  const char * D.17433;
  struct BundledConfig * bconfig;

  bconfig = bundled_configs;
  goto <D.16479>;
  <D.16478>:
  D.17428 = bconfig->aname;
  if (D.17428 != 0B) goto <D.17429>; else goto <D.17430>;
  <D.17429>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17428 = bconfig->aname;
    D.16477 = __builtin_strcmp (D.17428, filename);
  }
  if (D.16477 == 0) goto <D.17431>; else goto <D.17432>;
  <D.17431>:
  D.17433 = bconfig->config_xml;
  return D.17433;
  <D.17432>:
  <D.17430>:
  bconfig = bconfig->next;
  <D.16479>:
  if (bconfig != 0B) goto <D.16478>; else goto <D.16480>;
  <D.16480>:
  D.17433 = 0B;
  return D.17433;
}


mono_config_for_assembly (struct MonoImage * assembly)
{
  const char * D.17435;
  long unsigned int D.17438;
  const char * D.17439;
  const char * D.17440;
  const char * D.17441;
  int D.17442;
  struct ParseState state;
  int got_it;
  int i;
  char * aname;
  char * cfg;
  char * cfg_name;
  const char * bundled_config;
  const char * home;

  try
    {
      state = {};
      got_it = 0;
      state.assembly = assembly;
      D.17435 = assembly->module_name;
      bundled_config = mono_config_string_for_assembly_file (D.17435);
      if (bundled_config != 0B) goto <D.17436>; else goto <D.17437>;
      <D.17436>:
      state.user_data = "<bundled>";
      D.17438 = strlen (bundled_config);
      mono_config_parse_xml_with_context (&state, bundled_config, D.17438);
      <D.17437>:
      D.17439 = mono_image_get_filename (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.17439);
      mono_config_parse_file_with_context (&state, cfg_name);
      monoeg_g_free (cfg_name);
      D.17440 = mono_image_get_name (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.17440);
      home = monoeg_g_get_home_dir ();
      i = 0;
      goto <D.16494>;
      <D.16493>:
      D.17441 = mono_get_config_dir ();
      cfg = monoeg_g_build_path ("/", D.17441, "mono", "assemblies", aname, cfg_name, 0B);
      D.17442 = mono_config_parse_file_with_context (&state, cfg);
      got_it = D.17442 + got_it;
      monoeg_g_free (cfg);
      monoeg_g_free (aname);
      if (got_it != 0) goto <D.16492>; else goto <D.17443>;
      <D.17443>:
      i = i + 1;
      <D.16494>:
      aname = get_assembly_filename (assembly, i);
      if (aname != 0B) goto <D.16493>; else goto <D.16492>;
      <D.16492>:
      monoeg_g_free (cfg_name);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_file_with_context (struct ParseState * state, const char * filename)
{
  int D.17444;
  int D.17447;
  long unsigned int len.26;
  gchar * text.27;
  char D.17452;
  gchar * D.17455;
  char D.17456;
  gchar * D.17459;
  char D.17460;
  void * D.17463;
  long unsigned int D.17466;
  long unsigned int D.17467;
  sizetype D.17468;
  const char * D.17469;
  gchar * text;
  gsize len;
  gint offset;

  try
    {
      mono_trace (64, 16, "Config attempting to parse: \'%s\'.", filename);
      D.17444 = monoeg_g_file_get_contents (filename, &text, &len, 0B);
      if (D.17444 == 0) goto <D.17445>; else goto <D.17446>;
      <D.17445>:
      D.17447 = 0;
      return D.17447;
      <D.17446>:
      offset = 0;
      len.26 = len;
      if (len.26 > 3) goto <D.17449>; else goto <D.17450>;
      <D.17449>:
      text.27 = text;
      D.17452 = *text.27;
      if (D.17452 == -17) goto <D.17453>; else goto <D.17454>;
      <D.17453>:
      text.27 = text;
      D.17455 = text.27 + 1;
      D.17456 = *D.17455;
      if (D.17456 == -69) goto <D.17457>; else goto <D.17458>;
      <D.17457>:
      text.27 = text;
      D.17459 = text.27 + 2;
      D.17460 = *D.17459;
      if (D.17460 == -65) goto <D.17461>; else goto <D.17462>;
      <D.17461>:
      offset = 3;
      <D.17462>:
      <D.17458>:
      <D.17454>:
      <D.17450>:
      D.17463 = state->user_data;
      if (D.17463 == 0B) goto <D.17464>; else goto <D.17465>;
      <D.17464>:
      state->user_data = filename;
      <D.17465>:
      len.26 = len;
      D.17466 = (long unsigned int) offset;
      D.17467 = len.26 - D.17466;
      text.27 = text;
      D.17468 = (sizetype) offset;
      D.17469 = text.27 + D.17468;
      mono_config_parse_xml_with_context (state, D.17469, D.17467);
      text.27 = text;
      monoeg_g_free (text.27);
      D.17447 = 1;
      return D.17447;
    }
  finally
    {
      text = {CLOBBER};
      len = {CLOBBER};
    }
}


get_assembly_filename (struct MonoImage * image, int state)
{
  char * D.17472;
  const char * D.17473;

  switch (state) <default: <D.16452>, case 0: <D.16451>>
  <D.16451>:
  D.17473 = mono_image_get_name (image);
  D.17472 = monoeg_strdup (D.17473);
  return D.17472;
  <D.16452>:
  D.17472 = 0B;
  return D.17472;
}


mono_config_parse (const char * filename)
{
  const char * D.17479;
  const char * home;
  char * mono_cfg;
  char * user_cfg;

  if (filename != 0B) goto <D.17475>; else goto <D.17476>;
  <D.17475>:
  mono_config_parse_file (filename);
  return;
  <D.17476>:
  home = monoeg_g_getenv ("MONO_CONFIG");
  if (home != 0B) goto <D.17477>; else goto <D.17478>;
  <D.17477>:
  mono_config_parse_file (home);
  return;
  <D.17478>:
  D.17479 = mono_get_config_dir ();
  mono_cfg = monoeg_g_build_path ("/", D.17479, "mono", "config", 0B);
  mono_config_parse_file (mono_cfg);
  monoeg_g_free (mono_cfg);
  home = monoeg_g_get_home_dir ();
  user_cfg = monoeg_g_strconcat (home, "/", ".mono/config", 0B);
  mono_config_parse_file (user_cfg);
  monoeg_g_free (user_cfg);
}


mono_config_parse_file (const char * filename)
{
  struct ParseState state;

  try
    {
      state = {};
      state.user_data = filename;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_set_config_dir (const char * dir)
{
  const gchar * mono_cfg_dir.28;
  const char * mono_cfg_dir.29;
  gchar * mono_cfg_dir_allocated.30;
  char * mono_cfg_dir_allocated.31;

  mono_cfg_dir.28 = monoeg_g_getenv ("MONO_CFG_DIR");
  mono_cfg_dir = mono_cfg_dir.28;
  mono_cfg_dir.29 = mono_cfg_dir;
  if (mono_cfg_dir.29 == 0B) goto <D.17483>; else goto <D.17484>;
  <D.17483>:
  mono_cfg_dir_allocated.30 = monoeg_strdup (dir);
  mono_cfg_dir_allocated = mono_cfg_dir_allocated.30;
  mono_cfg_dir_allocated.31 = mono_cfg_dir_allocated;
  mono_cfg_dir = mono_cfg_dir_allocated.31;
  <D.17484>:
}


mono_get_config_dir ()
{
  const char * mono_cfg_dir.32;
  const char * D.17490;

  mono_cfg_dir.32 = mono_cfg_dir;
  if (mono_cfg_dir.32 == 0B) goto <D.17488>; else goto <D.17489>;
  <D.17488>:
  mono_set_dirs (0B, 0B);
  <D.17489>:
  D.17490 = mono_cfg_dir;
  return D.17490;
}


mono_register_machine_config (const char * config_xml)
{
  bundled_machine_config = config_xml;
}


mono_get_machine_config ()
{
  const char * D.17492;

  D.17492 = bundled_machine_config;
  return D.17492;
}


mono_config_parse_publisher_policy (const gchar * filename, struct MonoAssemblyBindingInfo * info)
{
  struct ParserUserData user_data;
  struct ParseState state;

  try
    {
      user_data.info = info;
      user_data.info_parsed = 0B;
      user_data.user_data = 0B;
      state.current = &publisher_policy_parser;
      state.user_data = &user_data;
      state.assembly = 0B;
      state.inited = 1;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      user_data = {CLOBBER};
      state = {CLOBBER};
    }
}


publisher_policy_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16544;
  int iftmp.33;
  int D.16543;
  const char[18] * D.17497;
  unsigned char D.17498;
  int D.17499;
  unsigned char D.17500;
  int D.17501;
  _Bool D.17502;
  _Bool D.17503;
  _Bool D.17504;
  const unsigned char * D.17507;
  unsigned char D.17508;
  int D.17509;
  const unsigned char * D.17510;
  unsigned char D.17511;
  int D.17512;
  _Bool D.17513;
  _Bool D.17514;
  const unsigned char * D.17517;
  unsigned char D.17518;
  int D.17519;
  const unsigned char * D.17520;
  unsigned char D.17521;
  int D.17522;
  _Bool D.17523;
  _Bool D.17524;
  const unsigned char * D.17527;
  unsigned char D.17528;
  int D.17529;
  const unsigned char * D.17530;
  unsigned char D.17531;
  int D.17532;
  struct AssemblyVersionSet * D.17536;
  struct AssemblyVersionSet * D.17537;
  struct AssemblyVersionSet * D.17538;
  int D.16553;
  int iftmp.34;
  int D.16552;
  const char[17] * D.17542;
  unsigned char D.17543;
  int D.17544;
  unsigned char D.17545;
  int D.17546;
  _Bool D.17547;
  _Bool D.17548;
  _Bool D.17549;
  const unsigned char * D.17552;
  unsigned char D.17553;
  int D.17554;
  const unsigned char * D.17555;
  unsigned char D.17556;
  int D.17557;
  _Bool D.17558;
  _Bool D.17559;
  const unsigned char * D.17562;
  unsigned char D.17563;
  int D.17564;
  const unsigned char * D.17565;
  unsigned char D.17566;
  int D.17567;
  _Bool D.17568;
  _Bool D.17569;
  const unsigned char * D.17572;
  unsigned char D.17573;
  int D.17574;
  const unsigned char * D.17575;
  unsigned char D.17576;
  int D.17577;
  long unsigned int D.17581;
  long unsigned int D.17582;
  const gchar * * D.17583;
  int D.16563;
  int iftmp.35;
  int D.16562;
  const char[5] * D.17587;
  unsigned char D.17588;
  int D.17589;
  unsigned char D.17590;
  int D.17591;
  _Bool D.17592;
  _Bool D.17593;
  _Bool D.17594;
  const unsigned char * D.17597;
  unsigned char D.17598;
  int D.17599;
  const unsigned char * D.17600;
  unsigned char D.17601;
  int D.17602;
  _Bool D.17603;
  _Bool D.17604;
  const unsigned char * D.17607;
  unsigned char D.17608;
  int D.17609;
  const unsigned char * D.17610;
  unsigned char D.17611;
  int D.17612;
  _Bool D.17613;
  _Bool D.17614;
  const unsigned char * D.17617;
  unsigned char D.17618;
  int D.17619;
  const unsigned char * D.17620;
  unsigned char D.17621;
  int D.17622;
  const gchar * * D.17626;
  const gchar * D.17627;
  gchar * D.17628;
  int D.16572;
  int iftmp.36;
  int D.16571;
  const char[15] * D.17633;
  unsigned char D.17634;
  int D.17635;
  unsigned char D.17636;
  int D.17637;
  _Bool D.17638;
  _Bool D.17639;
  _Bool D.17640;
  const unsigned char * D.17643;
  unsigned char D.17644;
  int D.17645;
  const unsigned char * D.17646;
  unsigned char D.17647;
  int D.17648;
  _Bool D.17649;
  _Bool D.17650;
  const unsigned char * D.17653;
  unsigned char D.17654;
  int D.17655;
  const unsigned char * D.17656;
  unsigned char D.17657;
  int D.17658;
  _Bool D.17659;
  _Bool D.17660;
  const unsigned char * D.17663;
  unsigned char D.17664;
  int D.17665;
  const unsigned char * D.17666;
  unsigned char D.17667;
  int D.17668;
  long unsigned int D.17672;
  guchar[17] * D.17675;
  int D.16581;
  int iftmp.37;
  int D.16580;
  const char[8] * D.17680;
  unsigned char D.17681;
  int D.17682;
  unsigned char D.17683;
  int D.17684;
  _Bool D.17685;
  _Bool D.17686;
  _Bool D.17687;
  const unsigned char * D.17690;
  unsigned char D.17691;
  int D.17692;
  const unsigned char * D.17693;
  unsigned char D.17694;
  int D.17695;
  _Bool D.17696;
  _Bool D.17697;
  const unsigned char * D.17700;
  unsigned char D.17701;
  int D.17702;
  const unsigned char * D.17703;
  unsigned char D.17704;
  int D.17705;
  _Bool D.17706;
  _Bool D.17707;
  const unsigned char * D.17710;
  unsigned char D.17711;
  int D.17712;
  const unsigned char * D.17713;
  unsigned char D.17714;
  int D.17715;
  int D.16590;
  int iftmp.38;
  int D.16589;
  const char[8] * D.17722;
  unsigned char D.17723;
  int D.17724;
  unsigned char D.17725;
  int D.17726;
  _Bool D.17727;
  _Bool D.17728;
  _Bool D.17729;
  const unsigned char * D.17732;
  unsigned char D.17733;
  int D.17734;
  const unsigned char * D.17735;
  unsigned char D.17736;
  int D.17737;
  _Bool D.17738;
  _Bool D.17739;
  const unsigned char * D.17742;
  unsigned char D.17743;
  int D.17744;
  const unsigned char * D.17745;
  unsigned char D.17746;
  int D.17747;
  _Bool D.17748;
  _Bool D.17749;
  const unsigned char * D.17752;
  unsigned char D.17753;
  int D.17754;
  const unsigned char * D.17755;
  unsigned char D.17756;
  int D.17757;
  gchar * D.17761;
  gchar * D.17763;
  const gchar * D.17764;
  int D.16602;
  int iftmp.39;
  int D.16601;
  const char[16] * D.17769;
  unsigned char D.17770;
  int D.17771;
  unsigned char D.17772;
  int D.17773;
  _Bool D.17774;
  _Bool D.17775;
  _Bool D.17776;
  const unsigned char * D.17779;
  unsigned char D.17780;
  int D.17781;
  const unsigned char * D.17782;
  unsigned char D.17783;
  int D.17784;
  _Bool D.17785;
  _Bool D.17786;
  const unsigned char * D.17789;
  unsigned char D.17790;
  int D.17791;
  const unsigned char * D.17792;
  unsigned char D.17793;
  int D.17794;
  _Bool D.17795;
  _Bool D.17796;
  const unsigned char * D.17799;
  unsigned char D.17800;
  int D.17801;
  const unsigned char * D.17802;
  unsigned char D.17803;
  int D.17804;
  int D.16612;
  int iftmp.40;
  int D.16611;
  const char[11] * D.17811;
  unsigned char D.17812;
  int D.17813;
  unsigned char D.17814;
  int D.17815;
  _Bool D.17816;
  _Bool D.17817;
  _Bool D.17818;
  const unsigned char * D.17821;
  unsigned char D.17822;
  int D.17823;
  const unsigned char * D.17824;
  unsigned char D.17825;
  int D.17826;
  _Bool D.17827;
  _Bool D.17828;
  const unsigned char * D.17831;
  unsigned char D.17832;
  int D.17833;
  const unsigned char * D.17834;
  unsigned char D.17835;
  int D.17836;
  _Bool D.17837;
  _Bool D.17838;
  const unsigned char * D.17841;
  unsigned char D.17842;
  int D.17843;
  const unsigned char * D.17844;
  unsigned char D.17845;
  int D.17846;
  int D.16628;
  int iftmp.41;
  int D.16627;
  const char[1] * D.17853;
  unsigned char D.17854;
  int D.17855;
  unsigned char D.17856;
  int D.17857;
  _Bool D.17858;
  _Bool D.17859;
  _Bool D.17860;
  const unsigned char * D.17863;
  unsigned char D.17864;
  int D.17865;
  const unsigned char * D.17866;
  unsigned char D.17867;
  int D.17868;
  _Bool D.17869;
  _Bool D.17870;
  const unsigned char * D.17873;
  unsigned char D.17874;
  int D.17875;
  const unsigned char * D.17876;
  unsigned char D.17877;
  int D.17878;
  _Bool D.17879;
  _Bool D.17880;
  const unsigned char * D.17883;
  unsigned char D.17884;
  int D.17885;
  const unsigned char * D.17886;
  unsigned char D.17887;
  int D.17888;
  unsigned char D.17890;
  gchar * D.17893;
  int iftmp.42;
  gchar * D.17895;
  gchar * * numbers.43;
  gchar * D.17899;
  int iftmp.44;
  gchar * * numbers.45;
  gchar * D.17905;
  int iftmp.46;
  gchar * * numbers.47;
  gchar * D.17911;
  int iftmp.48;
  _Bool D.17919;
  _Bool D.17920;
  _Bool D.17921;
  _Bool D.17923;
  _Bool D.17924;
  _Bool D.17925;
  short unsigned int D.17926;
  short unsigned int D.17927;
  short unsigned int D.17928;
  short unsigned int D.17929;
  gchar * * D.17930;
  gchar * D.17931;
  int iftmp.49;
  gchar * * numbers.50;
  gchar * D.17938;
  int iftmp.51;
  gchar * * numbers.52;
  gchar * D.17944;
  int iftmp.53;
  gchar * * numbers.54;
  gchar * D.17950;
  int iftmp.55;
  int D.16638;
  int iftmp.56;
  int D.16637;
  const char[11] * D.17963;
  unsigned char D.17964;
  int D.17965;
  unsigned char D.17966;
  int D.17967;
  _Bool D.17968;
  _Bool D.17969;
  _Bool D.17970;
  const unsigned char * D.17973;
  unsigned char D.17974;
  int D.17975;
  const unsigned char * D.17976;
  unsigned char D.17977;
  int D.17978;
  _Bool D.17979;
  _Bool D.17980;
  const unsigned char * D.17983;
  unsigned char D.17984;
  int D.17985;
  const unsigned char * D.17986;
  unsigned char D.17987;
  int D.17988;
  _Bool D.17989;
  _Bool D.17990;
  const unsigned char * D.17993;
  unsigned char D.17994;
  int D.17995;
  const unsigned char * D.17996;
  unsigned char D.17997;
  int D.17998;
  int D.16649;
  int iftmp.57;
  int D.16648;
  unsigned char D.18005;
  int D.18006;
  _Bool D.18007;
  _Bool D.18008;
  _Bool D.18009;
  const unsigned char * D.18012;
  unsigned char D.18013;
  int D.18014;
  _Bool D.18015;
  _Bool D.18016;
  const unsigned char * D.18019;
  unsigned char D.18020;
  int D.18021;
  _Bool D.18022;
  _Bool D.18023;
  const unsigned char * D.18026;
  unsigned char D.18027;
  int D.18028;
  guint16 iftmp.58;
  gchar * D.18033;
  gchar * * numbers.59;
  gchar * D.18037;
  int D.18038;
  guint16 iftmp.60;
  gchar * * numbers.61;
  gchar * D.18044;
  int D.18045;
  guint16 iftmp.62;
  gchar * * numbers.63;
  gchar * D.18051;
  int D.18052;
  guint16 iftmp.64;
  int D.18057;
  struct ParserUserData * pud;
  struct MonoAssemblyBindingInfo * info;
  int n;

  pud = user_data;
  info = pud->info;
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 17;
    if (__s2_len <= 3) goto <D.17495>; else goto <D.17496>;
    <D.17495>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.17497 = "dependentAssembly";
      D.17498 = MEM[(const unsigned char *)D.17497];
      D.17499 = (int) D.17498;
      D.17500 = *__s2;
      D.17501 = (int) D.17500;
      __result = D.17499 - D.17501;
      {
        D.17502 = __s2_len != 0;
        D.17503 = __result == 0;
        D.17504 = D.17502 & D.17503;
        if (D.17504 != 0) goto <D.17505>; else goto <D.17506>;
        <D.17505>:
        D.17507 = &MEM[(void *)"dependentAssembly" + 1B];
        D.17508 = *D.17507;
        D.17509 = (int) D.17508;
        D.17510 = __s2 + 1;
        D.17511 = *D.17510;
        D.17512 = (int) D.17511;
        __result = D.17509 - D.17512;
        D.17513 = __s2_len > 1;
        D.17503 = __result == 0;
        D.17514 = D.17513 & D.17503;
        if (D.17514 != 0) goto <D.17515>; else goto <D.17516>;
        <D.17515>:
        D.17517 = &MEM[(void *)"dependentAssembly" + 2B];
        D.17518 = *D.17517;
        D.17519 = (int) D.17518;
        D.17520 = __s2 + 2;
        D.17521 = *D.17520;
        D.17522 = (int) D.17521;
        __result = D.17519 - D.17522;
        D.17523 = __s2_len > 2;
        D.17503 = __result == 0;
        D.17524 = D.17523 & D.17503;
        if (D.17524 != 0) goto <D.17525>; else goto <D.17526>;
        <D.17525>:
        D.17527 = &MEM[(void *)"dependentAssembly" + 3B];
        D.17528 = *D.17527;
        D.17529 = (int) D.17528;
        D.17530 = __s2 + 3;
        D.17531 = *D.17530;
        D.17532 = (int) D.17531;
        __result = D.17529 - D.17532;
        <D.17526>:
        <D.17516>:
        <D.17506>:
      }
      D.16543 = __result;
    }
    iftmp.33 = -D.16543;
    goto <D.17533>;
    <D.17496>:
    iftmp.33 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.17533>:
    D.16544 = iftmp.33;
  }
  if (D.16544 == 0) goto <D.17534>; else goto <D.17535>;
  <D.17534>:
  info->name = 0B;
  info->culture = 0B;
  info->has_old_version_bottom = 0;
  info->has_old_version_top = 0;
  info->has_new_version = 0;
  info->is_valid = 0;
  D.17536 = &info->old_version_bottom;
  memset (D.17536, 0, 8);
  D.17537 = &info->old_version_top;
  memset (D.17537, 0, 8);
  D.17538 = &info->new_version;
  memset (D.17538, 0, 8);
  <D.17535>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 16;
    if (__s2_len <= 3) goto <D.17540>; else goto <D.17541>;
    <D.17540>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.17542 = "assemblyIdentity";
      D.17543 = MEM[(const unsigned char *)D.17542];
      D.17544 = (int) D.17543;
      D.17545 = *__s2;
      D.17546 = (int) D.17545;
      __result = D.17544 - D.17546;
      {
        D.17547 = __s2_len != 0;
        D.17548 = __result == 0;
        D.17549 = D.17547 & D.17548;
        if (D.17549 != 0) goto <D.17550>; else goto <D.17551>;
        <D.17550>:
        D.17552 = &MEM[(void *)"assemblyIdentity" + 1B];
        D.17553 = *D.17552;
        D.17554 = (int) D.17553;
        D.17555 = __s2 + 1;
        D.17556 = *D.17555;
        D.17557 = (int) D.17556;
        __result = D.17554 - D.17557;
        D.17558 = __s2_len > 1;
        D.17548 = __result == 0;
        D.17559 = D.17558 & D.17548;
        if (D.17559 != 0) goto <D.17560>; else goto <D.17561>;
        <D.17560>:
        D.17562 = &MEM[(void *)"assemblyIdentity" + 2B];
        D.17563 = *D.17562;
        D.17564 = (int) D.17563;
        D.17565 = __s2 + 2;
        D.17566 = *D.17565;
        D.17567 = (int) D.17566;
        __result = D.17564 - D.17567;
        D.17568 = __s2_len > 2;
        D.17548 = __result == 0;
        D.17569 = D.17568 & D.17548;
        if (D.17569 != 0) goto <D.17570>; else goto <D.17571>;
        <D.17570>:
        D.17572 = &MEM[(void *)"assemblyIdentity" + 3B];
        D.17573 = *D.17572;
        D.17574 = (int) D.17573;
        D.17575 = __s2 + 3;
        D.17576 = *D.17575;
        D.17577 = (int) D.17576;
        __result = D.17574 - D.17577;
        <D.17571>:
        <D.17561>:
        <D.17551>:
      }
      D.16552 = __result;
    }
    iftmp.34 = -D.16552;
    goto <D.17578>;
    <D.17541>:
    iftmp.34 = __builtin_strcmp (element_name, "assemblyIdentity");
    <D.17578>:
    D.16553 = iftmp.34;
  }
  if (D.16553 == 0) goto <D.17579>; else goto <D.17580>;
  <D.17579>:
  n = 0;
  goto <D.16592>;
  <D.16591>:
  {
    const gchar * attribute_name;

    D.17581 = (long unsigned int) n;
    D.17582 = D.17581 * 8;
    D.17583 = attribute_names + D.17582;
    attribute_name = *D.17583;
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.17585>; else goto <D.17586>;
      <D.17585>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = attribute_name;
        D.17587 = "name";
        D.17588 = MEM[(const unsigned char *)D.17587];
        D.17589 = (int) D.17588;
        D.17590 = *__s2;
        D.17591 = (int) D.17590;
        __result = D.17589 - D.17591;
        {
          D.17592 = __s2_len != 0;
          D.17593 = __result == 0;
          D.17594 = D.17592 & D.17593;
          if (D.17594 != 0) goto <D.17595>; else goto <D.17596>;
          <D.17595>:
          D.17597 = &MEM[(void *)"name" + 1B];
          D.17598 = *D.17597;
          D.17599 = (int) D.17598;
          D.17600 = __s2 + 1;
          D.17601 = *D.17600;
          D.17602 = (int) D.17601;
          __result = D.17599 - D.17602;
          D.17603 = __s2_len > 1;
          D.17593 = __result == 0;
          D.17604 = D.17603 & D.17593;
          if (D.17604 != 0) goto <D.17605>; else goto <D.17606>;
          <D.17605>:
          D.17607 = &MEM[(void *)"name" + 2B];
          D.17608 = *D.17607;
          D.17609 = (int) D.17608;
          D.17610 = __s2 + 2;
          D.17611 = *D.17610;
          D.17612 = (int) D.17611;
          __result = D.17609 - D.17612;
          D.17613 = __s2_len > 2;
          D.17593 = __result == 0;
          D.17614 = D.17613 & D.17593;
          if (D.17614 != 0) goto <D.17615>; else goto <D.17616>;
          <D.17615>:
          D.17617 = &MEM[(void *)"name" + 3B];
          D.17618 = *D.17617;
          D.17619 = (int) D.17618;
          D.17620 = __s2 + 3;
          D.17621 = *D.17620;
          D.17622 = (int) D.17621;
          __result = D.17619 - D.17622;
          <D.17616>:
          <D.17606>:
          <D.17596>:
        }
        D.16562 = __result;
      }
      iftmp.35 = -D.16562;
      goto <D.17623>;
      <D.17586>:
      iftmp.35 = __builtin_strcmp (attribute_name, "name");
      <D.17623>:
      D.16563 = iftmp.35;
    }
    if (D.16563 == 0) goto <D.17624>; else goto <D.17625>;
    <D.17624>:
    D.17581 = (long unsigned int) n;
    D.17582 = D.17581 * 8;
    D.17626 = attribute_values + D.17582;
    D.17627 = *D.17626;
    D.17628 = monoeg_strdup (D.17627);
    info->name = D.17628;
    goto <D.17629>;
    <D.17625>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 14;
      if (__s2_len <= 3) goto <D.17631>; else goto <D.17632>;
      <D.17631>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = attribute_name;
        D.17633 = "publicKeyToken";
        D.17634 = MEM[(const unsigned char *)D.17633];
        D.17635 = (int) D.17634;
        D.17636 = *__s2;
        D.17637 = (int) D.17636;
        __result = D.17635 - D.17637;
        {
          D.17638 = __s2_len != 0;
          D.17639 = __result == 0;
          D.17640 = D.17638 & D.17639;
          if (D.17640 != 0) goto <D.17641>; else goto <D.17642>;
          <D.17641>:
          D.17643 = &MEM[(void *)"publicKeyToken" + 1B];
          D.17644 = *D.17643;
          D.17645 = (int) D.17644;
          D.17646 = __s2 + 1;
          D.17647 = *D.17646;
          D.17648 = (int) D.17647;
          __result = D.17645 - D.17648;
          D.17649 = __s2_len > 1;
          D.17639 = __result == 0;
          D.17650 = D.17649 & D.17639;
          if (D.17650 != 0) goto <D.17651>; else goto <D.17652>;
          <D.17651>:
          D.17653 = &MEM[(void *)"publicKeyToken" + 2B];
          D.17654 = *D.17653;
          D.17655 = (int) D.17654;
          D.17656 = __s2 + 2;
          D.17657 = *D.17656;
          D.17658 = (int) D.17657;
          __result = D.17655 - D.17658;
          D.17659 = __s2_len > 2;
          D.17639 = __result == 0;
          D.17660 = D.17659 & D.17639;
          if (D.17660 != 0) goto <D.17661>; else goto <D.17662>;
          <D.17661>:
          D.17663 = &MEM[(void *)"publicKeyToken" + 3B];
          D.17664 = *D.17663;
          D.17665 = (int) D.17664;
          D.17666 = __s2 + 3;
          D.17667 = *D.17666;
          D.17668 = (int) D.17667;
          __result = D.17665 - D.17668;
          <D.17662>:
          <D.17652>:
          <D.17642>:
        }
        D.16571 = __result;
      }
      iftmp.36 = -D.16571;
      goto <D.17669>;
      <D.17632>:
      iftmp.36 = __builtin_strcmp (attribute_name, "publicKeyToken");
      <D.17669>:
      D.16572 = iftmp.36;
    }
    if (D.16572 == 0) goto <D.17670>; else goto <D.17671>;
    <D.17670>:
    D.17581 = (long unsigned int) n;
    D.17582 = D.17581 * 8;
    D.17626 = attribute_values + D.17582;
    D.17627 = *D.17626;
    D.17672 = strlen (D.17627);
    if (D.17672 == 16) goto <D.17673>; else goto <D.17674>;
    <D.17673>:
    D.17581 = (long unsigned int) n;
    D.17582 = D.17581 * 8;
    D.17626 = attribute_values + D.17582;
    D.17627 = *D.17626;
    D.17675 = &info->public_key_token;
    monoeg_g_strlcpy (D.17675, D.17627, 17);
    <D.17674>:
    goto <D.17676>;
    <D.17671>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.17678>; else goto <D.17679>;
      <D.17678>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = attribute_name;
        D.17680 = "culture";
        D.17681 = MEM[(const unsigned char *)D.17680];
        D.17682 = (int) D.17681;
        D.17683 = *__s2;
        D.17684 = (int) D.17683;
        __result = D.17682 - D.17684;
        {
          D.17685 = __s2_len != 0;
          D.17686 = __result == 0;
          D.17687 = D.17685 & D.17686;
          if (D.17687 != 0) goto <D.17688>; else goto <D.17689>;
          <D.17688>:
          D.17690 = &MEM[(void *)"culture" + 1B];
          D.17691 = *D.17690;
          D.17692 = (int) D.17691;
          D.17693 = __s2 + 1;
          D.17694 = *D.17693;
          D.17695 = (int) D.17694;
          __result = D.17692 - D.17695;
          D.17696 = __s2_len > 1;
          D.17686 = __result == 0;
          D.17697 = D.17696 & D.17686;
          if (D.17697 != 0) goto <D.17698>; else goto <D.17699>;
          <D.17698>:
          D.17700 = &MEM[(void *)"culture" + 2B];
          D.17701 = *D.17700;
          D.17702 = (int) D.17701;
          D.17703 = __s2 + 2;
          D.17704 = *D.17703;
          D.17705 = (int) D.17704;
          __result = D.17702 - D.17705;
          D.17706 = __s2_len > 2;
          D.17686 = __result == 0;
          D.17707 = D.17706 & D.17686;
          if (D.17707 != 0) goto <D.17708>; else goto <D.17709>;
          <D.17708>:
          D.17710 = &MEM[(void *)"culture" + 3B];
          D.17711 = *D.17710;
          D.17712 = (int) D.17711;
          D.17713 = __s2 + 3;
          D.17714 = *D.17713;
          D.17715 = (int) D.17714;
          __result = D.17712 - D.17715;
          <D.17709>:
          <D.17699>:
          <D.17689>:
        }
        D.16580 = __result;
      }
      iftmp.37 = -D.16580;
      goto <D.17716>;
      <D.17679>:
      iftmp.37 = __builtin_strcmp (attribute_name, "culture");
      <D.17716>:
      D.16581 = iftmp.37;
    }
    if (D.16581 == 0) goto <D.17717>; else goto <D.17718>;
    <D.17717>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.17720>; else goto <D.17721>;
      <D.17720>:
      {
        const unsigned char * __s2;
        int __result;

        D.17581 = (long unsigned int) n;
        D.17582 = D.17581 * 8;
        D.17626 = attribute_values + D.17582;
        __s2 = *D.17626;
        D.17722 = "neutral";
        D.17723 = MEM[(const unsigned char *)D.17722];
        D.17724 = (int) D.17723;
        D.17725 = *__s2;
        D.17726 = (int) D.17725;
        __result = D.17724 - D.17726;
        {
          D.17727 = __s2_len != 0;
          D.17728 = __result == 0;
          D.17729 = D.17727 & D.17728;
          if (D.17729 != 0) goto <D.17730>; else goto <D.17731>;
          <D.17730>:
          D.17732 = &MEM[(void *)"neutral" + 1B];
          D.17733 = *D.17732;
          D.17734 = (int) D.17733;
          D.17735 = __s2 + 1;
          D.17736 = *D.17735;
          D.17737 = (int) D.17736;
          __result = D.17734 - D.17737;
          D.17738 = __s2_len > 1;
          D.17728 = __result == 0;
          D.17739 = D.17738 & D.17728;
          if (D.17739 != 0) goto <D.17740>; else goto <D.17741>;
          <D.17740>:
          D.17742 = &MEM[(void *)"neutral" + 2B];
          D.17743 = *D.17742;
          D.17744 = (int) D.17743;
          D.17745 = __s2 + 2;
          D.17746 = *D.17745;
          D.17747 = (int) D.17746;
          __result = D.17744 - D.17747;
          D.17748 = __s2_len > 2;
          D.17728 = __result == 0;
          D.17749 = D.17748 & D.17728;
          if (D.17749 != 0) goto <D.17750>; else goto <D.17751>;
          <D.17750>:
          D.17752 = &MEM[(void *)"neutral" + 3B];
          D.17753 = *D.17752;
          D.17754 = (int) D.17753;
          D.17755 = __s2 + 3;
          D.17756 = *D.17755;
          D.17757 = (int) D.17756;
          __result = D.17754 - D.17757;
          <D.17751>:
          <D.17741>:
          <D.17731>:
        }
        D.16589 = __result;
      }
      iftmp.38 = -D.16589;
      goto <D.17758>;
      <D.17721>:
      D.17581 = (long unsigned int) n;
      D.17582 = D.17581 * 8;
      D.17626 = attribute_values + D.17582;
      D.17627 = *D.17626;
      iftmp.38 = __builtin_strcmp (D.17627, "neutral");
      <D.17758>:
      D.16590 = iftmp.38;
    }
    if (D.16590 == 0) goto <D.17759>; else goto <D.17760>;
    <D.17759>:
    D.17761 = monoeg_strdup ("");
    info->culture = D.17761;
    goto <D.17762>;
    <D.17760>:
    D.17581 = (long unsigned int) n;
    D.17582 = D.17581 * 8;
    D.17626 = attribute_values + D.17582;
    D.17627 = *D.17626;
    D.17763 = monoeg_strdup (D.17627);
    info->culture = D.17763;
    <D.17762>:
    <D.17718>:
    <D.17676>:
    <D.17629>:
  }
  n = n + 1;
  <D.16592>:
  D.17581 = (long unsigned int) n;
  D.17582 = D.17581 * 8;
  D.17583 = attribute_names + D.17582;
  D.17764 = *D.17583;
  if (D.17764 != 0B) goto <D.16591>; else goto <D.16593>;
  <D.16593>:
  goto <D.17765>;
  <D.17580>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 15;
    if (__s2_len <= 3) goto <D.17767>; else goto <D.17768>;
    <D.17767>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.17769 = "bindingRedirect";
      D.17770 = MEM[(const unsigned char *)D.17769];
      D.17771 = (int) D.17770;
      D.17772 = *__s2;
      D.17773 = (int) D.17772;
      __result = D.17771 - D.17773;
      {
        D.17774 = __s2_len != 0;
        D.17775 = __result == 0;
        D.17776 = D.17774 & D.17775;
        if (D.17776 != 0) goto <D.17777>; else goto <D.17778>;
        <D.17777>:
        D.17779 = &MEM[(void *)"bindingRedirect" + 1B];
        D.17780 = *D.17779;
        D.17781 = (int) D.17780;
        D.17782 = __s2 + 1;
        D.17783 = *D.17782;
        D.17784 = (int) D.17783;
        __result = D.17781 - D.17784;
        D.17785 = __s2_len > 1;
        D.17775 = __result == 0;
        D.17786 = D.17785 & D.17775;
        if (D.17786 != 0) goto <D.17787>; else goto <D.17788>;
        <D.17787>:
        D.17789 = &MEM[(void *)"bindingRedirect" + 2B];
        D.17790 = *D.17789;
        D.17791 = (int) D.17790;
        D.17792 = __s2 + 2;
        D.17793 = *D.17792;
        D.17794 = (int) D.17793;
        __result = D.17791 - D.17794;
        D.17795 = __s2_len > 2;
        D.17775 = __result == 0;
        D.17796 = D.17795 & D.17775;
        if (D.17796 != 0) goto <D.17797>; else goto <D.17798>;
        <D.17797>:
        D.17799 = &MEM[(void *)"bindingRedirect" + 3B];
        D.17800 = *D.17799;
        D.17801 = (int) D.17800;
        D.17802 = __s2 + 3;
        D.17803 = *D.17802;
        D.17804 = (int) D.17803;
        __result = D.17801 - D.17804;
        <D.17798>:
        <D.17788>:
        <D.17778>:
      }
      D.16601 = __result;
    }
    iftmp.39 = -D.16601;
    goto <D.17805>;
    <D.17768>:
    iftmp.39 = __builtin_strcmp (element_name, "bindingRedirect");
    <D.17805>:
    D.16602 = iftmp.39;
  }
  if (D.16602 == 0) goto <D.17806>; else goto <D.17807>;
  <D.17806>:
  n = 0;
  goto <D.16651>;
  <D.16650>:
  {
    const gchar * attribute_name;

    D.17581 = (long unsigned int) n;
    D.17582 = D.17581 * 8;
    D.17583 = attribute_names + D.17582;
    attribute_name = *D.17583;
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 10;
      if (__s2_len <= 3) goto <D.17809>; else goto <D.17810>;
      <D.17809>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = attribute_name;
        D.17811 = "oldVersion";
        D.17812 = MEM[(const unsigned char *)D.17811];
        D.17813 = (int) D.17812;
        D.17814 = *__s2;
        D.17815 = (int) D.17814;
        __result = D.17813 - D.17815;
        {
          D.17816 = __s2_len != 0;
          D.17817 = __result == 0;
          D.17818 = D.17816 & D.17817;
          if (D.17818 != 0) goto <D.17819>; else goto <D.17820>;
          <D.17819>:
          D.17821 = &MEM[(void *)"oldVersion" + 1B];
          D.17822 = *D.17821;
          D.17823 = (int) D.17822;
          D.17824 = __s2 + 1;
          D.17825 = *D.17824;
          D.17826 = (int) D.17825;
          __result = D.17823 - D.17826;
          D.17827 = __s2_len > 1;
          D.17817 = __result == 0;
          D.17828 = D.17827 & D.17817;
          if (D.17828 != 0) goto <D.17829>; else goto <D.17830>;
          <D.17829>:
          D.17831 = &MEM[(void *)"oldVersion" + 2B];
          D.17832 = *D.17831;
          D.17833 = (int) D.17832;
          D.17834 = __s2 + 2;
          D.17835 = *D.17834;
          D.17836 = (int) D.17835;
          __result = D.17833 - D.17836;
          D.17837 = __s2_len > 2;
          D.17817 = __result == 0;
          D.17838 = D.17837 & D.17817;
          if (D.17838 != 0) goto <D.17839>; else goto <D.17840>;
          <D.17839>:
          D.17841 = &MEM[(void *)"oldVersion" + 3B];
          D.17842 = *D.17841;
          D.17843 = (int) D.17842;
          D.17844 = __s2 + 3;
          D.17845 = *D.17844;
          D.17846 = (int) D.17845;
          __result = D.17843 - D.17846;
          <D.17840>:
          <D.17830>:
          <D.17820>:
        }
        D.16611 = __result;
      }
      iftmp.40 = -D.16611;
      goto <D.17847>;
      <D.17810>:
      iftmp.40 = __builtin_strcmp (attribute_name, "oldVersion");
      <D.17847>:
      D.16612 = iftmp.40;
    }
    if (D.16612 == 0) goto <D.17848>; else goto <D.17849>;
    <D.17848>:
    {
      gchar * * numbers;
      gchar * * version;
      gchar * * versions;
      gint major;
      gint minor;
      gint build;
      gint revision;

      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 0;
        if (__s2_len <= 3) goto <D.17851>; else goto <D.17852>;
        <D.17851>:
        {
          const unsigned char * __s2;
          int __result;

          D.17581 = (long unsigned int) n;
          D.17582 = D.17581 * 8;
          D.17626 = attribute_values + D.17582;
          __s2 = *D.17626;
          D.17853 = "";
          D.17854 = MEM[(const unsigned char *)D.17853];
          D.17855 = (int) D.17854;
          D.17856 = *__s2;
          D.17857 = (int) D.17856;
          __result = D.17855 - D.17857;
          {
            D.17858 = __s2_len != 0;
            D.17859 = __result == 0;
            D.17860 = D.17858 & D.17859;
            if (D.17860 != 0) goto <D.17861>; else goto <D.17862>;
            <D.17861>:
            D.17863 = &MEM[(void *)"" + 1B];
            D.17864 = *D.17863;
            D.17865 = (int) D.17864;
            D.17866 = __s2 + 1;
            D.17867 = *D.17866;
            D.17868 = (int) D.17867;
            __result = D.17865 - D.17868;
            D.17869 = __s2_len > 1;
            D.17859 = __result == 0;
            D.17870 = D.17869 & D.17859;
            if (D.17870 != 0) goto <D.17871>; else goto <D.17872>;
            <D.17871>:
            D.17873 = &MEM[(void *)"" + 2B];
            D.17874 = *D.17873;
            D.17875 = (int) D.17874;
            D.17876 = __s2 + 2;
            D.17877 = *D.17876;
            D.17878 = (int) D.17877;
            __result = D.17875 - D.17878;
            D.17879 = __s2_len > 2;
            D.17859 = __result == 0;
            D.17880 = D.17879 & D.17859;
            if (D.17880 != 0) goto <D.17881>; else goto <D.17882>;
            <D.17881>:
            D.17883 = &MEM[(void *)"" + 3B];
            D.17884 = *D.17883;
            D.17885 = (int) D.17884;
            D.17886 = __s2 + 3;
            D.17887 = *D.17886;
            D.17888 = (int) D.17887;
            __result = D.17885 - D.17888;
            <D.17882>:
            <D.17872>:
            <D.17862>:
          }
          D.16627 = __result;
        }
        iftmp.41 = -D.16627;
        goto <D.17889>;
        <D.17852>:
        D.17581 = (long unsigned int) n;
        D.17582 = D.17581 * 8;
        D.17626 = attribute_values + D.17582;
        D.17627 = *D.17626;
        D.17890 = MEM[(const unsigned char * {ref-all})D.17627];
        iftmp.41 = (int) D.17890;
        <D.17889>:
        D.16628 = iftmp.41;
      }
      if (D.16628 == 0) goto <D.17891>; else goto <D.17892>;
      <D.17891>:
      return;
      <D.17892>:
      D.17581 = (long unsigned int) n;
      D.17582 = D.17581 * 8;
      D.17626 = attribute_values + D.17582;
      D.17627 = *D.17626;
      versions = monoeg_g_strsplit (D.17627, "-", 2);
      D.17893 = *versions;
      version = monoeg_g_strsplit (D.17893, ".", 4);
      numbers = version;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17896>; else goto <D.17897>;
      <D.17896>:
      numbers.43 = numbers;
      numbers = numbers.43 + 8;
      D.17899 = *numbers.43;
      iftmp.42 = atoi (D.17899);
      goto <D.17900>;
      <D.17897>:
      iftmp.42 = -1;
      <D.17900>:
      major = iftmp.42;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17902>; else goto <D.17903>;
      <D.17902>:
      numbers.45 = numbers;
      numbers = numbers.45 + 8;
      D.17905 = *numbers.45;
      iftmp.44 = atoi (D.17905);
      goto <D.17906>;
      <D.17903>:
      iftmp.44 = -1;
      <D.17906>:
      minor = iftmp.44;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17908>; else goto <D.17909>;
      <D.17908>:
      numbers.47 = numbers;
      numbers = numbers.47 + 8;
      D.17911 = *numbers.47;
      iftmp.46 = atoi (D.17911);
      goto <D.17912>;
      <D.17909>:
      iftmp.46 = -1;
      <D.17912>:
      build = iftmp.46;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17914>; else goto <D.17915>;
      <D.17914>:
      D.17895 = *numbers;
      iftmp.48 = atoi (D.17895);
      goto <D.17916>;
      <D.17915>:
      iftmp.48 = -1;
      <D.17916>:
      revision = iftmp.48;
      monoeg_g_strfreev (version);
      D.17919 = major < 0;
      D.17920 = minor < 0;
      D.17921 = D.17919 | D.17920;
      if (D.17921 != 0) goto <D.17917>; else goto <D.17922>;
      <D.17922>:
      D.17923 = build < 0;
      D.17924 = revision < 0;
      D.17925 = D.17923 | D.17924;
      if (D.17925 != 0) goto <D.17917>; else goto <D.17918>;
      <D.17917>:
      monoeg_g_strfreev (versions);
      return;
      <D.17918>:
      D.17926 = (short unsigned int) major;
      info->old_version_bottom.major = D.17926;
      D.17927 = (short unsigned int) minor;
      info->old_version_bottom.minor = D.17927;
      D.17928 = (short unsigned int) build;
      info->old_version_bottom.build = D.17928;
      D.17929 = (short unsigned int) revision;
      info->old_version_bottom.revision = D.17929;
      info->has_old_version_bottom = 1;
      D.17930 = versions + 8;
      D.17931 = *D.17930;
      if (D.17931 == 0B) goto <D.17932>; else goto <D.17933>;
      <D.17932>:
      monoeg_g_strfreev (versions);
      // predicted unlikely by continue predictor.
      goto <D.16629>;
      <D.17933>:
      D.17930 = versions + 8;
      D.17931 = *D.17930;
      version = monoeg_g_strsplit (D.17931, ".", 4);
      numbers = version;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17935>; else goto <D.17936>;
      <D.17935>:
      numbers.50 = numbers;
      numbers = numbers.50 + 8;
      D.17938 = *numbers.50;
      iftmp.49 = atoi (D.17938);
      goto <D.17939>;
      <D.17936>:
      iftmp.49 = -1;
      <D.17939>:
      major = iftmp.49;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17941>; else goto <D.17942>;
      <D.17941>:
      numbers.52 = numbers;
      numbers = numbers.52 + 8;
      D.17944 = *numbers.52;
      iftmp.51 = atoi (D.17944);
      goto <D.17945>;
      <D.17942>:
      iftmp.51 = -1;
      <D.17945>:
      minor = iftmp.51;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17947>; else goto <D.17948>;
      <D.17947>:
      numbers.54 = numbers;
      numbers = numbers.54 + 8;
      D.17950 = *numbers.54;
      iftmp.53 = atoi (D.17950);
      goto <D.17951>;
      <D.17948>:
      iftmp.53 = -1;
      <D.17951>:
      build = iftmp.53;
      D.17895 = *numbers;
      if (D.17895 != 0B) goto <D.17953>; else goto <D.17954>;
      <D.17953>:
      D.17895 = *numbers;
      iftmp.55 = atoi (D.17895);
      goto <D.17955>;
      <D.17954>:
      iftmp.55 = 1;
      <D.17955>:
      revision = iftmp.55;
      monoeg_g_strfreev (version);
      D.17919 = major < 0;
      D.17920 = minor < 0;
      D.17921 = D.17919 | D.17920;
      if (D.17921 != 0) goto <D.17956>; else goto <D.17958>;
      <D.17958>:
      D.17923 = build < 0;
      D.17924 = revision < 0;
      D.17925 = D.17923 | D.17924;
      if (D.17925 != 0) goto <D.17956>; else goto <D.17957>;
      <D.17956>:
      monoeg_g_strfreev (versions);
      return;
      <D.17957>:
      D.17926 = (short unsigned int) major;
      info->old_version_top.major = D.17926;
      D.17927 = (short unsigned int) minor;
      info->old_version_top.minor = D.17927;
      D.17928 = (short unsigned int) build;
      info->old_version_top.build = D.17928;
      D.17929 = (short unsigned int) revision;
      info->old_version_top.revision = D.17929;
      info->has_old_version_top = 1;
      monoeg_g_strfreev (versions);
    }
    goto <D.17959>;
    <D.17849>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 10;
      if (__s2_len <= 3) goto <D.17961>; else goto <D.17962>;
      <D.17961>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = attribute_name;
        D.17963 = "newVersion";
        D.17964 = MEM[(const unsigned char *)D.17963];
        D.17965 = (int) D.17964;
        D.17966 = *__s2;
        D.17967 = (int) D.17966;
        __result = D.17965 - D.17967;
        {
          D.17968 = __s2_len != 0;
          D.17969 = __result == 0;
          D.17970 = D.17968 & D.17969;
          if (D.17970 != 0) goto <D.17971>; else goto <D.17972>;
          <D.17971>:
          D.17973 = &MEM[(void *)"newVersion" + 1B];
          D.17974 = *D.17973;
          D.17975 = (int) D.17974;
          D.17976 = __s2 + 1;
          D.17977 = *D.17976;
          D.17978 = (int) D.17977;
          __result = D.17975 - D.17978;
          D.17979 = __s2_len > 1;
          D.17969 = __result == 0;
          D.17980 = D.17979 & D.17969;
          if (D.17980 != 0) goto <D.17981>; else goto <D.17982>;
          <D.17981>:
          D.17983 = &MEM[(void *)"newVersion" + 2B];
          D.17984 = *D.17983;
          D.17985 = (int) D.17984;
          D.17986 = __s2 + 2;
          D.17987 = *D.17986;
          D.17988 = (int) D.17987;
          __result = D.17985 - D.17988;
          D.17989 = __s2_len > 2;
          D.17969 = __result == 0;
          D.17990 = D.17989 & D.17969;
          if (D.17990 != 0) goto <D.17991>; else goto <D.17992>;
          <D.17991>:
          D.17993 = &MEM[(void *)"newVersion" + 3B];
          D.17994 = *D.17993;
          D.17995 = (int) D.17994;
          D.17996 = __s2 + 3;
          D.17997 = *D.17996;
          D.17998 = (int) D.17997;
          __result = D.17995 - D.17998;
          <D.17992>:
          <D.17982>:
          <D.17972>:
        }
        D.16637 = __result;
      }
      iftmp.56 = -D.16637;
      goto <D.17999>;
      <D.17962>:
      iftmp.56 = __builtin_strcmp (attribute_name, "newVersion");
      <D.17999>:
      D.16638 = iftmp.56;
    }
    if (D.16638 == 0) goto <D.18000>; else goto <D.18001>;
    <D.18000>:
    {
      gchar * * numbers;
      gchar * * version;

      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 0;
        if (__s2_len <= 3) goto <D.18003>; else goto <D.18004>;
        <D.18003>:
        {
          const unsigned char * __s2;
          int __result;

          D.17581 = (long unsigned int) n;
          D.17582 = D.17581 * 8;
          D.17626 = attribute_values + D.17582;
          __s2 = *D.17626;
          D.17853 = "";
          D.17854 = MEM[(const unsigned char *)D.17853];
          D.17855 = (int) D.17854;
          D.18005 = *__s2;
          D.18006 = (int) D.18005;
          __result = D.17855 - D.18006;
          {
            D.18007 = __s2_len != 0;
            D.18008 = __result == 0;
            D.18009 = D.18007 & D.18008;
            if (D.18009 != 0) goto <D.18010>; else goto <D.18011>;
            <D.18010>:
            D.17863 = &MEM[(void *)"" + 1B];
            D.17864 = *D.17863;
            D.17865 = (int) D.17864;
            D.18012 = __s2 + 1;
            D.18013 = *D.18012;
            D.18014 = (int) D.18013;
            __result = D.17865 - D.18014;
            D.18015 = __s2_len > 1;
            D.18008 = __result == 0;
            D.18016 = D.18015 & D.18008;
            if (D.18016 != 0) goto <D.18017>; else goto <D.18018>;
            <D.18017>:
            D.17873 = &MEM[(void *)"" + 2B];
            D.17874 = *D.17873;
            D.17875 = (int) D.17874;
            D.18019 = __s2 + 2;
            D.18020 = *D.18019;
            D.18021 = (int) D.18020;
            __result = D.17875 - D.18021;
            D.18022 = __s2_len > 2;
            D.18008 = __result == 0;
            D.18023 = D.18022 & D.18008;
            if (D.18023 != 0) goto <D.18024>; else goto <D.18025>;
            <D.18024>:
            D.17883 = &MEM[(void *)"" + 3B];
            D.17884 = *D.17883;
            D.17885 = (int) D.17884;
            D.18026 = __s2 + 3;
            D.18027 = *D.18026;
            D.18028 = (int) D.18027;
            __result = D.17885 - D.18028;
            <D.18025>:
            <D.18018>:
            <D.18011>:
          }
          D.16648 = __result;
        }
        iftmp.57 = -D.16648;
        goto <D.18029>;
        <D.18004>:
        D.17581 = (long unsigned int) n;
        D.17582 = D.17581 * 8;
        D.17626 = attribute_values + D.17582;
        D.17627 = *D.17626;
        D.17890 = MEM[(const unsigned char * {ref-all})D.17627];
        iftmp.57 = (int) D.17890;
        <D.18029>:
        D.16649 = iftmp.57;
      }
      if (D.16649 == 0) goto <D.18030>; else goto <D.18031>;
      <D.18030>:
      return;
      <D.18031>:
      D.17581 = (long unsigned int) n;
      D.17582 = D.17581 * 8;
      D.17626 = attribute_values + D.17582;
      D.17627 = *D.17626;
      version = monoeg_g_strsplit (D.17627, ".", 4);
      numbers = version;
      D.18033 = *numbers;
      if (D.18033 != 0B) goto <D.18034>; else goto <D.18035>;
      <D.18034>:
      numbers.59 = numbers;
      numbers = numbers.59 + 8;
      D.18037 = *numbers.59;
      D.18038 = atoi (D.18037);
      iftmp.58 = (guint16) D.18038;
      goto <D.18039>;
      <D.18035>:
      iftmp.58 = 65535;
      <D.18039>:
      info->new_version.major = iftmp.58;
      D.18033 = *numbers;
      if (D.18033 != 0B) goto <D.18041>; else goto <D.18042>;
      <D.18041>:
      numbers.61 = numbers;
      numbers = numbers.61 + 8;
      D.18044 = *numbers.61;
      D.18045 = atoi (D.18044);
      iftmp.60 = (guint16) D.18045;
      goto <D.18046>;
      <D.18042>:
      iftmp.60 = 65535;
      <D.18046>:
      info->new_version.minor = iftmp.60;
      D.18033 = *numbers;
      if (D.18033 != 0B) goto <D.18048>; else goto <D.18049>;
      <D.18048>:
      numbers.63 = numbers;
      numbers = numbers.63 + 8;
      D.18051 = *numbers.63;
      D.18052 = atoi (D.18051);
      iftmp.62 = (guint16) D.18052;
      goto <D.18053>;
      <D.18049>:
      iftmp.62 = 65535;
      <D.18053>:
      info->new_version.build = iftmp.62;
      D.18033 = *numbers;
      if (D.18033 != 0B) goto <D.18055>; else goto <D.18056>;
      <D.18055>:
      D.18033 = *numbers;
      D.18057 = atoi (D.18033);
      iftmp.64 = (guint16) D.18057;
      goto <D.18058>;
      <D.18056>:
      iftmp.64 = 65535;
      <D.18058>:
      info->new_version.revision = iftmp.64;
      info->has_new_version = 1;
      monoeg_g_strfreev (version);
    }
    <D.18001>:
    <D.17959>:
  }
  <D.16629>:
  n = n + 1;
  <D.16651>:
  D.17581 = (long unsigned int) n;
  D.17582 = D.17581 * 8;
  D.17583 = attribute_names + D.17582;
  D.17764 = *D.17583;
  if (D.17764 != 0B) goto <D.16650>; else goto <D.16652>;
  <D.16652>:
  <D.17807>:
  <D.17765>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.18062;
  int D.18067;
  void * D.18069;
  long unsigned int D.18070;

  D.18062 = __builtin_constant_p (__len);
  if (D.18062 != 0) goto <D.18063>; else goto <D.18064>;
  <D.18063>:
  if (__len == 0) goto <D.18065>; else goto <D.18066>;
  <D.18065>:
  D.18067 = __builtin_constant_p (__ch);
  if (D.18067 == 0) goto <D.18060>; else goto <D.18068>;
  <D.18068>:
  if (__ch != 0) goto <D.18060>; else goto <D.18061>;
  <D.18060>:
  __warn_memset_zero_len ();
  D.18069 = __dest;
  return D.18069;
  <D.18061>:
  <D.18066>:
  <D.18064>:
  D.18070 = __builtin_object_size (__dest, 0);
  D.18069 = __builtin___memset_chk (__dest, __ch, __len, D.18070);
  return D.18069;
}


atoi (const char * __nptr)
{
  int D.18072;
  long int D.18073;

  D.18073 = strtol (__nptr, 0B, 10);
  D.18072 = (int) D.18073;
  return D.18072;
}


mono_config_parse_assembly_bindings (const char * filename, int amajor, int aminor, void * user_data, void (*<T1c33>) (struct MonoAssemblyBindingInfo *, void *) infocb)
{
  struct MonoAssemblyBindingInfo info;
  struct ParserUserData pud;
  struct ParseState state;

  try
    {
      info.major = amajor;
      info.minor = aminor;
      pud.info = &info;
      pud.info_parsed = infocb;
      pud.user_data = user_data;
      state.current = &config_assemblybinding_parser;
      state.user_data = &pud;
      state.assembly = 0B;
      state.inited = 1;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      info = {CLOBBER};
      pud = {CLOBBER};
      state = {CLOBBER};
    }
}


assembly_binding_end (void * user_data, const char * element_name)
{
  int D.16526;
  int iftmp.65;
  int D.16525;
  const char[18] * D.18078;
  unsigned char D.18079;
  int D.18080;
  unsigned char D.18081;
  int D.18082;
  _Bool D.18083;
  _Bool D.18084;
  _Bool D.18085;
  const unsigned char * D.18088;
  unsigned char D.18089;
  int D.18090;
  const unsigned char * D.18091;
  unsigned char D.18092;
  int D.18093;
  _Bool D.18094;
  _Bool D.18095;
  const unsigned char * D.18098;
  unsigned char D.18099;
  int D.18100;
  const unsigned char * D.18101;
  unsigned char D.18102;
  int D.18103;
  _Bool D.18104;
  _Bool D.18105;
  const unsigned char * D.18108;
  unsigned char D.18109;
  int D.18110;
  const unsigned char * D.18111;
  unsigned char D.18112;
  int D.18113;
  void (*<T1c33>) (struct MonoAssemblyBindingInfo *, void *) D.18117;
  struct MonoAssemblyBindingInfo * D.18120;
  void * D.18123;
  char * D.18124;
  char * D.18125;
  struct ParserUserData * pud;

  pud = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 17;
    if (__s2_len <= 3) goto <D.18076>; else goto <D.18077>;
    <D.18076>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.18078 = "dependentAssembly";
      D.18079 = MEM[(const unsigned char *)D.18078];
      D.18080 = (int) D.18079;
      D.18081 = *__s2;
      D.18082 = (int) D.18081;
      __result = D.18080 - D.18082;
      {
        D.18083 = __s2_len != 0;
        D.18084 = __result == 0;
        D.18085 = D.18083 & D.18084;
        if (D.18085 != 0) goto <D.18086>; else goto <D.18087>;
        <D.18086>:
        D.18088 = &MEM[(void *)"dependentAssembly" + 1B];
        D.18089 = *D.18088;
        D.18090 = (int) D.18089;
        D.18091 = __s2 + 1;
        D.18092 = *D.18091;
        D.18093 = (int) D.18092;
        __result = D.18090 - D.18093;
        D.18094 = __s2_len > 1;
        D.18084 = __result == 0;
        D.18095 = D.18094 & D.18084;
        if (D.18095 != 0) goto <D.18096>; else goto <D.18097>;
        <D.18096>:
        D.18098 = &MEM[(void *)"dependentAssembly" + 2B];
        D.18099 = *D.18098;
        D.18100 = (int) D.18099;
        D.18101 = __s2 + 2;
        D.18102 = *D.18101;
        D.18103 = (int) D.18102;
        __result = D.18100 - D.18103;
        D.18104 = __s2_len > 2;
        D.18084 = __result == 0;
        D.18105 = D.18104 & D.18084;
        if (D.18105 != 0) goto <D.18106>; else goto <D.18107>;
        <D.18106>:
        D.18108 = &MEM[(void *)"dependentAssembly" + 3B];
        D.18109 = *D.18108;
        D.18110 = (int) D.18109;
        D.18111 = __s2 + 3;
        D.18112 = *D.18111;
        D.18113 = (int) D.18112;
        __result = D.18110 - D.18113;
        <D.18107>:
        <D.18097>:
        <D.18087>:
      }
      D.16525 = __result;
    }
    iftmp.65 = -D.16525;
    goto <D.18114>;
    <D.18077>:
    iftmp.65 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.18114>:
    D.16526 = iftmp.65;
  }
  if (D.16526 == 0) goto <D.18115>; else goto <D.18116>;
  <D.18115>:
  D.18117 = pud->info_parsed;
  if (D.18117 != 0B) goto <D.18118>; else goto <D.18119>;
  <D.18118>:
  D.18120 = pud->info;
  if (D.18120 != 0B) goto <D.18121>; else goto <D.18122>;
  <D.18121>:
  D.18117 = pud->info_parsed;
  D.18123 = pud->user_data;
  D.18120 = pud->info;
  D.18117 (D.18120, D.18123);
  D.18120 = pud->info;
  D.18124 = D.18120->name;
  monoeg_g_free (D.18124);
  D.18120 = pud->info;
  D.18125 = D.18120->culture;
  monoeg_g_free (D.18125);
  <D.18122>:
  <D.18119>:
  <D.18116>:
}


mono_config_set_server_mode (mono_bool server_mode)
{
  mono_server_mode = server_mode;
}


mono_config_is_server_mode ()
{
  mono_bool D.18126;

  D.18126 = mono_server_mode;
  return D.18126;
}


