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.18869>; else goto <D.18870>;
  <D.18869>:
  config_handlers.0 = config_handlers;
  monoeg_g_hash_table_destroy (config_handlers.0);
  <D.18870>:
  mono_cfg_dir_allocated.1 = mono_cfg_dir_allocated;
  monoeg_g_free (mono_cfg_dir_allocated.1);
}


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

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


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

  inited.2 = inited;
  if (inited.2 == 0) goto <D.18874>; else goto <D.18875>;
  <D.18874>:
  mono_config_init ();
  <D.18875>:
  context = monoeg_g_markup_parse_context_new (&mono_parser, 0, state, 0B);
  len.3 = (int) len;
  D.18877 = monoeg_g_markup_parse_context_parse (context, text, len.3, 0B);
  if (D.18877 != 0) goto <D.18878>; else goto <D.18879>;
  <D.18878>:
  monoeg_g_markup_parse_context_end_parse (context, 0B);
  <D.18879>:
  monoeg_g_markup_parse_context_free (context);
}


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

  state = user_data;
  if (state != 0B) goto <D.18883>; else goto <D.18881>;
  <D.18883>:
  D.18884 = state->user_data;
  if (D.18884 != 0B) goto <D.18885>; else goto <D.18881>;
  <D.18885>:
  iftmp.4 = state->user_data;
  goto <D.18882>;
  <D.18881>:
  iftmp.4 = "<unknown>";
  <D.18882>:
  filename = iftmp.4;
  if (error != 0B) goto <D.18889>; else goto <D.18887>;
  <D.18889>:
  D.18890 = error->message;
  if (D.18890 != 0B) goto <D.18891>; else goto <D.18887>;
  <D.18891>:
  iftmp.5 = error->message;
  goto <D.18888>;
  <D.18887>:
  iftmp.5 = "";
  <D.18888>:
  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.18892;
  void (*<T3262>) (void *, const char *, gsize) D.18895;
  void * D.18898;
  struct ParseState * state;

  state = user_data;
  D.18892 = state->current;
  if (D.18892 != 0B) goto <D.18893>; else goto <D.18894>;
  <D.18893>:
  D.18892 = state->current;
  D.18895 = D.18892->text;
  if (D.18895 != 0B) goto <D.18896>; else goto <D.18897>;
  <D.18896>:
  D.18892 = state->current;
  D.18895 = D.18892->text;
  D.18898 = state->user_data;
  D.18895 (D.18898, text, text_len);
  <D.18897>:
  <D.18894>:
}


end_element (struct GMarkupParseContext * context, const gchar * element_name, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.18899;
  void (*<T3266>) (void *, const char *) D.18902;
  void * D.18905;
  int D.18377;
  const char * D.18906;
  void (*<T15c0>) (void *) D.18909;
  struct ParseState * state;

  state = user_data;
  D.18899 = state->current;
  if (D.18899 != 0B) goto <D.18900>; else goto <D.18901>;
  <D.18900>:
  D.18899 = state->current;
  D.18902 = D.18899->end;
  if (D.18902 != 0B) goto <D.18903>; else goto <D.18904>;
  <D.18903>:
  D.18899 = state->current;
  D.18902 = D.18899->end;
  D.18905 = state->user_data;
  D.18902 (D.18905, element_name);
  <D.18904>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.18899 = state->current;
    D.18906 = D.18899->element_name;
    D.18377 = __builtin_strcmp (D.18906, element_name);
  }
  if (D.18377 == 0) goto <D.18907>; else goto <D.18908>;
  <D.18907>:
  D.18899 = state->current;
  D.18909 = D.18899->finish;
  if (D.18909 != 0B) goto <D.18910>; else goto <D.18911>;
  <D.18910>:
  D.18899 = state->current;
  D.18909 = D.18899->finish;
  D.18905 = state->user_data;
  D.18909 (D.18905);
  <D.18911>:
  state->current = 0B;
  state->user_data = 0B;
  <D.18908>:
  <D.18901>:
}


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.18912;
  struct GHashTable * config_handlers.6;
  void * D.18916;
  void * (*<T325a>) (struct MonoImage *) D.18919;
  struct MonoImage * D.18922;
  void * D.18923;
  void (*<T325e>) (void *, const gchar *, const gchar * *, const gchar * *) D.18926;
  void * D.18929;
  struct ParseState * state;

  state = user_data;
  D.18912 = state->current;
  if (D.18912 == 0B) goto <D.18913>; else goto <D.18914>;
  <D.18913>:
  config_handlers.6 = config_handlers;
  D.18916 = monoeg_g_hash_table_lookup (config_handlers.6, element_name);
  state->current = D.18916;
  D.18912 = state->current;
  if (D.18912 != 0B) goto <D.18917>; else goto <D.18918>;
  <D.18917>:
  D.18912 = state->current;
  D.18919 = D.18912->init;
  if (D.18919 != 0B) goto <D.18920>; else goto <D.18921>;
  <D.18920>:
  D.18912 = state->current;
  D.18919 = D.18912->init;
  D.18922 = state->assembly;
  D.18923 = D.18919 (D.18922);
  state->user_data = D.18923;
  <D.18921>:
  <D.18918>:
  <D.18914>:
  D.18912 = state->current;
  if (D.18912 != 0B) goto <D.18924>; else goto <D.18925>;
  <D.18924>:
  D.18912 = state->current;
  D.18926 = D.18912->start;
  if (D.18926 != 0B) goto <D.18927>; else goto <D.18928>;
  <D.18927>:
  D.18912 = state->current;
  D.18926 = D.18912->start;
  D.18929 = state->user_data;
  D.18926 (D.18929, element_name, attribute_names, attribute_values);
  <D.18928>:
  <D.18925>:
}


mono_config_init ()
{
  struct GHashTable * config_handlers.7;
  struct GHashTable * config_handlers.8;
  const char * D.18932;
  const char * D.18933;

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


legacyUEP_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.18584;
  int iftmp.9;
  int D.18583;
  const char[31] * D.18937;
  unsigned char D.18938;
  int D.18939;
  unsigned char D.18940;
  int D.18941;
  _Bool D.18942;
  _Bool D.18943;
  _Bool D.18944;
  const unsigned char * D.18947;
  unsigned char D.18948;
  int D.18949;
  const unsigned char * D.18950;
  unsigned char D.18951;
  int D.18952;
  _Bool D.18953;
  _Bool D.18954;
  const unsigned char * D.18957;
  unsigned char D.18958;
  int D.18959;
  const unsigned char * D.18960;
  unsigned char D.18961;
  int D.18962;
  _Bool D.18963;
  _Bool D.18964;
  const unsigned char * D.18967;
  unsigned char D.18968;
  int D.18969;
  const unsigned char * D.18970;
  unsigned char D.18971;
  int D.18972;
  const gchar * D.18976;
  int D.18593;
  int iftmp.10;
  int D.18592;
  const char[8] * D.18982;
  unsigned char D.18983;
  int D.18984;
  unsigned char D.18985;
  int D.18986;
  _Bool D.18987;
  _Bool D.18988;
  _Bool D.18989;
  const unsigned char * D.18992;
  unsigned char D.18993;
  int D.18994;
  const unsigned char * D.18995;
  unsigned char D.18996;
  int D.18997;
  _Bool D.18998;
  _Bool D.18999;
  const unsigned char * D.19002;
  unsigned char D.19003;
  int D.19004;
  const unsigned char * D.19005;
  unsigned char D.19006;
  int D.19007;
  _Bool D.19008;
  _Bool D.19009;
  const unsigned char * D.19012;
  unsigned char D.19013;
  int D.19014;
  const unsigned char * D.19015;
  unsigned char D.19016;
  int D.19017;
  int D.18602;
  int iftmp.11;
  int D.18601;
  const char[2] * D.19026;
  unsigned char D.19027;
  int D.19028;
  unsigned char D.19029;
  int D.19030;
  _Bool D.19031;
  _Bool D.19032;
  _Bool D.19033;
  const unsigned char * D.19036;
  unsigned char D.19037;
  int D.19038;
  const unsigned char * D.19039;
  unsigned char D.19040;
  int D.19041;
  _Bool D.19042;
  _Bool D.19043;
  const unsigned char * D.19046;
  unsigned char D.19047;
  int D.19048;
  const unsigned char * D.19049;
  unsigned char D.19050;
  int D.19051;
  _Bool D.19052;
  _Bool D.19053;
  const unsigned char * D.19056;
  unsigned char D.19057;
  int D.19058;
  const unsigned char * D.19059;
  unsigned char D.19060;
  int D.19061;
  const gchar * D.19063;
  int D.19065;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.18937 = "legacyUnhandledExceptionPolicy";
      D.18938 = MEM[(const unsigned char *)D.18937];
      D.18939 = (int) D.18938;
      D.18940 = *__s2;
      D.18941 = (int) D.18940;
      __result = D.18939 - D.18941;
      {
        D.18942 = __s2_len != 0;
        D.18943 = __result == 0;
        D.18944 = D.18942 & D.18943;
        if (D.18944 != 0) goto <D.18945>; else goto <D.18946>;
        <D.18945>:
        D.18947 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 1B];
        D.18948 = *D.18947;
        D.18949 = (int) D.18948;
        D.18950 = __s2 + 1;
        D.18951 = *D.18950;
        D.18952 = (int) D.18951;
        __result = D.18949 - D.18952;
        D.18953 = __s2_len > 1;
        D.18943 = __result == 0;
        D.18954 = D.18953 & D.18943;
        if (D.18954 != 0) goto <D.18955>; else goto <D.18956>;
        <D.18955>:
        D.18957 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 2B];
        D.18958 = *D.18957;
        D.18959 = (int) D.18958;
        D.18960 = __s2 + 2;
        D.18961 = *D.18960;
        D.18962 = (int) D.18961;
        __result = D.18959 - D.18962;
        D.18963 = __s2_len > 2;
        D.18943 = __result == 0;
        D.18964 = D.18963 & D.18943;
        if (D.18964 != 0) goto <D.18965>; else goto <D.18966>;
        <D.18965>:
        D.18967 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 3B];
        D.18968 = *D.18967;
        D.18969 = (int) D.18968;
        D.18970 = __s2 + 3;
        D.18971 = *D.18970;
        D.18972 = (int) D.18971;
        __result = D.18969 - D.18972;
        <D.18966>:
        <D.18956>:
        <D.18946>:
      }
      D.18583 = __result;
    }
    iftmp.9 = -D.18583;
    goto <D.18973>;
    <D.18936>:
    iftmp.9 = __builtin_strcmp (element_name, "legacyUnhandledExceptionPolicy");
    <D.18973>:
    D.18584 = iftmp.9;
  }
  if (D.18584 == 0) goto <D.18974>; else goto <D.18975>;
  <D.18974>:
  D.18976 = *attribute_names;
  if (D.18976 != 0B) goto <D.18977>; else goto <D.18978>;
  <D.18977>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *attribute_names;
      D.18982 = "enabled";
      D.18983 = MEM[(const unsigned char *)D.18982];
      D.18984 = (int) D.18983;
      D.18985 = *__s2;
      D.18986 = (int) D.18985;
      __result = D.18984 - D.18986;
      {
        D.18987 = __s2_len != 0;
        D.18988 = __result == 0;
        D.18989 = D.18987 & D.18988;
        if (D.18989 != 0) goto <D.18990>; else goto <D.18991>;
        <D.18990>:
        D.18992 = &MEM[(void *)"enabled" + 1B];
        D.18993 = *D.18992;
        D.18994 = (int) D.18993;
        D.18995 = __s2 + 1;
        D.18996 = *D.18995;
        D.18997 = (int) D.18996;
        __result = D.18994 - D.18997;
        D.18998 = __s2_len > 1;
        D.18988 = __result == 0;
        D.18999 = D.18998 & D.18988;
        if (D.18999 != 0) goto <D.19000>; else goto <D.19001>;
        <D.19000>:
        D.19002 = &MEM[(void *)"enabled" + 2B];
        D.19003 = *D.19002;
        D.19004 = (int) D.19003;
        D.19005 = __s2 + 2;
        D.19006 = *D.19005;
        D.19007 = (int) D.19006;
        __result = D.19004 - D.19007;
        D.19008 = __s2_len > 2;
        D.18988 = __result == 0;
        D.19009 = D.19008 & D.18988;
        if (D.19009 != 0) goto <D.19010>; else goto <D.19011>;
        <D.19010>:
        D.19012 = &MEM[(void *)"enabled" + 3B];
        D.19013 = *D.19012;
        D.19014 = (int) D.19013;
        D.19015 = __s2 + 3;
        D.19016 = *D.19015;
        D.19017 = (int) D.19016;
        __result = D.19014 - D.19017;
        <D.19011>:
        <D.19001>:
        <D.18991>:
      }
      D.18592 = __result;
    }
    iftmp.10 = -D.18592;
    goto <D.19018>;
    <D.18981>:
    D.18976 = *attribute_names;
    iftmp.10 = __builtin_strcmp (D.18976, "enabled");
    <D.19018>:
    D.18593 = iftmp.10;
  }
  if (D.18593 == 0) goto <D.19019>; else goto <D.19020>;
  <D.19019>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *attribute_values;
      D.19026 = "1";
      D.19027 = MEM[(const unsigned char *)D.19026];
      D.19028 = (int) D.19027;
      D.19029 = *__s2;
      D.19030 = (int) D.19029;
      __result = D.19028 - D.19030;
      {
        D.19031 = __s2_len != 0;
        D.19032 = __result == 0;
        D.19033 = D.19031 & D.19032;
        if (D.19033 != 0) goto <D.19034>; else goto <D.19035>;
        <D.19034>:
        D.19036 = &MEM[(void *)"1" + 1B];
        D.19037 = *D.19036;
        D.19038 = (int) D.19037;
        D.19039 = __s2 + 1;
        D.19040 = *D.19039;
        D.19041 = (int) D.19040;
        __result = D.19038 - D.19041;
        D.19042 = __s2_len > 1;
        D.19032 = __result == 0;
        D.19043 = D.19042 & D.19032;
        if (D.19043 != 0) goto <D.19044>; else goto <D.19045>;
        <D.19044>:
        D.19046 = &MEM[(void *)"1" + 2B];
        D.19047 = *D.19046;
        D.19048 = (int) D.19047;
        D.19049 = __s2 + 2;
        D.19050 = *D.19049;
        D.19051 = (int) D.19050;
        __result = D.19048 - D.19051;
        D.19052 = __s2_len > 2;
        D.19032 = __result == 0;
        D.19053 = D.19052 & D.19032;
        if (D.19053 != 0) goto <D.19054>; else goto <D.19055>;
        <D.19054>:
        D.19056 = &MEM[(void *)"1" + 3B];
        D.19057 = *D.19056;
        D.19058 = (int) D.19057;
        D.19059 = __s2 + 3;
        D.19060 = *D.19059;
        D.19061 = (int) D.19060;
        __result = D.19058 - D.19061;
        <D.19055>:
        <D.19045>:
        <D.19035>:
      }
      D.18601 = __result;
    }
    iftmp.11 = -D.18601;
    goto <D.19062>;
    <D.19025>:
    D.19063 = *attribute_values;
    iftmp.11 = __builtin_strcmp (D.19063, "1");
    <D.19062>:
    D.18602 = iftmp.11;
  }
  if (D.18602 == 0) goto <D.19021>; else goto <D.19064>;
  <D.19064>:
  D.19063 = *attribute_values;
  D.19065 = monoeg_ascii_strcasecmp (D.19063, "true");
  if (D.19065 == 0) goto <D.19021>; else goto <D.19022>;
  <D.19021>:
  mono_runtime_unhandled_exception_policy_set (0);
  <D.19022>:
  <D.19020>:
  <D.18978>:
  <D.18975>:
}


dllmap_finish (void * user_data)
{
  char * D.19066;
  char * D.19067;
  struct DllInfo * info;

  info = user_data;
  D.19066 = info->dll;
  monoeg_g_free (D.19066);
  D.19067 = info->target;
  monoeg_g_free (D.19067);
  monoeg_g_free (info);
}


dllmap_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.18446;
  int iftmp.12;
  int D.18445;
  const char[7] * D.19071;
  unsigned char D.19072;
  int D.19073;
  unsigned char D.19074;
  int D.19075;
  _Bool D.19076;
  _Bool D.19077;
  _Bool D.19078;
  const unsigned char * D.19081;
  unsigned char D.19082;
  int D.19083;
  const unsigned char * D.19084;
  unsigned char D.19085;
  int D.19086;
  _Bool D.19087;
  _Bool D.19088;
  const unsigned char * D.19091;
  unsigned char D.19092;
  int D.19093;
  const unsigned char * D.19094;
  unsigned char D.19095;
  int D.19096;
  _Bool D.19097;
  _Bool D.19098;
  const unsigned char * D.19101;
  unsigned char D.19102;
  int D.19103;
  const unsigned char * D.19104;
  unsigned char D.19105;
  int D.19106;
  char * D.19110;
  char * D.19111;
  int D.18455;
  int iftmp.13;
  int D.18454;
  unsigned int i.14;
  unsigned int D.19116;
  const gchar * * D.19117;
  const char[4] * D.19118;
  unsigned char D.19119;
  int D.19120;
  unsigned char D.19121;
  int D.19122;
  _Bool D.19123;
  _Bool D.19124;
  _Bool D.19125;
  const unsigned char * D.19128;
  unsigned char D.19129;
  int D.19130;
  const unsigned char * D.19131;
  unsigned char D.19132;
  int D.19133;
  _Bool D.19134;
  _Bool D.19135;
  const unsigned char * D.19138;
  unsigned char D.19139;
  int D.19140;
  const unsigned char * D.19141;
  unsigned char D.19142;
  int D.19143;
  _Bool D.19144;
  _Bool D.19145;
  const unsigned char * D.19148;
  unsigned char D.19149;
  int D.19150;
  const unsigned char * D.19151;
  unsigned char D.19152;
  int D.19153;
  const gchar * D.19155;
  const gchar * * D.19158;
  const gchar * D.19159;
  gchar * D.19160;
  int D.18464;
  int iftmp.15;
  int D.18463;
  const char[7] * D.19165;
  unsigned char D.19166;
  int D.19167;
  unsigned char D.19168;
  int D.19169;
  _Bool D.19170;
  _Bool D.19171;
  _Bool D.19172;
  const unsigned char * D.19175;
  unsigned char D.19176;
  int D.19177;
  const unsigned char * D.19178;
  unsigned char D.19179;
  int D.19180;
  _Bool D.19181;
  _Bool D.19182;
  const unsigned char * D.19185;
  unsigned char D.19186;
  int D.19187;
  const unsigned char * D.19188;
  unsigned char D.19189;
  int D.19190;
  _Bool D.19191;
  _Bool D.19192;
  const unsigned char * D.19195;
  unsigned char D.19196;
  int D.19197;
  const unsigned char * D.19198;
  unsigned char D.19199;
  int D.19200;
  gchar * D.19204;
  int D.18473;
  int iftmp.16;
  int D.18472;
  const char[3] * D.19211;
  unsigned char D.19212;
  int D.19213;
  unsigned char D.19214;
  int D.19215;
  _Bool D.19216;
  _Bool D.19217;
  _Bool D.19218;
  const unsigned char * D.19221;
  unsigned char D.19222;
  int D.19223;
  const unsigned char * D.19224;
  unsigned char D.19225;
  int D.19226;
  _Bool D.19227;
  _Bool D.19228;
  const unsigned char * D.19231;
  unsigned char D.19232;
  int D.19233;
  const unsigned char * D.19234;
  unsigned char D.19235;
  int D.19236;
  _Bool D.19237;
  _Bool D.19238;
  const unsigned char * D.19241;
  unsigned char D.19242;
  int D.19243;
  const unsigned char * D.19244;
  unsigned char D.19245;
  int D.19246;
  int D.19249;
  int D.18482;
  int iftmp.17;
  int D.18481;
  const char[4] * D.19256;
  unsigned char D.19257;
  int D.19258;
  unsigned char D.19259;
  int D.19260;
  _Bool D.19261;
  _Bool D.19262;
  _Bool D.19263;
  const unsigned char * D.19266;
  unsigned char D.19267;
  int D.19268;
  const unsigned char * D.19269;
  unsigned char D.19270;
  int D.19271;
  _Bool D.19272;
  _Bool D.19273;
  const unsigned char * D.19276;
  unsigned char D.19277;
  int D.19278;
  const unsigned char * D.19279;
  unsigned char D.19280;
  int D.19281;
  _Bool D.19282;
  _Bool D.19283;
  const unsigned char * D.19286;
  unsigned char D.19287;
  int D.19288;
  const unsigned char * D.19289;
  unsigned char D.19290;
  int D.19291;
  int D.19294;
  int D.18491;
  int iftmp.18;
  int D.18490;
  const char[9] * D.19299;
  unsigned char D.19300;
  int D.19301;
  unsigned char D.19302;
  int D.19303;
  _Bool D.19304;
  _Bool D.19305;
  _Bool D.19306;
  const unsigned char * D.19309;
  unsigned char D.19310;
  int D.19311;
  const unsigned char * D.19312;
  unsigned char D.19313;
  int D.19314;
  _Bool D.19315;
  _Bool D.19316;
  const unsigned char * D.19319;
  unsigned char D.19320;
  int D.19321;
  const unsigned char * D.19322;
  unsigned char D.19323;
  int D.19324;
  _Bool D.19325;
  _Bool D.19326;
  const unsigned char * D.19329;
  unsigned char D.19330;
  int D.19331;
  const unsigned char * D.19332;
  unsigned char D.19333;
  int D.19334;
  int D.19338;
  int D.19341;
  struct MonoImage * D.19344;
  int D.18503;
  int iftmp.19;
  int D.18502;
  const char[9] * D.19349;
  unsigned char D.19350;
  int D.19351;
  unsigned char D.19352;
  int D.19353;
  _Bool D.19354;
  _Bool D.19355;
  _Bool D.19356;
  const unsigned char * D.19359;
  unsigned char D.19360;
  int D.19361;
  const unsigned char * D.19362;
  unsigned char D.19363;
  int D.19364;
  _Bool D.19365;
  _Bool D.19366;
  const unsigned char * D.19369;
  unsigned char D.19370;
  int D.19371;
  const unsigned char * D.19372;
  unsigned char D.19373;
  int D.19374;
  _Bool D.19375;
  _Bool D.19376;
  const unsigned char * D.19379;
  unsigned char D.19380;
  int D.19381;
  const unsigned char * D.19382;
  unsigned char D.19383;
  int D.19384;
  int D.18516;
  int iftmp.20;
  int D.18515;
  unsigned char D.19391;
  int D.19392;
  _Bool D.19393;
  _Bool D.19394;
  _Bool D.19395;
  const unsigned char * D.19398;
  unsigned char D.19399;
  int D.19400;
  _Bool D.19401;
  _Bool D.19402;
  const unsigned char * D.19405;
  unsigned char D.19406;
  int D.19407;
  _Bool D.19408;
  _Bool D.19409;
  const unsigned char * D.19412;
  unsigned char D.19413;
  int D.19414;
  int D.18525;
  int iftmp.21;
  int D.18524;
  unsigned char D.19422;
  int D.19423;
  _Bool D.19424;
  _Bool D.19425;
  _Bool D.19426;
  const unsigned char * D.19429;
  unsigned char D.19430;
  int D.19431;
  _Bool D.19432;
  _Bool D.19433;
  const unsigned char * D.19436;
  unsigned char D.19437;
  int D.19438;
  _Bool D.19439;
  _Bool D.19440;
  const unsigned char * D.19443;
  unsigned char D.19444;
  int D.19445;
  int D.18534;
  int iftmp.22;
  int D.18533;
  const char[5] * D.19453;
  unsigned char D.19454;
  int D.19455;
  unsigned char D.19456;
  int D.19457;
  _Bool D.19458;
  _Bool D.19459;
  _Bool D.19460;
  const unsigned char * D.19463;
  unsigned char D.19464;
  int D.19465;
  const unsigned char * D.19466;
  unsigned char D.19467;
  int D.19468;
  _Bool D.19469;
  _Bool D.19470;
  const unsigned char * D.19473;
  unsigned char D.19474;
  int D.19475;
  const unsigned char * D.19476;
  unsigned char D.19477;
  int D.19478;
  _Bool D.19479;
  _Bool D.19480;
  const unsigned char * D.19483;
  unsigned char D.19484;
  int D.19485;
  const unsigned char * D.19486;
  unsigned char D.19487;
  int D.19488;
  int D.18543;
  int iftmp.23;
  int D.18542;
  unsigned char D.19498;
  int D.19499;
  _Bool D.19500;
  _Bool D.19501;
  _Bool D.19502;
  const unsigned char * D.19505;
  unsigned char D.19506;
  int D.19507;
  _Bool D.19508;
  _Bool D.19509;
  const unsigned char * D.19512;
  unsigned char D.19513;
  int D.19514;
  _Bool D.19515;
  _Bool D.19516;
  const unsigned char * D.19519;
  unsigned char D.19520;
  int D.19521;
  int D.19524;
  int D.18552;
  int iftmp.24;
  int D.18551;
  unsigned char D.19531;
  int D.19532;
  _Bool D.19533;
  _Bool D.19534;
  _Bool D.19535;
  const unsigned char * D.19538;
  unsigned char D.19539;
  int D.19540;
  _Bool D.19541;
  _Bool D.19542;
  const unsigned char * D.19545;
  unsigned char D.19546;
  int D.19547;
  _Bool D.19548;
  _Bool D.19549;
  const unsigned char * D.19552;
  unsigned char D.19553;
  int D.19554;
  int D.19557;
  int D.18561;
  int iftmp.25;
  int D.18560;
  unsigned char D.19562;
  int D.19563;
  _Bool D.19564;
  _Bool D.19565;
  _Bool D.19566;
  const unsigned char * D.19569;
  unsigned char D.19570;
  int D.19571;
  _Bool D.19572;
  _Bool D.19573;
  const unsigned char * D.19576;
  unsigned char D.19577;
  int D.19578;
  _Bool D.19579;
  _Bool D.19580;
  const unsigned char * D.19583;
  unsigned char D.19584;
  int D.19585;
  int D.19589;
  int D.19594;
  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.19069>; else goto <D.19070>;
    <D.19069>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.19071 = "dllmap";
      D.19072 = MEM[(const unsigned char *)D.19071];
      D.19073 = (int) D.19072;
      D.19074 = *__s2;
      D.19075 = (int) D.19074;
      __result = D.19073 - D.19075;
      {
        D.19076 = __s2_len != 0;
        D.19077 = __result == 0;
        D.19078 = D.19076 & D.19077;
        if (D.19078 != 0) goto <D.19079>; else goto <D.19080>;
        <D.19079>:
        D.19081 = &MEM[(void *)"dllmap" + 1B];
        D.19082 = *D.19081;
        D.19083 = (int) D.19082;
        D.19084 = __s2 + 1;
        D.19085 = *D.19084;
        D.19086 = (int) D.19085;
        __result = D.19083 - D.19086;
        D.19087 = __s2_len > 1;
        D.19077 = __result == 0;
        D.19088 = D.19087 & D.19077;
        if (D.19088 != 0) goto <D.19089>; else goto <D.19090>;
        <D.19089>:
        D.19091 = &MEM[(void *)"dllmap" + 2B];
        D.19092 = *D.19091;
        D.19093 = (int) D.19092;
        D.19094 = __s2 + 2;
        D.19095 = *D.19094;
        D.19096 = (int) D.19095;
        __result = D.19093 - D.19096;
        D.19097 = __s2_len > 2;
        D.19077 = __result == 0;
        D.19098 = D.19097 & D.19077;
        if (D.19098 != 0) goto <D.19099>; else goto <D.19100>;
        <D.19099>:
        D.19101 = &MEM[(void *)"dllmap" + 3B];
        D.19102 = *D.19101;
        D.19103 = (int) D.19102;
        D.19104 = __s2 + 3;
        D.19105 = *D.19104;
        D.19106 = (int) D.19105;
        __result = D.19103 - D.19106;
        <D.19100>:
        <D.19090>:
        <D.19080>:
      }
      D.18445 = __result;
    }
    iftmp.12 = -D.18445;
    goto <D.19107>;
    <D.19070>:
    iftmp.12 = __builtin_strcmp (element_name, "dllmap");
    <D.19107>:
    D.18446 = iftmp.12;
  }
  if (D.18446 == 0) goto <D.19108>; else goto <D.19109>;
  <D.19108>:
  D.19110 = info->dll;
  monoeg_g_free (D.19110);
  D.19111 = info->target;
  monoeg_g_free (D.19111);
  info->target = 0B;
  D.19111 = info->target;
  info->dll = D.19111;
  info->ignore = 0;
  i = 0;
  goto <D.18493>;
  <D.18492>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      __s2 = *D.19117;
      D.19118 = "dll";
      D.19119 = MEM[(const unsigned char *)D.19118];
      D.19120 = (int) D.19119;
      D.19121 = *__s2;
      D.19122 = (int) D.19121;
      __result = D.19120 - D.19122;
      {
        D.19123 = __s2_len != 0;
        D.19124 = __result == 0;
        D.19125 = D.19123 & D.19124;
        if (D.19125 != 0) goto <D.19126>; else goto <D.19127>;
        <D.19126>:
        D.19128 = &MEM[(void *)"dll" + 1B];
        D.19129 = *D.19128;
        D.19130 = (int) D.19129;
        D.19131 = __s2 + 1;
        D.19132 = *D.19131;
        D.19133 = (int) D.19132;
        __result = D.19130 - D.19133;
        D.19134 = __s2_len > 1;
        D.19124 = __result == 0;
        D.19135 = D.19134 & D.19124;
        if (D.19135 != 0) goto <D.19136>; else goto <D.19137>;
        <D.19136>:
        D.19138 = &MEM[(void *)"dll" + 2B];
        D.19139 = *D.19138;
        D.19140 = (int) D.19139;
        D.19141 = __s2 + 2;
        D.19142 = *D.19141;
        D.19143 = (int) D.19142;
        __result = D.19140 - D.19143;
        D.19144 = __s2_len > 2;
        D.19124 = __result == 0;
        D.19145 = D.19144 & D.19124;
        if (D.19145 != 0) goto <D.19146>; else goto <D.19147>;
        <D.19146>:
        D.19148 = &MEM[(void *)"dll" + 3B];
        D.19149 = *D.19148;
        D.19150 = (int) D.19149;
        D.19151 = __s2 + 3;
        D.19152 = *D.19151;
        D.19153 = (int) D.19152;
        __result = D.19150 - D.19153;
        <D.19147>:
        <D.19137>:
        <D.19127>:
      }
      D.18454 = __result;
    }
    iftmp.13 = -D.18454;
    goto <D.19154>;
    <D.19114>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19117 = attribute_names + D.19116;
    D.19155 = *D.19117;
    iftmp.13 = __builtin_strcmp (D.19155, "dll");
    <D.19154>:
    D.18455 = iftmp.13;
  }
  if (D.18455 == 0) goto <D.19156>; else goto <D.19157>;
  <D.19156>:
  i.14 = (unsigned int) i;
  D.19116 = i.14 * 4;
  D.19158 = attribute_values + D.19116;
  D.19159 = *D.19158;
  D.19160 = monoeg_strdup (D.19159);
  info->dll = D.19160;
  goto <D.19161>;
  <D.19157>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      __s2 = *D.19117;
      D.19165 = "target";
      D.19166 = MEM[(const unsigned char *)D.19165];
      D.19167 = (int) D.19166;
      D.19168 = *__s2;
      D.19169 = (int) D.19168;
      __result = D.19167 - D.19169;
      {
        D.19170 = __s2_len != 0;
        D.19171 = __result == 0;
        D.19172 = D.19170 & D.19171;
        if (D.19172 != 0) goto <D.19173>; else goto <D.19174>;
        <D.19173>:
        D.19175 = &MEM[(void *)"target" + 1B];
        D.19176 = *D.19175;
        D.19177 = (int) D.19176;
        D.19178 = __s2 + 1;
        D.19179 = *D.19178;
        D.19180 = (int) D.19179;
        __result = D.19177 - D.19180;
        D.19181 = __s2_len > 1;
        D.19171 = __result == 0;
        D.19182 = D.19181 & D.19171;
        if (D.19182 != 0) goto <D.19183>; else goto <D.19184>;
        <D.19183>:
        D.19185 = &MEM[(void *)"target" + 2B];
        D.19186 = *D.19185;
        D.19187 = (int) D.19186;
        D.19188 = __s2 + 2;
        D.19189 = *D.19188;
        D.19190 = (int) D.19189;
        __result = D.19187 - D.19190;
        D.19191 = __s2_len > 2;
        D.19171 = __result == 0;
        D.19192 = D.19191 & D.19171;
        if (D.19192 != 0) goto <D.19193>; else goto <D.19194>;
        <D.19193>:
        D.19195 = &MEM[(void *)"target" + 3B];
        D.19196 = *D.19195;
        D.19197 = (int) D.19196;
        D.19198 = __s2 + 3;
        D.19199 = *D.19198;
        D.19200 = (int) D.19199;
        __result = D.19197 - D.19200;
        <D.19194>:
        <D.19184>:
        <D.19174>:
      }
      D.18463 = __result;
    }
    iftmp.15 = -D.18463;
    goto <D.19201>;
    <D.19164>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19117 = attribute_names + D.19116;
    D.19155 = *D.19117;
    iftmp.15 = __builtin_strcmp (D.19155, "target");
    <D.19201>:
    D.18464 = iftmp.15;
  }
  if (D.18464 == 0) goto <D.19202>; else goto <D.19203>;
  <D.19202>:
  i.14 = (unsigned int) i;
  D.19116 = i.14 * 4;
  D.19158 = attribute_values + D.19116;
  D.19159 = *D.19158;
  D.19204 = monoeg_strdup (D.19159);
  info->target = D.19204;
  goto <D.19205>;
  <D.19203>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      __s2 = *D.19117;
      D.19211 = "os";
      D.19212 = MEM[(const unsigned char *)D.19211];
      D.19213 = (int) D.19212;
      D.19214 = *__s2;
      D.19215 = (int) D.19214;
      __result = D.19213 - D.19215;
      {
        D.19216 = __s2_len != 0;
        D.19217 = __result == 0;
        D.19218 = D.19216 & D.19217;
        if (D.19218 != 0) goto <D.19219>; else goto <D.19220>;
        <D.19219>:
        D.19221 = &MEM[(void *)"os" + 1B];
        D.19222 = *D.19221;
        D.19223 = (int) D.19222;
        D.19224 = __s2 + 1;
        D.19225 = *D.19224;
        D.19226 = (int) D.19225;
        __result = D.19223 - D.19226;
        D.19227 = __s2_len > 1;
        D.19217 = __result == 0;
        D.19228 = D.19227 & D.19217;
        if (D.19228 != 0) goto <D.19229>; else goto <D.19230>;
        <D.19229>:
        D.19231 = &MEM[(void *)"os" + 2B];
        D.19232 = *D.19231;
        D.19233 = (int) D.19232;
        D.19234 = __s2 + 2;
        D.19235 = *D.19234;
        D.19236 = (int) D.19235;
        __result = D.19233 - D.19236;
        D.19237 = __s2_len > 2;
        D.19217 = __result == 0;
        D.19238 = D.19237 & D.19217;
        if (D.19238 != 0) goto <D.19239>; else goto <D.19240>;
        <D.19239>:
        D.19241 = &MEM[(void *)"os" + 3B];
        D.19242 = *D.19241;
        D.19243 = (int) D.19242;
        D.19244 = __s2 + 3;
        D.19245 = *D.19244;
        D.19246 = (int) D.19245;
        __result = D.19243 - D.19246;
        <D.19240>:
        <D.19230>:
        <D.19220>:
      }
      D.18472 = __result;
    }
    iftmp.16 = -D.18472;
    goto <D.19247>;
    <D.19210>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19117 = attribute_names + D.19116;
    D.19155 = *D.19117;
    iftmp.16 = __builtin_strcmp (D.19155, "os");
    <D.19247>:
    D.18473 = iftmp.16;
  }
  if (D.18473 == 0) goto <D.19248>; else goto <D.19206>;
  <D.19248>:
  i.14 = (unsigned int) i;
  D.19116 = i.14 * 4;
  D.19158 = attribute_values + D.19116;
  D.19159 = *D.19158;
  D.19249 = arch_matches ("linux", D.19159);
  if (D.19249 == 0) goto <D.19250>; else goto <D.19206>;
  <D.19250>:
  info->ignore = 1;
  goto <D.19207>;
  <D.19206>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      __s2 = *D.19117;
      D.19256 = "cpu";
      D.19257 = MEM[(const unsigned char *)D.19256];
      D.19258 = (int) D.19257;
      D.19259 = *__s2;
      D.19260 = (int) D.19259;
      __result = D.19258 - D.19260;
      {
        D.19261 = __s2_len != 0;
        D.19262 = __result == 0;
        D.19263 = D.19261 & D.19262;
        if (D.19263 != 0) goto <D.19264>; else goto <D.19265>;
        <D.19264>:
        D.19266 = &MEM[(void *)"cpu" + 1B];
        D.19267 = *D.19266;
        D.19268 = (int) D.19267;
        D.19269 = __s2 + 1;
        D.19270 = *D.19269;
        D.19271 = (int) D.19270;
        __result = D.19268 - D.19271;
        D.19272 = __s2_len > 1;
        D.19262 = __result == 0;
        D.19273 = D.19272 & D.19262;
        if (D.19273 != 0) goto <D.19274>; else goto <D.19275>;
        <D.19274>:
        D.19276 = &MEM[(void *)"cpu" + 2B];
        D.19277 = *D.19276;
        D.19278 = (int) D.19277;
        D.19279 = __s2 + 2;
        D.19280 = *D.19279;
        D.19281 = (int) D.19280;
        __result = D.19278 - D.19281;
        D.19282 = __s2_len > 2;
        D.19262 = __result == 0;
        D.19283 = D.19282 & D.19262;
        if (D.19283 != 0) goto <D.19284>; else goto <D.19285>;
        <D.19284>:
        D.19286 = &MEM[(void *)"cpu" + 3B];
        D.19287 = *D.19286;
        D.19288 = (int) D.19287;
        D.19289 = __s2 + 3;
        D.19290 = *D.19289;
        D.19291 = (int) D.19290;
        __result = D.19288 - D.19291;
        <D.19285>:
        <D.19275>:
        <D.19265>:
      }
      D.18481 = __result;
    }
    iftmp.17 = -D.18481;
    goto <D.19292>;
    <D.19255>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19117 = attribute_names + D.19116;
    D.19155 = *D.19117;
    iftmp.17 = __builtin_strcmp (D.19155, "cpu");
    <D.19292>:
    D.18482 = iftmp.17;
  }
  if (D.18482 == 0) goto <D.19293>; else goto <D.19251>;
  <D.19293>:
  i.14 = (unsigned int) i;
  D.19116 = i.14 * 4;
  D.19158 = attribute_values + D.19116;
  D.19159 = *D.19158;
  D.19294 = arch_matches ("arm", D.19159);
  if (D.19294 == 0) goto <D.19295>; else goto <D.19251>;
  <D.19295>:
  info->ignore = 1;
  goto <D.19252>;
  <D.19251>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      __s2 = *D.19117;
      D.19299 = "wordsize";
      D.19300 = MEM[(const unsigned char *)D.19299];
      D.19301 = (int) D.19300;
      D.19302 = *__s2;
      D.19303 = (int) D.19302;
      __result = D.19301 - D.19303;
      {
        D.19304 = __s2_len != 0;
        D.19305 = __result == 0;
        D.19306 = D.19304 & D.19305;
        if (D.19306 != 0) goto <D.19307>; else goto <D.19308>;
        <D.19307>:
        D.19309 = &MEM[(void *)"wordsize" + 1B];
        D.19310 = *D.19309;
        D.19311 = (int) D.19310;
        D.19312 = __s2 + 1;
        D.19313 = *D.19312;
        D.19314 = (int) D.19313;
        __result = D.19311 - D.19314;
        D.19315 = __s2_len > 1;
        D.19305 = __result == 0;
        D.19316 = D.19315 & D.19305;
        if (D.19316 != 0) goto <D.19317>; else goto <D.19318>;
        <D.19317>:
        D.19319 = &MEM[(void *)"wordsize" + 2B];
        D.19320 = *D.19319;
        D.19321 = (int) D.19320;
        D.19322 = __s2 + 2;
        D.19323 = *D.19322;
        D.19324 = (int) D.19323;
        __result = D.19321 - D.19324;
        D.19325 = __s2_len > 2;
        D.19305 = __result == 0;
        D.19326 = D.19325 & D.19305;
        if (D.19326 != 0) goto <D.19327>; else goto <D.19328>;
        <D.19327>:
        D.19329 = &MEM[(void *)"wordsize" + 3B];
        D.19330 = *D.19329;
        D.19331 = (int) D.19330;
        D.19332 = __s2 + 3;
        D.19333 = *D.19332;
        D.19334 = (int) D.19333;
        __result = D.19331 - D.19334;
        <D.19328>:
        <D.19318>:
        <D.19308>:
      }
      D.18490 = __result;
    }
    iftmp.18 = -D.18490;
    goto <D.19335>;
    <D.19298>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19117 = attribute_names + D.19116;
    D.19155 = *D.19117;
    iftmp.18 = __builtin_strcmp (D.19155, "wordsize");
    <D.19335>:
    D.18491 = iftmp.18;
  }
  if (D.18491 == 0) goto <D.19336>; else goto <D.19337>;
  <D.19336>:
  i.14 = (unsigned int) i;
  D.19116 = i.14 * 4;
  D.19158 = attribute_values + D.19116;
  D.19159 = *D.19158;
  D.19338 = arch_matches ("32", D.19159);
  if (D.19338 == 0) goto <D.19339>; else goto <D.19340>;
  <D.19339>:
  info->ignore = 1;
  <D.19340>:
  <D.19337>:
  <D.19252>:
  <D.19207>:
  <D.19205>:
  <D.19161>:
  i = i + 1;
  <D.18493>:
  i.14 = (unsigned int) i;
  D.19116 = i.14 * 4;
  D.19117 = attribute_names + D.19116;
  D.19155 = *D.19117;
  if (D.19155 != 0B) goto <D.18492>; else goto <D.18494>;
  <D.18494>:
  D.19341 = info->ignore;
  if (D.19341 == 0) goto <D.19342>; else goto <D.19343>;
  <D.19342>:
  D.19344 = info->assembly;
  D.19110 = info->dll;
  D.19111 = info->target;
  mono_dllmap_insert (D.19344, D.19110, 0B, D.19111, 0B);
  <D.19343>:
  goto <D.19345>;
  <D.19109>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.19349 = "dllentry";
      D.19350 = MEM[(const unsigned char *)D.19349];
      D.19351 = (int) D.19350;
      D.19352 = *__s2;
      D.19353 = (int) D.19352;
      __result = D.19351 - D.19353;
      {
        D.19354 = __s2_len != 0;
        D.19355 = __result == 0;
        D.19356 = D.19354 & D.19355;
        if (D.19356 != 0) goto <D.19357>; else goto <D.19358>;
        <D.19357>:
        D.19359 = &MEM[(void *)"dllentry" + 1B];
        D.19360 = *D.19359;
        D.19361 = (int) D.19360;
        D.19362 = __s2 + 1;
        D.19363 = *D.19362;
        D.19364 = (int) D.19363;
        __result = D.19361 - D.19364;
        D.19365 = __s2_len > 1;
        D.19355 = __result == 0;
        D.19366 = D.19365 & D.19355;
        if (D.19366 != 0) goto <D.19367>; else goto <D.19368>;
        <D.19367>:
        D.19369 = &MEM[(void *)"dllentry" + 2B];
        D.19370 = *D.19369;
        D.19371 = (int) D.19370;
        D.19372 = __s2 + 2;
        D.19373 = *D.19372;
        D.19374 = (int) D.19373;
        __result = D.19371 - D.19374;
        D.19375 = __s2_len > 2;
        D.19355 = __result == 0;
        D.19376 = D.19375 & D.19355;
        if (D.19376 != 0) goto <D.19377>; else goto <D.19378>;
        <D.19377>:
        D.19379 = &MEM[(void *)"dllentry" + 3B];
        D.19380 = *D.19379;
        D.19381 = (int) D.19380;
        D.19382 = __s2 + 3;
        D.19383 = *D.19382;
        D.19384 = (int) D.19383;
        __result = D.19381 - D.19384;
        <D.19378>:
        <D.19368>:
        <D.19358>:
      }
      D.18502 = __result;
    }
    iftmp.19 = -D.18502;
    goto <D.19385>;
    <D.19348>:
    iftmp.19 = __builtin_strcmp (element_name, "dllentry");
    <D.19385>:
    D.18503 = iftmp.19;
  }
  if (D.18503 == 0) goto <D.19386>; else goto <D.19387>;
  <D.19386>:
  {
    const char * name;
    const char * target;
    const char * dll;
    int ignore;

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

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

        i.14 = (unsigned int) i;
        D.19116 = i.14 * 4;
        D.19117 = attribute_names + D.19116;
        __s2 = *D.19117;
        D.19118 = "dll";
        D.19119 = MEM[(const unsigned char *)D.19118];
        D.19120 = (int) D.19119;
        D.19391 = *__s2;
        D.19392 = (int) D.19391;
        __result = D.19120 - D.19392;
        {
          D.19393 = __s2_len != 0;
          D.19394 = __result == 0;
          D.19395 = D.19393 & D.19394;
          if (D.19395 != 0) goto <D.19396>; else goto <D.19397>;
          <D.19396>:
          D.19128 = &MEM[(void *)"dll" + 1B];
          D.19129 = *D.19128;
          D.19130 = (int) D.19129;
          D.19398 = __s2 + 1;
          D.19399 = *D.19398;
          D.19400 = (int) D.19399;
          __result = D.19130 - D.19400;
          D.19401 = __s2_len > 1;
          D.19394 = __result == 0;
          D.19402 = D.19401 & D.19394;
          if (D.19402 != 0) goto <D.19403>; else goto <D.19404>;
          <D.19403>:
          D.19138 = &MEM[(void *)"dll" + 2B];
          D.19139 = *D.19138;
          D.19140 = (int) D.19139;
          D.19405 = __s2 + 2;
          D.19406 = *D.19405;
          D.19407 = (int) D.19406;
          __result = D.19140 - D.19407;
          D.19408 = __s2_len > 2;
          D.19394 = __result == 0;
          D.19409 = D.19408 & D.19394;
          if (D.19409 != 0) goto <D.19410>; else goto <D.19411>;
          <D.19410>:
          D.19148 = &MEM[(void *)"dll" + 3B];
          D.19149 = *D.19148;
          D.19150 = (int) D.19149;
          D.19412 = __s2 + 3;
          D.19413 = *D.19412;
          D.19414 = (int) D.19413;
          __result = D.19150 - D.19414;
          <D.19411>:
          <D.19404>:
          <D.19397>:
        }
        D.18515 = __result;
      }
      iftmp.20 = -D.18515;
      goto <D.19415>;
      <D.19390>:
      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      D.19155 = *D.19117;
      iftmp.20 = __builtin_strcmp (D.19155, "dll");
      <D.19415>:
      D.18516 = iftmp.20;
    }
    if (D.18516 == 0) goto <D.19416>; else goto <D.19417>;
    <D.19416>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19158 = attribute_values + D.19116;
    dll = *D.19158;
    goto <D.19418>;
    <D.19417>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.19116 = i.14 * 4;
        D.19117 = attribute_names + D.19116;
        __s2 = *D.19117;
        D.19165 = "target";
        D.19166 = MEM[(const unsigned char *)D.19165];
        D.19167 = (int) D.19166;
        D.19422 = *__s2;
        D.19423 = (int) D.19422;
        __result = D.19167 - D.19423;
        {
          D.19424 = __s2_len != 0;
          D.19425 = __result == 0;
          D.19426 = D.19424 & D.19425;
          if (D.19426 != 0) goto <D.19427>; else goto <D.19428>;
          <D.19427>:
          D.19175 = &MEM[(void *)"target" + 1B];
          D.19176 = *D.19175;
          D.19177 = (int) D.19176;
          D.19429 = __s2 + 1;
          D.19430 = *D.19429;
          D.19431 = (int) D.19430;
          __result = D.19177 - D.19431;
          D.19432 = __s2_len > 1;
          D.19425 = __result == 0;
          D.19433 = D.19432 & D.19425;
          if (D.19433 != 0) goto <D.19434>; else goto <D.19435>;
          <D.19434>:
          D.19185 = &MEM[(void *)"target" + 2B];
          D.19186 = *D.19185;
          D.19187 = (int) D.19186;
          D.19436 = __s2 + 2;
          D.19437 = *D.19436;
          D.19438 = (int) D.19437;
          __result = D.19187 - D.19438;
          D.19439 = __s2_len > 2;
          D.19425 = __result == 0;
          D.19440 = D.19439 & D.19425;
          if (D.19440 != 0) goto <D.19441>; else goto <D.19442>;
          <D.19441>:
          D.19195 = &MEM[(void *)"target" + 3B];
          D.19196 = *D.19195;
          D.19197 = (int) D.19196;
          D.19443 = __s2 + 3;
          D.19444 = *D.19443;
          D.19445 = (int) D.19444;
          __result = D.19197 - D.19445;
          <D.19442>:
          <D.19435>:
          <D.19428>:
        }
        D.18524 = __result;
      }
      iftmp.21 = -D.18524;
      goto <D.19446>;
      <D.19421>:
      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      D.19155 = *D.19117;
      iftmp.21 = __builtin_strcmp (D.19155, "target");
      <D.19446>:
      D.18525 = iftmp.21;
    }
    if (D.18525 == 0) goto <D.19447>; else goto <D.19448>;
    <D.19447>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19158 = attribute_values + D.19116;
    target = *D.19158;
    goto <D.19449>;
    <D.19448>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.19116 = i.14 * 4;
        D.19117 = attribute_names + D.19116;
        __s2 = *D.19117;
        D.19453 = "name";
        D.19454 = MEM[(const unsigned char *)D.19453];
        D.19455 = (int) D.19454;
        D.19456 = *__s2;
        D.19457 = (int) D.19456;
        __result = D.19455 - D.19457;
        {
          D.19458 = __s2_len != 0;
          D.19459 = __result == 0;
          D.19460 = D.19458 & D.19459;
          if (D.19460 != 0) goto <D.19461>; else goto <D.19462>;
          <D.19461>:
          D.19463 = &MEM[(void *)"name" + 1B];
          D.19464 = *D.19463;
          D.19465 = (int) D.19464;
          D.19466 = __s2 + 1;
          D.19467 = *D.19466;
          D.19468 = (int) D.19467;
          __result = D.19465 - D.19468;
          D.19469 = __s2_len > 1;
          D.19459 = __result == 0;
          D.19470 = D.19469 & D.19459;
          if (D.19470 != 0) goto <D.19471>; else goto <D.19472>;
          <D.19471>:
          D.19473 = &MEM[(void *)"name" + 2B];
          D.19474 = *D.19473;
          D.19475 = (int) D.19474;
          D.19476 = __s2 + 2;
          D.19477 = *D.19476;
          D.19478 = (int) D.19477;
          __result = D.19475 - D.19478;
          D.19479 = __s2_len > 2;
          D.19459 = __result == 0;
          D.19480 = D.19479 & D.19459;
          if (D.19480 != 0) goto <D.19481>; else goto <D.19482>;
          <D.19481>:
          D.19483 = &MEM[(void *)"name" + 3B];
          D.19484 = *D.19483;
          D.19485 = (int) D.19484;
          D.19486 = __s2 + 3;
          D.19487 = *D.19486;
          D.19488 = (int) D.19487;
          __result = D.19485 - D.19488;
          <D.19482>:
          <D.19472>:
          <D.19462>:
        }
        D.18533 = __result;
      }
      iftmp.22 = -D.18533;
      goto <D.19489>;
      <D.19452>:
      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      D.19155 = *D.19117;
      iftmp.22 = __builtin_strcmp (D.19155, "name");
      <D.19489>:
      D.18534 = iftmp.22;
    }
    if (D.18534 == 0) goto <D.19490>; else goto <D.19491>;
    <D.19490>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19158 = attribute_values + D.19116;
    name = *D.19158;
    goto <D.19492>;
    <D.19491>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.19116 = i.14 * 4;
        D.19117 = attribute_names + D.19116;
        __s2 = *D.19117;
        D.19211 = "os";
        D.19212 = MEM[(const unsigned char *)D.19211];
        D.19213 = (int) D.19212;
        D.19498 = *__s2;
        D.19499 = (int) D.19498;
        __result = D.19213 - D.19499;
        {
          D.19500 = __s2_len != 0;
          D.19501 = __result == 0;
          D.19502 = D.19500 & D.19501;
          if (D.19502 != 0) goto <D.19503>; else goto <D.19504>;
          <D.19503>:
          D.19221 = &MEM[(void *)"os" + 1B];
          D.19222 = *D.19221;
          D.19223 = (int) D.19222;
          D.19505 = __s2 + 1;
          D.19506 = *D.19505;
          D.19507 = (int) D.19506;
          __result = D.19223 - D.19507;
          D.19508 = __s2_len > 1;
          D.19501 = __result == 0;
          D.19509 = D.19508 & D.19501;
          if (D.19509 != 0) goto <D.19510>; else goto <D.19511>;
          <D.19510>:
          D.19231 = &MEM[(void *)"os" + 2B];
          D.19232 = *D.19231;
          D.19233 = (int) D.19232;
          D.19512 = __s2 + 2;
          D.19513 = *D.19512;
          D.19514 = (int) D.19513;
          __result = D.19233 - D.19514;
          D.19515 = __s2_len > 2;
          D.19501 = __result == 0;
          D.19516 = D.19515 & D.19501;
          if (D.19516 != 0) goto <D.19517>; else goto <D.19518>;
          <D.19517>:
          D.19241 = &MEM[(void *)"os" + 3B];
          D.19242 = *D.19241;
          D.19243 = (int) D.19242;
          D.19519 = __s2 + 3;
          D.19520 = *D.19519;
          D.19521 = (int) D.19520;
          __result = D.19243 - D.19521;
          <D.19518>:
          <D.19511>:
          <D.19504>:
        }
        D.18542 = __result;
      }
      iftmp.23 = -D.18542;
      goto <D.19522>;
      <D.19497>:
      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      D.19155 = *D.19117;
      iftmp.23 = __builtin_strcmp (D.19155, "os");
      <D.19522>:
      D.18543 = iftmp.23;
    }
    if (D.18543 == 0) goto <D.19523>; else goto <D.19493>;
    <D.19523>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19158 = attribute_values + D.19116;
    D.19159 = *D.19158;
    D.19524 = arch_matches ("linux", D.19159);
    if (D.19524 == 0) goto <D.19525>; else goto <D.19493>;
    <D.19525>:
    ignore = 1;
    goto <D.19494>;
    <D.19493>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.19116 = i.14 * 4;
        D.19117 = attribute_names + D.19116;
        __s2 = *D.19117;
        D.19256 = "cpu";
        D.19257 = MEM[(const unsigned char *)D.19256];
        D.19258 = (int) D.19257;
        D.19531 = *__s2;
        D.19532 = (int) D.19531;
        __result = D.19258 - D.19532;
        {
          D.19533 = __s2_len != 0;
          D.19534 = __result == 0;
          D.19535 = D.19533 & D.19534;
          if (D.19535 != 0) goto <D.19536>; else goto <D.19537>;
          <D.19536>:
          D.19266 = &MEM[(void *)"cpu" + 1B];
          D.19267 = *D.19266;
          D.19268 = (int) D.19267;
          D.19538 = __s2 + 1;
          D.19539 = *D.19538;
          D.19540 = (int) D.19539;
          __result = D.19268 - D.19540;
          D.19541 = __s2_len > 1;
          D.19534 = __result == 0;
          D.19542 = D.19541 & D.19534;
          if (D.19542 != 0) goto <D.19543>; else goto <D.19544>;
          <D.19543>:
          D.19276 = &MEM[(void *)"cpu" + 2B];
          D.19277 = *D.19276;
          D.19278 = (int) D.19277;
          D.19545 = __s2 + 2;
          D.19546 = *D.19545;
          D.19547 = (int) D.19546;
          __result = D.19278 - D.19547;
          D.19548 = __s2_len > 2;
          D.19534 = __result == 0;
          D.19549 = D.19548 & D.19534;
          if (D.19549 != 0) goto <D.19550>; else goto <D.19551>;
          <D.19550>:
          D.19286 = &MEM[(void *)"cpu" + 3B];
          D.19287 = *D.19286;
          D.19288 = (int) D.19287;
          D.19552 = __s2 + 3;
          D.19553 = *D.19552;
          D.19554 = (int) D.19553;
          __result = D.19288 - D.19554;
          <D.19551>:
          <D.19544>:
          <D.19537>:
        }
        D.18551 = __result;
      }
      iftmp.24 = -D.18551;
      goto <D.19555>;
      <D.19530>:
      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      D.19155 = *D.19117;
      iftmp.24 = __builtin_strcmp (D.19155, "cpu");
      <D.19555>:
      D.18552 = iftmp.24;
    }
    if (D.18552 == 0) goto <D.19556>; else goto <D.19526>;
    <D.19556>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19158 = attribute_values + D.19116;
    D.19159 = *D.19158;
    D.19557 = arch_matches ("arm", D.19159);
    if (D.19557 == 0) goto <D.19558>; else goto <D.19526>;
    <D.19558>:
    ignore = 1;
    goto <D.19527>;
    <D.19526>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.19116 = i.14 * 4;
        D.19117 = attribute_names + D.19116;
        __s2 = *D.19117;
        D.19299 = "wordsize";
        D.19300 = MEM[(const unsigned char *)D.19299];
        D.19301 = (int) D.19300;
        D.19562 = *__s2;
        D.19563 = (int) D.19562;
        __result = D.19301 - D.19563;
        {
          D.19564 = __s2_len != 0;
          D.19565 = __result == 0;
          D.19566 = D.19564 & D.19565;
          if (D.19566 != 0) goto <D.19567>; else goto <D.19568>;
          <D.19567>:
          D.19309 = &MEM[(void *)"wordsize" + 1B];
          D.19310 = *D.19309;
          D.19311 = (int) D.19310;
          D.19569 = __s2 + 1;
          D.19570 = *D.19569;
          D.19571 = (int) D.19570;
          __result = D.19311 - D.19571;
          D.19572 = __s2_len > 1;
          D.19565 = __result == 0;
          D.19573 = D.19572 & D.19565;
          if (D.19573 != 0) goto <D.19574>; else goto <D.19575>;
          <D.19574>:
          D.19319 = &MEM[(void *)"wordsize" + 2B];
          D.19320 = *D.19319;
          D.19321 = (int) D.19320;
          D.19576 = __s2 + 2;
          D.19577 = *D.19576;
          D.19578 = (int) D.19577;
          __result = D.19321 - D.19578;
          D.19579 = __s2_len > 2;
          D.19565 = __result == 0;
          D.19580 = D.19579 & D.19565;
          if (D.19580 != 0) goto <D.19581>; else goto <D.19582>;
          <D.19581>:
          D.19329 = &MEM[(void *)"wordsize" + 3B];
          D.19330 = *D.19329;
          D.19331 = (int) D.19330;
          D.19583 = __s2 + 3;
          D.19584 = *D.19583;
          D.19585 = (int) D.19584;
          __result = D.19331 - D.19585;
          <D.19582>:
          <D.19575>:
          <D.19568>:
        }
        D.18560 = __result;
      }
      iftmp.25 = -D.18560;
      goto <D.19586>;
      <D.19561>:
      i.14 = (unsigned int) i;
      D.19116 = i.14 * 4;
      D.19117 = attribute_names + D.19116;
      D.19155 = *D.19117;
      iftmp.25 = __builtin_strcmp (D.19155, "wordsize");
      <D.19586>:
      D.18561 = iftmp.25;
    }
    if (D.18561 == 0) goto <D.19587>; else goto <D.19588>;
    <D.19587>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19158 = attribute_values + D.19116;
    D.19159 = *D.19158;
    D.19589 = arch_matches ("32", D.19159);
    if (D.19589 == 0) goto <D.19590>; else goto <D.19591>;
    <D.19590>:
    ignore = 1;
    <D.19591>:
    <D.19588>:
    <D.19527>:
    <D.19494>:
    <D.19492>:
    <D.19449>:
    <D.19418>:
    i = i + 1;
    <D.18563>:
    i.14 = (unsigned int) i;
    D.19116 = i.14 * 4;
    D.19117 = attribute_names + D.19116;
    D.19155 = *D.19117;
    if (D.19155 != 0B) goto <D.18562>; else goto <D.18564>;
    <D.18564>:
    if (dll == 0B) goto <D.19592>; else goto <D.19593>;
    <D.19592>:
    dll = info->dll;
    <D.19593>:
    D.19341 = info->ignore;
    D.19594 = D.19341 | ignore;
    if (D.19594 == 0) goto <D.19595>; else goto <D.19596>;
    <D.19595>:
    D.19344 = info->assembly;
    D.19110 = info->dll;
    mono_dllmap_insert (D.19344, D.19110, name, dll, target);
    <D.19596>:
  }
  <D.19387>:
  <D.19345>:
}


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

  if (str != 0B) goto <D.19597>; else goto <D.19598>;
  <D.19597>:
  D.19599 = __strdup (str);
  return D.19599;
  <D.19598>:
  D.19599 = 0B;
  return D.19599;
}


arch_matches (const char * arch, const char * value)
{
  char D.19601;
  int D.19604;
  const char * D.19605;
  int D.19606;
  _Bool D.19607;
  int D.18416;
  char * D.19608;
  char * * splitted;
  char * * p;
  int found;

  found = 0;
  D.19601 = *value;
  if (D.19601 == 33) goto <D.19602>; else goto <D.19603>;
  <D.19602>:
  D.19605 = value + 1;
  D.19606 = arch_matches (arch, D.19605);
  D.19607 = D.19606 == 0;
  D.19604 = (int) D.19607;
  return D.19604;
  <D.19603>:
  splitted = monoeg_g_strsplit (value, ",", 0);
  p = splitted;
  goto <D.18419>;
  <D.18418>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.19608 = *p;
    D.18416 = __builtin_strcmp (arch, D.19608);
  }
  if (D.18416 == 0) goto <D.19609>; else goto <D.19610>;
  <D.19609>:
  found = 1;
  goto <D.18417>;
  <D.19610>:
  p = p + 4;
  <D.18419>:
  D.19608 = *p;
  if (D.19608 != 0B) goto <D.18418>; else goto <D.18417>;
  <D.18417>:
  monoeg_g_strfreev (splitted);
  D.19604 = found;
  return D.19604;
}


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

  info = monoeg_malloc0 (16);
  info->assembly = assembly;
  D.19612 = info;
  return D.19612;
}


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

  bconfig = monoeg_malloc0 (12);
  bconfig->aname = assembly_name;
  bconfig->config_xml = config_xml;
  bundled_configs.26 = bundled_configs;
  bconfig->next = bundled_configs.26;
  bundled_configs = bconfig;
}


mono_config_string_for_assembly_file (const char * filename)
{
  const char * D.19615;
  int D.18662;
  const char * D.19620;
  struct BundledConfig * bconfig;

  bconfig = bundled_configs;
  goto <D.18664>;
  <D.18663>:
  D.19615 = bconfig->aname;
  if (D.19615 != 0B) goto <D.19616>; else goto <D.19617>;
  <D.19616>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.19615 = bconfig->aname;
    D.18662 = __builtin_strcmp (D.19615, filename);
  }
  if (D.18662 == 0) goto <D.19618>; else goto <D.19619>;
  <D.19618>:
  D.19620 = bconfig->config_xml;
  return D.19620;
  <D.19619>:
  <D.19617>:
  bconfig = bconfig->next;
  <D.18664>:
  if (bconfig != 0B) goto <D.18663>; else goto <D.18665>;
  <D.18665>:
  D.19620 = 0B;
  return D.19620;
}


mono_config_for_assembly (struct MonoImage * assembly)
{
  const char * D.19622;
  unsigned int D.19625;
  const char * D.19626;
  const char * D.19627;
  const char * D.19628;
  int D.19629;
  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.19622 = assembly->module_name;
      bundled_config = mono_config_string_for_assembly_file (D.19622);
      if (bundled_config != 0B) goto <D.19623>; else goto <D.19624>;
      <D.19623>:
      state.user_data = "<bundled>";
      D.19625 = strlen (bundled_config);
      mono_config_parse_xml_with_context (&state, bundled_config, D.19625);
      <D.19624>:
      D.19626 = mono_image_get_filename (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.19626);
      mono_config_parse_file_with_context (&state, cfg_name);
      monoeg_g_free (cfg_name);
      D.19627 = mono_image_get_name (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.19627);
      home = monoeg_g_get_home_dir ();
      i = 0;
      goto <D.18679>;
      <D.18678>:
      D.19628 = mono_get_config_dir ();
      cfg = monoeg_g_build_path ("/", D.19628, "mono", "assemblies", aname, cfg_name, 0B);
      D.19629 = mono_config_parse_file_with_context (&state, cfg);
      got_it = D.19629 + got_it;
      monoeg_g_free (cfg);
      monoeg_g_free (aname);
      if (got_it != 0) goto <D.18677>; else goto <D.19630>;
      <D.19630>:
      i = i + 1;
      <D.18679>:
      aname = get_assembly_filename (assembly, i);
      if (aname != 0B) goto <D.18678>; else goto <D.18677>;
      <D.18677>:
      monoeg_g_free (cfg_name);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_file_with_context (struct ParseState * state, const char * filename)
{
  int D.19631;
  int D.19634;
  unsigned int len.27;
  gchar * text.28;
  char D.19639;
  gchar * D.19642;
  char D.19643;
  gchar * D.19646;
  char D.19647;
  void * D.19650;
  sizetype offset.29;
  const char * D.19654;
  unsigned int offset.30;
  unsigned int D.19656;
  gchar * text;
  gsize len;
  gint offset;

  try
    {
      mono_trace (64, 16, "Config attempting to parse: \'%s\'.", filename);
      D.19631 = monoeg_g_file_get_contents (filename, &text, &len, 0B);
      if (D.19631 == 0) goto <D.19632>; else goto <D.19633>;
      <D.19632>:
      D.19634 = 0;
      return D.19634;
      <D.19633>:
      offset = 0;
      len.27 = len;
      if (len.27 > 3) goto <D.19636>; else goto <D.19637>;
      <D.19636>:
      text.28 = text;
      D.19639 = *text.28;
      if (D.19639 == 239) goto <D.19640>; else goto <D.19641>;
      <D.19640>:
      text.28 = text;
      D.19642 = text.28 + 1;
      D.19643 = *D.19642;
      if (D.19643 == 187) goto <D.19644>; else goto <D.19645>;
      <D.19644>:
      text.28 = text;
      D.19646 = text.28 + 2;
      D.19647 = *D.19646;
      if (D.19647 == 191) goto <D.19648>; else goto <D.19649>;
      <D.19648>:
      offset = 3;
      <D.19649>:
      <D.19645>:
      <D.19641>:
      <D.19637>:
      D.19650 = state->user_data;
      if (D.19650 == 0B) goto <D.19651>; else goto <D.19652>;
      <D.19651>:
      state->user_data = filename;
      <D.19652>:
      text.28 = text;
      offset.29 = (sizetype) offset;
      D.19654 = text.28 + offset.29;
      len.27 = len;
      offset.30 = (unsigned int) offset;
      D.19656 = len.27 - offset.30;
      mono_config_parse_xml_with_context (state, D.19654, D.19656);
      text.28 = text;
      monoeg_g_free (text.28);
      D.19634 = 1;
      return D.19634;
    }
  finally
    {
      text = {CLOBBER};
      len = {CLOBBER};
    }
}


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

  switch (state) <default: <D.18637>, case 0: <D.18636>>
  <D.18636>:
  D.19660 = mono_image_get_name (image);
  D.19659 = monoeg_strdup (D.19660);
  return D.19659;
  <D.18637>:
  D.19659 = 0B;
  return D.19659;
}


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

  if (filename != 0B) goto <D.19662>; else goto <D.19663>;
  <D.19662>:
  mono_config_parse_file (filename);
  return;
  <D.19663>:
  home = monoeg_g_getenv ("MONO_CONFIG");
  if (home != 0B) goto <D.19664>; else goto <D.19665>;
  <D.19664>:
  mono_config_parse_file (home);
  return;
  <D.19665>:
  D.19666 = mono_get_config_dir ();
  mono_cfg = monoeg_g_build_path ("/", D.19666, "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.31;
  const char * mono_cfg_dir.32;
  gchar * mono_cfg_dir_allocated.33;
  char * mono_cfg_dir_allocated.34;

  mono_cfg_dir.31 = monoeg_g_getenv ("MONO_CFG_DIR");
  mono_cfg_dir = mono_cfg_dir.31;
  mono_cfg_dir.32 = mono_cfg_dir;
  if (mono_cfg_dir.32 == 0B) goto <D.19670>; else goto <D.19671>;
  <D.19670>:
  mono_cfg_dir_allocated.33 = monoeg_strdup (dir);
  mono_cfg_dir_allocated = mono_cfg_dir_allocated.33;
  mono_cfg_dir_allocated.34 = mono_cfg_dir_allocated;
  mono_cfg_dir = mono_cfg_dir_allocated.34;
  <D.19671>:
}


mono_get_config_dir ()
{
  const char * mono_cfg_dir.35;
  const char * D.19677;

  mono_cfg_dir.35 = mono_cfg_dir;
  if (mono_cfg_dir.35 == 0B) goto <D.19675>; else goto <D.19676>;
  <D.19675>:
  mono_set_dirs (0B, 0B);
  <D.19676>:
  D.19677 = mono_cfg_dir;
  return D.19677;
}


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


mono_get_machine_config ()
{
  const char * D.19679;

  D.19679 = bundled_machine_config;
  return D.19679;
}


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.18729;
  int iftmp.36;
  int D.18728;
  const char[18] * D.19684;
  unsigned char D.19685;
  int D.19686;
  unsigned char D.19687;
  int D.19688;
  _Bool D.19689;
  _Bool D.19690;
  _Bool D.19691;
  const unsigned char * D.19694;
  unsigned char D.19695;
  int D.19696;
  const unsigned char * D.19697;
  unsigned char D.19698;
  int D.19699;
  _Bool D.19700;
  _Bool D.19701;
  const unsigned char * D.19704;
  unsigned char D.19705;
  int D.19706;
  const unsigned char * D.19707;
  unsigned char D.19708;
  int D.19709;
  _Bool D.19710;
  _Bool D.19711;
  const unsigned char * D.19714;
  unsigned char D.19715;
  int D.19716;
  const unsigned char * D.19717;
  unsigned char D.19718;
  int D.19719;
  struct AssemblyVersionSet * D.19723;
  struct AssemblyVersionSet * D.19724;
  struct AssemblyVersionSet * D.19725;
  int D.18738;
  int iftmp.37;
  int D.18737;
  const char[17] * D.19729;
  unsigned char D.19730;
  int D.19731;
  unsigned char D.19732;
  int D.19733;
  _Bool D.19734;
  _Bool D.19735;
  _Bool D.19736;
  const unsigned char * D.19739;
  unsigned char D.19740;
  int D.19741;
  const unsigned char * D.19742;
  unsigned char D.19743;
  int D.19744;
  _Bool D.19745;
  _Bool D.19746;
  const unsigned char * D.19749;
  unsigned char D.19750;
  int D.19751;
  const unsigned char * D.19752;
  unsigned char D.19753;
  int D.19754;
  _Bool D.19755;
  _Bool D.19756;
  const unsigned char * D.19759;
  unsigned char D.19760;
  int D.19761;
  const unsigned char * D.19762;
  unsigned char D.19763;
  int D.19764;
  unsigned int n.38;
  unsigned int D.19769;
  const gchar * * D.19770;
  int D.18748;
  int iftmp.39;
  int D.18747;
  const char[5] * D.19774;
  unsigned char D.19775;
  int D.19776;
  unsigned char D.19777;
  int D.19778;
  _Bool D.19779;
  _Bool D.19780;
  _Bool D.19781;
  const unsigned char * D.19784;
  unsigned char D.19785;
  int D.19786;
  const unsigned char * D.19787;
  unsigned char D.19788;
  int D.19789;
  _Bool D.19790;
  _Bool D.19791;
  const unsigned char * D.19794;
  unsigned char D.19795;
  int D.19796;
  const unsigned char * D.19797;
  unsigned char D.19798;
  int D.19799;
  _Bool D.19800;
  _Bool D.19801;
  const unsigned char * D.19804;
  unsigned char D.19805;
  int D.19806;
  const unsigned char * D.19807;
  unsigned char D.19808;
  int D.19809;
  const gchar * * D.19813;
  const gchar * D.19814;
  gchar * D.19815;
  int D.18757;
  int iftmp.40;
  int D.18756;
  const char[15] * D.19820;
  unsigned char D.19821;
  int D.19822;
  unsigned char D.19823;
  int D.19824;
  _Bool D.19825;
  _Bool D.19826;
  _Bool D.19827;
  const unsigned char * D.19830;
  unsigned char D.19831;
  int D.19832;
  const unsigned char * D.19833;
  unsigned char D.19834;
  int D.19835;
  _Bool D.19836;
  _Bool D.19837;
  const unsigned char * D.19840;
  unsigned char D.19841;
  int D.19842;
  const unsigned char * D.19843;
  unsigned char D.19844;
  int D.19845;
  _Bool D.19846;
  _Bool D.19847;
  const unsigned char * D.19850;
  unsigned char D.19851;
  int D.19852;
  const unsigned char * D.19853;
  unsigned char D.19854;
  int D.19855;
  unsigned int D.19859;
  guchar[17] * D.19862;
  int D.18766;
  int iftmp.41;
  int D.18765;
  const char[8] * D.19867;
  unsigned char D.19868;
  int D.19869;
  unsigned char D.19870;
  int D.19871;
  _Bool D.19872;
  _Bool D.19873;
  _Bool D.19874;
  const unsigned char * D.19877;
  unsigned char D.19878;
  int D.19879;
  const unsigned char * D.19880;
  unsigned char D.19881;
  int D.19882;
  _Bool D.19883;
  _Bool D.19884;
  const unsigned char * D.19887;
  unsigned char D.19888;
  int D.19889;
  const unsigned char * D.19890;
  unsigned char D.19891;
  int D.19892;
  _Bool D.19893;
  _Bool D.19894;
  const unsigned char * D.19897;
  unsigned char D.19898;
  int D.19899;
  const unsigned char * D.19900;
  unsigned char D.19901;
  int D.19902;
  int D.18775;
  int iftmp.42;
  int D.18774;
  const char[8] * D.19909;
  unsigned char D.19910;
  int D.19911;
  unsigned char D.19912;
  int D.19913;
  _Bool D.19914;
  _Bool D.19915;
  _Bool D.19916;
  const unsigned char * D.19919;
  unsigned char D.19920;
  int D.19921;
  const unsigned char * D.19922;
  unsigned char D.19923;
  int D.19924;
  _Bool D.19925;
  _Bool D.19926;
  const unsigned char * D.19929;
  unsigned char D.19930;
  int D.19931;
  const unsigned char * D.19932;
  unsigned char D.19933;
  int D.19934;
  _Bool D.19935;
  _Bool D.19936;
  const unsigned char * D.19939;
  unsigned char D.19940;
  int D.19941;
  const unsigned char * D.19942;
  unsigned char D.19943;
  int D.19944;
  gchar * D.19948;
  gchar * D.19950;
  const gchar * D.19951;
  int D.18787;
  int iftmp.43;
  int D.18786;
  const char[16] * D.19956;
  unsigned char D.19957;
  int D.19958;
  unsigned char D.19959;
  int D.19960;
  _Bool D.19961;
  _Bool D.19962;
  _Bool D.19963;
  const unsigned char * D.19966;
  unsigned char D.19967;
  int D.19968;
  const unsigned char * D.19969;
  unsigned char D.19970;
  int D.19971;
  _Bool D.19972;
  _Bool D.19973;
  const unsigned char * D.19976;
  unsigned char D.19977;
  int D.19978;
  const unsigned char * D.19979;
  unsigned char D.19980;
  int D.19981;
  _Bool D.19982;
  _Bool D.19983;
  const unsigned char * D.19986;
  unsigned char D.19987;
  int D.19988;
  const unsigned char * D.19989;
  unsigned char D.19990;
  int D.19991;
  int D.18797;
  int iftmp.44;
  int D.18796;
  const char[11] * D.19998;
  unsigned char D.19999;
  int D.20000;
  unsigned char D.20001;
  int D.20002;
  _Bool D.20003;
  _Bool D.20004;
  _Bool D.20005;
  const unsigned char * D.20008;
  unsigned char D.20009;
  int D.20010;
  const unsigned char * D.20011;
  unsigned char D.20012;
  int D.20013;
  _Bool D.20014;
  _Bool D.20015;
  const unsigned char * D.20018;
  unsigned char D.20019;
  int D.20020;
  const unsigned char * D.20021;
  unsigned char D.20022;
  int D.20023;
  _Bool D.20024;
  _Bool D.20025;
  const unsigned char * D.20028;
  unsigned char D.20029;
  int D.20030;
  const unsigned char * D.20031;
  unsigned char D.20032;
  int D.20033;
  int D.18813;
  int iftmp.45;
  int D.18812;
  const char[1] * D.20040;
  unsigned char D.20041;
  int D.20042;
  unsigned char D.20043;
  int D.20044;
  _Bool D.20045;
  _Bool D.20046;
  _Bool D.20047;
  const unsigned char * D.20050;
  unsigned char D.20051;
  int D.20052;
  const unsigned char * D.20053;
  unsigned char D.20054;
  int D.20055;
  _Bool D.20056;
  _Bool D.20057;
  const unsigned char * D.20060;
  unsigned char D.20061;
  int D.20062;
  const unsigned char * D.20063;
  unsigned char D.20064;
  int D.20065;
  _Bool D.20066;
  _Bool D.20067;
  const unsigned char * D.20070;
  unsigned char D.20071;
  int D.20072;
  const unsigned char * D.20073;
  unsigned char D.20074;
  int D.20075;
  unsigned char D.20077;
  gchar * D.20080;
  int iftmp.46;
  gchar * D.20082;
  gchar * * numbers.47;
  gchar * D.20086;
  int iftmp.48;
  gchar * * numbers.49;
  gchar * D.20092;
  int iftmp.50;
  gchar * * numbers.51;
  gchar * D.20098;
  int iftmp.52;
  _Bool D.20106;
  _Bool D.20107;
  _Bool D.20108;
  _Bool D.20110;
  _Bool D.20111;
  _Bool D.20112;
  short unsigned int D.20113;
  short unsigned int D.20114;
  short unsigned int D.20115;
  short unsigned int D.20116;
  gchar * * D.20117;
  gchar * D.20118;
  int iftmp.53;
  gchar * * numbers.54;
  gchar * D.20125;
  int iftmp.55;
  gchar * * numbers.56;
  gchar * D.20131;
  int iftmp.57;
  gchar * * numbers.58;
  gchar * D.20137;
  int iftmp.59;
  int D.18823;
  int iftmp.60;
  int D.18822;
  const char[11] * D.20150;
  unsigned char D.20151;
  int D.20152;
  unsigned char D.20153;
  int D.20154;
  _Bool D.20155;
  _Bool D.20156;
  _Bool D.20157;
  const unsigned char * D.20160;
  unsigned char D.20161;
  int D.20162;
  const unsigned char * D.20163;
  unsigned char D.20164;
  int D.20165;
  _Bool D.20166;
  _Bool D.20167;
  const unsigned char * D.20170;
  unsigned char D.20171;
  int D.20172;
  const unsigned char * D.20173;
  unsigned char D.20174;
  int D.20175;
  _Bool D.20176;
  _Bool D.20177;
  const unsigned char * D.20180;
  unsigned char D.20181;
  int D.20182;
  const unsigned char * D.20183;
  unsigned char D.20184;
  int D.20185;
  int D.18834;
  int iftmp.61;
  int D.18833;
  unsigned char D.20192;
  int D.20193;
  _Bool D.20194;
  _Bool D.20195;
  _Bool D.20196;
  const unsigned char * D.20199;
  unsigned char D.20200;
  int D.20201;
  _Bool D.20202;
  _Bool D.20203;
  const unsigned char * D.20206;
  unsigned char D.20207;
  int D.20208;
  _Bool D.20209;
  _Bool D.20210;
  const unsigned char * D.20213;
  unsigned char D.20214;
  int D.20215;
  guint16 iftmp.62;
  gchar * D.20220;
  gchar * * numbers.63;
  gchar * D.20224;
  int D.20225;
  guint16 iftmp.64;
  gchar * * numbers.65;
  gchar * D.20231;
  int D.20232;
  guint16 iftmp.66;
  gchar * * numbers.67;
  gchar * D.20238;
  int D.20239;
  guint16 iftmp.68;
  int D.20244;
  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.19682>; else goto <D.19683>;
    <D.19682>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = element_name;
      D.19684 = "dependentAssembly";
      D.19685 = MEM[(const unsigned char *)D.19684];
      D.19686 = (int) D.19685;
      D.19687 = *__s2;
      D.19688 = (int) D.19687;
      __result = D.19686 - D.19688;
      {
        D.19689 = __s2_len != 0;
        D.19690 = __result == 0;
        D.19691 = D.19689 & D.19690;
        if (D.19691 != 0) goto <D.19692>; else goto <D.19693>;
        <D.19692>:
        D.19694 = &MEM[(void *)"dependentAssembly" + 1B];
        D.19695 = *D.19694;
        D.19696 = (int) D.19695;
        D.19697 = __s2 + 1;
        D.19698 = *D.19697;
        D.19699 = (int) D.19698;
        __result = D.19696 - D.19699;
        D.19700 = __s2_len > 1;
        D.19690 = __result == 0;
        D.19701 = D.19700 & D.19690;
        if (D.19701 != 0) goto <D.19702>; else goto <D.19703>;
        <D.19702>:
        D.19704 = &MEM[(void *)"dependentAssembly" + 2B];
        D.19705 = *D.19704;
        D.19706 = (int) D.19705;
        D.19707 = __s2 + 2;
        D.19708 = *D.19707;
        D.19709 = (int) D.19708;
        __result = D.19706 - D.19709;
        D.19710 = __s2_len > 2;
        D.19690 = __result == 0;
        D.19711 = D.19710 & D.19690;
        if (D.19711 != 0) goto <D.19712>; else goto <D.19713>;
        <D.19712>:
        D.19714 = &MEM[(void *)"dependentAssembly" + 3B];
        D.19715 = *D.19714;
        D.19716 = (int) D.19715;
        D.19717 = __s2 + 3;
        D.19718 = *D.19717;
        D.19719 = (int) D.19718;
        __result = D.19716 - D.19719;
        <D.19713>:
        <D.19703>:
        <D.19693>:
      }
      D.18728 = __result;
    }
    iftmp.36 = -D.18728;
    goto <D.19720>;
    <D.19683>:
    iftmp.36 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.19720>:
    D.18729 = iftmp.36;
  }
  if (D.18729 == 0) goto <D.19721>; else goto <D.19722>;
  <D.19721>:
  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.19723 = &info->old_version_bottom;
  memset (D.19723, 0, 8);
  D.19724 = &info->old_version_top;
  memset (D.19724, 0, 8);
  D.19725 = &info->new_version;
  memset (D.19725, 0, 8);
  <D.19722>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.19729 = "assemblyIdentity";
      D.19730 = MEM[(const unsigned char *)D.19729];
      D.19731 = (int) D.19730;
      D.19732 = *__s2;
      D.19733 = (int) D.19732;
      __result = D.19731 - D.19733;
      {
        D.19734 = __s2_len != 0;
        D.19735 = __result == 0;
        D.19736 = D.19734 & D.19735;
        if (D.19736 != 0) goto <D.19737>; else goto <D.19738>;
        <D.19737>:
        D.19739 = &MEM[(void *)"assemblyIdentity" + 1B];
        D.19740 = *D.19739;
        D.19741 = (int) D.19740;
        D.19742 = __s2 + 1;
        D.19743 = *D.19742;
        D.19744 = (int) D.19743;
        __result = D.19741 - D.19744;
        D.19745 = __s2_len > 1;
        D.19735 = __result == 0;
        D.19746 = D.19745 & D.19735;
        if (D.19746 != 0) goto <D.19747>; else goto <D.19748>;
        <D.19747>:
        D.19749 = &MEM[(void *)"assemblyIdentity" + 2B];
        D.19750 = *D.19749;
        D.19751 = (int) D.19750;
        D.19752 = __s2 + 2;
        D.19753 = *D.19752;
        D.19754 = (int) D.19753;
        __result = D.19751 - D.19754;
        D.19755 = __s2_len > 2;
        D.19735 = __result == 0;
        D.19756 = D.19755 & D.19735;
        if (D.19756 != 0) goto <D.19757>; else goto <D.19758>;
        <D.19757>:
        D.19759 = &MEM[(void *)"assemblyIdentity" + 3B];
        D.19760 = *D.19759;
        D.19761 = (int) D.19760;
        D.19762 = __s2 + 3;
        D.19763 = *D.19762;
        D.19764 = (int) D.19763;
        __result = D.19761 - D.19764;
        <D.19758>:
        <D.19748>:
        <D.19738>:
      }
      D.18737 = __result;
    }
    iftmp.37 = -D.18737;
    goto <D.19765>;
    <D.19728>:
    iftmp.37 = __builtin_strcmp (element_name, "assemblyIdentity");
    <D.19765>:
    D.18738 = iftmp.37;
  }
  if (D.18738 == 0) goto <D.19766>; else goto <D.19767>;
  <D.19766>:
  n = 0;
  goto <D.18777>;
  <D.18776>:
  {
    const gchar * attribute_name;

    n.38 = (unsigned int) n;
    D.19769 = n.38 * 4;
    D.19770 = attribute_names + D.19769;
    attribute_name = *D.19770;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.19774 = "name";
        D.19775 = MEM[(const unsigned char *)D.19774];
        D.19776 = (int) D.19775;
        D.19777 = *__s2;
        D.19778 = (int) D.19777;
        __result = D.19776 - D.19778;
        {
          D.19779 = __s2_len != 0;
          D.19780 = __result == 0;
          D.19781 = D.19779 & D.19780;
          if (D.19781 != 0) goto <D.19782>; else goto <D.19783>;
          <D.19782>:
          D.19784 = &MEM[(void *)"name" + 1B];
          D.19785 = *D.19784;
          D.19786 = (int) D.19785;
          D.19787 = __s2 + 1;
          D.19788 = *D.19787;
          D.19789 = (int) D.19788;
          __result = D.19786 - D.19789;
          D.19790 = __s2_len > 1;
          D.19780 = __result == 0;
          D.19791 = D.19790 & D.19780;
          if (D.19791 != 0) goto <D.19792>; else goto <D.19793>;
          <D.19792>:
          D.19794 = &MEM[(void *)"name" + 2B];
          D.19795 = *D.19794;
          D.19796 = (int) D.19795;
          D.19797 = __s2 + 2;
          D.19798 = *D.19797;
          D.19799 = (int) D.19798;
          __result = D.19796 - D.19799;
          D.19800 = __s2_len > 2;
          D.19780 = __result == 0;
          D.19801 = D.19800 & D.19780;
          if (D.19801 != 0) goto <D.19802>; else goto <D.19803>;
          <D.19802>:
          D.19804 = &MEM[(void *)"name" + 3B];
          D.19805 = *D.19804;
          D.19806 = (int) D.19805;
          D.19807 = __s2 + 3;
          D.19808 = *D.19807;
          D.19809 = (int) D.19808;
          __result = D.19806 - D.19809;
          <D.19803>:
          <D.19793>:
          <D.19783>:
        }
        D.18747 = __result;
      }
      iftmp.39 = -D.18747;
      goto <D.19810>;
      <D.19773>:
      iftmp.39 = __builtin_strcmp (attribute_name, "name");
      <D.19810>:
      D.18748 = iftmp.39;
    }
    if (D.18748 == 0) goto <D.19811>; else goto <D.19812>;
    <D.19811>:
    n.38 = (unsigned int) n;
    D.19769 = n.38 * 4;
    D.19813 = attribute_values + D.19769;
    D.19814 = *D.19813;
    D.19815 = monoeg_strdup (D.19814);
    info->name = D.19815;
    goto <D.19816>;
    <D.19812>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.19820 = "publicKeyToken";
        D.19821 = MEM[(const unsigned char *)D.19820];
        D.19822 = (int) D.19821;
        D.19823 = *__s2;
        D.19824 = (int) D.19823;
        __result = D.19822 - D.19824;
        {
          D.19825 = __s2_len != 0;
          D.19826 = __result == 0;
          D.19827 = D.19825 & D.19826;
          if (D.19827 != 0) goto <D.19828>; else goto <D.19829>;
          <D.19828>:
          D.19830 = &MEM[(void *)"publicKeyToken" + 1B];
          D.19831 = *D.19830;
          D.19832 = (int) D.19831;
          D.19833 = __s2 + 1;
          D.19834 = *D.19833;
          D.19835 = (int) D.19834;
          __result = D.19832 - D.19835;
          D.19836 = __s2_len > 1;
          D.19826 = __result == 0;
          D.19837 = D.19836 & D.19826;
          if (D.19837 != 0) goto <D.19838>; else goto <D.19839>;
          <D.19838>:
          D.19840 = &MEM[(void *)"publicKeyToken" + 2B];
          D.19841 = *D.19840;
          D.19842 = (int) D.19841;
          D.19843 = __s2 + 2;
          D.19844 = *D.19843;
          D.19845 = (int) D.19844;
          __result = D.19842 - D.19845;
          D.19846 = __s2_len > 2;
          D.19826 = __result == 0;
          D.19847 = D.19846 & D.19826;
          if (D.19847 != 0) goto <D.19848>; else goto <D.19849>;
          <D.19848>:
          D.19850 = &MEM[(void *)"publicKeyToken" + 3B];
          D.19851 = *D.19850;
          D.19852 = (int) D.19851;
          D.19853 = __s2 + 3;
          D.19854 = *D.19853;
          D.19855 = (int) D.19854;
          __result = D.19852 - D.19855;
          <D.19849>:
          <D.19839>:
          <D.19829>:
        }
        D.18756 = __result;
      }
      iftmp.40 = -D.18756;
      goto <D.19856>;
      <D.19819>:
      iftmp.40 = __builtin_strcmp (attribute_name, "publicKeyToken");
      <D.19856>:
      D.18757 = iftmp.40;
    }
    if (D.18757 == 0) goto <D.19857>; else goto <D.19858>;
    <D.19857>:
    n.38 = (unsigned int) n;
    D.19769 = n.38 * 4;
    D.19813 = attribute_values + D.19769;
    D.19814 = *D.19813;
    D.19859 = strlen (D.19814);
    if (D.19859 == 16) goto <D.19860>; else goto <D.19861>;
    <D.19860>:
    D.19862 = &info->public_key_token;
    n.38 = (unsigned int) n;
    D.19769 = n.38 * 4;
    D.19813 = attribute_values + D.19769;
    D.19814 = *D.19813;
    monoeg_g_strlcpy (D.19862, D.19814, 17);
    <D.19861>:
    goto <D.19863>;
    <D.19858>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.19867 = "culture";
        D.19868 = MEM[(const unsigned char *)D.19867];
        D.19869 = (int) D.19868;
        D.19870 = *__s2;
        D.19871 = (int) D.19870;
        __result = D.19869 - D.19871;
        {
          D.19872 = __s2_len != 0;
          D.19873 = __result == 0;
          D.19874 = D.19872 & D.19873;
          if (D.19874 != 0) goto <D.19875>; else goto <D.19876>;
          <D.19875>:
          D.19877 = &MEM[(void *)"culture" + 1B];
          D.19878 = *D.19877;
          D.19879 = (int) D.19878;
          D.19880 = __s2 + 1;
          D.19881 = *D.19880;
          D.19882 = (int) D.19881;
          __result = D.19879 - D.19882;
          D.19883 = __s2_len > 1;
          D.19873 = __result == 0;
          D.19884 = D.19883 & D.19873;
          if (D.19884 != 0) goto <D.19885>; else goto <D.19886>;
          <D.19885>:
          D.19887 = &MEM[(void *)"culture" + 2B];
          D.19888 = *D.19887;
          D.19889 = (int) D.19888;
          D.19890 = __s2 + 2;
          D.19891 = *D.19890;
          D.19892 = (int) D.19891;
          __result = D.19889 - D.19892;
          D.19893 = __s2_len > 2;
          D.19873 = __result == 0;
          D.19894 = D.19893 & D.19873;
          if (D.19894 != 0) goto <D.19895>; else goto <D.19896>;
          <D.19895>:
          D.19897 = &MEM[(void *)"culture" + 3B];
          D.19898 = *D.19897;
          D.19899 = (int) D.19898;
          D.19900 = __s2 + 3;
          D.19901 = *D.19900;
          D.19902 = (int) D.19901;
          __result = D.19899 - D.19902;
          <D.19896>:
          <D.19886>:
          <D.19876>:
        }
        D.18765 = __result;
      }
      iftmp.41 = -D.18765;
      goto <D.19903>;
      <D.19866>:
      iftmp.41 = __builtin_strcmp (attribute_name, "culture");
      <D.19903>:
      D.18766 = iftmp.41;
    }
    if (D.18766 == 0) goto <D.19904>; else goto <D.19905>;
    <D.19904>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        n.38 = (unsigned int) n;
        D.19769 = n.38 * 4;
        D.19813 = attribute_values + D.19769;
        __s2 = *D.19813;
        D.19909 = "neutral";
        D.19910 = MEM[(const unsigned char *)D.19909];
        D.19911 = (int) D.19910;
        D.19912 = *__s2;
        D.19913 = (int) D.19912;
        __result = D.19911 - D.19913;
        {
          D.19914 = __s2_len != 0;
          D.19915 = __result == 0;
          D.19916 = D.19914 & D.19915;
          if (D.19916 != 0) goto <D.19917>; else goto <D.19918>;
          <D.19917>:
          D.19919 = &MEM[(void *)"neutral" + 1B];
          D.19920 = *D.19919;
          D.19921 = (int) D.19920;
          D.19922 = __s2 + 1;
          D.19923 = *D.19922;
          D.19924 = (int) D.19923;
          __result = D.19921 - D.19924;
          D.19925 = __s2_len > 1;
          D.19915 = __result == 0;
          D.19926 = D.19925 & D.19915;
          if (D.19926 != 0) goto <D.19927>; else goto <D.19928>;
          <D.19927>:
          D.19929 = &MEM[(void *)"neutral" + 2B];
          D.19930 = *D.19929;
          D.19931 = (int) D.19930;
          D.19932 = __s2 + 2;
          D.19933 = *D.19932;
          D.19934 = (int) D.19933;
          __result = D.19931 - D.19934;
          D.19935 = __s2_len > 2;
          D.19915 = __result == 0;
          D.19936 = D.19935 & D.19915;
          if (D.19936 != 0) goto <D.19937>; else goto <D.19938>;
          <D.19937>:
          D.19939 = &MEM[(void *)"neutral" + 3B];
          D.19940 = *D.19939;
          D.19941 = (int) D.19940;
          D.19942 = __s2 + 3;
          D.19943 = *D.19942;
          D.19944 = (int) D.19943;
          __result = D.19941 - D.19944;
          <D.19938>:
          <D.19928>:
          <D.19918>:
        }
        D.18774 = __result;
      }
      iftmp.42 = -D.18774;
      goto <D.19945>;
      <D.19908>:
      n.38 = (unsigned int) n;
      D.19769 = n.38 * 4;
      D.19813 = attribute_values + D.19769;
      D.19814 = *D.19813;
      iftmp.42 = __builtin_strcmp (D.19814, "neutral");
      <D.19945>:
      D.18775 = iftmp.42;
    }
    if (D.18775 == 0) goto <D.19946>; else goto <D.19947>;
    <D.19946>:
    D.19948 = monoeg_strdup ("");
    info->culture = D.19948;
    goto <D.19949>;
    <D.19947>:
    n.38 = (unsigned int) n;
    D.19769 = n.38 * 4;
    D.19813 = attribute_values + D.19769;
    D.19814 = *D.19813;
    D.19950 = monoeg_strdup (D.19814);
    info->culture = D.19950;
    <D.19949>:
    <D.19905>:
    <D.19863>:
    <D.19816>:
  }
  n = n + 1;
  <D.18777>:
  n.38 = (unsigned int) n;
  D.19769 = n.38 * 4;
  D.19770 = attribute_names + D.19769;
  D.19951 = *D.19770;
  if (D.19951 != 0B) goto <D.18776>; else goto <D.18778>;
  <D.18778>:
  goto <D.19952>;
  <D.19767>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.19956 = "bindingRedirect";
      D.19957 = MEM[(const unsigned char *)D.19956];
      D.19958 = (int) D.19957;
      D.19959 = *__s2;
      D.19960 = (int) D.19959;
      __result = D.19958 - D.19960;
      {
        D.19961 = __s2_len != 0;
        D.19962 = __result == 0;
        D.19963 = D.19961 & D.19962;
        if (D.19963 != 0) goto <D.19964>; else goto <D.19965>;
        <D.19964>:
        D.19966 = &MEM[(void *)"bindingRedirect" + 1B];
        D.19967 = *D.19966;
        D.19968 = (int) D.19967;
        D.19969 = __s2 + 1;
        D.19970 = *D.19969;
        D.19971 = (int) D.19970;
        __result = D.19968 - D.19971;
        D.19972 = __s2_len > 1;
        D.19962 = __result == 0;
        D.19973 = D.19972 & D.19962;
        if (D.19973 != 0) goto <D.19974>; else goto <D.19975>;
        <D.19974>:
        D.19976 = &MEM[(void *)"bindingRedirect" + 2B];
        D.19977 = *D.19976;
        D.19978 = (int) D.19977;
        D.19979 = __s2 + 2;
        D.19980 = *D.19979;
        D.19981 = (int) D.19980;
        __result = D.19978 - D.19981;
        D.19982 = __s2_len > 2;
        D.19962 = __result == 0;
        D.19983 = D.19982 & D.19962;
        if (D.19983 != 0) goto <D.19984>; else goto <D.19985>;
        <D.19984>:
        D.19986 = &MEM[(void *)"bindingRedirect" + 3B];
        D.19987 = *D.19986;
        D.19988 = (int) D.19987;
        D.19989 = __s2 + 3;
        D.19990 = *D.19989;
        D.19991 = (int) D.19990;
        __result = D.19988 - D.19991;
        <D.19985>:
        <D.19975>:
        <D.19965>:
      }
      D.18786 = __result;
    }
    iftmp.43 = -D.18786;
    goto <D.19992>;
    <D.19955>:
    iftmp.43 = __builtin_strcmp (element_name, "bindingRedirect");
    <D.19992>:
    D.18787 = iftmp.43;
  }
  if (D.18787 == 0) goto <D.19993>; else goto <D.19994>;
  <D.19993>:
  n = 0;
  goto <D.18836>;
  <D.18835>:
  {
    const gchar * attribute_name;

    n.38 = (unsigned int) n;
    D.19769 = n.38 * 4;
    D.19770 = attribute_names + D.19769;
    attribute_name = *D.19770;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.19998 = "oldVersion";
        D.19999 = MEM[(const unsigned char *)D.19998];
        D.20000 = (int) D.19999;
        D.20001 = *__s2;
        D.20002 = (int) D.20001;
        __result = D.20000 - D.20002;
        {
          D.20003 = __s2_len != 0;
          D.20004 = __result == 0;
          D.20005 = D.20003 & D.20004;
          if (D.20005 != 0) goto <D.20006>; else goto <D.20007>;
          <D.20006>:
          D.20008 = &MEM[(void *)"oldVersion" + 1B];
          D.20009 = *D.20008;
          D.20010 = (int) D.20009;
          D.20011 = __s2 + 1;
          D.20012 = *D.20011;
          D.20013 = (int) D.20012;
          __result = D.20010 - D.20013;
          D.20014 = __s2_len > 1;
          D.20004 = __result == 0;
          D.20015 = D.20014 & D.20004;
          if (D.20015 != 0) goto <D.20016>; else goto <D.20017>;
          <D.20016>:
          D.20018 = &MEM[(void *)"oldVersion" + 2B];
          D.20019 = *D.20018;
          D.20020 = (int) D.20019;
          D.20021 = __s2 + 2;
          D.20022 = *D.20021;
          D.20023 = (int) D.20022;
          __result = D.20020 - D.20023;
          D.20024 = __s2_len > 2;
          D.20004 = __result == 0;
          D.20025 = D.20024 & D.20004;
          if (D.20025 != 0) goto <D.20026>; else goto <D.20027>;
          <D.20026>:
          D.20028 = &MEM[(void *)"oldVersion" + 3B];
          D.20029 = *D.20028;
          D.20030 = (int) D.20029;
          D.20031 = __s2 + 3;
          D.20032 = *D.20031;
          D.20033 = (int) D.20032;
          __result = D.20030 - D.20033;
          <D.20027>:
          <D.20017>:
          <D.20007>:
        }
        D.18796 = __result;
      }
      iftmp.44 = -D.18796;
      goto <D.20034>;
      <D.19997>:
      iftmp.44 = __builtin_strcmp (attribute_name, "oldVersion");
      <D.20034>:
      D.18797 = iftmp.44;
    }
    if (D.18797 == 0) goto <D.20035>; else goto <D.20036>;
    <D.20035>:
    {
      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.20038>; else goto <D.20039>;
        <D.20038>:
        {
          const unsigned char * __s2;
          int __result;

          n.38 = (unsigned int) n;
          D.19769 = n.38 * 4;
          D.19813 = attribute_values + D.19769;
          __s2 = *D.19813;
          D.20040 = "";
          D.20041 = MEM[(const unsigned char *)D.20040];
          D.20042 = (int) D.20041;
          D.20043 = *__s2;
          D.20044 = (int) D.20043;
          __result = D.20042 - D.20044;
          {
            D.20045 = __s2_len != 0;
            D.20046 = __result == 0;
            D.20047 = D.20045 & D.20046;
            if (D.20047 != 0) goto <D.20048>; else goto <D.20049>;
            <D.20048>:
            D.20050 = &MEM[(void *)"" + 1B];
            D.20051 = *D.20050;
            D.20052 = (int) D.20051;
            D.20053 = __s2 + 1;
            D.20054 = *D.20053;
            D.20055 = (int) D.20054;
            __result = D.20052 - D.20055;
            D.20056 = __s2_len > 1;
            D.20046 = __result == 0;
            D.20057 = D.20056 & D.20046;
            if (D.20057 != 0) goto <D.20058>; else goto <D.20059>;
            <D.20058>:
            D.20060 = &MEM[(void *)"" + 2B];
            D.20061 = *D.20060;
            D.20062 = (int) D.20061;
            D.20063 = __s2 + 2;
            D.20064 = *D.20063;
            D.20065 = (int) D.20064;
            __result = D.20062 - D.20065;
            D.20066 = __s2_len > 2;
            D.20046 = __result == 0;
            D.20067 = D.20066 & D.20046;
            if (D.20067 != 0) goto <D.20068>; else goto <D.20069>;
            <D.20068>:
            D.20070 = &MEM[(void *)"" + 3B];
            D.20071 = *D.20070;
            D.20072 = (int) D.20071;
            D.20073 = __s2 + 3;
            D.20074 = *D.20073;
            D.20075 = (int) D.20074;
            __result = D.20072 - D.20075;
            <D.20069>:
            <D.20059>:
            <D.20049>:
          }
          D.18812 = __result;
        }
        iftmp.45 = -D.18812;
        goto <D.20076>;
        <D.20039>:
        n.38 = (unsigned int) n;
        D.19769 = n.38 * 4;
        D.19813 = attribute_values + D.19769;
        D.19814 = *D.19813;
        D.20077 = MEM[(const unsigned char * {ref-all})D.19814];
        iftmp.45 = (int) D.20077;
        <D.20076>:
        D.18813 = iftmp.45;
      }
      if (D.18813 == 0) goto <D.20078>; else goto <D.20079>;
      <D.20078>:
      return;
      <D.20079>:
      n.38 = (unsigned int) n;
      D.19769 = n.38 * 4;
      D.19813 = attribute_values + D.19769;
      D.19814 = *D.19813;
      versions = monoeg_g_strsplit (D.19814, "-", 2);
      D.20080 = *versions;
      version = monoeg_g_strsplit (D.20080, ".", 4);
      numbers = version;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20083>; else goto <D.20084>;
      <D.20083>:
      numbers.47 = numbers;
      numbers = numbers.47 + 4;
      D.20086 = *numbers.47;
      iftmp.46 = atoi (D.20086);
      goto <D.20087>;
      <D.20084>:
      iftmp.46 = -1;
      <D.20087>:
      major = iftmp.46;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20089>; else goto <D.20090>;
      <D.20089>:
      numbers.49 = numbers;
      numbers = numbers.49 + 4;
      D.20092 = *numbers.49;
      iftmp.48 = atoi (D.20092);
      goto <D.20093>;
      <D.20090>:
      iftmp.48 = -1;
      <D.20093>:
      minor = iftmp.48;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20095>; else goto <D.20096>;
      <D.20095>:
      numbers.51 = numbers;
      numbers = numbers.51 + 4;
      D.20098 = *numbers.51;
      iftmp.50 = atoi (D.20098);
      goto <D.20099>;
      <D.20096>:
      iftmp.50 = -1;
      <D.20099>:
      build = iftmp.50;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20101>; else goto <D.20102>;
      <D.20101>:
      D.20082 = *numbers;
      iftmp.52 = atoi (D.20082);
      goto <D.20103>;
      <D.20102>:
      iftmp.52 = -1;
      <D.20103>:
      revision = iftmp.52;
      monoeg_g_strfreev (version);
      D.20106 = major < 0;
      D.20107 = minor < 0;
      D.20108 = D.20106 | D.20107;
      if (D.20108 != 0) goto <D.20104>; else goto <D.20109>;
      <D.20109>:
      D.20110 = build < 0;
      D.20111 = revision < 0;
      D.20112 = D.20110 | D.20111;
      if (D.20112 != 0) goto <D.20104>; else goto <D.20105>;
      <D.20104>:
      monoeg_g_strfreev (versions);
      return;
      <D.20105>:
      D.20113 = (short unsigned int) major;
      info->old_version_bottom.major = D.20113;
      D.20114 = (short unsigned int) minor;
      info->old_version_bottom.minor = D.20114;
      D.20115 = (short unsigned int) build;
      info->old_version_bottom.build = D.20115;
      D.20116 = (short unsigned int) revision;
      info->old_version_bottom.revision = D.20116;
      info->has_old_version_bottom = 1;
      D.20117 = versions + 4;
      D.20118 = *D.20117;
      if (D.20118 == 0B) goto <D.20119>; else goto <D.20120>;
      <D.20119>:
      monoeg_g_strfreev (versions);
      // predicted unlikely by continue predictor.
      goto <D.18814>;
      <D.20120>:
      D.20117 = versions + 4;
      D.20118 = *D.20117;
      version = monoeg_g_strsplit (D.20118, ".", 4);
      numbers = version;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20122>; else goto <D.20123>;
      <D.20122>:
      numbers.54 = numbers;
      numbers = numbers.54 + 4;
      D.20125 = *numbers.54;
      iftmp.53 = atoi (D.20125);
      goto <D.20126>;
      <D.20123>:
      iftmp.53 = -1;
      <D.20126>:
      major = iftmp.53;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20128>; else goto <D.20129>;
      <D.20128>:
      numbers.56 = numbers;
      numbers = numbers.56 + 4;
      D.20131 = *numbers.56;
      iftmp.55 = atoi (D.20131);
      goto <D.20132>;
      <D.20129>:
      iftmp.55 = -1;
      <D.20132>:
      minor = iftmp.55;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20134>; else goto <D.20135>;
      <D.20134>:
      numbers.58 = numbers;
      numbers = numbers.58 + 4;
      D.20137 = *numbers.58;
      iftmp.57 = atoi (D.20137);
      goto <D.20138>;
      <D.20135>:
      iftmp.57 = -1;
      <D.20138>:
      build = iftmp.57;
      D.20082 = *numbers;
      if (D.20082 != 0B) goto <D.20140>; else goto <D.20141>;
      <D.20140>:
      D.20082 = *numbers;
      iftmp.59 = atoi (D.20082);
      goto <D.20142>;
      <D.20141>:
      iftmp.59 = 1;
      <D.20142>:
      revision = iftmp.59;
      monoeg_g_strfreev (version);
      D.20106 = major < 0;
      D.20107 = minor < 0;
      D.20108 = D.20106 | D.20107;
      if (D.20108 != 0) goto <D.20143>; else goto <D.20145>;
      <D.20145>:
      D.20110 = build < 0;
      D.20111 = revision < 0;
      D.20112 = D.20110 | D.20111;
      if (D.20112 != 0) goto <D.20143>; else goto <D.20144>;
      <D.20143>:
      monoeg_g_strfreev (versions);
      return;
      <D.20144>:
      D.20113 = (short unsigned int) major;
      info->old_version_top.major = D.20113;
      D.20114 = (short unsigned int) minor;
      info->old_version_top.minor = D.20114;
      D.20115 = (short unsigned int) build;
      info->old_version_top.build = D.20115;
      D.20116 = (short unsigned int) revision;
      info->old_version_top.revision = D.20116;
      info->has_old_version_top = 1;
      monoeg_g_strfreev (versions);
    }
    goto <D.20146>;
    <D.20036>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.20150 = "newVersion";
        D.20151 = MEM[(const unsigned char *)D.20150];
        D.20152 = (int) D.20151;
        D.20153 = *__s2;
        D.20154 = (int) D.20153;
        __result = D.20152 - D.20154;
        {
          D.20155 = __s2_len != 0;
          D.20156 = __result == 0;
          D.20157 = D.20155 & D.20156;
          if (D.20157 != 0) goto <D.20158>; else goto <D.20159>;
          <D.20158>:
          D.20160 = &MEM[(void *)"newVersion" + 1B];
          D.20161 = *D.20160;
          D.20162 = (int) D.20161;
          D.20163 = __s2 + 1;
          D.20164 = *D.20163;
          D.20165 = (int) D.20164;
          __result = D.20162 - D.20165;
          D.20166 = __s2_len > 1;
          D.20156 = __result == 0;
          D.20167 = D.20166 & D.20156;
          if (D.20167 != 0) goto <D.20168>; else goto <D.20169>;
          <D.20168>:
          D.20170 = &MEM[(void *)"newVersion" + 2B];
          D.20171 = *D.20170;
          D.20172 = (int) D.20171;
          D.20173 = __s2 + 2;
          D.20174 = *D.20173;
          D.20175 = (int) D.20174;
          __result = D.20172 - D.20175;
          D.20176 = __s2_len > 2;
          D.20156 = __result == 0;
          D.20177 = D.20176 & D.20156;
          if (D.20177 != 0) goto <D.20178>; else goto <D.20179>;
          <D.20178>:
          D.20180 = &MEM[(void *)"newVersion" + 3B];
          D.20181 = *D.20180;
          D.20182 = (int) D.20181;
          D.20183 = __s2 + 3;
          D.20184 = *D.20183;
          D.20185 = (int) D.20184;
          __result = D.20182 - D.20185;
          <D.20179>:
          <D.20169>:
          <D.20159>:
        }
        D.18822 = __result;
      }
      iftmp.60 = -D.18822;
      goto <D.20186>;
      <D.20149>:
      iftmp.60 = __builtin_strcmp (attribute_name, "newVersion");
      <D.20186>:
      D.18823 = iftmp.60;
    }
    if (D.18823 == 0) goto <D.20187>; else goto <D.20188>;
    <D.20187>:
    {
      gchar * * numbers;
      gchar * * version;

      {
        size_t __s1_len;
        size_t __s2_len;

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

          n.38 = (unsigned int) n;
          D.19769 = n.38 * 4;
          D.19813 = attribute_values + D.19769;
          __s2 = *D.19813;
          D.20040 = "";
          D.20041 = MEM[(const unsigned char *)D.20040];
          D.20042 = (int) D.20041;
          D.20192 = *__s2;
          D.20193 = (int) D.20192;
          __result = D.20042 - D.20193;
          {
            D.20194 = __s2_len != 0;
            D.20195 = __result == 0;
            D.20196 = D.20194 & D.20195;
            if (D.20196 != 0) goto <D.20197>; else goto <D.20198>;
            <D.20197>:
            D.20050 = &MEM[(void *)"" + 1B];
            D.20051 = *D.20050;
            D.20052 = (int) D.20051;
            D.20199 = __s2 + 1;
            D.20200 = *D.20199;
            D.20201 = (int) D.20200;
            __result = D.20052 - D.20201;
            D.20202 = __s2_len > 1;
            D.20195 = __result == 0;
            D.20203 = D.20202 & D.20195;
            if (D.20203 != 0) goto <D.20204>; else goto <D.20205>;
            <D.20204>:
            D.20060 = &MEM[(void *)"" + 2B];
            D.20061 = *D.20060;
            D.20062 = (int) D.20061;
            D.20206 = __s2 + 2;
            D.20207 = *D.20206;
            D.20208 = (int) D.20207;
            __result = D.20062 - D.20208;
            D.20209 = __s2_len > 2;
            D.20195 = __result == 0;
            D.20210 = D.20209 & D.20195;
            if (D.20210 != 0) goto <D.20211>; else goto <D.20212>;
            <D.20211>:
            D.20070 = &MEM[(void *)"" + 3B];
            D.20071 = *D.20070;
            D.20072 = (int) D.20071;
            D.20213 = __s2 + 3;
            D.20214 = *D.20213;
            D.20215 = (int) D.20214;
            __result = D.20072 - D.20215;
            <D.20212>:
            <D.20205>:
            <D.20198>:
          }
          D.18833 = __result;
        }
        iftmp.61 = -D.18833;
        goto <D.20216>;
        <D.20191>:
        n.38 = (unsigned int) n;
        D.19769 = n.38 * 4;
        D.19813 = attribute_values + D.19769;
        D.19814 = *D.19813;
        D.20077 = MEM[(const unsigned char * {ref-all})D.19814];
        iftmp.61 = (int) D.20077;
        <D.20216>:
        D.18834 = iftmp.61;
      }
      if (D.18834 == 0) goto <D.20217>; else goto <D.20218>;
      <D.20217>:
      return;
      <D.20218>:
      n.38 = (unsigned int) n;
      D.19769 = n.38 * 4;
      D.19813 = attribute_values + D.19769;
      D.19814 = *D.19813;
      version = monoeg_g_strsplit (D.19814, ".", 4);
      numbers = version;
      D.20220 = *numbers;
      if (D.20220 != 0B) goto <D.20221>; else goto <D.20222>;
      <D.20221>:
      numbers.63 = numbers;
      numbers = numbers.63 + 4;
      D.20224 = *numbers.63;
      D.20225 = atoi (D.20224);
      iftmp.62 = (guint16) D.20225;
      goto <D.20226>;
      <D.20222>:
      iftmp.62 = 65535;
      <D.20226>:
      info->new_version.major = iftmp.62;
      D.20220 = *numbers;
      if (D.20220 != 0B) goto <D.20228>; else goto <D.20229>;
      <D.20228>:
      numbers.65 = numbers;
      numbers = numbers.65 + 4;
      D.20231 = *numbers.65;
      D.20232 = atoi (D.20231);
      iftmp.64 = (guint16) D.20232;
      goto <D.20233>;
      <D.20229>:
      iftmp.64 = 65535;
      <D.20233>:
      info->new_version.minor = iftmp.64;
      D.20220 = *numbers;
      if (D.20220 != 0B) goto <D.20235>; else goto <D.20236>;
      <D.20235>:
      numbers.67 = numbers;
      numbers = numbers.67 + 4;
      D.20238 = *numbers.67;
      D.20239 = atoi (D.20238);
      iftmp.66 = (guint16) D.20239;
      goto <D.20240>;
      <D.20236>:
      iftmp.66 = 65535;
      <D.20240>:
      info->new_version.build = iftmp.66;
      D.20220 = *numbers;
      if (D.20220 != 0B) goto <D.20242>; else goto <D.20243>;
      <D.20242>:
      D.20220 = *numbers;
      D.20244 = atoi (D.20220);
      iftmp.68 = (guint16) D.20244;
      goto <D.20245>;
      <D.20243>:
      iftmp.68 = 65535;
      <D.20245>:
      info->new_version.revision = iftmp.68;
      info->has_new_version = 1;
      monoeg_g_strfreev (version);
    }
    <D.20188>:
    <D.20146>:
  }
  <D.18814>:
  n = n + 1;
  <D.18836>:
  n.38 = (unsigned int) n;
  D.19769 = n.38 * 4;
  D.19770 = attribute_names + D.19769;
  D.19951 = *D.19770;
  if (D.19951 != 0B) goto <D.18835>; else goto <D.18837>;
  <D.18837>:
  <D.19994>:
  <D.19952>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.20249;
  int D.20254;
  void * D.20256;
  unsigned int D.20257;

  D.20249 = __builtin_constant_p (__len);
  if (D.20249 != 0) goto <D.20250>; else goto <D.20251>;
  <D.20250>:
  if (__len == 0) goto <D.20252>; else goto <D.20253>;
  <D.20252>:
  D.20254 = __builtin_constant_p (__ch);
  if (D.20254 == 0) goto <D.20247>; else goto <D.20255>;
  <D.20255>:
  if (__ch != 0) goto <D.20247>; else goto <D.20248>;
  <D.20247>:
  __warn_memset_zero_len ();
  D.20256 = __dest;
  return D.20256;
  <D.20248>:
  <D.20253>:
  <D.20251>:
  D.20257 = __builtin_object_size (__dest, 0);
  D.20256 = __builtin___memset_chk (__dest, __ch, __len, D.20257);
  return D.20256;
}


atoi (const char * __nptr)
{
  int D.20259;

  D.20259 = strtol (__nptr, 0B, 10);
  return D.20259;
}


mono_config_parse_assembly_bindings (const char * filename, int amajor, int aminor, void * user_data, void (*<T261e>) (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.18711;
  int iftmp.69;
  int D.18710;
  const char[18] * D.20264;
  unsigned char D.20265;
  int D.20266;
  unsigned char D.20267;
  int D.20268;
  _Bool D.20269;
  _Bool D.20270;
  _Bool D.20271;
  const unsigned char * D.20274;
  unsigned char D.20275;
  int D.20276;
  const unsigned char * D.20277;
  unsigned char D.20278;
  int D.20279;
  _Bool D.20280;
  _Bool D.20281;
  const unsigned char * D.20284;
  unsigned char D.20285;
  int D.20286;
  const unsigned char * D.20287;
  unsigned char D.20288;
  int D.20289;
  _Bool D.20290;
  _Bool D.20291;
  const unsigned char * D.20294;
  unsigned char D.20295;
  int D.20296;
  const unsigned char * D.20297;
  unsigned char D.20298;
  int D.20299;
  void (*<T261e>) (struct MonoAssemblyBindingInfo *, void *) D.20303;
  struct MonoAssemblyBindingInfo * D.20306;
  void * D.20309;
  char * D.20310;
  char * D.20311;
  struct ParserUserData * pud;

  pud = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.20264 = "dependentAssembly";
      D.20265 = MEM[(const unsigned char *)D.20264];
      D.20266 = (int) D.20265;
      D.20267 = *__s2;
      D.20268 = (int) D.20267;
      __result = D.20266 - D.20268;
      {
        D.20269 = __s2_len != 0;
        D.20270 = __result == 0;
        D.20271 = D.20269 & D.20270;
        if (D.20271 != 0) goto <D.20272>; else goto <D.20273>;
        <D.20272>:
        D.20274 = &MEM[(void *)"dependentAssembly" + 1B];
        D.20275 = *D.20274;
        D.20276 = (int) D.20275;
        D.20277 = __s2 + 1;
        D.20278 = *D.20277;
        D.20279 = (int) D.20278;
        __result = D.20276 - D.20279;
        D.20280 = __s2_len > 1;
        D.20270 = __result == 0;
        D.20281 = D.20280 & D.20270;
        if (D.20281 != 0) goto <D.20282>; else goto <D.20283>;
        <D.20282>:
        D.20284 = &MEM[(void *)"dependentAssembly" + 2B];
        D.20285 = *D.20284;
        D.20286 = (int) D.20285;
        D.20287 = __s2 + 2;
        D.20288 = *D.20287;
        D.20289 = (int) D.20288;
        __result = D.20286 - D.20289;
        D.20290 = __s2_len > 2;
        D.20270 = __result == 0;
        D.20291 = D.20290 & D.20270;
        if (D.20291 != 0) goto <D.20292>; else goto <D.20293>;
        <D.20292>:
        D.20294 = &MEM[(void *)"dependentAssembly" + 3B];
        D.20295 = *D.20294;
        D.20296 = (int) D.20295;
        D.20297 = __s2 + 3;
        D.20298 = *D.20297;
        D.20299 = (int) D.20298;
        __result = D.20296 - D.20299;
        <D.20293>:
        <D.20283>:
        <D.20273>:
      }
      D.18710 = __result;
    }
    iftmp.69 = -D.18710;
    goto <D.20300>;
    <D.20263>:
    iftmp.69 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.20300>:
    D.18711 = iftmp.69;
  }
  if (D.18711 == 0) goto <D.20301>; else goto <D.20302>;
  <D.20301>:
  D.20303 = pud->info_parsed;
  if (D.20303 != 0B) goto <D.20304>; else goto <D.20305>;
  <D.20304>:
  D.20306 = pud->info;
  if (D.20306 != 0B) goto <D.20307>; else goto <D.20308>;
  <D.20307>:
  D.20303 = pud->info_parsed;
  D.20306 = pud->info;
  D.20309 = pud->user_data;
  D.20303 (D.20306, D.20309);
  D.20306 = pud->info;
  D.20310 = D.20306->name;
  monoeg_g_free (D.20310);
  D.20306 = pud->info;
  D.20311 = D.20306->culture;
  monoeg_g_free (D.20311);
  <D.20308>:
  <D.20305>:
  <D.20302>:
}


mono_config_set_server_mode (mono_bool server_mode)
{
  mono_server_mode = server_mode;
}


mono_config_is_server_mode ()
{
  mono_bool D.20312;

  D.20312 = mono_server_mode;
  return D.20312;
}


