mono_class_from_typeref (struct MonoImage * image, guint32 type_token)
{
  unsigned int D.22592;
  unsigned int D.22593;
  int D.22594;
  char * D.22597;
  const char * D.22598;
  struct MonoClass * D.22599;
  int D.22600;
  unsigned int D.22601;
  unsigned int D.22602;
  unsigned int D.22603;
  unsigned int D.22604;
  int idx.0;
  const char * iftmp.1;
  char D.22611;
  struct MonoAssembly * D.22615;
  struct MonoAssemblyName * D.22616;
  gchar * D.22619;
  unsigned int D.22620;
  long unsigned int D.22625;
  long unsigned int D.22626;
  struct MonoClassExt * D.22628;
  int D.19374;
  const char * D.22630;
  struct MonoImage * D.22633;
  unsigned int D.22634;
  unsigned int D.22635;
  struct MonoTableInfo * D.22636;
  int D.22637;
  struct MonoTableInfo * D.22638;
  unsigned int D.22639;
  int D.22640;
  int D.19390;
  unsigned int D.22643;
  int D.22644;
  int D.22647;
  unsigned int D.22648;
  unsigned int D.22649;
  <unnamed-unsigned:24> D.22651;
  unsigned int D.22652;
  gchar * D.22655;
  struct MonoAssembly * * D.22658;
  unsigned int D.22660;
  long unsigned int D.22661;
  long unsigned int D.22662;
  struct MonoAssembly * * D.22663;
  struct MonoAssembly * D.22664;
  int D.22665;
  _Bool D.22666;
  long int D.22667;
  long int D.22668;
  int iftmp.2;
  struct MonoImage * D.22677;
  struct MonoError error;
  guint32 cols[3];
  struct MonoTableInfo * t;
  guint32 idx;
  const char * name;
  const char * nspace;
  struct MonoClass * res;
  struct MonoImage * module;

  try
    {
      t = &image->tables[1];
      D.22592 = type_token & 16777215;
      D.22593 = D.22592 + 4294967295;
      D.22594 = mono_verifier_verify_typeref_row (image, D.22593, &error);
      if (D.22594 == 0) goto <D.22595>; else goto <D.22596>;
      <D.22595>:
      D.22597 = image->name;
      D.22598 = mono_error_get_message (&error);
      mono_trace (16, 2, "Failed to resolve typeref from %s due to \'%s\'", D.22597, D.22598);
      D.22599 = 0B;
      return D.22599;
      <D.22596>:
      D.22592 = type_token & 16777215;
      D.22593 = D.22592 + 4294967295;
      D.22600 = (int) D.22593;
      mono_metadata_decode_row (t, D.22600, &cols, 3);
      D.22601 = cols[1];
      name = mono_metadata_string_heap (image, D.22601);
      D.22602 = cols[2];
      nspace = mono_metadata_string_heap (image, D.22602);
      D.22603 = cols[0];
      idx = D.22603 >> 2;
      D.22603 = cols[0];
      D.22604 = D.22603 & 3;
      switch (D.22604) <default: <D.22650>, case 0: <D.19358>, case 1: <D.19360>, case 2: <D.19395>, case 3: <D.19363>>
      <D.19358>:
      if (idx == 0) goto <D.22605>; else goto <D.22606>;
      <D.22605>:
      monoeg_g_log (0B, 4, "null ResolutionScope not yet handled");
      <D.19359>:
      goto <D.19359>;
      <D.22606>:
      D.22599 = mono_class_from_name (image, nspace, name);
      return D.22599;
      <D.19360>:
      idx.0 = (int) idx;
      module = mono_image_load_module (image, idx.0);
      if (module != 0B) goto <D.22608>; else goto <D.22609>;
      <D.22608>:
      D.22599 = mono_class_from_name (module, nspace, name);
      return D.22599;
      <D.22609>:
      {
        char * msg;
        char * human_name;

        D.22611 = *nspace;
        if (D.22611 != 0) goto <D.22612>; else goto <D.22613>;
        <D.22612>:
        iftmp.1 = ".";
        goto <D.22614>;
        <D.22613>:
        iftmp.1 = "";
        <D.22614>:
        msg = monoeg_g_strdup_printf ("%s%s%s", nspace, iftmp.1, name);
        D.22615 = image->assembly;
        D.22616 = &D.22615->aname;
        human_name = mono_stringify_assembly_name (D.22616);
        mono_loader_set_error_type_load (msg, human_name);
        monoeg_g_free (msg);
        monoeg_g_free (human_name);
        D.22599 = 0B;
        return D.22599;
      }
      <D.19363>:
      {
        struct MonoClass * enclosing;
        struct GList * tmp;

        D.22592 = type_token & 16777215;
        if (D.22592 == idx) goto <D.22617>; else goto <D.22618>;
        <D.22617>:
        D.22597 = image->name;
        D.22619 = monoeg_g_strdup_printf ("Image %s with self-referencing typeref token %08x.", D.22597, type_token);
        mono_loader_set_error_bad_image (D.22619);
        D.22599 = 0B;
        return D.22599;
        <D.22618>:
        D.22620 = idx | 16777216;
        enclosing = mono_class_from_typeref (image, D.22620);
        if (enclosing == 0B) goto <D.22621>; else goto <D.22622>;
        <D.22621>:
        D.22599 = 0B;
        return D.22599;
        <D.22622>:
        D.22625 = BIT_FIELD_REF <*enclosing, 64, 256>;
        D.22626 = D.22625 & 2147483648;
        if (D.22626 != 0) goto <D.22627>; else goto <D.22623>;
        <D.22627>:
        D.22628 = enclosing->ext;
        if (D.22628 != 0B) goto <D.22629>; else goto <D.22623>;
        <D.22629>:
        D.22628 = enclosing->ext;
        tmp = D.22628->nested_classes;
        goto <D.19376>;
        <D.19375>:
        res = tmp->data;
        {
          size_t __s1_len;
          size_t __s2_len;

          D.22630 = res->name;
          D.19374 = __builtin_strcmp (D.22630, name);
        }
        if (D.19374 == 0) goto <D.22631>; else goto <D.22632>;
        <D.22631>:
        D.22599 = res;
        return D.22599;
        <D.22632>:
        tmp = tmp->next;
        <D.19376>:
        if (tmp != 0B) goto <D.19375>; else goto <D.19377>;
        <D.19377>:
        goto <D.22624>;
        <D.22623>:
        {
          int i;

          D.22633 = enclosing->image;
          D.22634 = enclosing->type_token;
          D.22635 = mono_metadata_nesting_typedef (D.22633, D.22634, 1);
          i = (int) D.22635;
          goto <D.19393>;
          <D.19392>:
          {
            guint32 class_nested;
            guint32 string_offset;
            const char * nname;

            D.22633 = enclosing->image;
            D.22636 = &D.22633->tables[41];
            D.22637 = i + -1;
            class_nested = mono_metadata_decode_row_col (D.22636, D.22637, 0);
            D.22633 = enclosing->image;
            D.22638 = &D.22633->tables[2];
            D.22639 = class_nested + 4294967295;
            D.22640 = (int) D.22639;
            string_offset = mono_metadata_decode_row_col (D.22638, D.22640, 1);
            D.22633 = enclosing->image;
            nname = mono_metadata_string_heap (D.22633, string_offset);
            {
              size_t __s1_len;
              size_t __s2_len;

              D.19390 = __builtin_strcmp (nname, name);
            }
            if (D.19390 == 0) goto <D.22641>; else goto <D.22642>;
            <D.22641>:
            {
              struct MonoClass * res;

              D.22633 = enclosing->image;
              D.22643 = class_nested | 33554432;
              res = mono_class_create_from_typedef (D.22633, D.22643, &error);
              D.22644 = mono_error_ok (&error);
              if (D.22644 == 0) goto <D.22645>; else goto <D.22646>;
              <D.22645>:
              mono_loader_set_error_from_mono_error (&error);
              mono_error_cleanup (&error);
              D.22599 = 0B;
              return D.22599;
              <D.22646>:
              D.22599 = res;
              return D.22599;
            }
            <D.22642>:
            D.22633 = enclosing->image;
            D.22634 = enclosing->type_token;
            D.22647 = i + 1;
            D.22648 = (unsigned int) D.22647;
            D.22649 = mono_metadata_nesting_typedef (D.22633, D.22634, D.22648);
            i = (int) D.22649;
          }
          <D.19393>:
          if (i != 0) goto <D.19392>; else goto <D.19394>;
          <D.19394>:
        }
        <D.22624>:
        D.22597 = image->name;
        monoeg_g_log (0B, 16, "TypeRef ResolutionScope not yet handled (%d) for %s.%s in image %s", idx, nspace, name, D.22597);
        D.22599 = 0B;
        return D.22599;
      }
      <D.19395>:
      goto <D.19396>;
      <D.22650>:
      <D.19396>:
      D.22651 = image->tables[35].rows;
      D.22652 = (unsigned int) D.22651;
      if (D.22652 < idx) goto <D.22653>; else goto <D.22654>;
      <D.22653>:
      D.22597 = image->name;
      D.22655 = monoeg_g_strdup_printf ("Image %s with invalid assemblyref token %08x.", D.22597, idx);
      mono_loader_set_error_bad_image (D.22655);
      D.22599 = 0B;
      return D.22599;
      <D.22654>:
      D.22658 = image->references;
      if (D.22658 == 0B) goto <D.22656>; else goto <D.22659>;
      <D.22659>:
      D.22658 = image->references;
      D.22660 = idx + 4294967295;
      D.22661 = (long unsigned int) D.22660;
      D.22662 = D.22661 * 8;
      D.22663 = D.22658 + D.22662;
      D.22664 = *D.22663;
      if (D.22664 == 0B) goto <D.22656>; else goto <D.22657>;
      <D.22656>:
      D.22660 = idx + 4294967295;
      D.22665 = (int) D.22660;
      mono_assembly_load_reference (image, D.22665);
      <D.22657>:
      D.22658 = image->references;
      D.22660 = idx + 4294967295;
      D.22661 = (long unsigned int) D.22660;
      D.22662 = D.22661 * 8;
      D.22663 = D.22658 + D.22662;
      D.22664 = *D.22663;
      D.22666 = D.22664 == 0B;
      D.22667 = (long int) D.22666;
      D.22668 = __builtin_expect (D.22667, 0);
      if (D.22668 != 0) goto <D.22669>; else goto <D.22670>;
      <D.22669>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 248, "image->references [idx - 1]");
      <D.22670>:
      D.22658 = image->references;
      D.22660 = idx + 4294967295;
      D.22661 = (long unsigned int) D.22660;
      D.22662 = D.22661 * 8;
      D.22663 = D.22658 + D.22662;
      D.22664 = *D.22663;
      if (D.22664 == -1B) goto <D.22671>; else goto <D.22672>;
      <D.22671>:
      {
        struct MonoAssemblyName aname;
        char * human_name;

        try
          {
            D.22660 = idx + 4294967295;
            D.22665 = (int) D.22660;
            mono_assembly_get_assemblyref (image, D.22665, &aname);
            human_name = mono_stringify_assembly_name (&aname);
            D.22615 = image->assembly;
            if (D.22615 != 0B) goto <D.22674>; else goto <D.22675>;
            <D.22674>:
            D.22615 = image->assembly;
            iftmp.2 = D.22615->ref_only;
            goto <D.22676>;
            <D.22675>:
            iftmp.2 = 0;
            <D.22676>:
            mono_loader_set_error_assembly_load (human_name, iftmp.2);
            monoeg_g_free (human_name);
            D.22599 = 0B;
            return D.22599;
          }
        finally
          {
            aname = {CLOBBER};
          }
      }
      <D.22672>:
      D.22658 = image->references;
      D.22660 = idx + 4294967295;
      D.22661 = (long unsigned int) D.22660;
      D.22662 = D.22661 * 8;
      D.22663 = D.22658 + D.22662;
      D.22664 = *D.22663;
      D.22677 = D.22664->image;
      D.22599 = mono_class_from_name (D.22677, nspace, name);
      return D.22599;
    }
  finally
    {
      error = {CLOBBER};
      cols = {CLOBBER};
    }
}


mono_class_create_from_typedef (struct MonoImage * image, guint32 type_token, struct MonoError * error)
{
  unsigned int D.22683;
  <unnamed-unsigned:24> D.22685;
  unsigned int D.22686;
  struct MonoLoaderError * D.22687;
  _Bool D.22688;
  long int D.22689;
  long int D.22690;
  struct MonoClass * D.22693;
  struct MonoInternalHashTable * D.22694;
  long unsigned int D.22695;
  void * D.22696;
  struct MonoLoaderError * D.22699;
  _Bool D.22700;
  long int D.22701;
  long int D.22702;
  unsigned int D.22705;
  int D.22706;
  unsigned int D.22707;
  unsigned int D.22708;
  unsigned int D.22709;
  unsigned int classes_size.3;
  unsigned int classes_size.4;
  unsigned int D.22712;
  struct MonoGenericContainer * D.22713;
  struct MonoGenericContainer * D.22714;
  unsigned int D.22719;
  unsigned int D.22722;
  gchar * D.22727;
  struct MonoGenericClass * D.22732;
  struct MonoClass * D.22735;
  struct MonoClass * D.22742;
  int D.22743;
  const char * D.22746;
  gchar * D.22747;
  struct MonoLoaderError * D.22748;
  _Bool D.22749;
  long int D.22750;
  long int D.22751;
  unsigned int D.22754;
  unsigned int D.22755;
  struct MonoClass * D.22758;
  long unsigned int D.22759;
  long unsigned int D.22760;
  int D.22763;
  gchar * D.22766;
  struct MonoClass * * interfaces.5;
  unsigned int icount.6;
  short unsigned int D.22769;
  unsigned int D.22770;
  unsigned int D.22771;
  unsigned int D.22772;
  unsigned int D.22773;
  int tidx.7;
  unsigned int D.22777;
  unsigned int D.22778;
  <unnamed-unsigned:24> D.22780;
  <unnamed-unsigned:24> D.22781;
  unsigned int D.22785;
  unsigned int D.22787;
  unsigned int D.22788;
  unsigned int D.22789;
  unsigned int D.22792;
  unsigned int D.22793;
  int D.22795;
  int D.21218;
  int iftmp.8;
  int D.21217;
  const char[7] * D.22801;
  unsigned char D.22802;
  int D.22803;
  unsigned char D.22804;
  int D.22805;
  const unsigned char * D.22810;
  unsigned char D.22811;
  int D.22812;
  const unsigned char * D.22813;
  unsigned char D.22814;
  int D.22815;
  const unsigned char * D.22820;
  unsigned char D.22821;
  int D.22822;
  const unsigned char * D.22823;
  unsigned char D.22824;
  int D.22825;
  const unsigned char * D.22830;
  unsigned char D.22831;
  int D.22832;
  const unsigned char * D.22833;
  unsigned char D.22834;
  int D.22835;
  int D.21227;
  int iftmp.9;
  int D.21226;
  const char[6] * D.22842;
  unsigned char D.22843;
  int D.22844;
  unsigned char D.22845;
  int D.22846;
  const unsigned char * D.22851;
  unsigned char D.22852;
  int D.22853;
  const unsigned char * D.22854;
  unsigned char D.22855;
  int D.22856;
  const unsigned char * D.22861;
  unsigned char D.22862;
  int D.22863;
  const unsigned char * D.22864;
  unsigned char D.22865;
  int D.22866;
  const unsigned char * D.22871;
  unsigned char D.22872;
  int D.22873;
  const unsigned char * D.22874;
  unsigned char D.22875;
  int D.22876;
  int D.22880;
  unsigned int D.22881;
  unsigned int D.22882;
  int D.22883;
  unsigned int D.22884;
  _Bool D.22885;
  long int D.22886;
  long int D.22887;
  struct MonoClass * D.22894;
  struct MonoLoaderError * D.22895;
  _Bool D.22896;
  long int D.22897;
  long int D.22898;
  struct MonoClass * D.22901;
  int D.22904;
  gchar * D.22907;
  struct MonoLoaderError * D.22908;
  _Bool D.22909;
  long int D.22910;
  long int D.22911;
  struct MonoImage * D.22914;
  const char * D.22915;
  int D.21237;
  int iftmp.10;
  int D.21236;
  const char[10] * D.22921;
  unsigned char D.22922;
  int D.22923;
  unsigned char D.22924;
  int D.22925;
  const unsigned char * D.22930;
  unsigned char D.22931;
  int D.22932;
  const unsigned char * D.22933;
  unsigned char D.22934;
  int D.22935;
  const unsigned char * D.22940;
  unsigned char D.22941;
  int D.22942;
  const unsigned char * D.22943;
  unsigned char D.22944;
  int D.22945;
  const unsigned char * D.22950;
  unsigned char D.22951;
  int D.22952;
  const unsigned char * D.22953;
  unsigned char D.22954;
  int D.22955;
  int D.21246;
  int iftmp.11;
  int D.21245;
  unsigned char D.22962;
  int D.22963;
  const unsigned char * D.22968;
  unsigned char D.22969;
  int D.22970;
  const unsigned char * D.22975;
  unsigned char D.22976;
  int D.22977;
  const unsigned char * D.22982;
  unsigned char D.22983;
  int D.22984;
  int D.22988;
  int iftmp.12;
  int D.21264;
  int iftmp.13;
  int D.21263;
  const char[3] * D.22998;
  unsigned char D.22999;
  int D.23000;
  unsigned char D.23001;
  int D.23002;
  const unsigned char * D.23007;
  unsigned char D.23008;
  int D.23009;
  const unsigned char * D.23010;
  unsigned char D.23011;
  int D.23012;
  const unsigned char * D.23017;
  unsigned char D.23018;
  int D.23019;
  const unsigned char * D.23020;
  unsigned char D.23021;
  int D.23022;
  const unsigned char * D.23027;
  unsigned char D.23028;
  int D.23029;
  const unsigned char * D.23030;
  unsigned char D.23031;
  int D.23032;
  const char * D.23034;
  int D.21273;
  int iftmp.14;
  int D.21272;
  const char[4] * D.23039;
  unsigned char D.23040;
  int D.23041;
  unsigned char D.23042;
  int D.23043;
  const unsigned char * D.23048;
  unsigned char D.23049;
  int D.23050;
  const unsigned char * D.23051;
  unsigned char D.23052;
  int D.23053;
  const unsigned char * D.23058;
  unsigned char D.23059;
  int D.23060;
  const unsigned char * D.23061;
  unsigned char D.23062;
  int D.23063;
  const unsigned char * D.23068;
  unsigned char D.23069;
  int D.23070;
  const unsigned char * D.23071;
  unsigned char D.23072;
  int D.23073;
  int D.21282;
  int iftmp.15;
  int D.21281;
  const char[3] * D.23079;
  unsigned char D.23080;
  int D.23081;
  unsigned char D.23082;
  int D.23083;
  const unsigned char * D.23088;
  unsigned char D.23089;
  int D.23090;
  const unsigned char * D.23091;
  unsigned char D.23092;
  int D.23093;
  const unsigned char * D.23098;
  unsigned char D.23099;
  int D.23100;
  const unsigned char * D.23101;
  unsigned char D.23102;
  int D.23103;
  const unsigned char * D.23108;
  unsigned char D.23109;
  int D.23110;
  const unsigned char * D.23111;
  unsigned char D.23112;
  int D.23113;
  int D.21291;
  int iftmp.16;
  int D.21290;
  const char[3] * D.23119;
  unsigned char D.23120;
  int D.23121;
  unsigned char D.23122;
  int D.23123;
  const unsigned char * D.23128;
  unsigned char D.23129;
  int D.23130;
  const unsigned char * D.23131;
  unsigned char D.23132;
  int D.23133;
  const unsigned char * D.23138;
  unsigned char D.23139;
  int D.23140;
  const unsigned char * D.23141;
  unsigned char D.23142;
  int D.23143;
  const unsigned char * D.23148;
  unsigned char D.23149;
  int D.23150;
  const unsigned char * D.23151;
  unsigned char D.23152;
  int D.23153;
  int D.21300;
  int iftmp.17;
  int D.21299;
  const char[4] * D.23159;
  unsigned char D.23160;
  int D.23161;
  unsigned char D.23162;
  int D.23163;
  const unsigned char * D.23168;
  unsigned char D.23169;
  int D.23170;
  const unsigned char * D.23171;
  unsigned char D.23172;
  int D.23173;
  const unsigned char * D.23178;
  unsigned char D.23179;
  int D.23180;
  const unsigned char * D.23181;
  unsigned char D.23182;
  int D.23183;
  const unsigned char * D.23188;
  unsigned char D.23189;
  int D.23190;
  const unsigned char * D.23191;
  unsigned char D.23192;
  int D.23193;
  int D.21309;
  int iftmp.18;
  int D.21308;
  const char[3] * D.23199;
  unsigned char D.23200;
  int D.23201;
  unsigned char D.23202;
  int D.23203;
  const unsigned char * D.23208;
  unsigned char D.23209;
  int D.23210;
  const unsigned char * D.23211;
  unsigned char D.23212;
  int D.23213;
  const unsigned char * D.23218;
  unsigned char D.23219;
  int D.23220;
  const unsigned char * D.23221;
  unsigned char D.23222;
  int D.23223;
  const unsigned char * D.23228;
  unsigned char D.23229;
  int D.23230;
  const unsigned char * D.23231;
  unsigned char D.23232;
  int D.23233;
  int D.21318;
  int iftmp.19;
  int D.21317;
  const char[3] * D.23239;
  unsigned char D.23240;
  int D.23241;
  unsigned char D.23242;
  int D.23243;
  const unsigned char * D.23248;
  unsigned char D.23249;
  int D.23250;
  const unsigned char * D.23251;
  unsigned char D.23252;
  int D.23253;
  const unsigned char * D.23258;
  unsigned char D.23259;
  int D.23260;
  const unsigned char * D.23261;
  unsigned char D.23262;
  int D.23263;
  const unsigned char * D.23268;
  unsigned char D.23269;
  int D.23270;
  const unsigned char * D.23271;
  unsigned char D.23272;
  int D.23273;
  int D.21327;
  int iftmp.20;
  int D.21326;
  const char[4] * D.23279;
  unsigned char D.23280;
  int D.23281;
  unsigned char D.23282;
  int D.23283;
  const unsigned char * D.23288;
  unsigned char D.23289;
  int D.23290;
  const unsigned char * D.23291;
  unsigned char D.23292;
  int D.23293;
  const unsigned char * D.23298;
  unsigned char D.23299;
  int D.23300;
  const unsigned char * D.23301;
  unsigned char D.23302;
  int D.23303;
  const unsigned char * D.23308;
  unsigned char D.23309;
  int D.23310;
  const unsigned char * D.23311;
  unsigned char D.23312;
  int D.23313;
  int D.21336;
  int iftmp.21;
  int D.21335;
  const char[4] * D.23319;
  unsigned char D.23320;
  int D.23321;
  unsigned char D.23322;
  int D.23323;
  const unsigned char * D.23328;
  unsigned char D.23329;
  int D.23330;
  const unsigned char * D.23331;
  unsigned char D.23332;
  int D.23333;
  const unsigned char * D.23338;
  unsigned char D.23339;
  int D.23340;
  const unsigned char * D.23341;
  unsigned char D.23342;
  int D.23343;
  const unsigned char * D.23348;
  unsigned char D.23349;
  int D.23350;
  const unsigned char * D.23351;
  unsigned char D.23352;
  int D.23353;
  int D.21345;
  int iftmp.22;
  int D.21344;
  const char[5] * D.23359;
  unsigned char D.23360;
  int D.23361;
  unsigned char D.23362;
  int D.23363;
  const unsigned char * D.23368;
  unsigned char D.23369;
  int D.23370;
  const unsigned char * D.23371;
  unsigned char D.23372;
  int D.23373;
  const unsigned char * D.23378;
  unsigned char D.23379;
  int D.23380;
  const unsigned char * D.23381;
  unsigned char D.23382;
  int D.23383;
  const unsigned char * D.23388;
  unsigned char D.23389;
  int D.23390;
  const unsigned char * D.23391;
  unsigned char D.23392;
  int D.23393;
  unsigned char D.23395;
  <unnamed-unsigned:1> D.23396;
  struct MonoLoaderError * D.23397;
  _Bool D.23398;
  long int D.23399;
  long int D.23400;
  struct MonoLoaderError * D.23403;
  _Bool D.23404;
  long int D.23405;
  long int D.23406;
  struct MonoTableInfo * tt;
  struct MonoClass * class;
  struct MonoClass * parent;
  guint32 cols[6];
  guint32 cols_next[6];
  guint tidx;
  struct MonoGenericContext * context;
  const char * name;
  const char * nspace;
  guint icount;
  struct MonoClass * * interfaces;
  guint32 field_last;
  guint32 method_last;
  guint32 nesting_tokeen;
  void parent_failure = <<< error >>>;

  try
    {
      tt = &image->tables[2];
      parent = 0B;
      tidx = type_token & 16777215;
      context = 0B;
      icount = 0;
      mono_error_init (error);
      D.22683 = type_token >> 24;
      if (D.22683 != 2) goto <D.22681>; else goto <D.22684>;
      <D.22684>:
      D.22685 = tt->rows;
      D.22686 = (unsigned int) D.22685;
      if (D.22686 < tidx) goto <D.22681>; else goto <D.22682>;
      <D.22681>:
      mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token);
      D.22687 = mono_loader_get_last_error ();
      D.22688 = D.22687 != 0B;
      D.22689 = (long int) D.22688;
      D.22690 = __builtin_expect (D.22689, 0);
      if (D.22690 != 0) goto <D.22691>; else goto <D.22692>;
      <D.22691>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5589, "!mono_loader_get_last_error ()");
      <D.22692>:
      D.22693 = 0B;
      return D.22693;
      <D.22682>:
      mono_loader_lock ();
      D.22694 = &image->class_cache;
      D.22695 = (long unsigned int) type_token;
      D.22696 = (void *) D.22695;
      class = mono_internal_hash_table_lookup (D.22694, D.22696);
      if (class != 0B) goto <D.22697>; else goto <D.22698>;
      <D.22697>:
      mono_loader_unlock ();
      D.22699 = mono_loader_get_last_error ();
      D.22700 = D.22699 != 0B;
      D.22701 = (long int) D.22700;
      D.22702 = __builtin_expect (D.22701, 0);
      if (D.22702 != 0) goto <D.22703>; else goto <D.22704>;
      <D.22703>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5597, "!mono_loader_get_last_error ()");
      <D.22704>:
      D.22693 = class;
      return D.22693;
      <D.22698>:
      D.22705 = tidx + 4294967295;
      D.22706 = (int) D.22705;
      mono_metadata_decode_row (tt, D.22706, &cols, 6);
      D.22707 = cols[1];
      name = mono_metadata_string_heap (image, D.22707);
      D.22708 = cols[2];
      nspace = mono_metadata_string_heap (image, D.22708);
      class = mono_image_alloc0 (image, 272);
      class->name = name;
      class->name_space = nspace;
      mono_profiler_class_event (class, 0);
      class->image = image;
      class->type_token = type_token;
      D.22709 = cols[0];
      class->flags = D.22709;
      D.22694 = &image->class_cache;
      D.22695 = (long unsigned int) type_token;
      D.22696 = (void *) D.22695;
      mono_internal_hash_table_insert (D.22694, D.22696, class);
      classes_size.3 = classes_size;
      classes_size.4 = classes_size.3 + 272;
      classes_size = classes_size.4;
      D.22712 = class->type_token;
      D.22713 = mono_metadata_load_generic_params (image, D.22712, 0B);
      class->generic_container = D.22713;
      D.22714 = class->generic_container;
      if (D.22714 != 0B) goto <D.22715>; else goto <D.22716>;
      <D.22715>:
      class->is_generic = 1;
      D.22714 = class->generic_container;
      D.22714->owner.klass = class;
      D.22714 = class->generic_container;
      context = &D.22714->context;
      <D.22716>:
      D.22714 = class->generic_container;
      if (D.22714 != 0B) goto <D.22717>; else goto <D.22718>;
      <D.22717>:
      enable_gclass_recording ();
      <D.22718>:
      D.22719 = cols[3];
      if (D.22719 != 0) goto <D.22720>; else goto <D.22721>;
      <D.22720>:
      {
        struct MonoClass * tmp;
        guint32 parent_token;

        D.22719 = cols[3];
        parent_token = mono_metadata_token_from_dor (D.22719);
        D.22722 = parent_token >> 24;
        if (D.22722 == 27) goto <D.22723>; else goto <D.22724>;
        <D.22723>:
        class->this_arg.byref = 1;
        class->this_arg.data.klass = class;
        class->this_arg.type = 18;
        class->byval_arg.data.klass = class;
        class->byval_arg.type = 18;
        <D.22724>:
        parent = mono_class_get_full (image, parent_token, context);
        if (parent == 0B) goto <D.22725>; else goto <D.22726>;
        <D.22725>:
        D.22727 = monoeg_g_strdup_printf ("Could not load parent, token is %x", parent_token);
        mono_class_set_failure_from_loader_error (class, error, D.22727);
        goto parent_failure;
        <D.22726>:
        tmp = parent;
        goto <D.21208>;
        <D.21207>:
        if (tmp == class) goto <D.22728>; else goto <D.22729>;
        <D.22728>:
        mono_class_set_failure_and_error (class, error, "Cycle found while resolving parent");
        goto parent_failure;
        <D.22729>:
        D.22714 = class->generic_container;
        if (D.22714 != 0B) goto <D.22730>; else goto <D.22731>;
        <D.22730>:
        D.22732 = tmp->generic_class;
        if (D.22732 != 0B) goto <D.22733>; else goto <D.22734>;
        <D.22733>:
        D.22732 = tmp->generic_class;
        D.22735 = D.22732->container_class;
        if (D.22735 == class) goto <D.22736>; else goto <D.22737>;
        <D.22736>:
        mono_class_set_failure_and_error (class, error, "Parent extends generic instance of this type");
        goto parent_failure;
        <D.22737>:
        <D.22734>:
        <D.22731>:
        tmp = tmp->parent;
        <D.21208>:
        if (tmp != 0B) goto <D.21207>; else goto <D.21209>;
        <D.21209>:
      }
      <D.22721>:
      mono_class_setup_parent (class, parent);
      mono_class_setup_mono_type (class);
      D.22714 = class->generic_container;
      if (D.22714 != 0B) goto <D.22738>; else goto <D.22739>;
      <D.22738>:
      disable_gclass_recording (fix_gclass_incomplete_instantiation, class);
      <D.22739>:
      nesting_tokeen = mono_metadata_nested_in_typedef (image, type_token);
      if (nesting_tokeen != 0) goto <D.22740>; else goto <D.22741>;
      <D.22740>:
      D.22742 = mono_class_create_from_typedef (image, nesting_tokeen, error);
      class->nested_in = D.22742;
      D.22743 = mono_error_ok (error);
      if (D.22743 == 0) goto <D.22744>; else goto <D.22745>;
      <D.22744>:
      D.22746 = mono_error_get_message (error);
      D.22747 = monoeg_strdup (D.22746);
      mono_class_set_failure (class, 7, D.22747);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22748 = mono_loader_get_last_error ();
      D.22749 = D.22748 != 0B;
      D.22750 = (long int) D.22749;
      D.22751 = __builtin_expect (D.22750, 0);
      if (D.22751 != 0) goto <D.22752>; else goto <D.22753>;
      <D.22752>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5684, "!mono_loader_get_last_error ()");
      <D.22753>:
      D.22693 = 0B;
      return D.22693;
      <D.22745>:
      <D.22741>:
      D.22754 = class->flags;
      D.22755 = D.22754 & 196608;
      if (D.22755 == 65536) goto <D.22756>; else goto <D.22757>;
      <D.22756>:
      class->unicode = 1;
      <D.22757>:
      class->element_class = class;
      D.22758 = class->element_class;
      class->cast_class = D.22758;
      D.22759 = BIT_FIELD_REF <*class, 64, 256>;
      D.22760 = D.22759 & 16;
      if (D.22760 == 0) goto <D.22761>; else goto <D.22762>;
      <D.22761>:
      D.22763 = mono_metadata_interfaces_from_typedef_full (image, type_token, &interfaces, &icount, 0, context);
      if (D.22763 == 0) goto <D.22764>; else goto <D.22765>;
      <D.22764>:
      D.22766 = monoeg_strdup ("Could not load interfaces");
      mono_class_set_failure_from_loader_error (class, error, D.22766);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22693 = 0B;
      return D.22693;
      <D.22765>:
      interfaces.5 = interfaces;
      class->interfaces = interfaces.5;
      icount.6 = icount;
      D.22769 = (short unsigned int) icount.6;
      class->interface_count = D.22769;
      class->interfaces_inited = 1;
      <D.22762>:
      D.22770 = cols[4];
      D.22771 = D.22770 + 4294967295;
      class->field.first = D.22771;
      D.22772 = cols[5];
      D.22773 = D.22772 + 4294967295;
      class->method.first = D.22773;
      D.22685 = tt->rows;
      D.22686 = (unsigned int) D.22685;
      if (D.22686 > tidx) goto <D.22774>; else goto <D.22775>;
      <D.22774>:
      tidx.7 = (int) tidx;
      mono_metadata_decode_row (tt, tidx.7, &cols_next, 6);
      D.22777 = cols_next[4];
      field_last = D.22777 + 4294967295;
      D.22778 = cols_next[5];
      method_last = D.22778 + 4294967295;
      goto <D.22779>;
      <D.22775>:
      D.22780 = image->tables[4].rows;
      field_last = (guint32) D.22780;
      D.22781 = image->tables[6].rows;
      method_last = (guint32) D.22781;
      <D.22779>:
      D.22770 = cols[4];
      if (D.22770 != 0) goto <D.22784>; else goto <D.22782>;
      <D.22784>:
      D.22770 = cols[4];
      D.22780 = image->tables[4].rows;
      D.22785 = (unsigned int) D.22780;
      if (D.22770 <= D.22785) goto <D.22786>; else goto <D.22782>;
      <D.22786>:
      D.22787 = class->field.first;
      D.22788 = field_last - D.22787;
      class->field.count = D.22788;
      goto <D.22783>;
      <D.22782>:
      class->field.count = 0;
      <D.22783>:
      D.22772 = cols[5];
      D.22781 = image->tables[6].rows;
      D.22789 = (unsigned int) D.22781;
      if (D.22772 <= D.22789) goto <D.22790>; else goto <D.22791>;
      <D.22790>:
      D.22792 = class->method.first;
      D.22793 = method_last - D.22792;
      class->method.count = D.22793;
      goto <D.22794>;
      <D.22791>:
      class->method.count = 0;
      <D.22794>:
      D.22795 = mono_is_corlib_image (image);
      if (D.22795 != 0) goto <D.22796>; else goto <D.22797>;
      <D.22796>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = nspace;
          D.22801 = "System";
          D.22802 = MEM[(const unsigned char *)D.22801];
          D.22803 = (int) D.22802;
          D.22804 = *__s2;
          D.22805 = (int) D.22804;
          __result = D.22803 - D.22805;
          {
            if (__s2_len != 0) goto <D.22806>; else goto <D.22807>;
            <D.22806>:
            if (__result == 0) goto <D.22808>; else goto <D.22809>;
            <D.22808>:
            D.22810 = &MEM[(void *)"System" + 1B];
            D.22811 = *D.22810;
            D.22812 = (int) D.22811;
            D.22813 = __s2 + 1;
            D.22814 = *D.22813;
            D.22815 = (int) D.22814;
            __result = D.22812 - D.22815;
            if (__s2_len > 1) goto <D.22816>; else goto <D.22817>;
            <D.22816>:
            if (__result == 0) goto <D.22818>; else goto <D.22819>;
            <D.22818>:
            D.22820 = &MEM[(void *)"System" + 2B];
            D.22821 = *D.22820;
            D.22822 = (int) D.22821;
            D.22823 = __s2 + 2;
            D.22824 = *D.22823;
            D.22825 = (int) D.22824;
            __result = D.22822 - D.22825;
            if (__s2_len > 2) goto <D.22826>; else goto <D.22827>;
            <D.22826>:
            if (__result == 0) goto <D.22828>; else goto <D.22829>;
            <D.22828>:
            D.22830 = &MEM[(void *)"System" + 3B];
            D.22831 = *D.22830;
            D.22832 = (int) D.22831;
            D.22833 = __s2 + 3;
            D.22834 = *D.22833;
            D.22835 = (int) D.22834;
            __result = D.22832 - D.22835;
            <D.22829>:
            <D.22827>:
            <D.22819>:
            <D.22817>:
            <D.22809>:
            <D.22807>:
          }
          D.21217 = __result;
        }
        iftmp.8 = -D.21217;
        goto <D.22836>;
        <D.22800>:
        iftmp.8 = __builtin_strcmp (nspace, "System");
        <D.22836>:
        D.21218 = iftmp.8;
      }
      if (D.21218 == 0) goto <D.22837>; else goto <D.22838>;
      <D.22837>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name;
          D.22842 = "Array";
          D.22843 = MEM[(const unsigned char *)D.22842];
          D.22844 = (int) D.22843;
          D.22845 = *__s2;
          D.22846 = (int) D.22845;
          __result = D.22844 - D.22846;
          {
            if (__s2_len != 0) goto <D.22847>; else goto <D.22848>;
            <D.22847>:
            if (__result == 0) goto <D.22849>; else goto <D.22850>;
            <D.22849>:
            D.22851 = &MEM[(void *)"Array" + 1B];
            D.22852 = *D.22851;
            D.22853 = (int) D.22852;
            D.22854 = __s2 + 1;
            D.22855 = *D.22854;
            D.22856 = (int) D.22855;
            __result = D.22853 - D.22856;
            if (__s2_len > 1) goto <D.22857>; else goto <D.22858>;
            <D.22857>:
            if (__result == 0) goto <D.22859>; else goto <D.22860>;
            <D.22859>:
            D.22861 = &MEM[(void *)"Array" + 2B];
            D.22862 = *D.22861;
            D.22863 = (int) D.22862;
            D.22864 = __s2 + 2;
            D.22865 = *D.22864;
            D.22866 = (int) D.22865;
            __result = D.22863 - D.22866;
            if (__s2_len > 2) goto <D.22867>; else goto <D.22868>;
            <D.22867>:
            if (__result == 0) goto <D.22869>; else goto <D.22870>;
            <D.22869>:
            D.22871 = &MEM[(void *)"Array" + 3B];
            D.22872 = *D.22871;
            D.22873 = (int) D.22872;
            D.22874 = __s2 + 3;
            D.22875 = *D.22874;
            D.22876 = (int) D.22875;
            __result = D.22873 - D.22876;
            <D.22870>:
            <D.22868>:
            <D.22860>:
            <D.22858>:
            <D.22850>:
            <D.22848>:
          }
          D.21226 = __result;
        }
        iftmp.9 = -D.21226;
        goto <D.22877>;
        <D.22841>:
        iftmp.9 = __builtin_strcmp (name, "Array");
        <D.22877>:
        D.21227 = iftmp.9;
      }
      if (D.21227 == 0) goto <D.22878>; else goto <D.22879>;
      <D.22878>:
      D.22880 = class->instance_size;
      D.22881 = (unsigned int) D.22880;
      D.22882 = D.22881 + 16;
      D.22883 = (int) D.22882;
      class->instance_size = D.22883;
      D.22884 = class->field.count;
      D.22885 = D.22884 != 0;
      D.22886 = (long int) D.22885;
      D.22887 = __builtin_expect (D.22886, 0);
      if (D.22887 != 0) goto <D.22888>; else goto <D.22889>;
      <D.22888>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5744, "class->field.count == 0");
      <D.22889>:
      <D.22879>:
      <D.22838>:
      <D.22797>:
      D.22759 = BIT_FIELD_REF <*class, 64, 256>;
      D.22760 = D.22759 & 16;
      if (D.22760 != 0) goto <D.22890>; else goto <D.22891>;
      <D.22890>:
      {
        struct MonoType * enum_basetype;

        enum_basetype = mono_class_find_enum_basetype (class);
        if (enum_basetype == 0B) goto <D.22892>; else goto <D.22893>;
        <D.22892>:
        D.22894 = mono_defaults.int32_class;
        class->element_class = D.22894;
        D.22758 = class->element_class;
        class->cast_class = D.22758;
        mono_class_set_failure_and_error (class, error, "Could not enum basetype");
        mono_loader_unlock ();
        mono_profiler_class_loaded (class, 1);
        D.22895 = mono_loader_get_last_error ();
        D.22896 = D.22895 != 0B;
        D.22897 = (long int) D.22896;
        D.22898 = __builtin_expect (D.22897, 0);
        if (D.22898 != 0) goto <D.22899>; else goto <D.22900>;
        <D.22899>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5755, "!mono_loader_get_last_error ()");
        <D.22900>:
        D.22693 = 0B;
        return D.22693;
        <D.22893>:
        D.22901 = mono_class_from_mono_type (enum_basetype);
        class->element_class = D.22901;
        D.22758 = class->element_class;
        class->cast_class = D.22758;
      }
      <D.22891>:
      D.22714 = class->generic_container;
      if (D.22714 != 0B) goto <D.22902>; else goto <D.22903>;
      <D.22902>:
      D.22714 = class->generic_container;
      D.22904 = mono_metadata_load_generic_param_constraints_full (image, type_token, D.22714);
      if (D.22904 == 0) goto <D.22905>; else goto <D.22906>;
      <D.22905>:
      D.22907 = monoeg_strdup ("Could not load generic parameter constraints");
      mono_class_set_failure_from_loader_error (class, error, D.22907);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22908 = mono_loader_get_last_error ();
      D.22909 = D.22908 != 0B;
      D.22910 = (long int) D.22909;
      D.22911 = __builtin_expect (D.22910, 0);
      if (D.22911 != 0) goto <D.22912>; else goto <D.22913>;
      <D.22912>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5770, "!mono_loader_get_last_error ()");
      <D.22913>:
      D.22693 = 0B;
      return D.22693;
      <D.22906>:
      <D.22903>:
      D.22914 = class->image;
      D.22915 = D.22914->assembly_name;
      if (D.22915 != 0B) goto <D.22916>; else goto <D.22917>;
      <D.22916>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.22914 = class->image;
          __s2 = D.22914->assembly_name;
          D.22921 = "Mono.Simd";
          D.22922 = MEM[(const unsigned char *)D.22921];
          D.22923 = (int) D.22922;
          D.22924 = *__s2;
          D.22925 = (int) D.22924;
          __result = D.22923 - D.22925;
          {
            if (__s2_len != 0) goto <D.22926>; else goto <D.22927>;
            <D.22926>:
            if (__result == 0) goto <D.22928>; else goto <D.22929>;
            <D.22928>:
            D.22930 = &MEM[(void *)"Mono.Simd" + 1B];
            D.22931 = *D.22930;
            D.22932 = (int) D.22931;
            D.22933 = __s2 + 1;
            D.22934 = *D.22933;
            D.22935 = (int) D.22934;
            __result = D.22932 - D.22935;
            if (__s2_len > 1) goto <D.22936>; else goto <D.22937>;
            <D.22936>:
            if (__result == 0) goto <D.22938>; else goto <D.22939>;
            <D.22938>:
            D.22940 = &MEM[(void *)"Mono.Simd" + 2B];
            D.22941 = *D.22940;
            D.22942 = (int) D.22941;
            D.22943 = __s2 + 2;
            D.22944 = *D.22943;
            D.22945 = (int) D.22944;
            __result = D.22942 - D.22945;
            if (__s2_len > 2) goto <D.22946>; else goto <D.22947>;
            <D.22946>:
            if (__result == 0) goto <D.22948>; else goto <D.22949>;
            <D.22948>:
            D.22950 = &MEM[(void *)"Mono.Simd" + 3B];
            D.22951 = *D.22950;
            D.22952 = (int) D.22951;
            D.22953 = __s2 + 3;
            D.22954 = *D.22953;
            D.22955 = (int) D.22954;
            __result = D.22952 - D.22955;
            <D.22949>:
            <D.22947>:
            <D.22939>:
            <D.22937>:
            <D.22929>:
            <D.22927>:
          }
          D.21236 = __result;
        }
        iftmp.10 = -D.21236;
        goto <D.22956>;
        <D.22920>:
        D.22914 = class->image;
        D.22915 = D.22914->assembly_name;
        iftmp.10 = __builtin_strcmp (D.22915, "Mono.Simd");
        <D.22956>:
        D.21237 = iftmp.10;
      }
      if (D.21237 == 0) goto <D.22957>; else goto <D.22958>;
      <D.22957>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = nspace;
          D.22921 = "Mono.Simd";
          D.22922 = MEM[(const unsigned char *)D.22921];
          D.22923 = (int) D.22922;
          D.22962 = *__s2;
          D.22963 = (int) D.22962;
          __result = D.22923 - D.22963;
          {
            if (__s2_len != 0) goto <D.22964>; else goto <D.22965>;
            <D.22964>:
            if (__result == 0) goto <D.22966>; else goto <D.22967>;
            <D.22966>:
            D.22930 = &MEM[(void *)"Mono.Simd" + 1B];
            D.22931 = *D.22930;
            D.22932 = (int) D.22931;
            D.22968 = __s2 + 1;
            D.22969 = *D.22968;
            D.22970 = (int) D.22969;
            __result = D.22932 - D.22970;
            if (__s2_len > 1) goto <D.22971>; else goto <D.22972>;
            <D.22971>:
            if (__result == 0) goto <D.22973>; else goto <D.22974>;
            <D.22973>:
            D.22940 = &MEM[(void *)"Mono.Simd" + 2B];
            D.22941 = *D.22940;
            D.22942 = (int) D.22941;
            D.22975 = __s2 + 2;
            D.22976 = *D.22975;
            D.22977 = (int) D.22976;
            __result = D.22942 - D.22977;
            if (__s2_len > 2) goto <D.22978>; else goto <D.22979>;
            <D.22978>:
            if (__result == 0) goto <D.22980>; else goto <D.22981>;
            <D.22980>:
            D.22950 = &MEM[(void *)"Mono.Simd" + 3B];
            D.22951 = *D.22950;
            D.22952 = (int) D.22951;
            D.22982 = __s2 + 3;
            D.22983 = *D.22982;
            D.22984 = (int) D.22983;
            __result = D.22952 - D.22984;
            <D.22981>:
            <D.22979>:
            <D.22974>:
            <D.22972>:
            <D.22967>:
            <D.22965>:
          }
          D.21245 = __result;
        }
        iftmp.11 = -D.21245;
        goto <D.22985>;
        <D.22961>:
        iftmp.11 = __builtin_strcmp (nspace, "Mono.Simd");
        <D.22985>:
        D.21246 = iftmp.11;
      }
      if (D.21246 == 0) goto <D.22986>; else goto <D.22987>;
      <D.22986>:
      D.22988 = strncmp (name, "Vector", 6);
      if (D.22988 == 0) goto <D.22989>; else goto <D.22990>;
      <D.22989>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22998 = "2d";
          D.22999 = MEM[(const unsigned char *)D.22998];
          D.23000 = (int) D.22999;
          D.23001 = *__s2;
          D.23002 = (int) D.23001;
          __result = D.23000 - D.23002;
          {
            if (__s2_len != 0) goto <D.23003>; else goto <D.23004>;
            <D.23003>:
            if (__result == 0) goto <D.23005>; else goto <D.23006>;
            <D.23005>:
            D.23007 = &MEM[(void *)"2d" + 1B];
            D.23008 = *D.23007;
            D.23009 = (int) D.23008;
            D.23010 = __s2 + 1;
            D.23011 = *D.23010;
            D.23012 = (int) D.23011;
            __result = D.23009 - D.23012;
            if (__s2_len > 1) goto <D.23013>; else goto <D.23014>;
            <D.23013>:
            if (__result == 0) goto <D.23015>; else goto <D.23016>;
            <D.23015>:
            D.23017 = &MEM[(void *)"2d" + 2B];
            D.23018 = *D.23017;
            D.23019 = (int) D.23018;
            D.23020 = __s2 + 2;
            D.23021 = *D.23020;
            D.23022 = (int) D.23021;
            __result = D.23019 - D.23022;
            if (__s2_len > 2) goto <D.23023>; else goto <D.23024>;
            <D.23023>:
            if (__result == 0) goto <D.23025>; else goto <D.23026>;
            <D.23025>:
            D.23027 = &MEM[(void *)"2d" + 3B];
            D.23028 = *D.23027;
            D.23029 = (int) D.23028;
            D.23030 = __s2 + 3;
            D.23031 = *D.23030;
            D.23032 = (int) D.23031;
            __result = D.23029 - D.23032;
            <D.23026>:
            <D.23024>:
            <D.23016>:
            <D.23014>:
            <D.23006>:
            <D.23004>:
          }
          D.21263 = __result;
        }
        iftmp.13 = -D.21263;
        goto <D.23033>;
        <D.22997>:
        D.23034 = name + 6;
        iftmp.13 = __builtin_strcmp (D.23034, "2d");
        <D.23033>:
        D.21264 = iftmp.13;
      }
      if (D.21264 == 0) goto <D.22992>; else goto <D.23035>;
      <D.23035>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23039 = "2ul";
          D.23040 = MEM[(const unsigned char *)D.23039];
          D.23041 = (int) D.23040;
          D.23042 = *__s2;
          D.23043 = (int) D.23042;
          __result = D.23041 - D.23043;
          {
            if (__s2_len != 0) goto <D.23044>; else goto <D.23045>;
            <D.23044>:
            if (__result == 0) goto <D.23046>; else goto <D.23047>;
            <D.23046>:
            D.23048 = &MEM[(void *)"2ul" + 1B];
            D.23049 = *D.23048;
            D.23050 = (int) D.23049;
            D.23051 = __s2 + 1;
            D.23052 = *D.23051;
            D.23053 = (int) D.23052;
            __result = D.23050 - D.23053;
            if (__s2_len > 1) goto <D.23054>; else goto <D.23055>;
            <D.23054>:
            if (__result == 0) goto <D.23056>; else goto <D.23057>;
            <D.23056>:
            D.23058 = &MEM[(void *)"2ul" + 2B];
            D.23059 = *D.23058;
            D.23060 = (int) D.23059;
            D.23061 = __s2 + 2;
            D.23062 = *D.23061;
            D.23063 = (int) D.23062;
            __result = D.23060 - D.23063;
            if (__s2_len > 2) goto <D.23064>; else goto <D.23065>;
            <D.23064>:
            if (__result == 0) goto <D.23066>; else goto <D.23067>;
            <D.23066>:
            D.23068 = &MEM[(void *)"2ul" + 3B];
            D.23069 = *D.23068;
            D.23070 = (int) D.23069;
            D.23071 = __s2 + 3;
            D.23072 = *D.23071;
            D.23073 = (int) D.23072;
            __result = D.23070 - D.23073;
            <D.23067>:
            <D.23065>:
            <D.23057>:
            <D.23055>:
            <D.23047>:
            <D.23045>:
          }
          D.21272 = __result;
        }
        iftmp.14 = -D.21272;
        goto <D.23074>;
        <D.23038>:
        D.23034 = name + 6;
        iftmp.14 = __builtin_strcmp (D.23034, "2ul");
        <D.23074>:
        D.21273 = iftmp.14;
      }
      if (D.21273 == 0) goto <D.22992>; else goto <D.23075>;
      <D.23075>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23079 = "2l";
          D.23080 = MEM[(const unsigned char *)D.23079];
          D.23081 = (int) D.23080;
          D.23082 = *__s2;
          D.23083 = (int) D.23082;
          __result = D.23081 - D.23083;
          {
            if (__s2_len != 0) goto <D.23084>; else goto <D.23085>;
            <D.23084>:
            if (__result == 0) goto <D.23086>; else goto <D.23087>;
            <D.23086>:
            D.23088 = &MEM[(void *)"2l" + 1B];
            D.23089 = *D.23088;
            D.23090 = (int) D.23089;
            D.23091 = __s2 + 1;
            D.23092 = *D.23091;
            D.23093 = (int) D.23092;
            __result = D.23090 - D.23093;
            if (__s2_len > 1) goto <D.23094>; else goto <D.23095>;
            <D.23094>:
            if (__result == 0) goto <D.23096>; else goto <D.23097>;
            <D.23096>:
            D.23098 = &MEM[(void *)"2l" + 2B];
            D.23099 = *D.23098;
            D.23100 = (int) D.23099;
            D.23101 = __s2 + 2;
            D.23102 = *D.23101;
            D.23103 = (int) D.23102;
            __result = D.23100 - D.23103;
            if (__s2_len > 2) goto <D.23104>; else goto <D.23105>;
            <D.23104>:
            if (__result == 0) goto <D.23106>; else goto <D.23107>;
            <D.23106>:
            D.23108 = &MEM[(void *)"2l" + 3B];
            D.23109 = *D.23108;
            D.23110 = (int) D.23109;
            D.23111 = __s2 + 3;
            D.23112 = *D.23111;
            D.23113 = (int) D.23112;
            __result = D.23110 - D.23113;
            <D.23107>:
            <D.23105>:
            <D.23097>:
            <D.23095>:
            <D.23087>:
            <D.23085>:
          }
          D.21281 = __result;
        }
        iftmp.15 = -D.21281;
        goto <D.23114>;
        <D.23078>:
        D.23034 = name + 6;
        iftmp.15 = __builtin_strcmp (D.23034, "2l");
        <D.23114>:
        D.21282 = iftmp.15;
      }
      if (D.21282 == 0) goto <D.22992>; else goto <D.23115>;
      <D.23115>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23119 = "4f";
          D.23120 = MEM[(const unsigned char *)D.23119];
          D.23121 = (int) D.23120;
          D.23122 = *__s2;
          D.23123 = (int) D.23122;
          __result = D.23121 - D.23123;
          {
            if (__s2_len != 0) goto <D.23124>; else goto <D.23125>;
            <D.23124>:
            if (__result == 0) goto <D.23126>; else goto <D.23127>;
            <D.23126>:
            D.23128 = &MEM[(void *)"4f" + 1B];
            D.23129 = *D.23128;
            D.23130 = (int) D.23129;
            D.23131 = __s2 + 1;
            D.23132 = *D.23131;
            D.23133 = (int) D.23132;
            __result = D.23130 - D.23133;
            if (__s2_len > 1) goto <D.23134>; else goto <D.23135>;
            <D.23134>:
            if (__result == 0) goto <D.23136>; else goto <D.23137>;
            <D.23136>:
            D.23138 = &MEM[(void *)"4f" + 2B];
            D.23139 = *D.23138;
            D.23140 = (int) D.23139;
            D.23141 = __s2 + 2;
            D.23142 = *D.23141;
            D.23143 = (int) D.23142;
            __result = D.23140 - D.23143;
            if (__s2_len > 2) goto <D.23144>; else goto <D.23145>;
            <D.23144>:
            if (__result == 0) goto <D.23146>; else goto <D.23147>;
            <D.23146>:
            D.23148 = &MEM[(void *)"4f" + 3B];
            D.23149 = *D.23148;
            D.23150 = (int) D.23149;
            D.23151 = __s2 + 3;
            D.23152 = *D.23151;
            D.23153 = (int) D.23152;
            __result = D.23150 - D.23153;
            <D.23147>:
            <D.23145>:
            <D.23137>:
            <D.23135>:
            <D.23127>:
            <D.23125>:
          }
          D.21290 = __result;
        }
        iftmp.16 = -D.21290;
        goto <D.23154>;
        <D.23118>:
        D.23034 = name + 6;
        iftmp.16 = __builtin_strcmp (D.23034, "4f");
        <D.23154>:
        D.21291 = iftmp.16;
      }
      if (D.21291 == 0) goto <D.22992>; else goto <D.23155>;
      <D.23155>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23159 = "4ui";
          D.23160 = MEM[(const unsigned char *)D.23159];
          D.23161 = (int) D.23160;
          D.23162 = *__s2;
          D.23163 = (int) D.23162;
          __result = D.23161 - D.23163;
          {
            if (__s2_len != 0) goto <D.23164>; else goto <D.23165>;
            <D.23164>:
            if (__result == 0) goto <D.23166>; else goto <D.23167>;
            <D.23166>:
            D.23168 = &MEM[(void *)"4ui" + 1B];
            D.23169 = *D.23168;
            D.23170 = (int) D.23169;
            D.23171 = __s2 + 1;
            D.23172 = *D.23171;
            D.23173 = (int) D.23172;
            __result = D.23170 - D.23173;
            if (__s2_len > 1) goto <D.23174>; else goto <D.23175>;
            <D.23174>:
            if (__result == 0) goto <D.23176>; else goto <D.23177>;
            <D.23176>:
            D.23178 = &MEM[(void *)"4ui" + 2B];
            D.23179 = *D.23178;
            D.23180 = (int) D.23179;
            D.23181 = __s2 + 2;
            D.23182 = *D.23181;
            D.23183 = (int) D.23182;
            __result = D.23180 - D.23183;
            if (__s2_len > 2) goto <D.23184>; else goto <D.23185>;
            <D.23184>:
            if (__result == 0) goto <D.23186>; else goto <D.23187>;
            <D.23186>:
            D.23188 = &MEM[(void *)"4ui" + 3B];
            D.23189 = *D.23188;
            D.23190 = (int) D.23189;
            D.23191 = __s2 + 3;
            D.23192 = *D.23191;
            D.23193 = (int) D.23192;
            __result = D.23190 - D.23193;
            <D.23187>:
            <D.23185>:
            <D.23177>:
            <D.23175>:
            <D.23167>:
            <D.23165>:
          }
          D.21299 = __result;
        }
        iftmp.17 = -D.21299;
        goto <D.23194>;
        <D.23158>:
        D.23034 = name + 6;
        iftmp.17 = __builtin_strcmp (D.23034, "4ui");
        <D.23194>:
        D.21300 = iftmp.17;
      }
      if (D.21300 == 0) goto <D.22992>; else goto <D.23195>;
      <D.23195>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23199 = "4i";
          D.23200 = MEM[(const unsigned char *)D.23199];
          D.23201 = (int) D.23200;
          D.23202 = *__s2;
          D.23203 = (int) D.23202;
          __result = D.23201 - D.23203;
          {
            if (__s2_len != 0) goto <D.23204>; else goto <D.23205>;
            <D.23204>:
            if (__result == 0) goto <D.23206>; else goto <D.23207>;
            <D.23206>:
            D.23208 = &MEM[(void *)"4i" + 1B];
            D.23209 = *D.23208;
            D.23210 = (int) D.23209;
            D.23211 = __s2 + 1;
            D.23212 = *D.23211;
            D.23213 = (int) D.23212;
            __result = D.23210 - D.23213;
            if (__s2_len > 1) goto <D.23214>; else goto <D.23215>;
            <D.23214>:
            if (__result == 0) goto <D.23216>; else goto <D.23217>;
            <D.23216>:
            D.23218 = &MEM[(void *)"4i" + 2B];
            D.23219 = *D.23218;
            D.23220 = (int) D.23219;
            D.23221 = __s2 + 2;
            D.23222 = *D.23221;
            D.23223 = (int) D.23222;
            __result = D.23220 - D.23223;
            if (__s2_len > 2) goto <D.23224>; else goto <D.23225>;
            <D.23224>:
            if (__result == 0) goto <D.23226>; else goto <D.23227>;
            <D.23226>:
            D.23228 = &MEM[(void *)"4i" + 3B];
            D.23229 = *D.23228;
            D.23230 = (int) D.23229;
            D.23231 = __s2 + 3;
            D.23232 = *D.23231;
            D.23233 = (int) D.23232;
            __result = D.23230 - D.23233;
            <D.23227>:
            <D.23225>:
            <D.23217>:
            <D.23215>:
            <D.23207>:
            <D.23205>:
          }
          D.21308 = __result;
        }
        iftmp.18 = -D.21308;
        goto <D.23234>;
        <D.23198>:
        D.23034 = name + 6;
        iftmp.18 = __builtin_strcmp (D.23034, "4i");
        <D.23234>:
        D.21309 = iftmp.18;
      }
      if (D.21309 == 0) goto <D.22992>; else goto <D.23235>;
      <D.23235>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23239 = "8s";
          D.23240 = MEM[(const unsigned char *)D.23239];
          D.23241 = (int) D.23240;
          D.23242 = *__s2;
          D.23243 = (int) D.23242;
          __result = D.23241 - D.23243;
          {
            if (__s2_len != 0) goto <D.23244>; else goto <D.23245>;
            <D.23244>:
            if (__result == 0) goto <D.23246>; else goto <D.23247>;
            <D.23246>:
            D.23248 = &MEM[(void *)"8s" + 1B];
            D.23249 = *D.23248;
            D.23250 = (int) D.23249;
            D.23251 = __s2 + 1;
            D.23252 = *D.23251;
            D.23253 = (int) D.23252;
            __result = D.23250 - D.23253;
            if (__s2_len > 1) goto <D.23254>; else goto <D.23255>;
            <D.23254>:
            if (__result == 0) goto <D.23256>; else goto <D.23257>;
            <D.23256>:
            D.23258 = &MEM[(void *)"8s" + 2B];
            D.23259 = *D.23258;
            D.23260 = (int) D.23259;
            D.23261 = __s2 + 2;
            D.23262 = *D.23261;
            D.23263 = (int) D.23262;
            __result = D.23260 - D.23263;
            if (__s2_len > 2) goto <D.23264>; else goto <D.23265>;
            <D.23264>:
            if (__result == 0) goto <D.23266>; else goto <D.23267>;
            <D.23266>:
            D.23268 = &MEM[(void *)"8s" + 3B];
            D.23269 = *D.23268;
            D.23270 = (int) D.23269;
            D.23271 = __s2 + 3;
            D.23272 = *D.23271;
            D.23273 = (int) D.23272;
            __result = D.23270 - D.23273;
            <D.23267>:
            <D.23265>:
            <D.23257>:
            <D.23255>:
            <D.23247>:
            <D.23245>:
          }
          D.21317 = __result;
        }
        iftmp.19 = -D.21317;
        goto <D.23274>;
        <D.23238>:
        D.23034 = name + 6;
        iftmp.19 = __builtin_strcmp (D.23034, "8s");
        <D.23274>:
        D.21318 = iftmp.19;
      }
      if (D.21318 == 0) goto <D.22992>; else goto <D.23275>;
      <D.23275>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23279 = "8us";
          D.23280 = MEM[(const unsigned char *)D.23279];
          D.23281 = (int) D.23280;
          D.23282 = *__s2;
          D.23283 = (int) D.23282;
          __result = D.23281 - D.23283;
          {
            if (__s2_len != 0) goto <D.23284>; else goto <D.23285>;
            <D.23284>:
            if (__result == 0) goto <D.23286>; else goto <D.23287>;
            <D.23286>:
            D.23288 = &MEM[(void *)"8us" + 1B];
            D.23289 = *D.23288;
            D.23290 = (int) D.23289;
            D.23291 = __s2 + 1;
            D.23292 = *D.23291;
            D.23293 = (int) D.23292;
            __result = D.23290 - D.23293;
            if (__s2_len > 1) goto <D.23294>; else goto <D.23295>;
            <D.23294>:
            if (__result == 0) goto <D.23296>; else goto <D.23297>;
            <D.23296>:
            D.23298 = &MEM[(void *)"8us" + 2B];
            D.23299 = *D.23298;
            D.23300 = (int) D.23299;
            D.23301 = __s2 + 2;
            D.23302 = *D.23301;
            D.23303 = (int) D.23302;
            __result = D.23300 - D.23303;
            if (__s2_len > 2) goto <D.23304>; else goto <D.23305>;
            <D.23304>:
            if (__result == 0) goto <D.23306>; else goto <D.23307>;
            <D.23306>:
            D.23308 = &MEM[(void *)"8us" + 3B];
            D.23309 = *D.23308;
            D.23310 = (int) D.23309;
            D.23311 = __s2 + 3;
            D.23312 = *D.23311;
            D.23313 = (int) D.23312;
            __result = D.23310 - D.23313;
            <D.23307>:
            <D.23305>:
            <D.23297>:
            <D.23295>:
            <D.23287>:
            <D.23285>:
          }
          D.21326 = __result;
        }
        iftmp.20 = -D.21326;
        goto <D.23314>;
        <D.23278>:
        D.23034 = name + 6;
        iftmp.20 = __builtin_strcmp (D.23034, "8us");
        <D.23314>:
        D.21327 = iftmp.20;
      }
      if (D.21327 == 0) goto <D.22992>; else goto <D.23315>;
      <D.23315>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23319 = "16b";
          D.23320 = MEM[(const unsigned char *)D.23319];
          D.23321 = (int) D.23320;
          D.23322 = *__s2;
          D.23323 = (int) D.23322;
          __result = D.23321 - D.23323;
          {
            if (__s2_len != 0) goto <D.23324>; else goto <D.23325>;
            <D.23324>:
            if (__result == 0) goto <D.23326>; else goto <D.23327>;
            <D.23326>:
            D.23328 = &MEM[(void *)"16b" + 1B];
            D.23329 = *D.23328;
            D.23330 = (int) D.23329;
            D.23331 = __s2 + 1;
            D.23332 = *D.23331;
            D.23333 = (int) D.23332;
            __result = D.23330 - D.23333;
            if (__s2_len > 1) goto <D.23334>; else goto <D.23335>;
            <D.23334>:
            if (__result == 0) goto <D.23336>; else goto <D.23337>;
            <D.23336>:
            D.23338 = &MEM[(void *)"16b" + 2B];
            D.23339 = *D.23338;
            D.23340 = (int) D.23339;
            D.23341 = __s2 + 2;
            D.23342 = *D.23341;
            D.23343 = (int) D.23342;
            __result = D.23340 - D.23343;
            if (__s2_len > 2) goto <D.23344>; else goto <D.23345>;
            <D.23344>:
            if (__result == 0) goto <D.23346>; else goto <D.23347>;
            <D.23346>:
            D.23348 = &MEM[(void *)"16b" + 3B];
            D.23349 = *D.23348;
            D.23350 = (int) D.23349;
            D.23351 = __s2 + 3;
            D.23352 = *D.23351;
            D.23353 = (int) D.23352;
            __result = D.23350 - D.23353;
            <D.23347>:
            <D.23345>:
            <D.23337>:
            <D.23335>:
            <D.23327>:
            <D.23325>:
          }
          D.21335 = __result;
        }
        iftmp.21 = -D.21335;
        goto <D.23354>;
        <D.23318>:
        D.23034 = name + 6;
        iftmp.21 = __builtin_strcmp (D.23034, "16b");
        <D.23354>:
        D.21336 = iftmp.21;
      }
      if (D.21336 == 0) goto <D.22992>; else goto <D.23355>;
      <D.23355>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.23359 = "16sb";
          D.23360 = MEM[(const unsigned char *)D.23359];
          D.23361 = (int) D.23360;
          D.23362 = *__s2;
          D.23363 = (int) D.23362;
          __result = D.23361 - D.23363;
          {
            if (__s2_len != 0) goto <D.23364>; else goto <D.23365>;
            <D.23364>:
            if (__result == 0) goto <D.23366>; else goto <D.23367>;
            <D.23366>:
            D.23368 = &MEM[(void *)"16sb" + 1B];
            D.23369 = *D.23368;
            D.23370 = (int) D.23369;
            D.23371 = __s2 + 1;
            D.23372 = *D.23371;
            D.23373 = (int) D.23372;
            __result = D.23370 - D.23373;
            if (__s2_len > 1) goto <D.23374>; else goto <D.23375>;
            <D.23374>:
            if (__result == 0) goto <D.23376>; else goto <D.23377>;
            <D.23376>:
            D.23378 = &MEM[(void *)"16sb" + 2B];
            D.23379 = *D.23378;
            D.23380 = (int) D.23379;
            D.23381 = __s2 + 2;
            D.23382 = *D.23381;
            D.23383 = (int) D.23382;
            __result = D.23380 - D.23383;
            if (__s2_len > 2) goto <D.23384>; else goto <D.23385>;
            <D.23384>:
            if (__result == 0) goto <D.23386>; else goto <D.23387>;
            <D.23386>:
            D.23388 = &MEM[(void *)"16sb" + 3B];
            D.23389 = *D.23388;
            D.23390 = (int) D.23389;
            D.23391 = __s2 + 3;
            D.23392 = *D.23391;
            D.23393 = (int) D.23392;
            __result = D.23390 - D.23393;
            <D.23387>:
            <D.23385>:
            <D.23377>:
            <D.23375>:
            <D.23367>:
            <D.23365>:
          }
          D.21344 = __result;
        }
        iftmp.22 = -D.21344;
        goto <D.23394>;
        <D.23358>:
        D.23034 = name + 6;
        iftmp.22 = __builtin_strcmp (D.23034, "16sb");
        <D.23394>:
        D.21345 = iftmp.22;
      }
      if (D.21345 == 0) goto <D.22992>; else goto <D.22993>;
      <D.22992>:
      iftmp.12 = 1;
      goto <D.22994>;
      <D.22993>:
      iftmp.12 = 0;
      <D.22994>:
      D.23395 = (unsigned char) iftmp.12;
      D.23396 = (<unnamed-unsigned:1>) D.23395;
      class->simd_type = D.23396;
      <D.22990>:
      <D.22987>:
      <D.22958>:
      <D.22917>:
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 0);
      D.23397 = mono_loader_get_last_error ();
      D.23398 = D.23397 != 0B;
      D.23399 = (long int) D.23398;
      D.23400 = __builtin_expect (D.23399, 0);
      if (D.23400 != 0) goto <D.23401>; else goto <D.23402>;
      <D.23401>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5782, "!mono_loader_get_last_error ()");
      <D.23402>:
      D.22693 = class;
      return D.22693;
      parent_failure:
      mono_class_setup_mono_type (class);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.23403 = mono_loader_get_last_error ();
      D.23404 = D.23403 != 0B;
      D.23405 = (long int) D.23404;
      D.23406 = __builtin_expect (D.23405, 0);
      if (D.23406 != 0) goto <D.23407>; else goto <D.23408>;
      <D.23407>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5790, "!mono_loader_get_last_error ()");
      <D.23408>:
      D.22693 = 0B;
      return D.22693;
    }
  finally
    {
      cols = {CLOBBER};
      cols_next = {CLOBBER};
      icount = {CLOBBER};
      interfaces = {CLOBBER};
    }
}


fix_gclass_incomplete_instantiation (struct MonoClass * gclass, void * user_data)
{
  struct MonoGenericClass * D.23411;
  struct MonoClass * D.23412;
  gboolean D.23415;
  struct MonoClass * D.23416;
  struct MonoClass * D.23419;
  struct MonoClass * gtd;

  gtd = user_data;
  D.23411 = gclass->generic_class;
  D.23412 = D.23411->container_class;
  if (D.23412 != gtd) goto <D.23413>; else goto <D.23414>;
  <D.23413>:
  D.23415 = 0;
  return D.23415;
  <D.23414>:
  D.23416 = gtd->parent;
  if (D.23416 != 0B) goto <D.23417>; else goto <D.23418>;
  <D.23417>:
  D.23419 = gclass->parent;
  if (D.23419 == 0B) goto <D.23420>; else goto <D.23421>;
  <D.23420>:
  mono_generic_class_setup_parent (gclass, gtd);
  <D.23421>:
  <D.23418>:
  D.23415 = 1;
  return D.23415;
}


mono_generic_class_setup_parent (struct MonoClass * klass, struct MonoClass * gtd)
{
  struct MonoClass * D.23423;
  struct MonoGenericContext * D.23426;
  struct MonoClass * D.23427;
  int D.23428;
  struct MonoClass * D.23431;
  struct MonoClass * D.23432;
  long unsigned int D.23435;
  long unsigned int D.23436;
  struct MonoClass * D.23439;
  struct MonoClass * D.23440;

  D.23423 = gtd->parent;
  if (D.23423 != 0B) goto <D.23424>; else goto <D.23425>;
  <D.23424>:
  {
    struct MonoError error;
    struct MonoGenericClass * gclass;

    try
      {
        gclass = klass->generic_class;
        D.23423 = gtd->parent;
        D.23426 = mono_generic_class_get_context (gclass);
        D.23427 = mono_class_inflate_generic_class_checked (D.23423, D.23426, &error);
        klass->parent = D.23427;
        D.23428 = mono_error_ok (&error);
        if (D.23428 == 0) goto <D.23429>; else goto <D.23430>;
        <D.23429>:
        D.23431 = mono_defaults.object_class;
        klass->parent = D.23431;
        mono_class_set_failure (klass, 7, 0B);
        mono_error_cleanup (&error);
        <D.23430>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.23425>:
  D.23432 = klass->parent;
  if (D.23432 != 0B) goto <D.23433>; else goto <D.23434>;
  <D.23433>:
  D.23432 = klass->parent;
  mono_class_setup_parent (klass, D.23432);
  <D.23434>:
  D.23435 = BIT_FIELD_REF <*klass, 64, 256>;
  D.23436 = D.23435 & 16;
  if (D.23436 != 0) goto <D.23437>; else goto <D.23438>;
  <D.23437>:
  D.23439 = gtd->cast_class;
  klass->cast_class = D.23439;
  D.23440 = gtd->element_class;
  klass->element_class = D.23440;
  <D.23438>:
}


mono_class_inflate_generic_class_checked (struct MonoClass * gklass, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.23441;
  int D.23442;
  struct MonoClass * D.23445;
  struct MonoClass * res;
  struct MonoType * inflated;

  D.23441 = &gklass->byval_arg;
  inflated = mono_class_inflate_generic_type_checked (D.23441, context, error);
  D.23442 = mono_error_ok (error);
  if (D.23442 == 0) goto <D.23443>; else goto <D.23444>;
  <D.23443>:
  D.23445 = 0B;
  return D.23445;
  <D.23444>:
  res = mono_class_from_mono_type (inflated);
  mono_metadata_free_type (inflated);
  D.23445 = res;
  return D.23445;
}


enable_gclass_recording ()
{
  int record_gclass_instantiation.23;
  int record_gclass_instantiation.24;

  record_gclass_instantiation.23 = record_gclass_instantiation;
  record_gclass_instantiation.24 = record_gclass_instantiation.23 + 1;
  record_gclass_instantiation = record_gclass_instantiation.24;
}


disable_gclass_recording (gboolean (*gclass_record_func) (struct MonoClass *, void *) func, void * user_data)
{
  int record_gclass_instantiation.25;
  _Bool D.23450;
  long int D.23451;
  long int D.23452;
  int record_gclass_instantiation.26;
  void * D.23456;
  int D.23457;
  struct GSList * D.23460;
  struct GSList * D.23462;
  struct GSList * gclass_recorded_list.27;
  struct GSList * * head;

  head = &gclass_recorded_list;
  record_gclass_instantiation.25 = record_gclass_instantiation;
  D.23450 = record_gclass_instantiation.25 <= 0;
  D.23451 = (long int) D.23450;
  D.23452 = __builtin_expect (D.23451, 0);
  if (D.23452 != 0) goto <D.23453>; else goto <D.23454>;
  <D.23453>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 120, "record_gclass_instantiation > 0");
  <D.23454>:
  record_gclass_instantiation.25 = record_gclass_instantiation;
  record_gclass_instantiation.26 = record_gclass_instantiation.25 + -1;
  record_gclass_instantiation = record_gclass_instantiation.26;
  goto <D.19344>;
  <D.19343>:
  {
    struct GSList * node;

    node = *head;
    D.23456 = node->data;
    D.23457 = func (D.23456, user_data);
    if (D.23457 != 0) goto <D.23458>; else goto <D.23459>;
    <D.23458>:
    D.23460 = node->next;
    *head = D.23460;
    monoeg_g_slist_free_1 (node);
    goto <D.23461>;
    <D.23459>:
    head = &node->next;
    <D.23461>:
  }
  <D.19344>:
  D.23462 = *head;
  if (D.23462 != 0B) goto <D.19343>; else goto <D.19345>;
  <D.19345>:
  record_gclass_instantiation.25 = record_gclass_instantiation;
  if (record_gclass_instantiation.25 == 0) goto <D.23463>; else goto <D.23464>;
  <D.23463>:
  gclass_recorded_list.27 = gclass_recorded_list;
  if (gclass_recorded_list.27 != 0B) goto <D.23466>; else goto <D.23467>;
  <D.23466>:
  gclass_recorded_list.27 = gclass_recorded_list;
  monoeg_g_slist_free (gclass_recorded_list.27);
  gclass_recorded_list = 0B;
  <D.23467>:
  <D.23464>:
}


mono_class_find_enum_basetype (struct MonoClass * class)
{
  unsigned int D.23468;
  long unsigned int D.23469;
  long unsigned int D.23470;
  _Bool D.23471;
  long int D.23472;
  long int D.23473;
  struct MonoGenericContainer * D.23476;
  struct MonoGenericClass * D.23480;
  _Bool D.23483;
  long int D.23484;
  long int D.23485;
  unsigned int D.23488;
  unsigned int i.28;
  unsigned int D.23490;
  unsigned int D.23491;
  unsigned int D.23492;
  struct MonoImage * D.23495;
  unsigned int D.23496;
  int D.23497;
  struct MonoType * D.23500;
  const char * sig.29;
  const char * sig.30;
  char D.23503;
  short int D.23506;
  const char * D.23507;
  struct MonoGenericContext * D.23512;
  short unsigned int D.23513;
  struct MonoGenericContainer * container;
  struct MonoImage * m;
  const int top;
  int i;

  container = 0B;
  m = class->image;
  D.23468 = class->field.count;
  top = (const int) D.23468;
  D.23469 = BIT_FIELD_REF <*class, 64, 256>;
  D.23470 = D.23469 & 16;
  D.23471 = D.23470 == 0;
  D.23472 = (long int) D.23471;
  D.23473 = __builtin_expect (D.23472, 0);
  if (D.23473 != 0) goto <D.23474>; else goto <D.23475>;
  <D.23474>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1250, "class->enumtype");
  <D.23475>:
  D.23476 = class->generic_container;
  if (D.23476 != 0B) goto <D.23477>; else goto <D.23478>;
  <D.23477>:
  container = class->generic_container;
  goto <D.23479>;
  <D.23478>:
  D.23480 = class->generic_class;
  if (D.23480 != 0B) goto <D.23481>; else goto <D.23482>;
  <D.23481>:
  {
    struct MonoClass * gklass;

    D.23480 = class->generic_class;
    gklass = D.23480->container_class;
    container = gklass->generic_container;
    D.23483 = container == 0B;
    D.23484 = (long int) D.23483;
    D.23485 = __builtin_expect (D.23484, 0);
    if (D.23485 != 0) goto <D.23486>; else goto <D.23487>;
    <D.23486>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1258, "container");
    <D.23487>:
  }
  <D.23482>:
  <D.23479>:
  i = 0;
  goto <D.19657>;
  <D.19656>:
  {
    const char * sig;
    guint32 cols[3];
    int idx;
    struct MonoType * ftype;

    try
      {
        D.23488 = class->field.first;
        i.28 = (unsigned int) i;
        D.23490 = D.23488 + i.28;
        idx = (int) D.23490;
        mono_metadata_decode_table_row (m, 4, idx, &cols, 3);
        D.23491 = cols[0];
        D.23492 = D.23491 & 16;
        if (D.23492 != 0) goto <D.23493>; else goto <D.23494>;
        <D.23493>:
        // predicted unlikely by continue predictor.
        goto <D.19655>;
        <D.23494>:
        D.23495 = class->image;
        D.23496 = cols[2];
        D.23497 = mono_verifier_verify_field_signature (D.23495, D.23496, 0B);
        if (D.23497 == 0) goto <D.23498>; else goto <D.23499>;
        <D.23498>:
        D.23500 = 0B;
        return D.23500;
        <D.23499>:
        D.23496 = cols[2];
        sig.29 = mono_metadata_blob_heap (m, D.23496);
        sig = sig.29;
        sig.30 = sig;
        mono_metadata_decode_value (sig.30, &sig);
        sig.30 = sig;
        D.23503 = *sig.30;
        if (D.23503 != 6) goto <D.23504>; else goto <D.23505>;
        <D.23504>:
        D.23500 = 0B;
        return D.23500;
        <D.23505>:
        D.23491 = cols[0];
        D.23506 = (short int) D.23491;
        sig.30 = sig;
        D.23507 = sig.30 + 1;
        ftype = mono_metadata_parse_type_full (m, container, 5, D.23506, D.23507, &sig);
        if (ftype == 0B) goto <D.23508>; else goto <D.23509>;
        <D.23508>:
        D.23500 = 0B;
        return D.23500;
        <D.23509>:
        D.23480 = class->generic_class;
        if (D.23480 != 0B) goto <D.23510>; else goto <D.23511>;
        <D.23510>:
        D.23512 = mono_class_get_context (class);
        ftype = mono_class_inflate_generic_type (ftype, D.23512);
        D.23491 = cols[0];
        D.23513 = (short unsigned int) D.23491;
        ftype->attrs = D.23513;
        <D.23511>:
        D.23500 = ftype;
        return D.23500;
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.19655>:
  i = i + 1;
  <D.19657>:
  if (i < top) goto <D.19656>; else goto <D.19658>;
  <D.19658>:
  D.23500 = 0B;
  return D.23500;
}


mono_class_set_failure_and_error (struct MonoClass * class, struct MonoError * error, const char * msg)
{
  gchar * D.23517;

  D.23517 = monoeg_strdup (msg);
  mono_class_set_failure (class, 7, D.23517);
  mono_error_set_type_load_class (error, class, msg);
}


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

  if (str != 0B) goto <D.23518>; else goto <D.23519>;
  <D.23518>:
  D.23520 = __strdup (str);
  return D.23520;
  <D.23519>:
  D.23520 = 0B;
  return D.23520;
}


mono_class_set_failure_from_loader_error (struct MonoClass * class, struct MonoError * error, char * msg)
{
  struct MonoLoaderError * lerror;

  lerror = mono_loader_get_last_error ();
  if (lerror != 0B) goto <D.23522>; else goto <D.23523>;
  <D.23522>:
  set_failure_from_loader_error (class, lerror);
  mono_error_set_from_loader_error (error);
  if (msg != 0B) goto <D.23524>; else goto <D.23525>;
  <D.23524>:
  monoeg_g_free (msg);
  <D.23525>:
  goto <D.23526>;
  <D.23523>:
  mono_class_set_failure (class, 7, msg);
  mono_error_set_type_load_class (error, class, msg);
  <D.23526>:
}


set_failure_from_loader_error (struct MonoClass * class, struct MonoLoaderError * error)
{
  unsigned char D.23527;
  int D.23528;
  struct MonoImage * D.23529;
  char * D.23530;
  char * D.23531;
  const char * D.23532;
  struct MonoClass * D.23533;
  const char * D.23536;
  int D.23540;
  unsigned int D.23544;
  void * exception_data;

  exception_data = 0B;
  D.23527 = error->exception_type;
  D.23528 = (int) D.23527;
  switch (D.23528) <default: <D.20793>, case 5: <D.20786>, case 6: <D.20787>, case 7: <D.20784>, case 8: <D.20790>, case 12: <D.20792>>
  <D.20784>:
  D.23529 = class->image;
  D.23530 = error->class_name;
  D.23531 = error->assembly_name;
  exception_data = concat_two_strings_with_zero (D.23529, D.23530, D.23531);
  goto <D.20785>;
  <D.20786>:
  D.23529 = class->image;
  D.23530 = error->class_name;
  D.23532 = error->member_name;
  exception_data = concat_two_strings_with_zero (D.23529, D.23530, D.23532);
  goto <D.20785>;
  <D.20787>:
  {
    const char * name_space;
    const char * class_name;

    D.23533 = error->klass;
    name_space = D.23533->name_space;
    if (name_space != 0B) goto <D.23534>; else goto <D.23535>;
    <D.23534>:
    D.23533 = error->klass;
    D.23536 = D.23533->name;
    class_name = monoeg_g_strdup_printf ("%s.%s", name_space, D.23536);
    goto <D.23537>;
    <D.23535>:
    D.23533 = error->klass;
    class_name = D.23533->name;
    <D.23537>:
    D.23529 = class->image;
    D.23532 = error->member_name;
    exception_data = concat_two_strings_with_zero (D.23529, class_name, D.23532);
    if (name_space != 0B) goto <D.23538>; else goto <D.23539>;
    <D.23538>:
    monoeg_g_free (class_name);
    <D.23539>:
    goto <D.20785>;
  }
  <D.20790>:
  {
    const char * msg;

    D.23540 = error->ref_only;
    if (D.23540 != 0) goto <D.23541>; else goto <D.23542>;
    <D.23541>:
    msg = "Cannot resolve dependency to assembly \'%s\' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.";
    goto <D.23543>;
    <D.23542>:
    msg = "Could not load file or assembly \'%s\' or one of its dependencies.";
    <D.23543>:
    D.23529 = class->image;
    D.23531 = error->assembly_name;
    exception_data = concat_two_strings_with_zero (D.23529, msg, D.23531);
    goto <D.20785>;
  }
  <D.20792>:
  exception_data = error->msg;
  goto <D.20785>;
  <D.20793>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4891);
  <D.20785>:
  D.23527 = error->exception_type;
  D.23544 = (unsigned int) D.23527;
  mono_class_set_failure (class, D.23544, exception_data);
}


concat_two_strings_with_zero (struct MonoImage * image, const char * s1, const char * s2)
{
  unsigned int iftmp.31;
  long unsigned int D.23548;
  unsigned int iftmp.32;
  long unsigned int D.23553;
  unsigned int D.23555;
  unsigned int D.23556;
  unsigned int len.33;
  long unsigned int D.23558;
  const char * iftmp.34;
  const char * iftmp.35;
  int D.23567;
  _Bool D.23568;
  long int D.23569;
  long int D.23570;
  char * D.23573;
  int null_length;
  int len;
  char * s;
  int result;

  null_length = 6;
  if (s1 != 0B) goto <D.23546>; else goto <D.23547>;
  <D.23546>:
  D.23548 = strlen (s1);
  iftmp.31 = (unsigned int) D.23548;
  goto <D.23549>;
  <D.23547>:
  iftmp.31 = (unsigned int) null_length;
  <D.23549>:
  if (s2 != 0B) goto <D.23551>; else goto <D.23552>;
  <D.23551>:
  D.23553 = strlen (s2);
  iftmp.32 = (unsigned int) D.23553;
  goto <D.23554>;
  <D.23552>:
  iftmp.32 = (unsigned int) null_length;
  <D.23554>:
  D.23555 = iftmp.31 + iftmp.32;
  D.23556 = D.23555 + 2;
  len = (int) D.23556;
  len.33 = (unsigned int) len;
  s = mono_image_alloc (image, len.33);
  D.23558 = (long unsigned int) len;
  if (s1 != 0B) goto <D.23560>; else goto <D.23561>;
  <D.23560>:
  iftmp.34 = s1;
  goto <D.23562>;
  <D.23561>:
  iftmp.34 = "(null)";
  <D.23562>:
  if (s2 != 0B) goto <D.23564>; else goto <D.23565>;
  <D.23564>:
  iftmp.35 = s2;
  goto <D.23566>;
  <D.23565>:
  iftmp.35 = "(null)";
  <D.23566>:
  result = monoeg_g_snprintf (s, D.23558, "%s%c%s", iftmp.34, 0, iftmp.35);
  D.23567 = len + -1;
  D.23568 = D.23567 != result;
  D.23569 = (long int) D.23568;
  D.23570 = __builtin_expect (D.23569, 0);
  if (D.23570 != 0) goto <D.23571>; else goto <D.23572>;
  <D.23571>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4839, "result == len - 1");
  <D.23572>:
  D.23573 = s;
  return D.23573;
}


mono_dup_array_type (struct MonoImage * image, struct MonoArrayType * a)
{
  int * D.23577;
  unsigned char D.23580;
  unsigned int D.23581;
  unsigned int D.23582;
  void * D.23583;
  int * D.23584;
  unsigned char D.23587;
  unsigned int D.23588;
  unsigned int D.23589;
  void * D.23590;
  void * D.23594;
  void * D.23597;
  struct MonoArrayType * D.23598;

  if (image != 0B) goto <D.23575>; else goto <D.23576>;
  <D.23575>:
  a = mono_image_memdup (image, a, 32);
  D.23577 = a->sizes;
  if (D.23577 != 0B) goto <D.23578>; else goto <D.23579>;
  <D.23578>:
  D.23577 = a->sizes;
  D.23580 = a->numsizes;
  D.23581 = (unsigned int) D.23580;
  D.23582 = D.23581 * 4;
  D.23583 = mono_image_memdup (image, D.23577, D.23582);
  a->sizes = D.23583;
  <D.23579>:
  D.23584 = a->lobounds;
  if (D.23584 != 0B) goto <D.23585>; else goto <D.23586>;
  <D.23585>:
  D.23584 = a->lobounds;
  D.23587 = a->numlobounds;
  D.23588 = (unsigned int) D.23587;
  D.23589 = D.23588 * 4;
  D.23590 = mono_image_memdup (image, D.23584, D.23589);
  a->lobounds = D.23590;
  <D.23586>:
  goto <D.23591>;
  <D.23576>:
  a = monoeg_g_memdup (a, 32);
  D.23577 = a->sizes;
  if (D.23577 != 0B) goto <D.23592>; else goto <D.23593>;
  <D.23592>:
  D.23577 = a->sizes;
  D.23580 = a->numsizes;
  D.23581 = (unsigned int) D.23580;
  D.23582 = D.23581 * 4;
  D.23594 = monoeg_g_memdup (D.23577, D.23582);
  a->sizes = D.23594;
  <D.23593>:
  D.23584 = a->lobounds;
  if (D.23584 != 0B) goto <D.23595>; else goto <D.23596>;
  <D.23595>:
  D.23584 = a->lobounds;
  D.23587 = a->numlobounds;
  D.23588 = (unsigned int) D.23587;
  D.23589 = D.23588 * 4;
  D.23597 = monoeg_g_memdup (D.23584, D.23589);
  a->lobounds = D.23597;
  <D.23596>:
  <D.23591>:
  D.23598 = a;
  return D.23598;
}


mono_image_memdup (struct MonoImage * image, void * data, guint size)
{
  long unsigned int D.23600;
  void * D.23601;
  void * res;

  res = mono_image_alloc (image, size);
  D.23600 = (long unsigned int) size;
  memcpy (res, data, D.23600);
  D.23601 = res;
  return D.23601;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.23603;
  long unsigned int D.23604;

  D.23604 = __builtin_object_size (__dest, 0);
  D.23603 = __builtin___memcpy_chk (__dest, __src, __len, D.23604);
  return D.23603;
}


mono_metadata_signature_deep_dup (struct MonoImage * image, struct MonoMethodSignature * sig)
{
  struct MonoType * D.23606;
  struct MonoType * D.23607;
  struct MonoType * D.23608;
  struct MonoType * D.23609;
  short unsigned int D.23610;
  int D.23611;
  struct MonoMethodSignature * D.23612;
  int i;

  sig = mono_metadata_signature_dup_full (image, sig);
  D.23606 = sig->ret;
  D.23607 = mono_metadata_type_dup (image, D.23606);
  sig->ret = D.23607;
  i = 0;
  goto <D.19415>;
  <D.19414>:
  D.23608 = sig->params[i];
  D.23609 = mono_metadata_type_dup (image, D.23608);
  sig->params[i] = D.23609;
  i = i + 1;
  <D.19415>:
  D.23610 = sig->param_count;
  D.23611 = (int) D.23610;
  if (D.23611 > i) goto <D.19414>; else goto <D.19416>;
  <D.19416>:
  D.23612 = sig;
  return D.23612;
}


mono_type_get_name_full (struct MonoType * type, MonoTypeNameFormat format)
{
  char * D.23614;
  struct GString * result;

  result = monoeg_g_string_new ("");
  mono_type_get_name_recurse (type, result, 0, format);
  D.23614 = monoeg_g_string_free (result, 0);
  return D.23614;
}


mono_type_get_name_recurse (struct MonoType * type, struct GString * str, gboolean is_recursed, MonoTypeNameFormat format)
{
  unsigned char D.23616;
  int D.23617;
  struct MonoArrayType * D.23618;
  unsigned char D.23619;
  MonoTypeNameFormat iftmp.36;
  struct MonoClass * D.23624;
  struct MonoType * D.23625;
  MonoTypeNameFormat iftmp.37;
  struct MonoClass * D.23634;
  struct MonoType * D.23635;
  MonoTypeNameFormat iftmp.38;
  struct MonoType * D.23642;
  struct MonoClass * D.23645;
  struct MonoGenericParam * D.23649;
  struct MonoGenericContainer * D.23650;
  struct MonoGenericParamInfo * D.23652;
  const char * iftmp.39;
  short unsigned int D.23657;
  int D.23658;
  struct MonoGenericParamInfo * iftmp.40;
  const char * D.23663;
  struct MonoClass * D.23664;
  struct MonoType * D.23667;
  const char * D.23672;
  char D.23673;
  const char * D.23678;
  int iftmp.41;
  long int s.42;
  long int D.23683;
  long int D.23684;
  long unsigned int D.23686;
  long int D.23687;
  struct MonoGenericClass * D.23690;
  MonoTypeNameFormat iftmp.43;
  unsigned char D.23704;
  struct MonoType * D.23709;
  <unnamed-unsigned:22> D.23716;
  int D.23717;
  struct MonoGenericContainer * D.23722;
  struct MonoGenericParamFull * D.23734;
  long unsigned int D.23735;
  long unsigned int D.23736;
  struct MonoGenericParamFull * D.23737;
  const char * D.23738;
  <unnamed-signed:31> D.23739;
  int D.23740;
  struct MonoClass * klass;

  D.23616 = type->type;
  D.23617 = (int) D.23616;
  switch (D.23617) <default: <D.19448>, case 15: <D.19444>, case 19: <D.19446>, case 20: <D.19434>, case 29: <D.19442>, case 30: <D.19447>>
  <D.19434>:
  {
    int i;
    int rank;
    MonoTypeNameFormat nested_format;

    D.23618 = type->data.array;
    D.23619 = D.23618->rank;
    rank = (int) D.23619;
    if (format != 3) goto <D.23621>; else goto <D.23622>;
    <D.23621>:
    iftmp.36 = format;
    goto <D.23623>;
    <D.23622>:
    iftmp.36 = 2;
    <D.23623>:
    nested_format = iftmp.36;
    D.23618 = type->data.array;
    D.23624 = D.23618->eklass;
    D.23625 = &D.23624->byval_arg;
    mono_type_get_name_recurse (D.23625, str, 0, nested_format);
    monoeg_g_string_append_c (str, 91);
    if (rank == 1) goto <D.23626>; else goto <D.23627>;
    <D.23626>:
    monoeg_g_string_append_c (str, 42);
    <D.23627>:
    i = 1;
    goto <D.19439>;
    <D.19438>:
    monoeg_g_string_append_c (str, 44);
    i = i + 1;
    <D.19439>:
    if (i < rank) goto <D.19438>; else goto <D.19440>;
    <D.19440>:
    monoeg_g_string_append_c (str, 93);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.23628>; else goto <D.23629>;
    <D.23628>:
    D.23618 = type->data.array;
    D.23624 = D.23618->eklass;
    _mono_type_get_assembly_name (D.23624, str);
    <D.23629>:
    goto <D.19441>;
  }
  <D.19442>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.23631>; else goto <D.23632>;
    <D.23631>:
    iftmp.37 = format;
    goto <D.23633>;
    <D.23632>:
    iftmp.37 = 2;
    <D.23633>:
    nested_format = iftmp.37;
    D.23634 = type->data.klass;
    D.23635 = &D.23634->byval_arg;
    mono_type_get_name_recurse (D.23635, str, 0, nested_format);
    monoeg_g_string_append (str, "[]");
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.23636>; else goto <D.23637>;
    <D.23636>:
    D.23634 = type->data.klass;
    _mono_type_get_assembly_name (D.23634, str);
    <D.23637>:
    goto <D.19441>;
  }
  <D.19444>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.23639>; else goto <D.23640>;
    <D.23639>:
    iftmp.38 = format;
    goto <D.23641>;
    <D.23640>:
    iftmp.38 = 2;
    <D.23641>:
    nested_format = iftmp.38;
    D.23642 = type->data.type;
    mono_type_get_name_recurse (D.23642, str, 0, nested_format);
    monoeg_g_string_append_c (str, 42);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.23643>; else goto <D.23644>;
    <D.23643>:
    D.23642 = type->data.type;
    D.23645 = mono_class_from_mono_type (D.23642);
    _mono_type_get_assembly_name (D.23645, str);
    <D.23644>:
    goto <D.19441>;
  }
  <D.19446>:
  <D.19447>:
  D.23649 = type->data.generic_param;
  D.23650 = D.23649->owner;
  if (D.23650 == 0B) goto <D.23646>; else goto <D.23651>;
  <D.23651>:
  D.23649 = type->data.generic_param;
  D.23652 = &MEM[(struct MonoGenericParamFull *)D.23649].info;
  if (D.23652 == 0B) goto <D.23646>; else goto <D.23647>;
  <D.23646>:
  D.23616 = type->type;
  if (D.23616 == 19) goto <D.23654>; else goto <D.23655>;
  <D.23654>:
  iftmp.39 = "!";
  goto <D.23656>;
  <D.23655>:
  iftmp.39 = "!!";
  <D.23656>:
  D.23649 = type->data.generic_param;
  D.23657 = D.23649->num;
  D.23658 = (int) D.23657;
  monoeg_g_string_append_printf (str, "%s%d", iftmp.39, D.23658);
  goto <D.23648>;
  <D.23647>:
  D.23649 = type->data.generic_param;
  D.23650 = D.23649->owner;
  if (D.23650 != 0B) goto <D.23660>; else goto <D.23661>;
  <D.23660>:
  D.23649 = type->data.generic_param;
  iftmp.40 = &MEM[(struct MonoGenericParamFull *)D.23649].info;
  goto <D.23662>;
  <D.23661>:
  iftmp.40 = 0B;
  <D.23662>:
  D.23663 = iftmp.40->name;
  monoeg_g_string_append (str, D.23663);
  <D.23648>:
  mono_type_name_check_byref (type, str);
  goto <D.19441>;
  <D.19448>:
  klass = mono_class_from_mono_type (type);
  D.23664 = klass->nested_in;
  if (D.23664 != 0B) goto <D.23665>; else goto <D.23666>;
  <D.23665>:
  D.23664 = klass->nested_in;
  D.23667 = &D.23664->byval_arg;
  mono_type_get_name_recurse (D.23667, str, 1, format);
  if (format == 0) goto <D.23668>; else goto <D.23669>;
  <D.23668>:
  monoeg_g_string_append_c (str, 46);
  goto <D.23670>;
  <D.23669>:
  monoeg_g_string_append_c (str, 43);
  <D.23670>:
  goto <D.23671>;
  <D.23666>:
  D.23672 = klass->name_space;
  D.23673 = *D.23672;
  if (D.23673 != 0) goto <D.23674>; else goto <D.23675>;
  <D.23674>:
  D.23672 = klass->name_space;
  monoeg_g_string_append (str, D.23672);
  monoeg_g_string_append_c (str, 46);
  <D.23675>:
  <D.23671>:
  if (format == 0) goto <D.23676>; else goto <D.23677>;
  <D.23676>:
  {
    char * s;
    int len;

    D.23678 = klass->name;
    s = __builtin_strchr (D.23678, 96);
    if (s != 0B) goto <D.23680>; else goto <D.23681>;
    <D.23680>:
    s.42 = (long int) s;
    D.23678 = klass->name;
    D.23683 = (long int) D.23678;
    D.23684 = s.42 - D.23683;
    iftmp.41 = (int) D.23684;
    goto <D.23685>;
    <D.23681>:
    D.23678 = klass->name;
    D.23686 = strlen (D.23678);
    iftmp.41 = (int) D.23686;
    <D.23685>:
    len = iftmp.41;
    D.23678 = klass->name;
    D.23687 = (long int) len;
    monoeg_g_string_append_len (str, D.23678, D.23687);
  }
  goto <D.23688>;
  <D.23677>:
  D.23678 = klass->name;
  monoeg_g_string_append (str, D.23678);
  <D.23688>:
  if (is_recursed != 0) goto <D.19441>; else goto <D.23689>;
  <D.23689>:
  D.23690 = klass->generic_class;
  if (D.23690 != 0B) goto <D.23691>; else goto <D.23692>;
  <D.23691>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    MonoTypeNameFormat nested_format;
    int i;

    gclass = klass->generic_class;
    inst = gclass->context.class_inst;
    if (format != 2) goto <D.23694>; else goto <D.23695>;
    <D.23694>:
    iftmp.43 = format;
    goto <D.23696>;
    <D.23695>:
    iftmp.43 = 3;
    <D.23696>:
    nested_format = iftmp.43;
    if (format == 0) goto <D.23697>; else goto <D.23698>;
    <D.23697>:
    monoeg_g_string_append_c (str, 60);
    goto <D.23699>;
    <D.23698>:
    monoeg_g_string_append_c (str, 91);
    <D.23699>:
    i = 0;
    goto <D.19457>;
    <D.19456>:
    {
      struct MonoType * t;

      t = inst->type_argv[i];
      if (i != 0) goto <D.23700>; else goto <D.23701>;
      <D.23700>:
      monoeg_g_string_append_c (str, 44);
      <D.23701>:
      if (nested_format == 3) goto <D.23702>; else goto <D.23703>;
      <D.23702>:
      D.23704 = t->type;
      if (D.23704 != 19) goto <D.23705>; else goto <D.23706>;
      <D.23705>:
      D.23616 = type->type;
      if (D.23616 != 30) goto <D.23707>; else goto <D.23708>;
      <D.23707>:
      monoeg_g_string_append_c (str, 91);
      <D.23708>:
      <D.23706>:
      <D.23703>:
      D.23709 = inst->type_argv[i];
      mono_type_get_name_recurse (D.23709, str, 0, nested_format);
      if (nested_format == 3) goto <D.23710>; else goto <D.23711>;
      <D.23710>:
      D.23704 = t->type;
      if (D.23704 != 19) goto <D.23712>; else goto <D.23713>;
      <D.23712>:
      D.23616 = type->type;
      if (D.23616 != 30) goto <D.23714>; else goto <D.23715>;
      <D.23714>:
      monoeg_g_string_append_c (str, 93);
      <D.23715>:
      <D.23713>:
      <D.23711>:
    }
    i = i + 1;
    <D.19457>:
    D.23716 = inst->type_argc;
    D.23717 = (int) D.23716;
    if (D.23717 > i) goto <D.19456>; else goto <D.19458>;
    <D.19458>:
    if (format == 0) goto <D.23718>; else goto <D.23719>;
    <D.23718>:
    monoeg_g_string_append_c (str, 62);
    goto <D.23720>;
    <D.23719>:
    monoeg_g_string_append_c (str, 93);
    <D.23720>:
  }
  goto <D.23721>;
  <D.23692>:
  D.23722 = klass->generic_container;
  if (D.23722 != 0B) goto <D.23723>; else goto <D.23724>;
  <D.23723>:
  if (format != 2) goto <D.23725>; else goto <D.23726>;
  <D.23725>:
  if (format != 3) goto <D.23727>; else goto <D.23728>;
  <D.23727>:
  {
    int i;

    if (format == 0) goto <D.23729>; else goto <D.23730>;
    <D.23729>:
    monoeg_g_string_append_c (str, 60);
    goto <D.23731>;
    <D.23730>:
    monoeg_g_string_append_c (str, 91);
    <D.23731>:
    i = 0;
    goto <D.19461>;
    <D.19460>:
    if (i != 0) goto <D.23732>; else goto <D.23733>;
    <D.23732>:
    monoeg_g_string_append_c (str, 44);
    <D.23733>:
    D.23722 = klass->generic_container;
    D.23734 = D.23722->type_params;
    D.23735 = (long unsigned int) i;
    D.23736 = D.23735 * 56;
    D.23737 = D.23734 + D.23736;
    D.23738 = D.23737->info.name;
    monoeg_g_string_append (str, D.23738);
    i = i + 1;
    <D.19461>:
    D.23722 = klass->generic_container;
    D.23739 = D.23722->type_argc;
    D.23740 = (int) D.23739;
    if (D.23740 > i) goto <D.19460>; else goto <D.19462>;
    <D.19462>:
    if (format == 0) goto <D.23741>; else goto <D.23742>;
    <D.23741>:
    monoeg_g_string_append_c (str, 62);
    goto <D.23743>;
    <D.23742>:
    monoeg_g_string_append_c (str, 93);
    <D.23743>:
  }
  <D.23728>:
  <D.23726>:
  <D.23724>:
  <D.23721>:
  mono_type_name_check_byref (type, str);
  if (format == 3) goto <D.23744>; else goto <D.23745>;
  <D.23744>:
  D.23616 = type->type;
  if (D.23616 != 19) goto <D.23746>; else goto <D.23747>;
  <D.23746>:
  D.23616 = type->type;
  if (D.23616 != 30) goto <D.23748>; else goto <D.23749>;
  <D.23748>:
  _mono_type_get_assembly_name (klass, str);
  <D.23749>:
  <D.23747>:
  <D.23745>:
  goto <D.19441>;
  <D.19441>:
}


mono_type_name_check_byref (struct MonoType * type, struct GString * str)
{
  long unsigned int D.23750;
  long unsigned int D.23751;

  D.23750 = BIT_FIELD_REF <*type, 64, 64>;
  D.23751 = D.23750 & 1073741824;
  if (D.23751 != 0) goto <D.23752>; else goto <D.23753>;
  <D.23752>:
  monoeg_g_string_append_c (str, 38);
  <D.23753>:
}


_mono_type_get_assembly_name (struct MonoClass * klass, struct GString * str)
{
  struct MonoImage * D.23754;
  struct MonoAssemblyName * D.23755;
  struct MonoAssembly * ta;
  char * name;

  D.23754 = klass->image;
  ta = D.23754->assembly;
  D.23755 = &ta->aname;
  name = mono_stringify_assembly_name (D.23755);
  monoeg_g_string_append_printf (str, ", %s", name);
  monoeg_g_free (name);
}


mono_type_get_full_name (struct MonoClass * class)
{
  char * D.23756;
  struct MonoType * D.23757;

  D.23757 = mono_class_get_type (class);
  D.23756 = mono_type_get_name_full (D.23757, 1);
  return D.23756;
}


mono_type_get_name (struct MonoType * type)
{
  char * D.23759;

  D.23759 = mono_type_get_name_full (type, 0);
  return D.23759;
}


mono_type_get_underlying_type (struct MonoType * type)
{
  unsigned char D.23761;
  struct MonoClass * D.23764;
  long unsigned int D.23765;
  long unsigned int D.23766;
  long unsigned int D.23769;
  long unsigned int D.23770;
  struct MonoType * D.23773;
  struct MonoGenericClass * D.23776;
  struct MonoClass * D.23777;
  long unsigned int D.23778;
  long unsigned int D.23779;

  D.23761 = type->type;
  if (D.23761 == 17) goto <D.23762>; else goto <D.23763>;
  <D.23762>:
  D.23764 = type->data.klass;
  D.23765 = BIT_FIELD_REF <*D.23764, 64, 256>;
  D.23766 = D.23765 & 16;
  if (D.23766 != 0) goto <D.23767>; else goto <D.23768>;
  <D.23767>:
  D.23769 = BIT_FIELD_REF <*type, 64, 64>;
  D.23770 = D.23769 & 1073741824;
  if (D.23770 == 0) goto <D.23771>; else goto <D.23772>;
  <D.23771>:
  D.23764 = type->data.klass;
  D.23773 = mono_class_enum_basetype (D.23764);
  return D.23773;
  <D.23772>:
  <D.23768>:
  <D.23763>:
  D.23761 = type->type;
  if (D.23761 == 21) goto <D.23774>; else goto <D.23775>;
  <D.23774>:
  D.23776 = type->data.generic_class;
  D.23777 = D.23776->container_class;
  D.23778 = BIT_FIELD_REF <*D.23777, 64, 256>;
  D.23779 = D.23778 & 16;
  if (D.23779 != 0) goto <D.23780>; else goto <D.23781>;
  <D.23780>:
  D.23769 = BIT_FIELD_REF <*type, 64, 64>;
  D.23770 = D.23769 & 1073741824;
  if (D.23770 == 0) goto <D.23782>; else goto <D.23783>;
  <D.23782>:
  D.23776 = type->data.generic_class;
  D.23777 = D.23776->container_class;
  D.23773 = mono_class_enum_basetype (D.23777);
  return D.23773;
  <D.23783>:
  <D.23781>:
  <D.23775>:
  D.23773 = type;
  return D.23773;
}


mono_class_is_open_constructed_type (struct MonoType * t)
{
  unsigned char D.23785;
  int D.23786;
  gboolean D.23787;
  struct MonoClass * D.23788;
  struct MonoType * D.23789;
  struct MonoArrayType * D.23790;
  struct MonoClass * D.23791;
  struct MonoType * D.23792;
  struct MonoType * D.23793;
  struct MonoGenericClass * D.23794;
  struct MonoGenericInst * D.23795;
  <unnamed-unsigned:1> D.23796;
  struct MonoGenericContainer * D.23797;
  _Bool D.23798;

  D.23785 = t->type;
  D.23786 = (int) D.23785;
  switch (D.23786) <default: <D.19488>, case 15: <D.19484>, case 17: <D.19487>, case 18: <D.19486>, case 19: <D.19480>, case 20: <D.19483>, case 21: <D.19485>, case 29: <D.19482>, case 30: <D.19481>>
  <D.19480>:
  <D.19481>:
  D.23787 = 1;
  return D.23787;
  <D.19482>:
  D.23788 = t->data.klass;
  D.23789 = &D.23788->byval_arg;
  D.23787 = mono_class_is_open_constructed_type (D.23789);
  return D.23787;
  <D.19483>:
  D.23790 = t->data.array;
  D.23791 = D.23790->eklass;
  D.23792 = &D.23791->byval_arg;
  D.23787 = mono_class_is_open_constructed_type (D.23792);
  return D.23787;
  <D.19484>:
  D.23793 = t->data.type;
  D.23787 = mono_class_is_open_constructed_type (D.23793);
  return D.23787;
  <D.19485>:
  D.23794 = t->data.generic_class;
  D.23795 = D.23794->context.class_inst;
  D.23796 = D.23795->is_open;
  D.23787 = (gboolean) D.23796;
  return D.23787;
  <D.19486>:
  <D.19487>:
  D.23788 = t->data.klass;
  D.23797 = D.23788->generic_container;
  D.23798 = D.23797 != 0B;
  D.23787 = (gboolean) D.23798;
  return D.23787;
  <D.19488>:
  D.23787 = 0;
  return D.23787;
}


mono_generic_class_get_context (struct MonoGenericClass * gclass)
{
  struct MonoGenericContext * D.23800;

  D.23800 = &gclass->context;
  return D.23800;
}


mono_class_get_context (struct MonoClass * class)
{
  struct MonoGenericContext * D.23802;
  struct MonoGenericContext * iftmp.44;
  struct MonoGenericClass * D.23804;

  D.23804 = class->generic_class;
  if (D.23804 != 0B) goto <D.23805>; else goto <D.23806>;
  <D.23805>:
  D.23804 = class->generic_class;
  iftmp.44 = mono_generic_class_get_context (D.23804);
  goto <D.23807>;
  <D.23806>:
  iftmp.44 = 0B;
  <D.23807>:
  D.23802 = iftmp.44;
  return D.23802;
}


mono_class_get_generic_container (struct MonoClass * klass)
{
  long unsigned int D.23809;
  long unsigned int D.23810;
  _Bool D.23811;
  long int D.23812;
  long int D.23813;
  struct MonoGenericContainer * D.23816;

  D.23809 = BIT_FIELD_REF <*klass, 64, 256>;
  D.23810 = D.23809 & 17179869184;
  D.23811 = D.23810 == 0;
  D.23812 = (long int) D.23811;
  D.23813 = __builtin_expect (D.23812, 0);
  if (D.23813 != 0) goto <D.23814>; else goto <D.23815>;
  <D.23814>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 752, "klass->is_generic");
  <D.23815>:
  D.23816 = klass->generic_container;
  return D.23816;
}


mono_class_get_generic_class (struct MonoClass * klass)
{
  long unsigned int D.23818;
  long unsigned int D.23819;
  _Bool D.23820;
  long int D.23821;
  long int D.23822;
  struct MonoGenericClass * D.23825;

  D.23818 = BIT_FIELD_REF <*klass, 64, 256>;
  D.23819 = D.23818 & 34359738368;
  D.23820 = D.23819 == 0;
  D.23821 = (long int) D.23820;
  D.23822 = __builtin_expect (D.23821, 0);
  if (D.23822 != 0) goto <D.23823>; else goto <D.23824>;
  <D.23823>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 765, "klass->is_inflated");
  <D.23824>:
  D.23825 = klass->generic_class;
  return D.23825;
}


mono_class_inflate_generic_type_with_mempool (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.23829;
  struct MonoType * D.23832;
  long unsigned int D.23837;
  long unsigned int D.23838;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.23827>; else goto <D.23828>;
  <D.23827>:
  inflated = inflate_generic_type (image, type, context, error);
  <D.23828>:
  D.23829 = mono_error_ok (error);
  if (D.23829 == 0) goto <D.23830>; else goto <D.23831>;
  <D.23830>:
  D.23832 = 0B;
  return D.23832;
  <D.23831>:
  if (inflated == 0B) goto <D.23833>; else goto <D.23834>;
  <D.23833>:
  {
    struct MonoType * shared;

    shared = mono_metadata_get_shared_type (type);
    if (shared != 0B) goto <D.23835>; else goto <D.23836>;
    <D.23835>:
    D.23832 = shared;
    return D.23832;
    <D.23836>:
    D.23832 = mono_metadata_type_dup (image, type);
    return D.23832;
  }
  <D.23834>:
  D.23837 = mono_stats.inflated_type_count;
  D.23838 = D.23837 + 1;
  mono_stats.inflated_type_count = D.23838;
  D.23832 = inflated;
  return D.23832;
}


inflate_generic_type (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  unsigned char D.23840;
  int D.23841;
  struct MonoGenericParam * D.23842;
  short unsigned int D.23843;
  struct MonoType *[0:] * D.23847;
  struct MonoType * D.23848;
  <unnamed-unsigned:22> D.23849;
  int D.23850;
  struct MonoGenericParamInfo * iftmp.45;
  struct MonoGenericContainer * D.23854;
  const char * iftmp.46;
  struct MonoType * D.23862;
  int D.23863;
  struct MonoGenericParamInfo * iftmp.47;
  const char * iftmp.48;
  unsigned char D.23874;
  int D.23875;
  <unnamed-unsigned:1> D.23876;
  short unsigned int D.23877;
  <unnamed-unsigned:22> D.23880;
  int D.23881;
  struct MonoGenericParamInfo * iftmp.49;
  const char * iftmp.50;
  struct MonoType * D.23892;
  int D.23893;
  struct MonoGenericParamInfo * iftmp.51;
  const char * iftmp.52;
  unsigned char D.23904;
  int D.23905;
  struct MonoType * D.23906;
  int D.23910;
  struct MonoClass * D.23911;
  struct MonoArrayType * D.23912;
  struct MonoType * D.23913;
  int D.23917;
  struct MonoArrayType * D.23918;
  struct MonoClass * D.23919;
  struct MonoGenericInst * D.23920;
  long unsigned int D.23921;
  long unsigned int D.23922;
  int D.23925;
  struct MonoClass * D.23930;
  <unnamed-unsigned:1> D.23931;
  int D.23932;
  struct MonoGenericClass * D.23933;
  struct MonoGenericInst * D.23938;
  int D.23939;
  struct MonoImage * D.23944;
  <unnamed-unsigned:1> D.23945;
  int D.23946;

  mono_error_init (error);
  D.23840 = type->type;
  D.23841 = (int) D.23840;
  switch (D.23841) <default: <D.19530>, case 17: <D.19524>, case 18: <D.19523>, case 19: <D.19505>, case 20: <D.19515>, case 21: <D.19519>, case 29: <D.19511>, case 30: <D.19499>>
  <D.19499>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.23842 = type->data.generic_param;
    D.23843 = D.23842->num;
    num = (int) D.23843;
    inst = context->method_inst;
    if (inst == 0B) goto <D.23844>; else goto <D.23846>;
    <D.23846>:
    D.23847 = &inst->type_argv;
    if (D.23847 == 0B) goto <D.23844>; else goto <D.23845>;
    <D.23844>:
    D.23848 = 0B;
    return D.23848;
    <D.23845>:
    D.23849 = inst->type_argc;
    D.23850 = (int) D.23849;
    if (D.23850 <= num) goto <D.23851>; else goto <D.23852>;
    <D.23851>:
    {
      struct MonoGenericParamInfo * info;

      D.23842 = type->data.generic_param;
      D.23854 = D.23842->owner;
      if (D.23854 != 0B) goto <D.23855>; else goto <D.23856>;
      <D.23855>:
      D.23842 = type->data.generic_param;
      iftmp.45 = &MEM[(struct MonoGenericParamFull *)D.23842].info;
      goto <D.23857>;
      <D.23856>:
      iftmp.45 = 0B;
      <D.23857>:
      info = iftmp.45;
      if (info != 0B) goto <D.23859>; else goto <D.23860>;
      <D.23859>:
      iftmp.46 = info->name;
      goto <D.23861>;
      <D.23860>:
      iftmp.46 = "";
      <D.23861>:
      D.23849 = inst->type_argc;
      D.23850 = (int) D.23849;
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.46, D.23850);
      D.23848 = 0B;
      return D.23848;
    }
    <D.23852>:
    D.23862 = inst->type_argv[num];
    D.23863 = is_valid_generic_argument (D.23862);
    if (D.23863 == 0) goto <D.23864>; else goto <D.23865>;
    <D.23864>:
    {
      struct MonoGenericParamInfo * info;

      D.23842 = type->data.generic_param;
      D.23854 = D.23842->owner;
      if (D.23854 != 0B) goto <D.23867>; else goto <D.23868>;
      <D.23867>:
      D.23842 = type->data.generic_param;
      iftmp.47 = &MEM[(struct MonoGenericParamFull *)D.23842].info;
      goto <D.23869>;
      <D.23868>:
      iftmp.47 = 0B;
      <D.23869>:
      info = iftmp.47;
      if (info != 0B) goto <D.23871>; else goto <D.23872>;
      <D.23871>:
      iftmp.48 = info->name;
      goto <D.23873>;
      <D.23872>:
      iftmp.48 = "";
      <D.23873>:
      D.23862 = inst->type_argv[num];
      D.23874 = D.23862->type;
      D.23875 = (int) D.23874;
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.48, D.23875);
      D.23848 = 0B;
      return D.23848;
    }
    <D.23865>:
    D.23862 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.23862);
    D.23876 = type->byref;
    nt->byref = D.23876;
    D.23877 = type->attrs;
    nt->attrs = D.23877;
    D.23848 = nt;
    return D.23848;
  }
  <D.19505>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.23842 = type->data.generic_param;
    D.23843 = D.23842->num;
    num = (int) D.23843;
    inst = context->class_inst;
    if (inst == 0B) goto <D.23878>; else goto <D.23879>;
    <D.23878>:
    D.23848 = 0B;
    return D.23848;
    <D.23879>:
    D.23880 = inst->type_argc;
    D.23881 = (int) D.23880;
    if (D.23881 <= num) goto <D.23882>; else goto <D.23883>;
    <D.23882>:
    {
      struct MonoGenericParamInfo * info;

      D.23842 = type->data.generic_param;
      D.23854 = D.23842->owner;
      if (D.23854 != 0B) goto <D.23885>; else goto <D.23886>;
      <D.23885>:
      D.23842 = type->data.generic_param;
      iftmp.49 = &MEM[(struct MonoGenericParamFull *)D.23842].info;
      goto <D.23887>;
      <D.23886>:
      iftmp.49 = 0B;
      <D.23887>:
      info = iftmp.49;
      if (info != 0B) goto <D.23889>; else goto <D.23890>;
      <D.23889>:
      iftmp.50 = info->name;
      goto <D.23891>;
      <D.23890>:
      iftmp.50 = "";
      <D.23891>:
      D.23880 = inst->type_argc;
      D.23881 = (int) D.23880;
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.50, D.23881);
      D.23848 = 0B;
      return D.23848;
    }
    <D.23883>:
    D.23892 = inst->type_argv[num];
    D.23893 = is_valid_generic_argument (D.23892);
    if (D.23893 == 0) goto <D.23894>; else goto <D.23895>;
    <D.23894>:
    {
      struct MonoGenericParamInfo * info;

      D.23842 = type->data.generic_param;
      D.23854 = D.23842->owner;
      if (D.23854 != 0B) goto <D.23897>; else goto <D.23898>;
      <D.23897>:
      D.23842 = type->data.generic_param;
      iftmp.51 = &MEM[(struct MonoGenericParamFull *)D.23842].info;
      goto <D.23899>;
      <D.23898>:
      iftmp.51 = 0B;
      <D.23899>:
      info = iftmp.51;
      if (info != 0B) goto <D.23901>; else goto <D.23902>;
      <D.23901>:
      iftmp.52 = info->name;
      goto <D.23903>;
      <D.23902>:
      iftmp.52 = "";
      <D.23903>:
      D.23892 = inst->type_argv[num];
      D.23904 = D.23892->type;
      D.23905 = (int) D.23904;
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.52, D.23905);
      D.23848 = 0B;
      return D.23848;
    }
    <D.23895>:
    D.23892 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.23892);
    D.23876 = type->byref;
    nt->byref = D.23876;
    D.23877 = type->attrs;
    nt->attrs = D.23877;
    D.23848 = nt;
    return D.23848;
  }
  <D.19511>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    eclass = type->data.klass;
    D.23906 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.23906, context, error);
    if (inflated == 0B) goto <D.23907>; else goto <D.23909>;
    <D.23909>:
    D.23910 = mono_error_ok (error);
    if (D.23910 == 0) goto <D.23907>; else goto <D.23908>;
    <D.23907>:
    D.23848 = 0B;
    return D.23848;
    <D.23908>:
    nt = mono_metadata_type_dup (image, type);
    D.23911 = mono_class_from_mono_type (inflated);
    nt->data.klass = D.23911;
    mono_metadata_free_type (inflated);
    D.23848 = nt;
    return D.23848;
  }
  <D.19515>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    D.23912 = type->data.array;
    eclass = D.23912->eklass;
    D.23913 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.23913, context, error);
    if (inflated == 0B) goto <D.23914>; else goto <D.23916>;
    <D.23916>:
    D.23917 = mono_error_ok (error);
    if (D.23917 == 0) goto <D.23914>; else goto <D.23915>;
    <D.23914>:
    D.23848 = 0B;
    return D.23848;
    <D.23915>:
    nt = mono_metadata_type_dup (image, type);
    D.23918 = nt->data.array;
    D.23919 = mono_class_from_mono_type (inflated);
    D.23918->eklass = D.23919;
    mono_metadata_free_type (inflated);
    D.23848 = nt;
    return D.23848;
  }
  <D.19519>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    struct MonoType * nt;

    gclass = type->data.generic_class;
    D.23920 = gclass->context.class_inst;
    D.23921 = BIT_FIELD_REF <*D.23920, 64, 0>;
    D.23922 = D.23921 & 18014398509481984;
    if (D.23922 == 0) goto <D.23923>; else goto <D.23924>;
    <D.23923>:
    D.23848 = 0B;
    return D.23848;
    <D.23924>:
    D.23920 = gclass->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.23920, context, error);
    D.23925 = mono_error_ok (error);
    if (D.23925 == 0) goto <D.23926>; else goto <D.23927>;
    <D.23926>:
    D.23848 = 0B;
    return D.23848;
    <D.23927>:
    D.23920 = gclass->context.class_inst;
    if (D.23920 != inst) goto <D.23928>; else goto <D.23929>;
    <D.23928>:
    D.23930 = gclass->container_class;
    D.23931 = gclass->is_dynamic;
    D.23932 = (int) D.23931;
    gclass = mono_metadata_lookup_generic_class (D.23930, inst, D.23932);
    <D.23929>:
    D.23933 = type->data.generic_class;
    if (D.23933 == gclass) goto <D.23934>; else goto <D.23935>;
    <D.23934>:
    D.23848 = 0B;
    return D.23848;
    <D.23935>:
    nt = mono_metadata_type_dup (image, type);
    nt->data.generic_class = gclass;
    D.23848 = nt;
    return D.23848;
  }
  <D.19523>:
  <D.19524>:
  {
    struct MonoClass * klass;
    struct MonoGenericContainer * container;
    struct MonoGenericInst * inst;
    struct MonoGenericClass * gclass;
    struct MonoType * nt;

    klass = type->data.klass;
    container = klass->generic_container;
    gclass = 0B;
    if (container == 0B) goto <D.23936>; else goto <D.23937>;
    <D.23936>:
    D.23848 = 0B;
    return D.23848;
    <D.23937>:
    D.23938 = container->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.23938, context, error);
    D.23939 = mono_error_ok (error);
    if (D.23939 == 0) goto <D.23940>; else goto <D.23941>;
    <D.23940>:
    D.23848 = 0B;
    return D.23848;
    <D.23941>:
    D.23938 = container->context.class_inst;
    if (D.23938 == inst) goto <D.23942>; else goto <D.23943>;
    <D.23942>:
    D.23848 = 0B;
    return D.23848;
    <D.23943>:
    D.23944 = klass->image;
    D.23945 = D.23944->dynamic;
    D.23946 = (int) D.23945;
    gclass = mono_metadata_lookup_generic_class (klass, inst, D.23946);
    nt = mono_metadata_type_dup (image, type);
    nt->type = 21;
    nt->data.generic_class = gclass;
    D.23848 = nt;
    return D.23848;
  }
  <D.19530>:
  D.23848 = 0B;
  return D.23848;
  D.23848 = 0B;
  return D.23848;
}


is_valid_generic_argument (struct MonoType * type)
{
  unsigned char D.23948;
  int D.23949;
  gboolean D.23950;

  D.23948 = type->type;
  D.23949 = (int) D.23948;
  switch (D.23949) <default: <D.23951>, case 1: <D.19492>>
  <D.19492>:
  D.23950 = 0;
  return D.23950;
  <D.23951>:
  D.23950 = 1;
  return D.23950;
}


mono_class_inflate_generic_type (struct MonoType * type, struct MonoGenericContext * context)
{
  int D.23953;
  struct MonoType * D.23956;
  struct MonoError error;
  struct MonoType * result;

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.23953 = mono_error_ok (&error);
      if (D.23953 == 0) goto <D.23954>; else goto <D.23955>;
      <D.23954>:
      mono_error_cleanup (&error);
      D.23956 = 0B;
      return D.23956;
      <D.23955>:
      D.23956 = result;
      return D.23956;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_type_checked (struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.23959;

  D.23959 = mono_class_inflate_generic_type_with_mempool (0B, type, context, error);
  return D.23959;
}


mono_class_inflate_generic_class (struct MonoClass * gklass, struct MonoGenericContext * context)
{
  int D.23961;
  _Bool D.23962;
  long int D.23963;
  long int D.23964;
  struct MonoClass * D.23967;
  struct MonoError error;
  struct MonoClass * res;

  try
    {
      res = mono_class_inflate_generic_class_checked (gklass, context, &error);
      D.23961 = mono_error_ok (&error);
      D.23962 = D.23961 == 0;
      D.23963 = (long int) D.23962;
      D.23964 = __builtin_expect (D.23963, 0);
      if (D.23964 != 0) goto <D.23965>; else goto <D.23966>;
      <D.23965>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 905, "mono_error_ok (&error)");
      <D.23966>:
      D.23967 = res;
      return D.23967;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method (struct MonoMethod * method, struct MonoGenericContext * context)
{
  struct MonoMethod * D.23970;

  D.23970 = mono_class_inflate_generic_method_full (method, 0B, context);
  return D.23970;
}


mono_class_inflate_generic_method_full (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context)
{
  int D.23972;
  const char * D.23975;
  struct MonoMethod * D.23976;
  struct MonoError error;
  struct MonoMethod * res;

  try
    {
      res = mono_class_inflate_generic_method_full_checked (method, klass_hint, context, &error);
      D.23972 = mono_error_ok (&error);
      if (D.23972 == 0) goto <D.23973>; else goto <D.23974>;
      <D.23973>:
      D.23975 = mono_error_get_message (&error);
      monoeg_g_log (0B, 4, "Could not inflate generic method due to %s", D.23975);
      <D.19602>:
      goto <D.19602>;
      <D.23974>:
      D.23976 = res;
      return D.23976;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method_full_checked (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.23979;
  struct MonoMethod * D.23982;
  int D.23983;
  long unsigned int D.23986;
  long unsigned int D.23987;
  long unsigned int D.23991;
  struct MonoGenericInst * D.23993;
  struct MonoClass * D.23994;
  struct MonoGenericContainer * D.23995;
  struct MonoGenericInst * D.23997;
  int iftmp.53;
  struct MonoImage * D.24002;
  long unsigned int D.24003;
  long unsigned int D.24004;
  long unsigned int D.24006;
  long unsigned int D.24007;
  struct MonoGenericContainer * D.24009;
  struct MonoGenericInst * D.24010;
  unsigned char D.24012;
  <unnamed-unsigned:1> D.24013;
  struct MonoGenericContainer * D.24018;
  struct MonoGenericInst * D.24019;
  struct MonoMethod * D.24022;
  struct MonoClass * D.24023;
  struct MonoGenericClass * D.24024;
  _Bool D.24025;
  long int D.24026;
  long int D.24027;
  struct MonoGenericContainer * D.24030;
  struct MonoGenericInst * D.24033;
  struct MonoGenericInst * D.24037;
  long unsigned int D.24040;
  long unsigned int D.24041;
  unsigned int inflated_methods_size.54;
  unsigned int inflated_methods_size.55;
  const char * D.24046;
  long unsigned int D.24047;
  long unsigned int D.24048;
  struct MonoMethodPInvoke * D.24051;
  struct MonoMethod * D.24053;
  struct MonoGenericClass * D.24061;
  struct MonoClass * D.24063;
  struct MonoGenericInst * D.24065;
  struct MonoClass * D.24068;
  struct MonoType * D.24071;
  int D.24072;
  struct MonoClass * iftmp.56;
  struct MonoMethod * result;
  struct MonoMethodInflated * iresult;
  struct MonoMethodInflated * cached;
  struct MonoMethodSignature * sig;
  struct MonoGenericContext tmp_context;
  gboolean is_mb_open;
  void fail = <<< error >>>;

  try
    {
      is_mb_open = 0;
      mono_error_init (error);
      goto <D.19618>;
      <D.19617>:
      {
        struct MonoGenericContext * method_context;
        struct MonoMethodInflated * imethod;

        method_context = mono_method_get_context (method);
        imethod = method;
        tmp_context = inflate_generic_context (method_context, context, error);
        D.23979 = mono_error_ok (error);
        if (D.23979 == 0) goto <D.23980>; else goto <D.23981>;
        <D.23980>:
        D.23982 = 0B;
        return D.23982;
        <D.23981>:
        context = &tmp_context;
        D.23983 = mono_metadata_generic_context_equal (method_context, context);
        if (D.23983 != 0) goto <D.23984>; else goto <D.23985>;
        <D.23984>:
        D.23982 = method;
        return D.23982;
        <D.23985>:
        method = imethod->declaring;
      }
      <D.19618>:
      D.23986 = BIT_FIELD_REF <*method, 64, 256>;
      D.23987 = D.23986 & 4096;
      if (D.23987 != 0) goto <D.19617>; else goto <D.19619>;
      <D.19619>:
      D.23986 = BIT_FIELD_REF <*method, 64, 256>;
      D.23991 = D.23986 & 2048;
      if (D.23991 == 0) goto <D.23990>; else goto <D.23992>;
      <D.23992>:
      D.23993 = context->method_inst;
      if (D.23993 == 0B) goto <D.23990>; else goto <D.23989>;
      <D.23990>:
      D.23994 = method->klass;
      D.23995 = D.23994->generic_container;
      if (D.23995 == 0B) goto <D.23988>; else goto <D.23996>;
      <D.23996>:
      D.23997 = context->class_inst;
      if (D.23997 == 0B) goto <D.23988>; else goto <D.23989>;
      <D.23988>:
      D.23982 = method;
      return D.23982;
      <D.23989>:
      D.23986 = BIT_FIELD_REF <*method, 64, 256>;
      D.23991 = D.23986 & 2048;
      if (D.23991 != 0) goto <D.24001>; else goto <D.23999>;
      <D.24001>:
      D.23994 = method->klass;
      D.24002 = D.23994->image;
      D.24003 = BIT_FIELD_REF <*D.24002, 64, 192>;
      D.24004 = D.24003 & 34359738368;
      if (D.24004 != 0) goto <D.24005>; else goto <D.23999>;
      <D.24005>:
      D.23994 = method->klass;
      D.24006 = BIT_FIELD_REF <*D.23994, 64, 256>;
      D.24007 = D.24006 & 128;
      if (D.24007 == 0) goto <D.24008>; else goto <D.23999>;
      <D.24008>:
      D.23993 = context->method_inst;
      D.24009 = mono_method_get_generic_container (method);
      D.24010 = D.24009->context.method_inst;
      if (D.23993 == D.24010) goto <D.24011>; else goto <D.23999>;
      <D.24011>:
      iftmp.53 = 1;
      goto <D.24000>;
      <D.23999>:
      iftmp.53 = 0;
      <D.24000>:
      is_mb_open = iftmp.53;
      iresult = monoeg_malloc0 (88);
      iresult->context = *context;
      iresult->declaring = method;
      D.24012 = (unsigned char) is_mb_open;
      D.24013 = (<unnamed-unsigned:1>) D.24012;
      iresult->method.method.is_mb_open = D.24013;
      D.23993 = context->method_inst;
      if (D.23993 == 0B) goto <D.24014>; else goto <D.24015>;
      <D.24014>:
      D.23986 = BIT_FIELD_REF <*method, 64, 256>;
      D.23991 = D.23986 & 2048;
      if (D.23991 != 0) goto <D.24016>; else goto <D.24017>;
      <D.24016>:
      D.24018 = mono_method_get_generic_container (method);
      D.24019 = D.24018->context.method_inst;
      iresult->context.method_inst = D.24019;
      <D.24017>:
      <D.24015>:
      D.23997 = context->class_inst;
      if (D.23997 == 0B) goto <D.24020>; else goto <D.24021>;
      <D.24020>:
      D.24022 = iresult->declaring;
      D.24023 = D.24022->klass;
      D.24024 = D.24023->generic_class;
      D.24025 = D.24024 != 0B;
      D.24026 = (long int) D.24025;
      D.24027 = __builtin_expect (D.24026, 0);
      if (D.24027 != 0) goto <D.24028>; else goto <D.24029>;
      <D.24028>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1059, "!iresult->declaring->klass->generic_class");
      <D.24029>:
      D.24022 = iresult->declaring;
      D.24023 = D.24022->klass;
      D.24030 = D.24023->generic_container;
      if (D.24030 != 0B) goto <D.24031>; else goto <D.24032>;
      <D.24031>:
      D.24022 = iresult->declaring;
      D.24023 = D.24022->klass;
      D.24030 = D.24023->generic_container;
      D.24033 = D.24030->context.class_inst;
      iresult->context.class_inst = D.24033;
      goto <D.24034>;
      <D.24032>:
      D.24022 = iresult->declaring;
      D.24023 = D.24022->klass;
      D.24024 = D.24023->generic_class;
      if (D.24024 != 0B) goto <D.24035>; else goto <D.24036>;
      <D.24035>:
      D.24022 = iresult->declaring;
      D.24023 = D.24022->klass;
      D.24024 = D.24023->generic_class;
      D.24037 = D.24024->context.class_inst;
      iresult->context.class_inst = D.24037;
      <D.24036>:
      <D.24034>:
      <D.24021>:
      mono_loader_lock ();
      cached = mono_method_inflated_lookup (iresult, 0);
      if (cached != 0B) goto <D.24038>; else goto <D.24039>;
      <D.24038>:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.23982 = cached;
      return D.23982;
      <D.24039>:
      D.24040 = mono_stats.inflated_method_count;
      D.24041 = D.24040 + 1;
      mono_stats.inflated_method_count = D.24041;
      inflated_methods_size.54 = inflated_methods_size;
      inflated_methods_size.55 = inflated_methods_size.54 + 88;
      inflated_methods_size = inflated_methods_size.55;
      sig = mono_method_signature (method);
      if (sig == 0B) goto <D.24044>; else goto <D.24045>;
      <D.24044>:
      {
        char * name;

        D.23994 = method->klass;
        name = mono_type_get_full_name (D.23994);
        D.23994 = method->klass;
        D.24002 = D.23994->image;
        D.24046 = method->name;
        mono_error_set_bad_image (error, D.24002, "Could not resolve signature of method %s:%s", name, D.24046);
        monoeg_g_free (name);
        goto fail;
      }
      <D.24045>:
      D.24047 = BIT_FIELD_REF <*sig, 64, 64>;
      D.24048 = D.24047 & 72057594037927936;
      if (D.24048 != 0) goto <D.24049>; else goto <D.24050>;
      <D.24049>:
      D.24051 = &iresult->method.pinvoke;
      memcpy (D.24051, method, 56);
      goto <D.24052>;
      <D.24050>:
      D.24053 = &iresult->method.method;
      memcpy (D.24053, method, 40);
      <D.24052>:
      result = iresult;
      result->is_inflated = 1;
      result->is_generic = 0;
      result->sre_method = 0;
      result->signature = 0B;
      D.24012 = (unsigned char) is_mb_open;
      D.24013 = (<unnamed-unsigned:1>) D.24012;
      result->is_mb_open = D.24013;
      D.23993 = context->method_inst;
      if (D.23993 == 0B) goto <D.24054>; else goto <D.24055>;
      <D.24054>:
      {
        struct MonoGenericContainer * generic_container;

        generic_container = mono_method_get_generic_container (method);
        if (generic_container != 0B) goto <D.24056>; else goto <D.24057>;
        <D.24056>:
        result->is_generic = 1;
        mono_method_set_generic_container (result, generic_container);
        <D.24057>:
      }
      <D.24055>:
      if (klass_hint == 0B) goto <D.24058>; else goto <D.24060>;
      <D.24060>:
      D.24061 = klass_hint->generic_class;
      if (D.24061 == 0B) goto <D.24058>; else goto <D.24062>;
      <D.24062>:
      D.24061 = klass_hint->generic_class;
      D.24063 = D.24061->container_class;
      D.23994 = method->klass;
      if (D.24063 != D.23994) goto <D.24058>; else goto <D.24064>;
      <D.24064>:
      D.24061 = klass_hint->generic_class;
      D.24065 = D.24061->context.class_inst;
      D.23997 = context->class_inst;
      if (D.24065 != D.23997) goto <D.24058>; else goto <D.24059>;
      <D.24058>:
      klass_hint = 0B;
      <D.24059>:
      D.23994 = method->klass;
      D.23995 = D.23994->generic_container;
      if (D.23995 != 0B) goto <D.24066>; else goto <D.24067>;
      <D.24066>:
      result->klass = klass_hint;
      <D.24067>:
      D.24068 = result->klass;
      if (D.24068 == 0B) goto <D.24069>; else goto <D.24070>;
      <D.24069>:
      {
        struct MonoType * inflated;

        D.23994 = method->klass;
        D.24071 = &D.23994->byval_arg;
        inflated = inflate_generic_type (0B, D.24071, context, error);
        D.24072 = mono_error_ok (error);
        if (D.24072 == 0) goto fail; else goto <D.24073>;
        <D.24073>:
        if (inflated != 0B) goto <D.24075>; else goto <D.24076>;
        <D.24075>:
        iftmp.56 = mono_class_from_mono_type (inflated);
        goto <D.24077>;
        <D.24076>:
        iftmp.56 = method->klass;
        <D.24077>:
        result->klass = iftmp.56;
        if (inflated != 0B) goto <D.24078>; else goto <D.24079>;
        <D.24078>:
        mono_metadata_free_type (inflated);
        <D.24079>:
      }
      <D.24070>:
      mono_method_inflated_lookup (iresult, 1);
      mono_loader_unlock ();
      D.23982 = result;
      return D.23982;
      fail:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.23982 = 0B;
      return D.23982;
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


inflate_generic_context (struct MonoGenericContext * context, struct MonoGenericContext * inflate_with, struct MonoError * error)
{
  struct MonoGenericInst * D.24082;
  int D.24085;
  struct MonoGenericInst * D.24087;
  int D.24090;
  struct MonoGenericContext D.24092;
  struct MonoGenericInst * class_inst;
  struct MonoGenericInst * method_inst;
  struct MonoGenericContext res;
  void fail = <<< error >>>;

  try
    {
      class_inst = 0B;
      method_inst = 0B;
      res.class_inst = 0B;
      res.method_inst = 0B;
      mono_error_init (error);
      D.24082 = context->class_inst;
      if (D.24082 != 0B) goto <D.24083>; else goto <D.24084>;
      <D.24083>:
      D.24082 = context->class_inst;
      class_inst = mono_metadata_inflate_generic_inst (D.24082, inflate_with, error);
      D.24085 = mono_error_ok (error);
      if (D.24085 == 0) goto fail; else goto <D.24086>;
      <D.24086>:
      <D.24084>:
      D.24087 = context->method_inst;
      if (D.24087 != 0B) goto <D.24088>; else goto <D.24089>;
      <D.24088>:
      D.24087 = context->method_inst;
      method_inst = mono_metadata_inflate_generic_inst (D.24087, inflate_with, error);
      D.24090 = mono_error_ok (error);
      if (D.24090 == 0) goto fail; else goto <D.24091>;
      <D.24091>:
      <D.24089>:
      res.class_inst = class_inst;
      res.method_inst = method_inst;
      fail:
      D.24092 = res;
      return D.24092;
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_get_inflated_method (struct MonoMethod * method)
{
  struct MonoMethod * D.24095;

  D.24095 = method;
  return D.24095;
}


mono_method_get_context_general (struct MonoMethod * method, gboolean uninflated)
{
  long unsigned int D.24097;
  long unsigned int D.24098;
  struct MonoGenericContext * D.24101;
  long unsigned int D.24104;
  struct MonoGenericContainer * D.24107;
  struct MonoClass * D.24108;
  struct MonoGenericContainer * D.24109;

  D.24097 = BIT_FIELD_REF <*method, 64, 256>;
  D.24098 = D.24097 & 4096;
  if (D.24098 != 0) goto <D.24099>; else goto <D.24100>;
  <D.24099>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.24101 = &imethod->context;
    return D.24101;
  }
  <D.24100>:
  if (uninflated == 0) goto <D.24102>; else goto <D.24103>;
  <D.24102>:
  D.24101 = 0B;
  return D.24101;
  <D.24103>:
  D.24097 = BIT_FIELD_REF <*method, 64, 256>;
  D.24104 = D.24097 & 2048;
  if (D.24104 != 0) goto <D.24105>; else goto <D.24106>;
  <D.24105>:
  D.24107 = mono_method_get_generic_container (method);
  D.24101 = &D.24107->context;
  return D.24101;
  <D.24106>:
  D.24108 = method->klass;
  D.24109 = D.24108->generic_container;
  if (D.24109 != 0B) goto <D.24110>; else goto <D.24111>;
  <D.24110>:
  D.24108 = method->klass;
  D.24109 = D.24108->generic_container;
  D.24101 = &D.24109->context;
  return D.24101;
  <D.24111>:
  D.24101 = 0B;
  return D.24101;
}


mono_method_get_context (struct MonoMethod * method)
{
  struct MonoGenericContext * D.24113;

  D.24113 = mono_method_get_context_general (method, 0);
  return D.24113;
}


mono_method_get_generic_container (struct MonoMethod * method)
{
  long unsigned int D.24115;
  long unsigned int D.24116;
  struct MonoGenericContainer * D.24119;
  struct MonoClass * D.24120;
  struct MonoImage * D.24121;
  _Bool D.24122;
  long int D.24123;
  long int D.24124;
  struct MonoGenericContainer * container;

  D.24115 = BIT_FIELD_REF <*method, 64, 256>;
  D.24116 = D.24115 & 2048;
  if (D.24116 == 0) goto <D.24117>; else goto <D.24118>;
  <D.24117>:
  D.24119 = 0B;
  return D.24119;
  <D.24118>:
  D.24120 = method->klass;
  D.24121 = D.24120->image;
  container = mono_image_property_lookup (D.24121, method, 0);
  D.24122 = container == 0B;
  D.24123 = (long int) D.24122;
  D.24124 = __builtin_expect (D.24123, 0);
  if (D.24124 != 0) goto <D.24125>; else goto <D.24126>;
  <D.24125>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1216, "container");
  <D.24126>:
  D.24119 = container;
  return D.24119;
}


mono_method_set_generic_container (struct MonoMethod * method, struct MonoGenericContainer * container)
{
  long unsigned int D.24128;
  long unsigned int D.24129;
  _Bool D.24130;
  long int D.24131;
  long int D.24132;
  struct MonoClass * D.24135;
  struct MonoImage * D.24136;

  D.24128 = BIT_FIELD_REF <*method, 64, 256>;
  D.24129 = D.24128 & 2048;
  D.24130 = D.24129 == 0;
  D.24131 = (long int) D.24130;
  D.24132 = __builtin_expect (D.24131, 0);
  if (D.24132 != 0) goto <D.24133>; else goto <D.24134>;
  <D.24133>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1230, "method->is_generic");
  <D.24134>:
  D.24135 = method->klass;
  D.24136 = D.24135->image;
  mono_image_property_insert (D.24136, method, 0, container);
}


mono_class_setup_fields_locking (struct MonoClass * class)
{
  long unsigned int D.24137;
  long unsigned int D.24138;

  D.24137 = BIT_FIELD_REF <*class, 64, 256>;
  D.24138 = D.24137 & 137438953472;
  if (D.24138 != 0) goto <D.24139>; else goto <D.24140>;
  <D.24139>:
  return;
  <D.24140>:
  mono_loader_lock ();
  mono_class_setup_fields (class);
  mono_loader_unlock ();
}


mono_class_setup_fields (struct MonoClass * class)
{
  unsigned int D.24142;
  struct MonoClass * iftmp.57;
  struct MonoGenericClass * D.24144;
  long unsigned int D.24148;
  long unsigned int D.24149;
  struct MonoClass * D.24154;
  struct MonoImage * D.24155;
  long unsigned int D.24156;
  long unsigned int D.24157;
  long unsigned int D.24160;
  long unsigned int D.24161;
  unsigned int D.24164;
  unsigned char D.24167;
  unsigned char D.24170;
  struct MonoClass * D.24173;
  long unsigned int D.24176;
  long unsigned int D.24177;
  unsigned char D.24180;
  int D.24183;
  int D.24184;
  int D.24185;
  unsigned char D.24186;
  <unnamed-unsigned:1> D.24187;
  unsigned char D.24188;
  <unnamed-unsigned:1> D.24189;
  unsigned char D.24190;
  unsigned char D.24191;
  <unnamed-unsigned:1> D.24192;
  <unnamed-unsigned:1> D.24193;
  struct MonoImage * D.24195;
  unsigned int D.24196;
  unsigned int D.24197;
  unsigned int packing_size.58;
  unsigned int D.24201;
  const char * D.24204;
  unsigned char D.24205;
  <unnamed-unsigned:4> D.24206;
  unsigned int D.24207;
  unsigned int real_size.59;
  unsigned int real_size.60;
  unsigned int D.24216;
  int D.24217;
  unsigned char D.24218;
  <unnamed-unsigned:1> D.24219;
  struct MonoGenericContainer * D.24222;
  _Bool D.24228;
  long int D.24229;
  long int D.24230;
  unsigned int D.24233;
  unsigned int i.61;
  unsigned int D.24235;
  struct MonoClassField * D.24236;
  long unsigned int D.24237;
  long unsigned int D.24238;
  struct MonoType * D.24239;
  int D.24242;
  char * D.24247;
  const char * D.24248;
  _Bool D.24249;
  long int D.24250;
  long int D.24251;
  short unsigned int D.24254;
  int D.24255;
  int D.24256;
  int D.19715;
  int iftmp.62;
  int D.19714;
  const char[9] * D.24262;
  unsigned char D.24263;
  int D.24264;
  unsigned char D.24265;
  int D.24266;
  const unsigned char * D.24271;
  unsigned char D.24272;
  int D.24273;
  const unsigned char * D.24274;
  unsigned char D.24275;
  int D.24276;
  const unsigned char * D.24281;
  unsigned char D.24282;
  int D.24283;
  const unsigned char * D.24284;
  unsigned char D.24285;
  int D.24286;
  const unsigned char * D.24291;
  unsigned char D.24292;
  int D.24293;
  const unsigned char * D.24294;
  unsigned char D.24295;
  int D.24296;
  const char * D.24298;
  struct MonoClassField * D.24303;
  int D.24304;
  unsigned int idx.63;
  unsigned int offset.64;
  int offset.65;
  int D.24311;
  int D.24314;
  gchar * D.24317;
  gchar * D.24320;
  long unsigned int D.24328;
  long unsigned int D.24329;
  int D.24331;
  unsigned char D.24334;
  long unsigned int D.24340;
  long unsigned int D.24341;
  long unsigned int D.24342;
  struct MonoClass * D.24347;
  struct MonoClass * D.24348;
  <unnamed-unsigned:1> D.24349;
  int D.24350;
  struct MonoClass * D.24353;
  struct MonoType * D.24358;
  unsigned char D.24365;
  long unsigned int D.24368;
  unsigned int D.24371;
  unsigned int D.24372;
  struct MonoError error;
  struct MonoImage * m;
  int top;
  guint32 layout;
  int i;
  int blittable;
  guint32 real_size;
  guint32 packing_size;
  gboolean explicit_size;
  struct MonoClassField * field;
  struct MonoGenericContainer * container;
  struct MonoClass * gtd;

  try
    {
      m = class->image;
      D.24142 = class->flags;
      layout = D.24142 & 24;
      blittable = 1;
      real_size = 0;
      packing_size = 0;
      container = 0B;
      D.24144 = class->generic_class;
      if (D.24144 != 0B) goto <D.24145>; else goto <D.24146>;
      <D.24145>:
      iftmp.57 = mono_class_get_generic_type_definition (class);
      goto <D.24147>;
      <D.24146>:
      iftmp.57 = 0B;
      <D.24147>:
      gtd = iftmp.57;
      D.24148 = BIT_FIELD_REF <*class, 64, 256>;
      D.24149 = D.24148 & 274877906944;
      if (D.24149 != 0) goto <D.24150>; else goto <D.24151>;
      <D.24150>:
      return;
      <D.24151>:
      D.24144 = class->generic_class;
      if (D.24144 != 0B) goto <D.24152>; else goto <D.24153>;
      <D.24152>:
      D.24144 = class->generic_class;
      D.24154 = D.24144->container_class;
      D.24155 = D.24154->image;
      D.24156 = BIT_FIELD_REF <*D.24155, 64, 192>;
      D.24157 = D.24156 & 34359738368;
      if (D.24157 != 0) goto <D.24158>; else goto <D.24159>;
      <D.24158>:
      D.24144 = class->generic_class;
      D.24154 = D.24144->container_class;
      D.24160 = BIT_FIELD_REF <*D.24154, 64, 256>;
      D.24161 = D.24160 & 128;
      if (D.24161 == 0) goto <D.24162>; else goto <D.24163>;
      <D.24162>:
      return;
      <D.24163>:
      <D.24159>:
      <D.24153>:
      mono_class_setup_basic_field_info (class);
      D.24164 = class->field.count;
      top = (int) D.24164;
      if (gtd != 0B) goto <D.24165>; else goto <D.24166>;
      <D.24165>:
      mono_class_setup_fields (gtd);
      D.24167 = gtd->exception_type;
      if (D.24167 != 0) goto <D.24168>; else goto <D.24169>;
      <D.24168>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.24169>:
      <D.24166>:
      class->instance_size = 0;
      D.24170 = class->rank;
      if (D.24170 == 0) goto <D.24171>; else goto <D.24172>;
      <D.24171>:
      class->sizes.class_size = 0;
      <D.24172>:
      D.24173 = class->parent;
      if (D.24173 != 0B) goto <D.24174>; else goto <D.24175>;
      <D.24174>:
      D.24173 = class->parent;
      mono_class_init (D.24173);
      D.24173 = class->parent;
      D.24176 = BIT_FIELD_REF <*D.24173, 64, 256>;
      D.24177 = D.24176 & 4;
      if (D.24177 == 0) goto <D.24178>; else goto <D.24179>;
      <D.24178>:
      D.24173 = class->parent;
      mono_class_setup_fields (D.24173);
      D.24173 = class->parent;
      D.24180 = D.24173->exception_type;
      if (D.24180 != 0) goto <D.24181>; else goto <D.24182>;
      <D.24181>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.24182>:
      <D.24179>:
      D.24183 = class->instance_size;
      D.24173 = class->parent;
      D.24184 = D.24173->instance_size;
      D.24185 = D.24183 + D.24184;
      class->instance_size = D.24185;
      D.24173 = class->parent;
      D.24186 = D.24173->min_align;
      class->min_align = D.24186;
      D.24187 = class->has_references;
      D.24188 = (unsigned char) D.24187;
      D.24173 = class->parent;
      D.24189 = D.24173->has_references;
      D.24190 = (unsigned char) D.24189;
      D.24191 = D.24188 | D.24190;
      D.24192 = (<unnamed-unsigned:1>) D.24191;
      class->has_references = D.24192;
      D.24173 = class->parent;
      D.24193 = D.24173->blittable;
      blittable = (int) D.24193;
      goto <D.24194>;
      <D.24175>:
      class->instance_size = 16;
      class->min_align = 1;
      <D.24194>:
      D.24195 = class->image;
      D.24196 = class->type_token;
      D.24197 = mono_metadata_packing_from_typedef (D.24195, D.24196, &packing_size, &real_size);
      explicit_size = (gboolean) D.24197;
      if (explicit_size != 0) goto <D.24198>; else goto <D.24199>;
      <D.24198>:
      packing_size.58 = packing_size;
      D.24201 = packing_size.58 & 4294967280;
      if (D.24201 != 0) goto <D.24202>; else goto <D.24203>;
      <D.24202>:
      {
        char * err_msg;

        D.24204 = class->name;
        packing_size.58 = packing_size;
        err_msg = monoeg_g_strdup_printf ("Could not load struct \'%s\' with packing size %d >= 16", D.24204, packing_size.58);
        mono_class_set_failure (class, 7, err_msg);
        return;
      }
      <D.24203>:
      packing_size.58 = packing_size;
      D.24205 = (unsigned char) packing_size.58;
      D.24206 = (<unnamed-unsigned:4>) D.24205;
      class->packing_size = D.24206;
      D.24183 = class->instance_size;
      D.24207 = (unsigned int) D.24183;
      real_size.59 = real_size;
      real_size.60 = D.24207 + real_size.59;
      real_size = real_size.60;
      <D.24199>:
      if (top == 0) goto <D.24210>; else goto <D.24211>;
      <D.24210>:
      if (explicit_size != 0) goto <D.24212>; else goto <D.24213>;
      <D.24212>:
      real_size.59 = real_size;
      if (real_size.59 != 0) goto <D.24214>; else goto <D.24215>;
      <D.24214>:
      D.24183 = class->instance_size;
      D.24207 = (unsigned int) D.24183;
      real_size.59 = real_size;
      D.24216 = MAX_EXPR <D.24207, real_size.59>;
      D.24217 = (int) D.24216;
      class->instance_size = D.24217;
      <D.24215>:
      <D.24213>:
      D.24218 = (unsigned char) blittable;
      D.24219 = (<unnamed-unsigned:1>) D.24218;
      class->blittable = D.24219;
      mono_memory_barrier ();
      class->size_inited = 1;
      class->fields_inited = 1;
      class->setup_fields_called = 1;
      return;
      <D.24211>:
      if (layout == 0) goto <D.24220>; else goto <D.24221>;
      <D.24220>:
      blittable = 0;
      <D.24221>:
      class->setup_fields_called = 1;
      D.24222 = class->generic_container;
      if (D.24222 != 0B) goto <D.24223>; else goto <D.24224>;
      <D.24223>:
      container = class->generic_container;
      goto <D.24225>;
      <D.24224>:
      if (gtd != 0B) goto <D.24226>; else goto <D.24227>;
      <D.24226>:
      container = gtd->generic_container;
      D.24228 = container == 0B;
      D.24229 = (long int) D.24228;
      D.24230 = __builtin_expect (D.24229, 0);
      if (D.24230 != 0) goto <D.24231>; else goto <D.24232>;
      <D.24231>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1567, "container");
      <D.24232>:
      <D.24227>:
      <D.24225>:
      i = 0;
      goto <D.19724>;
      <D.19723>:
      {
        int idx;

        D.24233 = class->field.first;
        i.61 = (unsigned int) i;
        D.24235 = D.24233 + i.61;
        idx = (int) D.24235;
        D.24236 = class->fields;
        D.24237 = (long unsigned int) i;
        D.24238 = D.24237 * 32;
        field = D.24236 + D.24238;
        field->parent = class;
        D.24239 = field->type;
        if (D.24239 == 0B) goto <D.24240>; else goto <D.24241>;
        <D.24240>:
        mono_field_resolve_type (field, &error);
        D.24242 = mono_error_ok (&error);
        if (D.24242 == 0) goto <D.24243>; else goto <D.24244>;
        <D.24243>:
        mono_error_cleanup (&error);
        return;
        <D.24244>:
        D.24239 = field->type;
        if (D.24239 == 0B) goto <D.24245>; else goto <D.24246>;
        <D.24245>:
        D.24247 = mono_type_get_full_name (class);
        D.24248 = field->name;
        monoeg_g_log (0B, 4, "could not resolve %s:%s\n", D.24247, D.24248);
        <D.19706>:
        goto <D.19706>;
        <D.24246>:
        D.24239 = field->type;
        D.24249 = D.24239 == 0B;
        D.24250 = (long int) D.24249;
        D.24251 = __builtin_expect (D.24250, 0);
        if (D.24251 != 0) goto <D.24252>; else goto <D.24253>;
        <D.24252>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1588, "field->type");
        <D.24253>:
        <D.24241>:
        D.24239 = field->type;
        D.24254 = D.24239->attrs;
        D.24255 = (int) D.24254;
        D.24256 = D.24255 & 1536;
        if (D.24256 != 0) goto <D.24257>; else goto <D.24258>;
        <D.24257>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24262 = "_Deleted";
            D.24263 = MEM[(const unsigned char *)D.24262];
            D.24264 = (int) D.24263;
            D.24265 = *__s2;
            D.24266 = (int) D.24265;
            __result = D.24264 - D.24266;
            {
              if (__s2_len != 0) goto <D.24267>; else goto <D.24268>;
              <D.24267>:
              if (__result == 0) goto <D.24269>; else goto <D.24270>;
              <D.24269>:
              D.24271 = &MEM[(void *)"_Deleted" + 1B];
              D.24272 = *D.24271;
              D.24273 = (int) D.24272;
              D.24274 = __s2 + 1;
              D.24275 = *D.24274;
              D.24276 = (int) D.24275;
              __result = D.24273 - D.24276;
              if (__s2_len > 1) goto <D.24277>; else goto <D.24278>;
              <D.24277>:
              if (__result == 0) goto <D.24279>; else goto <D.24280>;
              <D.24279>:
              D.24281 = &MEM[(void *)"_Deleted" + 2B];
              D.24282 = *D.24281;
              D.24283 = (int) D.24282;
              D.24284 = __s2 + 2;
              D.24285 = *D.24284;
              D.24286 = (int) D.24285;
              __result = D.24283 - D.24286;
              if (__s2_len > 2) goto <D.24287>; else goto <D.24288>;
              <D.24287>:
              if (__result == 0) goto <D.24289>; else goto <D.24290>;
              <D.24289>:
              D.24291 = &MEM[(void *)"_Deleted" + 3B];
              D.24292 = *D.24291;
              D.24293 = (int) D.24292;
              D.24294 = __s2 + 3;
              D.24295 = *D.24294;
              D.24296 = (int) D.24295;
              __result = D.24293 - D.24296;
              <D.24290>:
              <D.24288>:
              <D.24280>:
              <D.24278>:
              <D.24270>:
              <D.24268>:
            }
            D.19714 = __result;
          }
          iftmp.62 = -D.19714;
          goto <D.24297>;
          <D.24261>:
          D.24298 = mono_field_get_name (field);
          iftmp.62 = __builtin_strcmp (D.24298, "_Deleted");
          <D.24297>:
          D.19715 = iftmp.62;
        }
        if (D.19715 == 0) goto <D.24299>; else goto <D.24300>;
        <D.24299>:
        // predicted unlikely by continue predictor.
        goto <D.19716>;
        <D.24300>:
        <D.24258>:
        if (gtd != 0B) goto <D.24301>; else goto <D.24302>;
        <D.24301>:
        {
          struct MonoClassField * gfield;

          D.24303 = gtd->fields;
          D.24237 = (long unsigned int) i;
          D.24238 = D.24237 * 32;
          gfield = D.24303 + D.24238;
          D.24304 = gfield->offset;
          field->offset = D.24304;
        }
        goto <D.24305>;
        <D.24302>:
        if (layout == 16) goto <D.24306>; else goto <D.24307>;
        <D.24306>:
        {
          guint32 offset;

          try
            {
              idx.63 = (unsigned int) idx;
              mono_metadata_field_info (m, idx.63, &offset, 0B, 0B);
              offset.64 = offset;
              offset.65 = (int) offset.64;
              field->offset = offset.65;
              D.24311 = field->offset;
              if (D.24311 == -1) goto <D.24312>; else goto <D.24313>;
              <D.24312>:
              D.24239 = field->type;
              D.24254 = D.24239->attrs;
              D.24255 = (int) D.24254;
              D.24314 = D.24255 & 16;
              if (D.24314 == 0) goto <D.24315>; else goto <D.24316>;
              <D.24315>:
              D.24248 = field->name;
              D.24317 = monoeg_g_strdup_printf ("Missing field layout info for %s", D.24248);
              mono_class_set_failure (class, 7, D.24317);
              goto <D.19719>;
              <D.24316>:
              <D.24313>:
              D.24311 = field->offset;
              if (D.24311 < -1) goto <D.24318>; else goto <D.24319>;
              <D.24318>:
              D.24311 = field->offset;
              D.24248 = field->name;
              D.24320 = monoeg_g_strdup_printf ("Invalid negative field offset %d for %s", D.24311, D.24248);
              mono_class_set_failure (class, 7, D.24320);
              goto <D.19719>;
              <D.24319>:
            }
          finally
            {
              offset = {CLOBBER};
            }
        }
        <D.24307>:
        <D.24305>:
        if (blittable != 0) goto <D.24321>; else goto <D.24322>;
        <D.24321>:
        D.24239 = field->type;
        D.24254 = D.24239->attrs;
        D.24255 = (int) D.24254;
        D.24314 = D.24255 & 16;
        if (D.24314 == 0) goto <D.24323>; else goto <D.24324>;
        <D.24323>:
        D.24239 = field->type;
        D.24328 = BIT_FIELD_REF <*D.24239, 64, 64>;
        D.24329 = D.24328 & 1073741824;
        if (D.24329 != 0) goto <D.24325>; else goto <D.24330>;
        <D.24330>:
        D.24239 = field->type;
        D.24331 = mono_type_is_reference (D.24239);
        if (D.24331 != 0) goto <D.24325>; else goto <D.24326>;
        <D.24325>:
        blittable = 0;
        goto <D.24327>;
        <D.24326>:
        {
          struct MonoClass * field_class;

          D.24239 = field->type;
          field_class = mono_class_from_mono_type (D.24239);
          if (field_class != 0B) goto <D.24332>; else goto <D.24333>;
          <D.24332>:
          mono_class_setup_fields (field_class);
          D.24334 = field_class->exception_type;
          if (D.24334 != 0) goto <D.24335>; else goto <D.24336>;
          <D.24335>:
          mono_class_set_failure (class, 7, 0B);
          goto <D.19719>;
          <D.24336>:
          <D.24333>:
          if (field_class == 0B) goto <D.24337>; else goto <D.24339>;
          <D.24339>:
          D.24340 = BIT_FIELD_REF <*field_class, 64, 256>;
          D.24341 = D.24340 & 32;
          if (D.24341 == 0) goto <D.24337>; else goto <D.24338>;
          <D.24337>:
          blittable = 0;
          <D.24338>:
        }
        <D.24327>:
        <D.24324>:
        <D.24322>:
        D.24148 = BIT_FIELD_REF <*class, 64, 256>;
        D.24342 = D.24148 & 16;
        if (D.24342 != 0) goto <D.24343>; else goto <D.24344>;
        <D.24343>:
        D.24239 = field->type;
        D.24254 = D.24239->attrs;
        D.24255 = (int) D.24254;
        D.24314 = D.24255 & 16;
        if (D.24314 == 0) goto <D.24345>; else goto <D.24346>;
        <D.24345>:
        D.24239 = field->type;
        D.24347 = mono_class_from_mono_type (D.24239);
        class->element_class = D.24347;
        D.24348 = class->element_class;
        class->cast_class = D.24348;
        D.24348 = class->element_class;
        D.24349 = D.24348->blittable;
        blittable = (int) D.24349;
        <D.24346>:
        <D.24344>:
        D.24239 = field->type;
        D.24350 = mono_type_has_exceptions (D.24239);
        if (D.24350 != 0) goto <D.24351>; else goto <D.24352>;
        <D.24351>:
        {
          char * class_name;
          char * type_name;

          class_name = mono_type_get_full_name (class);
          D.24239 = field->type;
          type_name = mono_type_full_name (D.24239);
          mono_class_set_failure (class, 7, 0B);
          D.24248 = field->name;
          monoeg_g_log (0B, 16, "Invalid type %s for instance field %s:%s", type_name, class_name, D.24248);
          monoeg_g_free (class_name);
          monoeg_g_free (type_name);
          goto <D.19719>;
        }
        <D.24352>:
      }
      <D.19716>:
      i = i + 1;
      <D.19724>:
      if (i < top) goto <D.19723>; else goto <D.19719>;
      <D.19719>:
      D.24353 = mono_defaults.string_class;
      if (D.24353 == class) goto <D.24354>; else goto <D.24355>;
      <D.24354>:
      blittable = 0;
      <D.24355>:
      D.24218 = (unsigned char) blittable;
      D.24219 = (<unnamed-unsigned:1>) D.24218;
      class->blittable = D.24219;
      D.24148 = BIT_FIELD_REF <*class, 64, 256>;
      D.24342 = D.24148 & 16;
      if (D.24342 != 0) goto <D.24356>; else goto <D.24357>;
      <D.24356>:
      D.24358 = mono_class_enum_basetype (class);
      if (D.24358 == 0B) goto <D.24359>; else goto <D.24360>;
      <D.24359>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.24360>:
      <D.24357>:
      if (explicit_size != 0) goto <D.24361>; else goto <D.24362>;
      <D.24361>:
      real_size.59 = real_size;
      if (real_size.59 != 0) goto <D.24363>; else goto <D.24364>;
      <D.24363>:
      D.24183 = class->instance_size;
      D.24207 = (unsigned int) D.24183;
      real_size.59 = real_size;
      D.24216 = MAX_EXPR <D.24207, real_size.59>;
      D.24217 = (int) D.24216;
      class->instance_size = D.24217;
      <D.24364>:
      <D.24362>:
      D.24365 = class->exception_type;
      if (D.24365 != 0) goto <D.24366>; else goto <D.24367>;
      <D.24366>:
      return;
      <D.24367>:
      mono_class_layout_fields (class);
      D.24148 = BIT_FIELD_REF <*class, 64, 256>;
      D.24368 = D.24148 & 8;
      if (D.24368 != 0) goto <D.24369>; else goto <D.24370>;
      <D.24369>:
      D.24183 = class->instance_size;
      D.24371 = (unsigned int) D.24183;
      D.24372 = D.24371 + 4294967295;
      if (D.24372 > 1048591) goto <D.24373>; else goto <D.24374>;
      <D.24373>:
      mono_class_set_failure (class, 7, 0B);
      <D.24374>:
      <D.24370>:
      mono_memory_barrier ();
      class->fields_inited = 1;
    }
  finally
    {
      error = {CLOBBER};
      real_size = {CLOBBER};
      packing_size = {CLOBBER};
    }
}


mono_class_setup_basic_field_info (struct MonoClass * class)
{
  struct MonoClassField * D.24380;
  struct MonoClass * iftmp.66;
  struct MonoGenericClass * D.24384;
  unsigned int D.24388;
  struct MonoClass * D.24391;
  struct MonoImage * D.24392;
  long unsigned int D.24393;
  long unsigned int D.24394;
  long unsigned int D.24397;
  long unsigned int D.24398;
  unsigned int D.24403;
  unsigned int D.24404;
  unsigned int top.67;
  unsigned int D.24406;
  int D.24407;
  void * D.24408;
  long unsigned int D.24409;
  long unsigned int D.24410;
  struct MonoClassField * D.24413;
  struct MonoClassField * D.24414;
  const char * D.24415;
  unsigned int D.24417;
  unsigned int i.68;
  unsigned int D.24419;
  const char * D.24420;
  struct MonoClassField * field;
  struct MonoClass * gtd;
  struct MonoImage * image;
  int i;
  int top;

  D.24380 = class->fields;
  if (D.24380 != 0B) goto <D.24381>; else goto <D.24382>;
  <D.24381>:
  return;
  <D.24382>:
  D.24384 = class->generic_class;
  if (D.24384 != 0B) goto <D.24385>; else goto <D.24386>;
  <D.24385>:
  iftmp.66 = mono_class_get_generic_type_definition (class);
  goto <D.24387>;
  <D.24386>:
  iftmp.66 = 0B;
  <D.24387>:
  gtd = iftmp.66;
  image = class->image;
  D.24388 = class->field.count;
  top = (int) D.24388;
  D.24384 = class->generic_class;
  if (D.24384 != 0B) goto <D.24389>; else goto <D.24390>;
  <D.24389>:
  D.24384 = class->generic_class;
  D.24391 = D.24384->container_class;
  D.24392 = D.24391->image;
  D.24393 = BIT_FIELD_REF <*D.24392, 64, 192>;
  D.24394 = D.24393 & 34359738368;
  if (D.24394 != 0) goto <D.24395>; else goto <D.24396>;
  <D.24395>:
  D.24384 = class->generic_class;
  D.24391 = D.24384->container_class;
  D.24397 = BIT_FIELD_REF <*D.24391, 64, 256>;
  D.24398 = D.24397 & 128;
  if (D.24398 == 0) goto <D.24399>; else goto <D.24400>;
  <D.24399>:
  return;
  <D.24400>:
  <D.24396>:
  <D.24390>:
  if (gtd != 0B) goto <D.24401>; else goto <D.24402>;
  <D.24401>:
  mono_class_setup_basic_field_info (gtd);
  D.24403 = gtd->field.count;
  top = (int) D.24403;
  D.24404 = gtd->field.first;
  class->field.first = D.24404;
  D.24403 = gtd->field.count;
  class->field.count = D.24403;
  <D.24402>:
  top.67 = (unsigned int) top;
  D.24406 = top.67 * 32;
  D.24407 = (int) D.24406;
  D.24408 = mono_class_alloc0 (class, D.24407);
  class->fields = D.24408;
  i = 0;
  goto <D.19687>;
  <D.19686>:
  D.24380 = class->fields;
  D.24409 = (long unsigned int) i;
  D.24410 = D.24409 * 32;
  field = D.24380 + D.24410;
  field->parent = class;
  if (gtd != 0B) goto <D.24411>; else goto <D.24412>;
  <D.24411>:
  D.24413 = gtd->fields;
  D.24409 = (long unsigned int) i;
  D.24410 = D.24409 * 32;
  D.24414 = D.24413 + D.24410;
  D.24415 = mono_field_get_name (D.24414);
  field->name = D.24415;
  goto <D.24416>;
  <D.24412>:
  {
    int idx;
    guint32 name_idx;

    D.24417 = class->field.first;
    i.68 = (unsigned int) i;
    D.24419 = D.24417 + i.68;
    idx = (int) D.24419;
    name_idx = mono_metadata_decode_table_row_col (image, 4, idx, 1);
    D.24420 = mono_metadata_string_heap (image, name_idx);
    field->name = D.24420;
  }
  <D.24416>:
  i = i + 1;
  <D.19687>:
  if (i < top) goto <D.19686>; else goto <D.19688>;
  <D.19688>:
}


mono_class_alloc0 (struct MonoClass * class, int size)
{
  long unsigned int D.24422;
  void * D.24423;
  void * res;

  res = mono_class_alloc (class, size);
  D.24422 = (long unsigned int) size;
  memset (res, 0, D.24422);
  D.24423 = res;
  return D.24423;
}


mono_class_alloc (struct MonoClass * class, int size)
{
  struct MonoGenericClass * D.24425;
  void * D.24428;
  struct MonoImageSet * D.24429;
  unsigned int size.69;
  struct MonoImage * D.24431;

  D.24425 = class->generic_class;
  if (D.24425 != 0B) goto <D.24426>; else goto <D.24427>;
  <D.24426>:
  D.24425 = class->generic_class;
  D.24429 = D.24425->owner;
  size.69 = (unsigned int) size;
  D.24428 = mono_image_set_alloc (D.24429, size.69);
  return D.24428;
  <D.24427>:
  D.24431 = class->image;
  size.69 = (unsigned int) size;
  D.24428 = mono_image_alloc (D.24431, size.69);
  return D.24428;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.24435;
  int D.24440;
  void * D.24442;
  long unsigned int D.24443;

  D.24435 = __builtin_constant_p (__len);
  if (D.24435 != 0) goto <D.24436>; else goto <D.24437>;
  <D.24436>:
  if (__len == 0) goto <D.24438>; else goto <D.24439>;
  <D.24438>:
  D.24440 = __builtin_constant_p (__ch);
  if (D.24440 == 0) goto <D.24433>; else goto <D.24441>;
  <D.24441>:
  if (__ch != 0) goto <D.24433>; else goto <D.24434>;
  <D.24433>:
  __warn_memset_zero_len ();
  D.24442 = __dest;
  return D.24442;
  <D.24434>:
  <D.24439>:
  <D.24437>:
  D.24443 = __builtin_object_size (__dest, 0);
  D.24442 = __builtin___memset_chk (__dest, __ch, __len, D.24443);
  return D.24442;
}


mono_field_resolve_type (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoClass * iftmp.70;
  struct MonoGenericClass * D.24446;
  long int field.71;
  struct MonoClassField * D.24451;
  long int D.24452;
  long int D.24453;
  long int D.24454;
  struct MonoClassField * D.24457;
  long unsigned int D.24458;
  long unsigned int D.24459;
  int D.24460;
  const char * D.24463;
  struct MonoGenericContext * D.24464;
  struct MonoType * D.24465;
  int D.24466;
  const char * D.24469;
  unsigned int D.24471;
  unsigned int field_idx.72;
  unsigned int D.24473;
  long unsigned int D.24474;
  long unsigned int D.24475;
  _Bool D.24476;
  long int D.24477;
  long int D.24478;
  struct MonoGenericContainer * D.24481;
  _Bool D.24487;
  long int D.24488;
  long int D.24489;
  unsigned int D.24492;
  int D.24493;
  const char * D.24496;
  const char * sig.73;
  const char * sig.74;
  char D.24499;
  _Bool D.24500;
  long int D.24501;
  long int D.24502;
  unsigned int D.24505;
  short int D.24506;
  const char * D.24507;
  struct MonoType * D.24508;
  struct MonoType * D.24509;
  gchar * D.24512;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.24446 = class->generic_class;
  if (D.24446 != 0B) goto <D.24447>; else goto <D.24448>;
  <D.24447>:
  iftmp.70 = mono_class_get_generic_type_definition (class);
  goto <D.24449>;
  <D.24448>:
  iftmp.70 = 0B;
  <D.24449>:
  gtd = iftmp.70;
  field.71 = (long int) field;
  D.24451 = class->fields;
  D.24452 = (long int) D.24451;
  D.24453 = field.71 - D.24452;
  D.24454 = D.24453 /[ex] 32;
  field_idx = (int) D.24454;
  mono_error_init (error);
  if (gtd != 0B) goto <D.24455>; else goto <D.24456>;
  <D.24455>:
  {
    struct MonoClassField * gfield;
    struct MonoType * gtype;

    D.24457 = gtd->fields;
    D.24458 = (long unsigned int) field_idx;
    D.24459 = D.24458 * 32;
    gfield = D.24457 + D.24459;
    gtype = mono_field_get_type_checked (gfield, error);
    D.24460 = mono_error_ok (error);
    if (D.24460 == 0) goto <D.24461>; else goto <D.24462>;
    <D.24461>:
    {
      char * err_msg;

      D.24463 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.24463);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.24462>:
    D.24464 = mono_class_get_context (class);
    D.24465 = mono_class_inflate_generic_type_no_copy (image, gtype, D.24464, error);
    field->type = D.24465;
    D.24466 = mono_error_ok (error);
    if (D.24466 == 0) goto <D.24467>; else goto <D.24468>;
    <D.24467>:
    {
      char * err_msg;

      D.24469 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.24469);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.24468>:
  }
  goto <D.24470>;
  <D.24456>:
  {
    const char * sig;
    guint32 cols[3];
    struct MonoGenericContainer * container;
    int idx;

    try
      {
        container = 0B;
        D.24471 = class->field.first;
        field_idx.72 = (unsigned int) field_idx;
        D.24473 = D.24471 + field_idx.72;
        idx = (int) D.24473;
        D.24474 = BIT_FIELD_REF <*image, 64, 192>;
        D.24475 = D.24474 & 34359738368;
        D.24476 = D.24475 != 0;
        D.24477 = (long int) D.24476;
        D.24478 = __builtin_expect (D.24477, 0);
        if (D.24478 != 0) goto <D.24479>; else goto <D.24480>;
        <D.24479>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10119, "!image->dynamic");
        <D.24480>:
        D.24481 = class->generic_container;
        if (D.24481 != 0B) goto <D.24482>; else goto <D.24483>;
        <D.24482>:
        container = class->generic_container;
        goto <D.24484>;
        <D.24483>:
        if (gtd != 0B) goto <D.24485>; else goto <D.24486>;
        <D.24485>:
        container = gtd->generic_container;
        D.24487 = container == 0B;
        D.24488 = (long int) D.24487;
        D.24489 = __builtin_expect (D.24488, 0);
        if (D.24489 != 0) goto <D.24490>; else goto <D.24491>;
        <D.24490>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10125, "container");
        <D.24491>:
        <D.24486>:
        <D.24484>:
        mono_metadata_decode_table_row (image, 4, idx, &cols, 3);
        D.24492 = cols[2];
        D.24493 = mono_verifier_verify_field_signature (image, D.24492, 0B);
        if (D.24493 == 0) goto <D.24494>; else goto <D.24495>;
        <D.24494>:
        D.24496 = field->name;
        mono_error_set_type_load_class (error, class, "Could not verify field %s signature", D.24496);
        mono_class_set_failure (class, 7, 0B);
        return;
        <D.24495>:
        D.24492 = cols[2];
        sig.73 = mono_metadata_blob_heap (image, D.24492);
        sig = sig.73;
        sig.74 = sig;
        mono_metadata_decode_value (sig.74, &sig);
        sig.74 = sig;
        D.24499 = *sig.74;
        D.24500 = D.24499 != 6;
        D.24501 = (long int) D.24500;
        D.24502 = __builtin_expect (D.24501, 0);
        if (D.24502 != 0) goto <D.24503>; else goto <D.24504>;
        <D.24503>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10141, "*sig == 0x06");
        <D.24504>:
        D.24505 = cols[0];
        D.24506 = (short int) D.24505;
        sig.74 = sig;
        D.24507 = sig.74 + 1;
        D.24508 = mono_metadata_parse_type_full (image, container, 5, D.24506, D.24507, &sig);
        field->type = D.24508;
        D.24509 = field->type;
        if (D.24509 == 0B) goto <D.24510>; else goto <D.24511>;
        <D.24510>:
        D.24496 = field->name;
        D.24512 = monoeg_g_strdup_printf ("Could not load field %s type", D.24496);
        mono_class_set_failure_from_loader_error (class, error, D.24512);
        <D.24511>:
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.24470>:
}


mono_class_inflate_generic_type_no_copy (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.24518;
  struct MonoType * D.24521;
  long unsigned int D.24524;
  long unsigned int D.24525;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.24516>; else goto <D.24517>;
  <D.24516>:
  inflated = inflate_generic_type (image, type, context, error);
  D.24518 = mono_error_ok (error);
  if (D.24518 == 0) goto <D.24519>; else goto <D.24520>;
  <D.24519>:
  D.24521 = 0B;
  return D.24521;
  <D.24520>:
  <D.24517>:
  if (inflated == 0B) goto <D.24522>; else goto <D.24523>;
  <D.24522>:
  D.24521 = type;
  return D.24521;
  <D.24523>:
  D.24524 = mono_stats.inflated_type_count;
  D.24525 = D.24524 + 1;
  mono_stats.inflated_type_count = D.24525;
  D.24521 = inflated;
  return D.24521;
}


mono_type_has_exceptions (struct MonoType * type)
{
  unsigned char D.24527;
  int D.24528;
  gboolean D.24529;
  struct MonoClass * D.24530;
  unsigned char D.24531;
  struct MonoArrayType * D.24532;
  struct MonoClass * D.24533;
  unsigned char D.24534;
  struct MonoGenericClass * D.24535;
  struct MonoClass * D.24536;
  unsigned char D.24537;

  D.24527 = type->type;
  D.24528 = (int) D.24527;
  switch (D.24528) <default: <D.24538>, case 17: <D.19663>, case 18: <D.19662>, case 20: <D.19665>, case 21: <D.19666>, case 29: <D.19664>>
  <D.19662>:
  <D.19663>:
  <D.19664>:
  D.24530 = type->data.klass;
  D.24531 = D.24530->exception_type;
  D.24529 = (gboolean) D.24531;
  return D.24529;
  <D.19665>:
  D.24532 = type->data.array;
  D.24533 = D.24532->eklass;
  D.24534 = D.24533->exception_type;
  D.24529 = (gboolean) D.24534;
  return D.24529;
  <D.19666>:
  D.24535 = type->data.generic_class;
  D.24536 = mono_generic_class_get_class (D.24535);
  D.24537 = D.24536->exception_type;
  D.24529 = (gboolean) D.24537;
  return D.24529;
  <D.24538>:
  D.24529 = 0;
  return D.24529;
}


mono_memory_barrier ()
{
  __sync_synchronize ();
}


mono_type_get_basic_type_from_generic (struct MonoType * type)
{
  long unsigned int D.24542;
  long unsigned int D.24543;
  unsigned char D.24546;
  struct MonoType * D.24548;
  struct MonoClass * D.24549;

  D.24542 = BIT_FIELD_REF <*type, 64, 64>;
  D.24543 = D.24542 & 1073741824;
  if (D.24543 == 0) goto <D.24544>; else goto <D.24545>;
  <D.24544>:
  D.24546 = type->type;
  if (D.24546 == 19) goto <D.24540>; else goto <D.24547>;
  <D.24547>:
  D.24546 = type->type;
  if (D.24546 == 30) goto <D.24540>; else goto <D.24541>;
  <D.24540>:
  D.24549 = mono_defaults.object_class;
  D.24548 = &D.24549->byval_arg;
  return D.24548;
  <D.24541>:
  <D.24545>:
  D.24548 = type;
  return D.24548;
}


mono_class_layout_fields (struct MonoClass * class)
{
  unsigned int D.24551;
  unsigned int D.24552;
  long unsigned int D.24555;
  long unsigned int D.24556;
  struct MonoClassField * D.24559;
  long unsigned int D.24560;
  long unsigned int D.24561;
  struct MonoType * D.24562;
  short unsigned int D.24563;
  int D.24564;
  int D.24565;
  int D.24571;
  int D.24573;
  unsigned char D.24575;
  struct MonoImage * D.24577;
  struct MonoImage * D.24578;
  int D.24579;
  struct MonoClass * D.24581;
  int D.24582;
  int D.24588;
  int D.24590;
  unsigned char D.24592;
  int D.24594;
  struct MonoClass * D.24596;
  int D.24597;
  int D.24601;
  int D.24603;
  unsigned char D.24605;
  int D.24607;
  struct MonoClass * D.24609;
  int D.24610;
  struct MonoClass * D.24619;
  unsigned char D.24622;
  int D.24625;
  int D.24627;
  int D.19770;
  int iftmp.75;
  int D.19769;
  const char[9] * D.24633;
  unsigned char D.24634;
  int D.24635;
  unsigned char D.24636;
  int D.24637;
  const unsigned char * D.24642;
  unsigned char D.24643;
  int D.24644;
  const unsigned char * D.24645;
  unsigned char D.24646;
  int D.24647;
  const unsigned char * D.24652;
  unsigned char D.24653;
  int D.24654;
  const unsigned char * D.24655;
  unsigned char D.24656;
  int D.24657;
  const unsigned char * D.24662;
  unsigned char D.24663;
  int D.24664;
  const unsigned char * D.24665;
  unsigned char D.24666;
  int D.24667;
  const char * D.24669;
  int D.24680;
  int D.24682;
  unsigned char D.24684;
  int D.24686;
  struct MonoClass * D.24688;
  int D.24689;
  int D.24696;
  int D.19780;
  int iftmp.76;
  int D.19779;
  const char[10] * D.24702;
  unsigned char D.24703;
  int D.24704;
  unsigned char D.24705;
  int D.24706;
  const unsigned char * D.24711;
  unsigned char D.24712;
  int D.24713;
  const unsigned char * D.24714;
  unsigned char D.24715;
  int D.24716;
  const unsigned char * D.24721;
  unsigned char D.24722;
  int D.24723;
  const unsigned char * D.24724;
  unsigned char D.24725;
  int D.24726;
  const unsigned char * D.24731;
  unsigned char D.24732;
  int D.24733;
  const unsigned char * D.24734;
  unsigned char D.24735;
  int D.24736;
  const char * D.24738;
  int D.24741;
  int iftmp.77;
  long unsigned int D.24743;
  <unnamed-unsigned:4> D.24746;
  int D.24747;
  int align.78;
  int D.24753;
  int D.24755;
  int D.24758;
  struct MonoClass * D.24760;
  int D.24761;
  unsigned int align.79;
  unsigned int D.24763;
  int align.80;
  unsigned char D.24765;
  int D.24766;
  int D.24767;
  unsigned char D.24768;
  int real_size.81;
  int D.24772;
  int D.24773;
  int D.24774;
  int D.24775;
  int D.24776;
  int iftmp.82;
  long unsigned int D.24780;
  long unsigned int D.24781;
  _Bool D.24784;
  long int D.24785;
  long int D.24786;
  unsigned int D.24789;
  unsigned int D.24790;
  unsigned int D.24791;
  int D.24792;
  int D.24793;
  int D.24794;
  int D.24797;
  int D.24798;
  int D.24799;
  int D.19800;
  int iftmp.83;
  int D.19799;
  unsigned char D.24805;
  int D.24806;
  const unsigned char * D.24811;
  unsigned char D.24812;
  int D.24813;
  const unsigned char * D.24818;
  unsigned char D.24819;
  int D.24820;
  const unsigned char * D.24825;
  unsigned char D.24826;
  int D.24827;
  const char * D.24829;
  int D.24834;
  int iftmp.84;
  int align.85;
  int D.24840;
  unsigned char D.24841;
  unsigned int D.24842;
  unsigned int D.24843;
  int D.24844;
  int D.24847;
  int D.24849;
  struct MonoClass * D.24851;
  int D.24852;
  long unsigned int D.24853;
  long unsigned int D.24854;
  unsigned int D.24857;
  unsigned int D.24863;
  long unsigned int D.24866;
  long unsigned int D.24867;
  long unsigned int D.24868;
  long unsigned int D.24869;
  unsigned char D.24870;
  unsigned int D.24871;
  unsigned int D.24872;
  int D.19816;
  int iftmp.86;
  int D.19815;
  unsigned char D.24880;
  int D.24881;
  const unsigned char * D.24886;
  unsigned char D.24887;
  int D.24888;
  const unsigned char * D.24893;
  unsigned char D.24894;
  int D.24895;
  const unsigned char * D.24900;
  unsigned char D.24901;
  int D.24902;
  const char * D.24904;
  int D.24907;
  int D.24910;
  int D.24911;
  int align.87;
  int D.24913;
  int D.24914;
  int D.24915;
  int D.24916;
  unsigned int D.24917;
  int D.24918;
  int i;
  const int top;
  guint32 layout;
  guint32 pass;
  guint32 passes;
  guint32 real_size;
  gboolean gc_aware_layout;
  struct MonoClassField * field;

  D.24551 = class->field.count;
  top = (const int) D.24551;
  D.24552 = class->flags;
  layout = D.24552 & 24;
  gc_aware_layout = 0;
  if (layout == 0) goto <D.24553>; else goto <D.24554>;
  <D.24553>:
  D.24555 = BIT_FIELD_REF <*class, 64, 256>;
  D.24556 = D.24555 & 8;
  if (D.24556 == 0) goto <D.24557>; else goto <D.24558>;
  <D.24557>:
  gc_aware_layout = 1;
  <D.24558>:
  <D.24554>:
  i = 0;
  goto <D.19747>;
  <D.19746>:
  {
    struct MonoType * ftype;

    D.24559 = class->fields;
    D.24560 = (long unsigned int) i;
    D.24561 = D.24560 * 32;
    field = D.24559 + D.24561;
    D.24562 = field->type;
    D.24563 = D.24562->attrs;
    D.24564 = (int) D.24563;
    D.24565 = D.24564 & 16;
    if (D.24565 == 0) goto <D.24566>; else goto <D.24567>;
    <D.24566>:
    D.24562 = field->type;
    ftype = mono_type_get_underlying_type (D.24562);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.24571 = mono_type_is_reference (ftype);
    if (D.24571 != 0) goto <D.24568>; else goto <D.24572>;
    <D.24572>:
    D.24573 = mono_gc_is_moving ();
    if (D.24573 == 0) goto <D.24574>; else goto <D.24569>;
    <D.24574>:
    D.24575 = ftype->type;
    if (D.24575 == 25) goto <D.24576>; else goto <D.24569>;
    <D.24576>:
    D.24577 = class->image;
    D.24578 = mono_defaults.corlib;
    if (D.24577 == D.24578) goto <D.24568>; else goto <D.24569>;
    <D.24569>:
    D.24579 = mono_type_is_struct (ftype);
    if (D.24579 != 0) goto <D.24580>; else goto <D.24570>;
    <D.24580>:
    D.24581 = mono_class_from_mono_type (ftype);
    D.24582 = mono_class_has_references (D.24581);
    if (D.24582 != 0) goto <D.24568>; else goto <D.24570>;
    <D.24568>:
    class->has_references = 1;
    <D.24570>:
    <D.24567>:
  }
  i = i + 1;
  <D.19747>:
  if (i < top) goto <D.19746>; else goto <D.19748>;
  <D.19748>:
  i = 0;
  goto <D.19751>;
  <D.19750>:
  {
    struct MonoType * ftype;

    D.24559 = class->fields;
    D.24560 = (long unsigned int) i;
    D.24561 = D.24560 * 32;
    field = D.24559 + D.24561;
    D.24562 = field->type;
    D.24563 = D.24562->attrs;
    D.24564 = (int) D.24563;
    D.24565 = D.24564 & 16;
    if (D.24565 != 0) goto <D.24583>; else goto <D.24584>;
    <D.24583>:
    D.24562 = field->type;
    ftype = mono_type_get_underlying_type (D.24562);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.24588 = mono_type_is_reference (ftype);
    if (D.24588 != 0) goto <D.24585>; else goto <D.24589>;
    <D.24589>:
    D.24590 = mono_gc_is_moving ();
    if (D.24590 == 0) goto <D.24591>; else goto <D.24586>;
    <D.24591>:
    D.24592 = ftype->type;
    if (D.24592 == 25) goto <D.24593>; else goto <D.24586>;
    <D.24593>:
    D.24577 = class->image;
    D.24578 = mono_defaults.corlib;
    if (D.24577 == D.24578) goto <D.24585>; else goto <D.24586>;
    <D.24586>:
    D.24594 = mono_type_is_struct (ftype);
    if (D.24594 != 0) goto <D.24595>; else goto <D.24587>;
    <D.24595>:
    D.24596 = mono_class_from_mono_type (ftype);
    D.24597 = mono_class_has_references (D.24596);
    if (D.24597 != 0) goto <D.24585>; else goto <D.24587>;
    <D.24585>:
    class->has_static_refs = 1;
    <D.24587>:
    <D.24584>:
  }
  i = i + 1;
  <D.19751>:
  if (i < top) goto <D.19750>; else goto <D.19752>;
  <D.19752>:
  i = 0;
  goto <D.19755>;
  <D.19754>:
  {
    struct MonoType * ftype;

    D.24559 = class->fields;
    D.24560 = (long unsigned int) i;
    D.24561 = D.24560 * 32;
    field = D.24559 + D.24561;
    D.24562 = field->type;
    ftype = mono_type_get_underlying_type (D.24562);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.24601 = mono_type_is_reference (ftype);
    if (D.24601 != 0) goto <D.24598>; else goto <D.24602>;
    <D.24602>:
    D.24603 = mono_gc_is_moving ();
    if (D.24603 == 0) goto <D.24604>; else goto <D.24599>;
    <D.24604>:
    D.24605 = ftype->type;
    if (D.24605 == 25) goto <D.24606>; else goto <D.24599>;
    <D.24606>:
    D.24577 = class->image;
    D.24578 = mono_defaults.corlib;
    if (D.24577 == D.24578) goto <D.24598>; else goto <D.24599>;
    <D.24599>:
    D.24607 = mono_type_is_struct (ftype);
    if (D.24607 != 0) goto <D.24608>; else goto <D.24600>;
    <D.24608>:
    D.24609 = mono_class_from_mono_type (ftype);
    D.24610 = mono_class_has_references (D.24609);
    if (D.24610 != 0) goto <D.24598>; else goto <D.24600>;
    <D.24598>:
    D.24562 = field->type;
    D.24563 = D.24562->attrs;
    D.24564 = (int) D.24563;
    D.24565 = D.24564 & 16;
    if (D.24565 != 0) goto <D.24611>; else goto <D.24612>;
    <D.24611>:
    class->has_static_refs = 1;
    goto <D.24613>;
    <D.24612>:
    class->has_references = 1;
    <D.24613>:
    <D.24600>:
  }
  i = i + 1;
  <D.19755>:
  if (i < top) goto <D.19754>; else goto <D.19756>;
  <D.19756>:
  switch (layout) <default: <D.24860>, case 0: <D.19757>, case 8: <D.19758>, case 16: <D.19788>>
  <D.19757>:
  <D.19758>:
  if (gc_aware_layout != 0) goto <D.24614>; else goto <D.24615>;
  <D.24614>:
  passes = 2;
  goto <D.24616>;
  <D.24615>:
  passes = 1;
  <D.24616>:
  if (layout != 0) goto <D.24617>; else goto <D.24618>;
  <D.24617>:
  passes = 1;
  <D.24618>:
  D.24619 = class->parent;
  if (D.24619 != 0B) goto <D.24620>; else goto <D.24621>;
  <D.24620>:
  D.24619 = class->parent;
  mono_class_setup_fields (D.24619);
  D.24619 = class->parent;
  D.24622 = D.24619->exception_type;
  if (D.24622 != 0) goto <D.24623>; else goto <D.24624>;
  <D.24623>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.24624>:
  D.24619 = class->parent;
  D.24625 = D.24619->instance_size;
  real_size = (guint32) D.24625;
  goto <D.24626>;
  <D.24621>:
  real_size = 16;
  <D.24626>:
  pass = 0;
  goto <D.19785>;
  <D.19784>:
  i = 0;
  goto <D.19782>;
  <D.19781>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.24559 = class->fields;
        D.24560 = (long unsigned int) i;
        D.24561 = D.24560 * 32;
        field = D.24559 + D.24561;
        D.24562 = field->type;
        D.24563 = D.24562->attrs;
        D.24564 = (int) D.24563;
        D.24627 = D.24564 & 1536;
        if (D.24627 != 0) goto <D.24628>; else goto <D.24629>;
        <D.24628>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24633 = "_Deleted";
            D.24634 = MEM[(const unsigned char *)D.24633];
            D.24635 = (int) D.24634;
            D.24636 = *__s2;
            D.24637 = (int) D.24636;
            __result = D.24635 - D.24637;
            {
              if (__s2_len != 0) goto <D.24638>; else goto <D.24639>;
              <D.24638>:
              if (__result == 0) goto <D.24640>; else goto <D.24641>;
              <D.24640>:
              D.24642 = &MEM[(void *)"_Deleted" + 1B];
              D.24643 = *D.24642;
              D.24644 = (int) D.24643;
              D.24645 = __s2 + 1;
              D.24646 = *D.24645;
              D.24647 = (int) D.24646;
              __result = D.24644 - D.24647;
              if (__s2_len > 1) goto <D.24648>; else goto <D.24649>;
              <D.24648>:
              if (__result == 0) goto <D.24650>; else goto <D.24651>;
              <D.24650>:
              D.24652 = &MEM[(void *)"_Deleted" + 2B];
              D.24653 = *D.24652;
              D.24654 = (int) D.24653;
              D.24655 = __s2 + 2;
              D.24656 = *D.24655;
              D.24657 = (int) D.24656;
              __result = D.24654 - D.24657;
              if (__s2_len > 2) goto <D.24658>; else goto <D.24659>;
              <D.24658>:
              if (__result == 0) goto <D.24660>; else goto <D.24661>;
              <D.24660>:
              D.24662 = &MEM[(void *)"_Deleted" + 3B];
              D.24663 = *D.24662;
              D.24664 = (int) D.24663;
              D.24665 = __s2 + 3;
              D.24666 = *D.24665;
              D.24667 = (int) D.24666;
              __result = D.24664 - D.24667;
              <D.24661>:
              <D.24659>:
              <D.24651>:
              <D.24649>:
              <D.24641>:
              <D.24639>:
            }
            D.19769 = __result;
          }
          iftmp.75 = -D.19769;
          goto <D.24668>;
          <D.24632>:
          D.24669 = mono_field_get_name (field);
          iftmp.75 = __builtin_strcmp (D.24669, "_Deleted");
          <D.24668>:
          D.19770 = iftmp.75;
        }
        if (D.19770 == 0) goto <D.24670>; else goto <D.24671>;
        <D.24670>:
        // predicted unlikely by continue predictor.
        goto <D.19771>;
        <D.24671>:
        <D.24629>:
        D.24562 = field->type;
        D.24563 = D.24562->attrs;
        D.24564 = (int) D.24563;
        D.24565 = D.24564 & 16;
        if (D.24565 != 0) goto <D.24672>; else goto <D.24673>;
        <D.24672>:
        // predicted unlikely by continue predictor.
        goto <D.19771>;
        <D.24673>:
        D.24562 = field->type;
        ftype = mono_type_get_underlying_type (D.24562);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        if (gc_aware_layout != 0) goto <D.24674>; else goto <D.24675>;
        <D.24674>:
        D.24680 = mono_type_is_reference (ftype);
        if (D.24680 != 0) goto <D.24676>; else goto <D.24681>;
        <D.24681>:
        D.24682 = mono_gc_is_moving ();
        if (D.24682 == 0) goto <D.24683>; else goto <D.24677>;
        <D.24683>:
        D.24684 = ftype->type;
        if (D.24684 == 25) goto <D.24685>; else goto <D.24677>;
        <D.24685>:
        D.24577 = class->image;
        D.24578 = mono_defaults.corlib;
        if (D.24577 == D.24578) goto <D.24676>; else goto <D.24677>;
        <D.24677>:
        D.24686 = mono_type_is_struct (ftype);
        if (D.24686 != 0) goto <D.24687>; else goto <D.24678>;
        <D.24687>:
        D.24688 = mono_class_from_mono_type (ftype);
        D.24689 = mono_class_has_references (D.24688);
        if (D.24689 != 0) goto <D.24676>; else goto <D.24678>;
        <D.24676>:
        if (pass == 1) goto <D.24690>; else goto <D.24691>;
        <D.24690>:
        // predicted unlikely by continue predictor.
        goto <D.19771>;
        <D.24691>:
        goto <D.24679>;
        <D.24678>:
        if (pass == 0) goto <D.24692>; else goto <D.24693>;
        <D.24692>:
        // predicted unlikely by continue predictor.
        goto <D.19771>;
        <D.24693>:
        <D.24679>:
        <D.24675>:
        if (top == 1) goto <D.24694>; else goto <D.24695>;
        <D.24694>:
        D.24696 = class->instance_size;
        if (D.24696 == 16) goto <D.24697>; else goto <D.24698>;
        <D.24697>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24702 = "$PRIVATE$";
            D.24703 = MEM[(const unsigned char *)D.24702];
            D.24704 = (int) D.24703;
            D.24705 = *__s2;
            D.24706 = (int) D.24705;
            __result = D.24704 - D.24706;
            {
              if (__s2_len != 0) goto <D.24707>; else goto <D.24708>;
              <D.24707>:
              if (__result == 0) goto <D.24709>; else goto <D.24710>;
              <D.24709>:
              D.24711 = &MEM[(void *)"$PRIVATE$" + 1B];
              D.24712 = *D.24711;
              D.24713 = (int) D.24712;
              D.24714 = __s2 + 1;
              D.24715 = *D.24714;
              D.24716 = (int) D.24715;
              __result = D.24713 - D.24716;
              if (__s2_len > 1) goto <D.24717>; else goto <D.24718>;
              <D.24717>:
              if (__result == 0) goto <D.24719>; else goto <D.24720>;
              <D.24719>:
              D.24721 = &MEM[(void *)"$PRIVATE$" + 2B];
              D.24722 = *D.24721;
              D.24723 = (int) D.24722;
              D.24724 = __s2 + 2;
              D.24725 = *D.24724;
              D.24726 = (int) D.24725;
              __result = D.24723 - D.24726;
              if (__s2_len > 2) goto <D.24727>; else goto <D.24728>;
              <D.24727>:
              if (__result == 0) goto <D.24729>; else goto <D.24730>;
              <D.24729>:
              D.24731 = &MEM[(void *)"$PRIVATE$" + 3B];
              D.24732 = *D.24731;
              D.24733 = (int) D.24732;
              D.24734 = __s2 + 3;
              D.24735 = *D.24734;
              D.24736 = (int) D.24735;
              __result = D.24733 - D.24736;
              <D.24730>:
              <D.24728>:
              <D.24720>:
              <D.24718>:
              <D.24710>:
              <D.24708>:
            }
            D.19779 = __result;
          }
          iftmp.76 = -D.19779;
          goto <D.24737>;
          <D.24701>:
          D.24738 = mono_field_get_name (field);
          iftmp.76 = __builtin_strcmp (D.24738, "$PRIVATE$");
          <D.24737>:
          D.19780 = iftmp.76;
        }
        if (D.19780 == 0) goto <D.24739>; else goto <D.24740>;
        <D.24739>:
        // predicted unlikely by continue predictor.
        goto <D.19771>;
        <D.24740>:
        <D.24698>:
        <D.24695>:
        D.24562 = field->type;
        D.24741 = mono_type_size (D.24562, &align);
        size = (guint32) D.24741;
        D.24555 = BIT_FIELD_REF <*class, 64, 256>;
        D.24743 = D.24555 & 983040;
        if (D.24743 != 0) goto <D.24744>; else goto <D.24745>;
        <D.24744>:
        D.24746 = class->packing_size;
        D.24747 = (int) D.24746;
        align.78 = align;
        iftmp.77 = MIN_EXPR <D.24747, align.78>;
        goto <D.24749>;
        <D.24745>:
        iftmp.77 = align;
        <D.24749>:
        align = iftmp.77;
        D.24753 = mono_type_is_reference (ftype);
        if (D.24753 != 0) goto <D.24750>; else goto <D.24754>;
        <D.24754>:
        D.24755 = mono_gc_is_moving ();
        if (D.24755 == 0) goto <D.24756>; else goto <D.24751>;
        <D.24756>:
        D.24684 = ftype->type;
        if (D.24684 == 25) goto <D.24757>; else goto <D.24751>;
        <D.24757>:
        D.24577 = class->image;
        D.24578 = mono_defaults.corlib;
        if (D.24577 == D.24578) goto <D.24750>; else goto <D.24751>;
        <D.24751>:
        D.24758 = mono_type_is_struct (ftype);
        if (D.24758 != 0) goto <D.24759>; else goto <D.24752>;
        <D.24759>:
        D.24760 = mono_class_from_mono_type (ftype);
        D.24761 = mono_class_has_references (D.24760);
        if (D.24761 != 0) goto <D.24750>; else goto <D.24752>;
        <D.24750>:
        align.78 = align;
        align.79 = (unsigned int) align.78;
        D.24763 = MAX_EXPR <align.79, 8>;
        align.80 = (int) D.24763;
        align = align.80;
        <D.24752>:
        D.24765 = class->min_align;
        D.24766 = (int) D.24765;
        align.78 = align;
        D.24767 = MAX_EXPR <D.24766, align.78>;
        D.24768 = (unsigned char) D.24767;
        class->min_align = D.24768;
        real_size.81 = (int) real_size;
        field->offset = real_size.81;
        align.78 = align;
        if (align.78 != 0) goto <D.24770>; else goto <D.24771>;
        <D.24770>:
        D.24772 = field->offset;
        align.78 = align;
        D.24773 = align.78 + -1;
        D.24774 = D.24772 + D.24773;
        field->offset = D.24774;
        D.24772 = field->offset;
        align.78 = align;
        D.24775 = -align.78;
        D.24776 = D.24772 & D.24775;
        field->offset = D.24776;
        <D.24771>:
        D.24577 = class->image;
        D.24780 = BIT_FIELD_REF <*D.24577, 64, 192>;
        D.24781 = D.24780 & 34359738368;
        if (D.24781 == 0) goto <D.24782>; else goto <D.24778>;
        <D.24782>:
        D.24772 = field->offset;
        if (D.24772 <= 0) goto <D.24783>; else goto <D.24778>;
        <D.24783>:
        iftmp.82 = 1;
        goto <D.24779>;
        <D.24778>:
        iftmp.82 = 0;
        <D.24779>:
        D.24784 = iftmp.82 != 0;
        D.24785 = (long int) D.24784;
        D.24786 = __builtin_expect (D.24785, 0);
        if (D.24786 != 0) goto <D.24787>; else goto <D.24788>;
        <D.24787>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1894, "class->image->dynamic || field->offset > 0");
        <D.24788>:
        D.24772 = field->offset;
        D.24789 = (unsigned int) D.24772;
        real_size = D.24789 + size;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.19771>:
  i = i + 1;
  <D.19782>:
  if (i < top) goto <D.19781>; else goto <D.19783>;
  <D.19783>:
  D.24696 = class->instance_size;
  D.24790 = (unsigned int) D.24696;
  D.24791 = MAX_EXPR <D.24790, real_size>;
  D.24792 = (int) D.24791;
  class->instance_size = D.24792;
  D.24696 = class->instance_size;
  D.24765 = class->min_align;
  D.24766 = (int) D.24765;
  D.24793 = D.24766 + -1;
  D.24794 = D.24696 & D.24793;
  if (D.24794 != 0) goto <D.24795>; else goto <D.24796>;
  <D.24795>:
  D.24696 = class->instance_size;
  D.24765 = class->min_align;
  D.24766 = (int) D.24765;
  D.24793 = D.24766 + -1;
  D.24797 = D.24696 + D.24793;
  class->instance_size = D.24797;
  D.24696 = class->instance_size;
  D.24765 = class->min_align;
  D.24766 = (int) D.24765;
  D.24798 = -D.24766;
  D.24799 = D.24696 & D.24798;
  class->instance_size = D.24799;
  <D.24796>:
  pass = pass + 1;
  <D.19785>:
  if (pass < passes) goto <D.19784>; else goto <D.19786>;
  <D.19786>:
  goto <D.19787>;
  <D.19788>:
  real_size = 0;
  i = 0;
  goto <D.19803>;
  <D.19802>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.24559 = class->fields;
        D.24560 = (long unsigned int) i;
        D.24561 = D.24560 * 32;
        field = D.24559 + D.24561;
        D.24562 = field->type;
        D.24563 = D.24562->attrs;
        D.24564 = (int) D.24563;
        D.24627 = D.24564 & 1536;
        if (D.24627 != 0) goto <D.24800>; else goto <D.24801>;
        <D.24800>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24633 = "_Deleted";
            D.24634 = MEM[(const unsigned char *)D.24633];
            D.24635 = (int) D.24634;
            D.24805 = *__s2;
            D.24806 = (int) D.24805;
            __result = D.24635 - D.24806;
            {
              if (__s2_len != 0) goto <D.24807>; else goto <D.24808>;
              <D.24807>:
              if (__result == 0) goto <D.24809>; else goto <D.24810>;
              <D.24809>:
              D.24642 = &MEM[(void *)"_Deleted" + 1B];
              D.24643 = *D.24642;
              D.24644 = (int) D.24643;
              D.24811 = __s2 + 1;
              D.24812 = *D.24811;
              D.24813 = (int) D.24812;
              __result = D.24644 - D.24813;
              if (__s2_len > 1) goto <D.24814>; else goto <D.24815>;
              <D.24814>:
              if (__result == 0) goto <D.24816>; else goto <D.24817>;
              <D.24816>:
              D.24652 = &MEM[(void *)"_Deleted" + 2B];
              D.24653 = *D.24652;
              D.24654 = (int) D.24653;
              D.24818 = __s2 + 2;
              D.24819 = *D.24818;
              D.24820 = (int) D.24819;
              __result = D.24654 - D.24820;
              if (__s2_len > 2) goto <D.24821>; else goto <D.24822>;
              <D.24821>:
              if (__result == 0) goto <D.24823>; else goto <D.24824>;
              <D.24823>:
              D.24662 = &MEM[(void *)"_Deleted" + 3B];
              D.24663 = *D.24662;
              D.24664 = (int) D.24663;
              D.24825 = __s2 + 3;
              D.24826 = *D.24825;
              D.24827 = (int) D.24826;
              __result = D.24664 - D.24827;
              <D.24824>:
              <D.24822>:
              <D.24817>:
              <D.24815>:
              <D.24810>:
              <D.24808>:
            }
            D.19799 = __result;
          }
          iftmp.83 = -D.19799;
          goto <D.24828>;
          <D.24804>:
          D.24829 = mono_field_get_name (field);
          iftmp.83 = __builtin_strcmp (D.24829, "_Deleted");
          <D.24828>:
          D.19800 = iftmp.83;
        }
        if (D.19800 == 0) goto <D.24830>; else goto <D.24831>;
        <D.24830>:
        // predicted unlikely by continue predictor.
        goto <D.19801>;
        <D.24831>:
        <D.24801>:
        D.24562 = field->type;
        D.24563 = D.24562->attrs;
        D.24564 = (int) D.24563;
        D.24565 = D.24564 & 16;
        if (D.24565 != 0) goto <D.24832>; else goto <D.24833>;
        <D.24832>:
        // predicted unlikely by continue predictor.
        goto <D.19801>;
        <D.24833>:
        D.24562 = field->type;
        D.24834 = mono_type_size (D.24562, &align);
        size = (guint32) D.24834;
        D.24555 = BIT_FIELD_REF <*class, 64, 256>;
        D.24743 = D.24555 & 983040;
        if (D.24743 != 0) goto <D.24836>; else goto <D.24837>;
        <D.24836>:
        D.24746 = class->packing_size;
        D.24747 = (int) D.24746;
        align.85 = align;
        iftmp.84 = MIN_EXPR <D.24747, align.85>;
        goto <D.24839>;
        <D.24837>:
        iftmp.84 = align;
        <D.24839>:
        align = iftmp.84;
        D.24765 = class->min_align;
        D.24766 = (int) D.24765;
        align.85 = align;
        D.24840 = MAX_EXPR <D.24766, align.85>;
        D.24841 = (unsigned char) D.24840;
        class->min_align = D.24841;
        D.24772 = field->offset;
        D.24842 = (unsigned int) D.24772;
        D.24843 = D.24842 + 16;
        D.24844 = (int) D.24843;
        field->offset = D.24844;
        D.24562 = field->type;
        ftype = mono_type_get_underlying_type (D.24562);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        D.24847 = mono_type_is_reference (ftype);
        if (D.24847 != 0) goto <D.24845>; else goto <D.24848>;
        <D.24848>:
        D.24849 = mono_type_is_struct (ftype);
        if (D.24849 != 0) goto <D.24850>; else goto <D.24846>;
        <D.24850>:
        D.24851 = mono_class_from_mono_type (ftype);
        D.24852 = mono_class_has_references (D.24851);
        if (D.24852 != 0) goto <D.24845>; else goto <D.24846>;
        <D.24845>:
        D.24772 = field->offset;
        D.24853 = (long unsigned int) D.24772;
        D.24854 = D.24853 & 7;
        if (D.24854 != 0) goto <D.24855>; else goto <D.24856>;
        <D.24855>:
        mono_class_set_failure (class, 7, 0B);
        <D.24856>:
        <D.24846>:
        D.24772 = field->offset;
        D.24789 = (unsigned int) D.24772;
        D.24857 = D.24789 + size;
        real_size = MAX_EXPR <D.24857, real_size>;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.19801>:
  i = i + 1;
  <D.19803>:
  if (i < top) goto <D.19802>; else goto <D.19804>;
  <D.19804>:
  D.24696 = class->instance_size;
  D.24790 = (unsigned int) D.24696;
  D.24791 = MAX_EXPR <D.24790, real_size>;
  D.24792 = (int) D.24791;
  class->instance_size = D.24792;
  D.24696 = class->instance_size;
  D.24765 = class->min_align;
  D.24766 = (int) D.24765;
  D.24793 = D.24766 + -1;
  D.24794 = D.24696 & D.24793;
  if (D.24794 != 0) goto <D.24858>; else goto <D.24859>;
  <D.24858>:
  D.24696 = class->instance_size;
  D.24765 = class->min_align;
  D.24766 = (int) D.24765;
  D.24793 = D.24766 + -1;
  D.24797 = D.24696 + D.24793;
  class->instance_size = D.24797;
  D.24696 = class->instance_size;
  D.24765 = class->min_align;
  D.24766 = (int) D.24765;
  D.24798 = -D.24766;
  D.24799 = D.24696 & D.24798;
  class->instance_size = D.24799;
  <D.24859>:
  goto <D.19787>;
  <D.24860>:
  <D.19787>:
  if (layout != 16) goto <D.24861>; else goto <D.24862>;
  <D.24861>:
  D.24696 = class->instance_size;
  D.24863 = (unsigned int) D.24696;
  if (D.24863 <= 24) goto <D.24864>; else goto <D.24865>;
  <D.24864>:
  D.24696 = class->instance_size;
  D.24866 = (long unsigned int) D.24696;
  D.24867 = D.24866 + 18446744073709551600;
  D.24765 = class->min_align;
  D.24868 = (long unsigned int) D.24765;
  D.24869 = MAX_EXPR <D.24867, D.24868>;
  D.24870 = (unsigned char) D.24869;
  class->min_align = D.24870;
  <D.24865>:
  <D.24862>:
  mono_memory_barrier ();
  class->size_inited = 1;
  i = 0;
  goto <D.19819>;
  <D.19818>:
  {
    gint32 align;
    guint32 size;

    try
      {
        D.24559 = class->fields;
        D.24560 = (long unsigned int) i;
        D.24561 = D.24560 * 32;
        field = D.24559 + D.24561;
        D.24562 = field->type;
        D.24563 = D.24562->attrs;
        D.24871 = (unsigned int) D.24563;
        D.24872 = D.24871 & 80;
        if (D.24872 != 16) goto <D.24873>; else goto <D.24874>;
        <D.24873>:
        // predicted unlikely by continue predictor.
        goto <D.19807>;
        <D.24874>:
        D.24562 = field->type;
        D.24563 = D.24562->attrs;
        D.24564 = (int) D.24563;
        D.24627 = D.24564 & 1536;
        if (D.24627 != 0) goto <D.24875>; else goto <D.24876>;
        <D.24875>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24633 = "_Deleted";
            D.24634 = MEM[(const unsigned char *)D.24633];
            D.24635 = (int) D.24634;
            D.24880 = *__s2;
            D.24881 = (int) D.24880;
            __result = D.24635 - D.24881;
            {
              if (__s2_len != 0) goto <D.24882>; else goto <D.24883>;
              <D.24882>:
              if (__result == 0) goto <D.24884>; else goto <D.24885>;
              <D.24884>:
              D.24642 = &MEM[(void *)"_Deleted" + 1B];
              D.24643 = *D.24642;
              D.24644 = (int) D.24643;
              D.24886 = __s2 + 1;
              D.24887 = *D.24886;
              D.24888 = (int) D.24887;
              __result = D.24644 - D.24888;
              if (__s2_len > 1) goto <D.24889>; else goto <D.24890>;
              <D.24889>:
              if (__result == 0) goto <D.24891>; else goto <D.24892>;
              <D.24891>:
              D.24652 = &MEM[(void *)"_Deleted" + 2B];
              D.24653 = *D.24652;
              D.24654 = (int) D.24653;
              D.24893 = __s2 + 2;
              D.24894 = *D.24893;
              D.24895 = (int) D.24894;
              __result = D.24654 - D.24895;
              if (__s2_len > 2) goto <D.24896>; else goto <D.24897>;
              <D.24896>:
              if (__result == 0) goto <D.24898>; else goto <D.24899>;
              <D.24898>:
              D.24662 = &MEM[(void *)"_Deleted" + 3B];
              D.24663 = *D.24662;
              D.24664 = (int) D.24663;
              D.24900 = __s2 + 3;
              D.24901 = *D.24900;
              D.24902 = (int) D.24901;
              __result = D.24664 - D.24902;
              <D.24899>:
              <D.24897>:
              <D.24892>:
              <D.24890>:
              <D.24885>:
              <D.24883>:
            }
            D.19815 = __result;
          }
          iftmp.86 = -D.19815;
          goto <D.24903>;
          <D.24879>:
          D.24904 = mono_field_get_name (field);
          iftmp.86 = __builtin_strcmp (D.24904, "_Deleted");
          <D.24903>:
          D.19816 = iftmp.86;
        }
        if (D.19816 == 0) goto <D.24905>; else goto <D.24906>;
        <D.24905>:
        // predicted unlikely by continue predictor.
        goto <D.19807>;
        <D.24906>:
        <D.24876>:
        D.24562 = field->type;
        D.24907 = mono_type_has_exceptions (D.24562);
        if (D.24907 != 0) goto <D.24908>; else goto <D.24909>;
        <D.24908>:
        mono_class_set_failure (class, 7, 0B);
        goto <D.19817>;
        <D.24909>:
        D.24562 = field->type;
        D.24910 = mono_type_size (D.24562, &align);
        size = (guint32) D.24910;
        D.24911 = class->sizes.class_size;
        field->offset = D.24911;
        D.24772 = field->offset;
        align.87 = align;
        D.24913 = align.87 + -1;
        D.24914 = D.24772 + D.24913;
        field->offset = D.24914;
        D.24772 = field->offset;
        align.87 = align;
        D.24915 = -align.87;
        D.24916 = D.24772 & D.24915;
        field->offset = D.24916;
        D.24772 = field->offset;
        D.24789 = (unsigned int) D.24772;
        D.24917 = D.24789 + size;
        D.24918 = (int) D.24917;
        class->sizes.class_size = D.24918;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.19807>:
  i = i + 1;
  <D.19819>:
  if (i < top) goto <D.19818>; else goto <D.19817>;
  <D.19817>:
}


mono_class_has_references (struct MonoClass * klass)
{
  long unsigned int D.24927;
  long unsigned int D.24928;
  gboolean D.24931;
  <unnamed-unsigned:1> D.24932;

  D.24927 = BIT_FIELD_REF <*klass, 64, 256>;
  D.24928 = D.24927 & 2;
  if (D.24928 != 0) goto <D.24929>; else goto <D.24930>;
  <D.24929>:
  D.24931 = 1;
  return D.24931;
  <D.24930>:
  mono_class_init (klass);
  D.24932 = klass->has_references;
  D.24931 = (gboolean) D.24932;
  return D.24931;
}


mono_class_setup_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.24934;
  struct MonoGenericClass * D.24939;
  unsigned char D.24942;
  gchar * D.24947;
  unsigned int D.24948;
  unsigned int D.24949;
  unsigned int D.24950;
  unsigned int D.24951;
  int D.24952;
  long unsigned int D.24953;
  long unsigned int D.24954;
  struct MonoMethod * * D.24955;
  struct MonoMethod * * D.24956;
  struct MonoMethod * * D.24957;
  struct MonoMethod * D.24958;
  struct MonoGenericContext * D.24959;
  struct MonoMethod * D.24960;
  int D.24961;
  const char * D.24964;
  gchar * D.24965;
  unsigned int i.88;
  unsigned char D.24968;
  guint32 iftmp.89;
  int D.24975;
  _Bool D.24976;
  long int D.24977;
  long int D.24978;
  short unsigned int D.24981;
  int D.24984;
  int D.24985;
  unsigned int D.24986;
  unsigned int D.24987;
  unsigned int D.24988;
  int D.24989;
  struct MonoImage * D.24990;
  unsigned int D.24991;
  struct MonoClass * D.24992;
  struct MonoType * D.24993;
  struct MonoClass * D.24994;
  struct MonoType * D.24995;
  int D.24996;
  int method_num.90;
  long unsigned int D.24998;
  long unsigned int D.24999;
  struct MonoMethod * * D.25000;
  int D.25003;
  unsigned int D.25004;
  int method_num.91;
  long unsigned int D.25006;
  long unsigned int D.25007;
  struct MonoMethod * * D.25008;
  struct MonoClass * D.25009;
  struct MonoType * D.25010;
  int method_num.92;
  long unsigned int D.25012;
  long unsigned int D.25013;
  struct MonoMethod * * D.25014;
  struct MonoType * D.25015;
  int method_num.93;
  long unsigned int D.25017;
  long unsigned int D.25018;
  struct MonoMethod * * D.25019;
  int D.25020;
  unsigned int D.25021;
  int method_num.94;
  long unsigned int D.25023;
  long unsigned int D.25024;
  struct MonoMethod * * D.25025;
  struct MonoClass * * D.25026;
  struct MonoClass * * D.25027;
  struct MonoClass * D.25028;
  int D.25029;
  int D.25030;
  unsigned int D.25032;
  unsigned int D.25033;
  unsigned int D.25034;
  unsigned int D.25035;
  int D.25036;
  unsigned int D.25037;
  struct MonoMethod * D.25038;
  unsigned int D.25041;
  unsigned int D.25042;
  unsigned char D.25044;
  struct MonoMethod * D.25046;
  short unsigned int D.25047;
  int D.25048;
  int D.25049;
  int slot.95;
  short int D.25053;
  int i;
  struct MonoMethod * * methods;

  D.24934 = class->methods;
  if (D.24934 != 0B) goto <D.24935>; else goto <D.24936>;
  <D.24935>:
  return;
  <D.24936>:
  mono_loader_lock ();
  D.24934 = class->methods;
  if (D.24934 != 0B) goto <D.24937>; else goto <D.24938>;
  <D.24937>:
  mono_loader_unlock ();
  return;
  <D.24938>:
  D.24939 = class->generic_class;
  if (D.24939 != 0B) goto <D.24940>; else goto <D.24941>;
  <D.24940>:
  {
    struct MonoError error;
    struct MonoClass * gklass;

    try
      {
        D.24939 = class->generic_class;
        gklass = D.24939->container_class;
        mono_class_init (gklass);
        D.24942 = gklass->exception_type;
        if (D.24942 == 0) goto <D.24943>; else goto <D.24944>;
        <D.24943>:
        mono_class_setup_methods (gklass);
        <D.24944>:
        D.24942 = gklass->exception_type;
        if (D.24942 != 0) goto <D.24945>; else goto <D.24946>;
        <D.24945>:
        D.24947 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.24947);
        mono_loader_unlock ();
        return;
        <D.24946>:
        D.24948 = gklass->method.count;
        class->method.count = D.24948;
        D.24949 = class->method.count;
        D.24950 = D.24949 + 1;
        D.24951 = D.24950 * 8;
        D.24952 = (int) D.24951;
        methods = mono_class_alloc0 (class, D.24952);
        i = 0;
        goto <D.19835>;
        <D.19834>:
        D.24953 = (long unsigned int) i;
        D.24954 = D.24953 * 8;
        D.24955 = methods + D.24954;
        D.24956 = gklass->methods;
        D.24953 = (long unsigned int) i;
        D.24954 = D.24953 * 8;
        D.24957 = D.24956 + D.24954;
        D.24958 = *D.24957;
        D.24959 = mono_class_get_context (class);
        D.24960 = mono_class_inflate_generic_method_full_checked (D.24958, class, D.24959, &error);
        *D.24955 = D.24960;
        D.24961 = mono_error_ok (&error);
        if (D.24961 == 0) goto <D.24962>; else goto <D.24963>;
        <D.24962>:
        {
          char * method;

          D.24956 = gklass->methods;
          D.24953 = (long unsigned int) i;
          D.24954 = D.24953 * 8;
          D.24957 = D.24956 + D.24954;
          D.24958 = *D.24957;
          method = mono_method_full_name (D.24958, 1);
          D.24964 = mono_error_get_message (&error);
          D.24965 = monoeg_g_strdup_printf ("Could not inflate method %s due to %s", method, D.24964);
          mono_class_set_failure (class, 7, D.24965);
          monoeg_g_free (method);
          mono_error_cleanup (&error);
          mono_loader_unlock ();
          return;
        }
        <D.24963>:
        i = i + 1;
        <D.19835>:
        i.88 = (unsigned int) i;
        D.24949 = class->method.count;
        if (i.88 < D.24949) goto <D.19834>; else goto <D.19836>;
        <D.19836>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.24967>;
  <D.24941>:
  D.24968 = class->rank;
  if (D.24968 != 0) goto <D.24969>; else goto <D.24970>;
  <D.24969>:
  {
    struct MonoError error;
    struct MonoMethod * amethod;
    struct MonoMethodSignature * sig;
    int count_generic;
    int first_generic;
    int method_num;

    try
      {
        count_generic = 0;
        first_generic = 0;
        method_num = 0;
        D.24968 = class->rank;
        if (D.24968 > 1) goto <D.24972>; else goto <D.24973>;
        <D.24972>:
        iftmp.89 = 5;
        goto <D.24974>;
        <D.24973>:
        iftmp.89 = 4;
        <D.24974>:
        class->method.count = iftmp.89;
        mono_class_setup_interfaces (class, &error);
        D.24975 = mono_error_ok (&error);
        D.24976 = D.24975 == 0;
        D.24977 = (long int) D.24976;
        D.24978 = __builtin_expect (D.24977, 0);
        if (D.24978 != 0) goto <D.24979>; else goto <D.24980>;
        <D.24979>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2088, "mono_error_ok (&error)");
        <D.24980>:
        D.24981 = class->interface_count;
        if (D.24981 != 0) goto <D.24982>; else goto <D.24983>;
        <D.24982>:
        count_generic = generic_array_methods (class);
        D.24949 = class->method.count;
        first_generic = (int) D.24949;
        D.24949 = class->method.count;
        D.24981 = class->interface_count;
        D.24984 = (int) D.24981;
        D.24985 = D.24984 * count_generic;
        D.24986 = (unsigned int) D.24985;
        D.24987 = D.24949 + D.24986;
        class->method.count = D.24987;
        <D.24983>:
        D.24949 = class->method.count;
        D.24988 = D.24949 * 8;
        D.24989 = (int) D.24988;
        methods = mono_class_alloc0 (class, D.24989);
        D.24990 = class->image;
        D.24968 = class->rank;
        D.24991 = (unsigned int) D.24968;
        sig = mono_metadata_signature_alloc (D.24990, D.24991);
        D.24992 = mono_defaults.void_class;
        D.24993 = &D.24992->byval_arg;
        sig->ret = D.24993;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19844>;
        <D.19843>:
        D.24994 = mono_defaults.int32_class;
        D.24995 = &D.24994->byval_arg;
        sig->params[i] = D.24995;
        i = i + 1;
        <D.19844>:
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        if (D.24996 > i) goto <D.19843>; else goto <D.19845>;
        <D.19845>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.90 = method_num;
        method_num = method_num.90 + 1;
        D.24998 = (long unsigned int) method_num.90;
        D.24999 = D.24998 * 8;
        D.25000 = methods + D.24999;
        *D.25000 = amethod;
        D.24968 = class->rank;
        if (D.24968 > 1) goto <D.25001>; else goto <D.25002>;
        <D.25001>:
        D.24990 = class->image;
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        D.25003 = D.24996 * 2;
        D.25004 = (unsigned int) D.25003;
        sig = mono_metadata_signature_alloc (D.24990, D.25004);
        D.24992 = mono_defaults.void_class;
        D.24993 = &D.24992->byval_arg;
        sig->ret = D.24993;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19847>;
        <D.19846>:
        D.24994 = mono_defaults.int32_class;
        D.24995 = &D.24994->byval_arg;
        sig->params[i] = D.24995;
        i = i + 1;
        <D.19847>:
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        D.25003 = D.24996 * 2;
        if (D.25003 > i) goto <D.19846>; else goto <D.19848>;
        <D.19848>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.91 = method_num;
        method_num = method_num.91 + 1;
        D.25006 = (long unsigned int) method_num.91;
        D.25007 = D.25006 * 8;
        D.25008 = methods + D.25007;
        *D.25008 = amethod;
        <D.25002>:
        D.24990 = class->image;
        D.24968 = class->rank;
        D.24991 = (unsigned int) D.24968;
        sig = mono_metadata_signature_alloc (D.24990, D.24991);
        D.25009 = class->element_class;
        D.25010 = &D.25009->byval_arg;
        sig->ret = D.25010;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19850>;
        <D.19849>:
        D.24994 = mono_defaults.int32_class;
        D.24995 = &D.24994->byval_arg;
        sig->params[i] = D.24995;
        i = i + 1;
        <D.19850>:
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        if (D.24996 > i) goto <D.19849>; else goto <D.19851>;
        <D.19851>:
        amethod = create_array_method (class, "Get", sig);
        method_num.92 = method_num;
        method_num = method_num.92 + 1;
        D.25012 = (long unsigned int) method_num.92;
        D.25013 = D.25012 * 8;
        D.25014 = methods + D.25013;
        *D.25014 = amethod;
        D.24990 = class->image;
        D.24968 = class->rank;
        D.24991 = (unsigned int) D.24968;
        sig = mono_metadata_signature_alloc (D.24990, D.24991);
        D.25009 = class->element_class;
        D.25015 = &D.25009->this_arg;
        sig->ret = D.25015;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19853>;
        <D.19852>:
        D.24994 = mono_defaults.int32_class;
        D.24995 = &D.24994->byval_arg;
        sig->params[i] = D.24995;
        i = i + 1;
        <D.19853>:
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        if (D.24996 > i) goto <D.19852>; else goto <D.19854>;
        <D.19854>:
        amethod = create_array_method (class, "Address", sig);
        method_num.93 = method_num;
        method_num = method_num.93 + 1;
        D.25017 = (long unsigned int) method_num.93;
        D.25018 = D.25017 * 8;
        D.25019 = methods + D.25018;
        *D.25019 = amethod;
        D.24990 = class->image;
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        D.25020 = D.24996 + 1;
        D.25021 = (unsigned int) D.25020;
        sig = mono_metadata_signature_alloc (D.24990, D.25021);
        D.24992 = mono_defaults.void_class;
        D.24993 = &D.24992->byval_arg;
        sig->ret = D.24993;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19856>;
        <D.19855>:
        D.24994 = mono_defaults.int32_class;
        D.24995 = &D.24994->byval_arg;
        sig->params[i] = D.24995;
        i = i + 1;
        <D.19856>:
        D.24968 = class->rank;
        D.24996 = (int) D.24968;
        if (D.24996 > i) goto <D.19855>; else goto <D.19857>;
        <D.19857>:
        D.25009 = class->element_class;
        D.25010 = &D.25009->byval_arg;
        sig->params[i] = D.25010;
        amethod = create_array_method (class, "Set", sig);
        method_num.94 = method_num;
        method_num = method_num.94 + 1;
        D.25023 = (long unsigned int) method_num.94;
        D.25024 = D.25023 * 8;
        D.25025 = methods + D.25024;
        *D.25025 = amethod;
        i = 0;
        goto <D.19859>;
        <D.19858>:
        D.25026 = class->interfaces;
        D.24953 = (long unsigned int) i;
        D.24954 = D.24953 * 8;
        D.25027 = D.25026 + D.24954;
        D.25028 = *D.25027;
        D.25029 = i * count_generic;
        D.25030 = D.25029 + first_generic;
        setup_generic_array_ifaces (class, D.25028, methods, D.25030);
        i = i + 1;
        <D.19859>:
        D.24981 = class->interface_count;
        D.24984 = (int) D.24981;
        if (D.24984 > i) goto <D.19858>; else goto <D.19860>;
        <D.19860>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.25031>;
  <D.24970>:
  D.24949 = class->method.count;
  D.24988 = D.24949 * 8;
  D.24989 = (int) D.24988;
  methods = mono_class_alloc (class, D.24989);
  i = 0;
  goto <D.19863>;
  <D.19862>:
  {
    int idx;

    D.24990 = class->image;
    D.25032 = class->method.first;
    i.88 = (unsigned int) i;
    D.25033 = D.25032 + i.88;
    D.25034 = D.25033 + 1;
    D.25035 = mono_metadata_translate_token_index (D.24990, 6, D.25034);
    idx = (int) D.25035;
    D.24953 = (long unsigned int) i;
    D.24954 = D.24953 * 8;
    D.24955 = methods + D.24954;
    D.24990 = class->image;
    D.25036 = idx | 100663296;
    D.25037 = (unsigned int) D.25036;
    D.25038 = mono_get_method (D.24990, D.25037, class);
    *D.24955 = D.25038;
  }
  i = i + 1;
  <D.19863>:
  i.88 = (unsigned int) i;
  D.24949 = class->method.count;
  if (i.88 < D.24949) goto <D.19862>; else goto <D.19864>;
  <D.19864>:
  <D.25031>:
  <D.24967>:
  D.25041 = class->flags;
  D.25042 = D.25041 & 32;
  if (D.25042 != 0) goto <D.25039>; else goto <D.25043>;
  <D.25043>:
  D.25044 = class->byval_arg.type;
  if (D.25044 == 19) goto <D.25039>; else goto <D.25045>;
  <D.25045>:
  D.25044 = class->byval_arg.type;
  if (D.25044 == 30) goto <D.25039>; else goto <D.25040>;
  <D.25039>:
  {
    int slot;

    slot = 0;
    i = 0;
    goto <D.19867>;
    <D.19866>:
    D.24953 = (long unsigned int) i;
    D.24954 = D.24953 * 8;
    D.24955 = methods + D.24954;
    D.25046 = *D.24955;
    D.25047 = D.25046->flags;
    D.25048 = (int) D.25047;
    D.25049 = D.25048 & 64;
    if (D.25049 != 0) goto <D.25050>; else goto <D.25051>;
    <D.25050>:
    D.24953 = (long unsigned int) i;
    D.24954 = D.24953 * 8;
    D.24955 = methods + D.24954;
    D.25046 = *D.24955;
    slot.95 = slot;
    slot = slot.95 + 1;
    D.25053 = (short int) slot.95;
    D.25046->slot = D.25053;
    <D.25051>:
    i = i + 1;
    <D.19867>:
    i.88 = (unsigned int) i;
    D.24949 = class->method.count;
    if (i.88 < D.24949) goto <D.19866>; else goto <D.19868>;
    <D.19868>:
  }
  <D.25040>:
  mono_memory_barrier ();
  class->methods = methods;
  mono_loader_unlock ();
}


generic_array_methods (struct MonoClass * class)
{
  int generic_array_method_num.96;
  int D.25060;
  struct MonoClass * D.25061;
  unsigned char D.25062;
  _Bool D.25063;
  long int D.25064;
  long int D.25065;
  struct MonoMethod * * D.25068;
  long unsigned int D.25069;
  long unsigned int D.25070;
  struct MonoMethod * * D.25071;
  const char * D.25072;
  int D.25073;
  unsigned int i.97;
  unsigned int D.25077;
  struct MonoImage * D.25078;
  long unsigned int D.25079;
  unsigned int D.25080;
  unsigned int D.25081;
  void * generic_array_method_info.98;
  struct GenericArrayMethodInfo * generic_array_method_info.99;
  long unsigned int D.25084;
  struct GenericArrayMethodInfo * D.25085;
  const char * D.25086;
  int D.25087;
  int D.25091;
  long unsigned int D.25095;
  int D.25096;
  long unsigned int D.25099;
  long unsigned int D.25101;
  int D.25102;
  long unsigned int D.25105;
  int D.25107;
  long unsigned int D.25111;
  unsigned int D.25112;
  long unsigned int D.25113;
  unsigned int D.25114;
  unsigned int D.25115;
  unsigned int D.25116;
  long unsigned int D.25117;
  gchar * D.25118;
  int i;
  int count_generic;
  struct GList * list;
  struct GList * tmp;

  count_generic = 0;
  list = 0B;
  generic_array_method_num.96 = generic_array_method_num;
  if (generic_array_method_num.96 != 0) goto <D.25058>; else goto <D.25059>;
  <D.25058>:
  D.25060 = generic_array_method_num;
  return D.25060;
  <D.25059>:
  D.25061 = class->parent;
  mono_class_setup_methods (D.25061);
  D.25061 = class->parent;
  D.25062 = D.25061->exception_type;
  D.25063 = D.25062 != 0;
  D.25064 = (long int) D.25063;
  D.25065 = __builtin_expect (D.25064, 0);
  if (D.25065 != 0) goto <D.25066>; else goto <D.25067>;
  <D.25066>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4760, "!class->parent->exception_type");
  <D.25067>:
  i = 0;
  goto <D.20701>;
  <D.20700>:
  {
    struct MonoMethod * m;

    D.25061 = class->parent;
    D.25068 = D.25061->methods;
    D.25069 = (long unsigned int) i;
    D.25070 = D.25069 * 8;
    D.25071 = D.25068 + D.25070;
    m = *D.25071;
    D.25072 = m->name;
    D.25073 = strncmp (D.25072, "InternalArray__", 15);
    if (D.25073 == 0) goto <D.25074>; else goto <D.25075>;
    <D.25074>:
    count_generic = count_generic + 1;
    list = monoeg_g_list_prepend (list, m);
    <D.25075>:
  }
  i = i + 1;
  <D.20701>:
  i.97 = (unsigned int) i;
  D.25061 = class->parent;
  D.25077 = D.25061->method.count;
  if (i.97 < D.25077) goto <D.20700>; else goto <D.20702>;
  <D.20702>:
  list = monoeg_g_list_reverse (list);
  D.25078 = mono_defaults.corlib;
  D.25079 = (long unsigned int) count_generic;
  D.25080 = (unsigned int) D.25079;
  D.25081 = D.25080 * 16;
  generic_array_method_info.98 = mono_image_alloc (D.25078, D.25081);
  generic_array_method_info = generic_array_method_info.98;
  i = 0;
  tmp = list;
  goto <D.20755>;
  <D.20754>:
  {
    const char * mname;
    const char * iname;
    gchar * name;
    struct MonoMethod * m;
    const char * ireadonlylist_prefix;
    const char * ireadonlycollection_prefix;

    m = tmp->data;
    ireadonlylist_prefix = "InternalArray__IReadOnlyList_";
    ireadonlycollection_prefix = "InternalArray__IReadOnlyCollection_";
    generic_array_method_info.99 = generic_array_method_info;
    D.25069 = (long unsigned int) i;
    D.25084 = D.25069 * 16;
    D.25085 = generic_array_method_info.99 + D.25084;
    D.25085->array_method = m;
    D.25086 = m->name;
    D.25087 = strncmp (D.25086, "InternalArray__ICollection_", 27);
    if (D.25087 == 0) goto <D.25088>; else goto <D.25089>;
    <D.25088>:
    iname = "System.Collections.Generic.ICollection`1.";
    D.25086 = m->name;
    mname = D.25086 + 27;
    goto <D.25090>;
    <D.25089>:
    D.25086 = m->name;
    D.25091 = strncmp (D.25086, "InternalArray__IEnumerable_", 27);
    if (D.25091 == 0) goto <D.25092>; else goto <D.25093>;
    <D.25092>:
    iname = "System.Collections.Generic.IEnumerable`1.";
    D.25086 = m->name;
    mname = D.25086 + 27;
    goto <D.25094>;
    <D.25093>:
    D.25086 = m->name;
    D.25095 = strlen (ireadonlylist_prefix);
    D.25096 = strncmp (D.25086, ireadonlylist_prefix, D.25095);
    if (D.25096 == 0) goto <D.25097>; else goto <D.25098>;
    <D.25097>:
    iname = "System.Collections.Generic.IReadOnlyList`1.";
    D.25086 = m->name;
    D.25099 = strlen (ireadonlylist_prefix);
    mname = D.25086 + D.25099;
    goto <D.25100>;
    <D.25098>:
    D.25086 = m->name;
    D.25101 = strlen (ireadonlycollection_prefix);
    D.25102 = strncmp (D.25086, ireadonlycollection_prefix, D.25101);
    if (D.25102 == 0) goto <D.25103>; else goto <D.25104>;
    <D.25103>:
    iname = "System.Collections.Generic.IReadOnlyCollection`1.";
    D.25086 = m->name;
    D.25105 = strlen (ireadonlycollection_prefix);
    mname = D.25086 + D.25105;
    goto <D.25106>;
    <D.25104>:
    D.25086 = m->name;
    D.25107 = strncmp (D.25086, "InternalArray__", 15);
    if (D.25107 == 0) goto <D.25108>; else goto <D.25109>;
    <D.25108>:
    iname = "System.Collections.Generic.IList`1.";
    D.25086 = m->name;
    mname = D.25086 + 15;
    goto <D.25110>;
    <D.25109>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4795);
    <D.25110>:
    <D.25106>:
    <D.25100>:
    <D.25094>:
    <D.25090>:
    D.25078 = mono_defaults.corlib;
    D.25111 = strlen (iname);
    D.25112 = (unsigned int) D.25111;
    D.25113 = strlen (mname);
    D.25114 = (unsigned int) D.25113;
    D.25115 = D.25112 + D.25114;
    D.25116 = D.25115 + 1;
    name = mono_image_alloc (D.25078, D.25116);
    strcpy (name, iname);
    D.25117 = strlen (iname);
    D.25118 = name + D.25117;
    strcpy (D.25118, mname);
    generic_array_method_info.99 = generic_array_method_info;
    D.25069 = (long unsigned int) i;
    D.25084 = D.25069 * 16;
    D.25085 = generic_array_method_info.99 + D.25084;
    D.25085->name = name;
    i = i + 1;
  }
  tmp = tmp->next;
  <D.20755>:
  if (tmp != 0B) goto <D.20754>; else goto <D.20756>;
  <D.20756>:
  generic_array_method_num = count_generic;
  monoeg_g_list_free (list);
  D.25060 = generic_array_method_num;
  return D.25060;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.25120;
  long unsigned int D.25121;

  D.25121 = __builtin_object_size (__dest, 1);
  D.25120 = __builtin___strcpy_chk (__dest, __src, D.25121);
  return D.25120;
}


create_array_method (struct MonoClass * class, const char * name, struct MonoMethodSignature * sig)
{
  struct MonoImage * D.25123;
  char D.25124;
  short unsigned int D.25127;
  short unsigned int D.25128;
  short unsigned int D.25130;
  short unsigned int D.25131;
  struct MonoMethod * D.25132;
  struct MonoMethod * method;

  D.25123 = class->image;
  method = mono_image_alloc0 (D.25123, 56);
  method->klass = class;
  method->flags = 6;
  method->iflags = 4096;
  method->signature = sig;
  method->name = name;
  method->slot = -1;
  D.25124 = *name;
  if (D.25124 == 46) goto <D.25125>; else goto <D.25126>;
  <D.25125>:
  D.25127 = method->flags;
  D.25128 = D.25127 | 6144;
  method->flags = D.25128;
  goto <D.25129>;
  <D.25126>:
  D.25130 = method->iflags;
  D.25131 = D.25130 | 3;
  method->iflags = D.25131;
  <D.25129>:
  D.25132 = method;
  return D.25132;
}


setup_generic_array_ifaces (struct MonoClass * class, struct MonoClass * iface, struct MonoMethod * * methods, int pos)
{
  struct MonoGenericClass * D.25134;
  struct MonoGenericInst * D.25135;
  struct GenericArrayMethodInfo * generic_array_method_info.100;
  long unsigned int D.25137;
  long unsigned int D.25138;
  struct GenericArrayMethodInfo * D.25139;
  int pos.101;
  long unsigned int D.25141;
  long unsigned int D.25142;
  struct MonoMethod * * D.25143;
  char * D.25144;
  struct MonoMethod * D.25145;
  int generic_array_method_num.102;
  struct MonoGenericContext tmp_context;
  int i;

  try
    {
      tmp_context.class_inst = 0B;
      D.25134 = iface->generic_class;
      D.25135 = D.25134->context.class_inst;
      tmp_context.method_inst = D.25135;
      i = 0;
      goto <D.20768>;
      <D.20767>:
      {
        struct MonoMethod * m;
        struct MonoMethod * inflated;

        generic_array_method_info.100 = generic_array_method_info;
        D.25137 = (long unsigned int) i;
        D.25138 = D.25137 * 16;
        D.25139 = generic_array_method_info.100 + D.25138;
        m = D.25139->array_method;
        inflated = mono_class_inflate_generic_method (m, &tmp_context);
        pos.101 = pos;
        pos = pos.101 + 1;
        D.25141 = (long unsigned int) pos.101;
        D.25142 = D.25141 * 8;
        D.25143 = methods + D.25142;
        generic_array_method_info.100 = generic_array_method_info;
        D.25137 = (long unsigned int) i;
        D.25138 = D.25137 * 16;
        D.25139 = generic_array_method_info.100 + D.25138;
        D.25144 = D.25139->name;
        D.25145 = mono_marshal_get_generic_array_helper (class, iface, D.25144, inflated);
        *D.25143 = D.25145;
      }
      i = i + 1;
      <D.20768>:
      generic_array_method_num.102 = generic_array_method_num;
      if (i < generic_array_method_num.102) goto <D.20767>; else goto <D.20769>;
      <D.20769>:
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


mono_class_get_method_by_index (struct MonoClass * class, int index)
{
  struct MonoGenericClass * D.25148;
  struct MonoMethod * * D.25150;
  struct MonoMethod * * D.25152;
  long unsigned int D.25153;
  long unsigned int D.25154;
  struct MonoMethod * * D.25155;
  struct MonoMethod * D.25156;
  struct MonoGenericContext * D.25157;
  struct MonoMethod * D.25158;
  unsigned char D.25159;
  int iftmp.103;
  unsigned int index.104;
  unsigned int D.25168;
  _Bool D.25169;
  long int D.25170;
  long int D.25171;
  struct MonoMethod * * D.25174;

  D.25148 = class->generic_class;
  if (D.25148 != 0B) goto <D.25149>; else goto <D.25147>;
  <D.25149>:
  D.25150 = class->methods;
  if (D.25150 == 0B) goto <D.25151>; else goto <D.25147>;
  <D.25151>:
  {
    struct MonoClass * gklass;
    struct MonoMethod * m;

    D.25148 = class->generic_class;
    gklass = D.25148->container_class;
    D.25152 = gklass->methods;
    D.25153 = (long unsigned int) index;
    D.25154 = D.25153 * 8;
    D.25155 = D.25152 + D.25154;
    D.25156 = *D.25155;
    D.25157 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (D.25156, class, D.25157);
    D.25158 = m;
    return D.25158;
  }
  <D.25147>:
  mono_class_setup_methods (class);
  D.25159 = class->exception_type;
  if (D.25159 != 0) goto <D.25160>; else goto <D.25161>;
  <D.25160>:
  D.25158 = 0B;
  return D.25158;
  <D.25161>:
  if (index < 0) goto <D.25163>; else goto <D.25166>;
  <D.25166>:
  index.104 = (unsigned int) index;
  D.25168 = class->method.count;
  if (index.104 >= D.25168) goto <D.25163>; else goto <D.25164>;
  <D.25163>:
  iftmp.103 = 1;
  goto <D.25165>;
  <D.25164>:
  iftmp.103 = 0;
  <D.25165>:
  D.25169 = iftmp.103 != 0;
  D.25170 = (long int) D.25169;
  D.25171 = __builtin_expect (D.25170, 0);
  if (D.25171 != 0) goto <D.25172>; else goto <D.25173>;
  <D.25172>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2205, "index >= 0 && index < class->method.count");
  <D.25173>:
  D.25150 = class->methods;
  D.25153 = (long unsigned int) index;
  D.25154 = D.25153 * 8;
  D.25174 = D.25150 + D.25154;
  D.25158 = *D.25174;
  return D.25158;
}


mono_class_get_inflated_method (struct MonoClass * class, struct MonoMethod * method)
{
  struct MonoGenericClass * D.25176;
  struct MonoClass * D.25177;
  _Bool D.25178;
  long int D.25179;
  long int D.25180;
  unsigned char D.25183;
  _Bool D.25184;
  long int D.25185;
  long int D.25186;
  struct MonoMethod * * D.25189;
  long unsigned int D.25190;
  long unsigned int D.25191;
  struct MonoMethod * * D.25192;
  struct MonoMethod * D.25193;
  struct MonoMethod * * D.25196;
  struct MonoMethod * D.25199;
  struct MonoMethod * * D.25200;
  struct MonoGenericContext * D.25201;
  unsigned int i.105;
  unsigned int D.25203;
  struct MonoClass * gklass;
  int i;

  D.25176 = class->generic_class;
  gklass = D.25176->container_class;
  D.25177 = method->klass;
  D.25178 = D.25177 != gklass;
  D.25179 = (long int) D.25178;
  D.25180 = __builtin_expect (D.25179, 0);
  if (D.25180 != 0) goto <D.25181>; else goto <D.25182>;
  <D.25181>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2222, "method->klass == gklass");
  <D.25182>:
  mono_class_setup_methods (gklass);
  D.25183 = gklass->exception_type;
  D.25184 = D.25183 != 0;
  D.25185 = (long int) D.25184;
  D.25186 = __builtin_expect (D.25185, 0);
  if (D.25186 != 0) goto <D.25187>; else goto <D.25188>;
  <D.25187>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2225, "!gklass->exception_type");
  <D.25188>:
  i = 0;
  goto <D.19882>;
  <D.19881>:
  D.25189 = gklass->methods;
  D.25190 = (long unsigned int) i;
  D.25191 = D.25190 * 8;
  D.25192 = D.25189 + D.25191;
  D.25193 = *D.25192;
  if (D.25193 == method) goto <D.25194>; else goto <D.25195>;
  <D.25194>:
  D.25196 = class->methods;
  if (D.25196 != 0B) goto <D.25197>; else goto <D.25198>;
  <D.25197>:
  D.25196 = class->methods;
  D.25190 = (long unsigned int) i;
  D.25191 = D.25190 * 8;
  D.25200 = D.25196 + D.25191;
  D.25199 = *D.25200;
  return D.25199;
  <D.25198>:
  D.25189 = gklass->methods;
  D.25190 = (long unsigned int) i;
  D.25191 = D.25190 * 8;
  D.25192 = D.25189 + D.25191;
  D.25193 = *D.25192;
  D.25201 = mono_class_get_context (class);
  D.25199 = mono_class_inflate_generic_method_full (D.25193, class, D.25201);
  return D.25199;
  <D.25195>:
  i = i + 1;
  <D.19882>:
  i.105 = (unsigned int) i;
  D.25203 = gklass->method.count;
  if (i.105 < D.25203) goto <D.19881>; else goto <D.19883>;
  <D.19883>:
  D.25199 = 0B;
  return D.25199;
}


mono_class_get_vtable_entry (struct MonoClass * class, int offset)
{
  unsigned char D.25205;
  struct MonoClass * D.25208;
  int D.25209;
  struct MonoMethod * D.25212;
  struct MonoMethod * * D.25213;
  long unsigned int D.25214;
  long unsigned int D.25215;
  struct MonoMethod * * D.25216;
  struct MonoGenericClass * D.25217;
  struct MonoMethod * * D.25220;
  struct MonoMethod * * D.25221;
  struct MonoGenericContext * D.25222;
  unsigned char D.25224;
  struct MonoMethod * * D.25227;
  struct MonoMethod * * D.25228;
  struct MonoMethod * m;

  D.25205 = class->rank;
  if (D.25205 == 1) goto <D.25206>; else goto <D.25207>;
  <D.25206>:
  D.25208 = class->parent;
  mono_class_setup_vtable (D.25208);
  D.25208 = class->parent;
  D.25209 = D.25208->vtable_size;
  if (D.25209 > offset) goto <D.25210>; else goto <D.25211>;
  <D.25210>:
  D.25208 = class->parent;
  D.25213 = D.25208->vtable;
  D.25214 = (long unsigned int) offset;
  D.25215 = D.25214 * 8;
  D.25216 = D.25213 + D.25215;
  D.25212 = *D.25216;
  return D.25212;
  <D.25211>:
  <D.25207>:
  D.25217 = class->generic_class;
  if (D.25217 != 0B) goto <D.25218>; else goto <D.25219>;
  <D.25218>:
  {
    struct MonoClass * gklass;

    D.25217 = class->generic_class;
    gklass = D.25217->container_class;
    mono_class_setup_vtable (gklass);
    D.25220 = gklass->vtable;
    D.25214 = (long unsigned int) offset;
    D.25215 = D.25214 * 8;
    D.25221 = D.25220 + D.25215;
    m = *D.25221;
    D.25222 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (m, class, D.25222);
  }
  goto <D.25223>;
  <D.25219>:
  mono_class_setup_vtable (class);
  D.25224 = class->exception_type;
  if (D.25224 != 0) goto <D.25225>; else goto <D.25226>;
  <D.25225>:
  D.25212 = 0B;
  return D.25212;
  <D.25226>:
  D.25227 = class->vtable;
  D.25214 = (long unsigned int) offset;
  D.25215 = D.25214 * 8;
  D.25228 = D.25227 + D.25215;
  m = *D.25228;
  <D.25223>:
  D.25212 = m;
  return D.25212;
}


mono_class_get_vtable_size (struct MonoClass * klass)
{
  int D.25230;

  mono_class_setup_vtable (klass);
  D.25230 = klass->vtable_size;
  return D.25230;
}


mono_unload_interface_ids (struct MonoBitSet * bitset)
{
  struct MonoBitSet * global_interface_bitset.106;

  mono_loader_lock ();
  global_interface_bitset.106 = global_interface_bitset;
  mono_bitset_sub (global_interface_bitset.106, bitset);
  mono_loader_unlock ();
}


mono_unload_interface_id (struct MonoClass * class)
{
  struct MonoBitSet * global_interface_bitset.107;
  short unsigned int D.25236;
  unsigned int D.25239;

  global_interface_bitset.107 = global_interface_bitset;
  if (global_interface_bitset.107 != 0B) goto <D.25234>; else goto <D.25235>;
  <D.25234>:
  D.25236 = class->interface_id;
  if (D.25236 != 0) goto <D.25237>; else goto <D.25238>;
  <D.25237>:
  mono_loader_lock ();
  global_interface_bitset.107 = global_interface_bitset;
  D.25236 = class->interface_id;
  D.25239 = (unsigned int) D.25236;
  mono_bitset_clear (global_interface_bitset.107, D.25239);
  mono_loader_unlock ();
  <D.25238>:
  <D.25235>:
}


mono_class_get_implemented_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  int D.25240;
  struct GPtrArray * res.108;
  struct GPtrArray * D.25246;
  struct GPtrArray * res;

  try
    {
      res = 0B;
      collect_implemented_interfaces_aux (klass, &res, error);
      D.25240 = mono_error_ok (error);
      if (D.25240 == 0) goto <D.25241>; else goto <D.25242>;
      <D.25241>:
      res.108 = res;
      if (res.108 != 0B) goto <D.25244>; else goto <D.25245>;
      <D.25244>:
      res.108 = res;
      monoeg_g_ptr_array_free (res.108, 1);
      <D.25245>:
      D.25246 = 0B;
      return D.25246;
      <D.25242>:
      D.25246 = res;
      return D.25246;
    }
  finally
    {
      res = {CLOBBER};
    }
}


collect_implemented_interfaces_aux (struct MonoClass * klass, struct GPtrArray * * res, struct MonoError * error)
{
  int D.25249;
  struct MonoClass * * D.25252;
  long unsigned int D.25253;
  long unsigned int D.25254;
  struct MonoClass * * D.25255;
  struct GPtrArray * D.25256;
  struct GPtrArray * D.25259;
  unsigned char D.25260;
  int D.25263;
  short unsigned int D.25266;
  int D.25267;
  int i;
  struct MonoClass * ic;

  mono_class_setup_interfaces (klass, error);
  D.25249 = mono_error_ok (error);
  if (D.25249 == 0) goto <D.25250>; else goto <D.25251>;
  <D.25250>:
  return;
  <D.25251>:
  i = 0;
  goto <D.19998>;
  <D.19997>:
  D.25252 = klass->interfaces;
  D.25253 = (long unsigned int) i;
  D.25254 = D.25253 * 8;
  D.25255 = D.25252 + D.25254;
  ic = *D.25255;
  D.25256 = *res;
  if (D.25256 == 0B) goto <D.25257>; else goto <D.25258>;
  <D.25257>:
  D.25259 = monoeg_g_ptr_array_new ();
  *res = D.25259;
  <D.25258>:
  D.25256 = *res;
  monoeg_g_ptr_array_add (D.25256, ic);
  mono_class_init (ic);
  D.25260 = ic->exception_type;
  if (D.25260 != 0) goto <D.25261>; else goto <D.25262>;
  <D.25261>:
  mono_error_set_type_load_class (error, ic, "Error Loading class");
  return;
  <D.25262>:
  collect_implemented_interfaces_aux (ic, res, error);
  D.25263 = mono_error_ok (error);
  if (D.25263 == 0) goto <D.25264>; else goto <D.25265>;
  <D.25264>:
  return;
  <D.25265>:
  i = i + 1;
  <D.19998>:
  D.25266 = klass->interface_count;
  D.25267 = (int) D.25266;
  if (D.25267 > i) goto <D.19997>; else goto <D.19999>;
  <D.19999>:
}


mono_class_interface_offset (struct MonoClass * klass, struct MonoClass * itf)
{
  struct MonoClass * * D.25269;
  short unsigned int D.25270;
  long unsigned int D.25271;
  int D.25274;
  guint16 * D.25275;
  long int result.109;
  long int D.25277;
  long int D.25278;
  long int D.25279;
  long unsigned int D.25280;
  long unsigned int D.25281;
  guint16 * D.25282;
  short unsigned int D.25283;
  struct MonoClass * * result;

  D.25269 = klass->interfaces_packed;
  D.25270 = klass->interface_offsets_count;
  D.25271 = (long unsigned int) D.25270;
  result = mono_binary_search (itf, D.25269, D.25271, 8, compare_interface_ids);
  if (result != 0B) goto <D.25272>; else goto <D.25273>;
  <D.25272>:
  D.25275 = klass->interface_offsets_packed;
  result.109 = (long int) result;
  D.25269 = klass->interfaces_packed;
  D.25277 = (long int) D.25269;
  D.25278 = result.109 - D.25277;
  D.25279 = D.25278 /[ex] 8;
  D.25280 = (long unsigned int) D.25279;
  D.25281 = D.25280 * 2;
  D.25282 = D.25275 + D.25281;
  D.25283 = *D.25282;
  D.25274 = (int) D.25283;
  return D.25274;
  <D.25273>:
  D.25274 = -1;
  return D.25274;
}


compare_interface_ids (const void * p_key, const void * p_element)
{
  int D.25285;
  short unsigned int D.25286;
  int D.25287;
  short unsigned int D.25288;
  int D.25289;
  const struct MonoClass * key;
  const struct MonoClass * element;

  key = p_key;
  element = MEM[(struct MonoClass * *)p_element];
  D.25286 = key->interface_id;
  D.25287 = (int) D.25286;
  D.25288 = element->interface_id;
  D.25289 = (int) D.25288;
  D.25285 = D.25287 - D.25289;
  return D.25285;
}


mono_class_interface_offset_with_variance (struct MonoClass * klass, struct MonoClass * itf, gboolean * non_exact_match)
{
  int D.25293;
  int D.25294;
  struct MonoClass * * D.25297;
  long unsigned int D.25298;
  long unsigned int D.25299;
  struct MonoClass * * D.25300;
  struct MonoClass * D.25301;
  int D.25302;
  guint16 * D.25305;
  long unsigned int D.25306;
  guint16 * D.25307;
  short unsigned int D.25308;
  short unsigned int D.25309;
  int D.25310;
  int i;

  i = mono_class_interface_offset (klass, itf);
  *non_exact_match = 0;
  if (i >= 0) goto <D.25291>; else goto <D.25292>;
  <D.25291>:
  D.25293 = i;
  return D.25293;
  <D.25292>:
  D.25294 = mono_class_has_variant_generic_params (itf);
  if (D.25294 == 0) goto <D.25295>; else goto <D.25296>;
  <D.25295>:
  D.25293 = -1;
  return D.25293;
  <D.25296>:
  i = 0;
  goto <D.20023>;
  <D.20022>:
  D.25297 = klass->interfaces_packed;
  D.25298 = (long unsigned int) i;
  D.25299 = D.25298 * 8;
  D.25300 = D.25297 + D.25299;
  D.25301 = *D.25300;
  D.25302 = mono_class_is_variant_compatible (itf, D.25301, 0);
  if (D.25302 != 0) goto <D.25303>; else goto <D.25304>;
  <D.25303>:
  *non_exact_match = 1;
  D.25305 = klass->interface_offsets_packed;
  D.25298 = (long unsigned int) i;
  D.25306 = D.25298 * 2;
  D.25307 = D.25305 + D.25306;
  D.25308 = *D.25307;
  D.25293 = (int) D.25308;
  return D.25293;
  <D.25304>:
  i = i + 1;
  <D.20023>:
  D.25309 = klass->interface_offsets_count;
  D.25310 = (int) D.25309;
  if (D.25310 > i) goto <D.20022>; else goto <D.20024>;
  <D.20024>:
  D.25293 = -1;
  return D.25293;
}


mono_class_setup_interface_offsets (struct MonoClass * class)
{
  mono_loader_lock ();
  setup_interface_offsets (class, 0, 0);
  mono_loader_unlock ();
}


setup_interface_offsets (struct MonoClass * class, int cur_slot, gboolean overwrite)
{
  short unsigned int D.25312;
  long unsigned int D.25313;
  long unsigned int D.25314;
  struct MonoClass * * D.25315;
  long unsigned int D.25316;
  long unsigned int D.25317;
  struct MonoClass * * D.25318;
  short unsigned int D.25319;
  int D.25320;
  struct MonoClass * * D.25321;
  long unsigned int D.25322;
  long unsigned int D.25323;
  struct MonoClass * * D.25324;
  long unsigned int D.25325;
  long unsigned int D.25326;
  short unsigned int D.25329;
  int D.25330;
  int D.25333;
  const char * D.25336;
  gchar * D.25337;
  unsigned int D.25340;
  unsigned int num_ifaces.110;
  unsigned int D.25342;
  void * * D.25343;
  void * * D.25344;
  unsigned int i.111;
  struct GPtrArray * * D.25348;
  int D.25349;
  struct MonoClass * * D.25350;
  int num_array_interfaces.112;
  unsigned int D.25356;
  unsigned int D.25357;
  unsigned char D.25359;
  short unsigned int D.25361;
  int D.25362;
  short unsigned int D.25365;
  long unsigned int D.25366;
  long unsigned int D.25367;
  long unsigned int D.25368;
  long unsigned int D.25369;
  int * D.25370;
  _Bool D.25373;
  long int D.25374;
  long int D.25375;
  int D.25378;
  sizetype D.25379;
  struct MonoClass * * D.25380;
  struct MonoClass * D.25381;
  _Bool D.25382;
  long int D.25383;
  long int D.25384;
  struct GPtrArray * * D.25387;
  int D.25390;
  gchar * D.25395;
  int is_enumerator.113;
  struct MonoClass * * D.25405;
  long unsigned int D.25406;
  long unsigned int D.25407;
  struct MonoClass * * D.25408;
  struct MonoClass * D.25409;
  _Bool D.25410;
  long int D.25411;
  long int D.25412;
  int D.20239;
  int iftmp.114;
  int D.20238;
  const char[14] * D.25418;
  unsigned char D.25419;
  int D.25420;
  unsigned char D.25421;
  int D.25422;
  const unsigned char * D.25427;
  unsigned char D.25428;
  int D.25429;
  const unsigned char * D.25430;
  unsigned char D.25431;
  int D.25432;
  const unsigned char * D.25437;
  unsigned char D.25438;
  int D.25439;
  const unsigned char * D.25440;
  unsigned char D.25441;
  int D.25442;
  const unsigned char * D.25447;
  unsigned char D.25448;
  int D.25449;
  const unsigned char * D.25450;
  unsigned char D.25451;
  int D.25452;
  const char * D.25454;
  long unsigned int D.25459;
  long unsigned int D.25460;
  struct MonoClass * * D.25461;
  struct MonoClass * iftmp.115;
  long unsigned int D.25465;
  long unsigned int D.25466;
  struct MonoClass * * D.25467;
  int iftmp.116;
  struct MonoClass * D.25473;
  struct MonoClass * * D.25474;
  long unsigned int D.25475;
  long unsigned int D.25476;
  struct MonoClass * * D.25477;
  struct MonoClass * D.25478;
  long unsigned int D.25479;
  long unsigned int D.25480;
  struct MonoClass * * D.25481;
  struct MonoClass * D.25482;
  int iftmp.117;
  struct MonoClass * D.25486;
  int iftmp.118;
  struct MonoClass * * D.25491;
  long unsigned int D.25492;
  long unsigned int D.25493;
  struct MonoClass * * D.25494;
  struct MonoClass * D.25495;
  int iftmp.119;
  _Bool D.25503;
  long int D.25504;
  long int D.25505;
  struct MonoGenericClass * D.25508;
  struct MonoClass * D.25509;
  struct MonoClass * D.25510;
  int D.20264;
  int iftmp.120;
  int D.20263;
  const char[14] * D.25517;
  unsigned char D.25518;
  int D.25519;
  unsigned char D.25520;
  int D.25521;
  const unsigned char * D.25526;
  unsigned char D.25527;
  int D.25528;
  const unsigned char * D.25529;
  unsigned char D.25530;
  int D.25531;
  const unsigned char * D.25536;
  unsigned char D.25537;
  int D.25538;
  const unsigned char * D.25539;
  unsigned char D.25540;
  int D.25541;
  const unsigned char * D.25546;
  unsigned char D.25547;
  int D.25548;
  const unsigned char * D.25549;
  unsigned char D.25550;
  int D.25551;
  int D.20273;
  int iftmp.121;
  int D.20272;
  const char[14] * D.25559;
  unsigned char D.25560;
  int D.25561;
  unsigned char D.25562;
  int D.25563;
  const unsigned char * D.25568;
  unsigned char D.25569;
  int D.25570;
  const unsigned char * D.25571;
  unsigned char D.25572;
  int D.25573;
  const unsigned char * D.25578;
  unsigned char D.25579;
  int D.25580;
  const unsigned char * D.25581;
  unsigned char D.25582;
  int D.25583;
  const unsigned char * D.25588;
  unsigned char D.25589;
  int D.25590;
  const unsigned char * D.25591;
  unsigned char D.25592;
  int D.25593;
  int D.20282;
  int iftmp.122;
  int D.20281;
  const char[16] * D.25601;
  unsigned char D.25602;
  int D.25603;
  unsigned char D.25604;
  int D.25605;
  const unsigned char * D.25610;
  unsigned char D.25611;
  int D.25612;
  const unsigned char * D.25613;
  unsigned char D.25614;
  int D.25615;
  const unsigned char * D.25620;
  unsigned char D.25621;
  int D.25622;
  const unsigned char * D.25623;
  unsigned char D.25624;
  int D.25625;
  const unsigned char * D.25630;
  unsigned char D.25631;
  int D.25632;
  const unsigned char * D.25633;
  unsigned char D.25634;
  int D.25635;
  int D.20291;
  int iftmp.123;
  int D.20290;
  const char[22] * D.25643;
  unsigned char D.25644;
  int D.25645;
  unsigned char D.25646;
  int D.25647;
  const unsigned char * D.25652;
  unsigned char D.25653;
  int D.25654;
  const unsigned char * D.25655;
  unsigned char D.25656;
  int D.25657;
  const unsigned char * D.25662;
  unsigned char D.25663;
  int D.25664;
  const unsigned char * D.25665;
  unsigned char D.25666;
  int D.25667;
  const unsigned char * D.25672;
  unsigned char D.25673;
  int D.25674;
  const unsigned char * D.25675;
  unsigned char D.25676;
  int D.25677;
  int D.25682;
  struct MonoClass * * D.25687;
  short unsigned int D.25690;
  int D.25691;
  _Bool D.25692;
  long int D.25693;
  long int D.25694;
  short unsigned int D.25697;
  unsigned int interface_offsets_count.124;
  unsigned int D.25699;
  int D.25700;
  void * D.25701;
  unsigned int D.25702;
  int D.25703;
  void * D.25704;
  int D.25705;
  int D.25706;
  unsigned int D.25707;
  unsigned int iftmp.125;
  int D.25709;
  unsigned int D.25713;
  struct MonoClass * * D.25714;
  struct MonoClass * D.25715;
  short unsigned int D.25716;
  int D.25717;
  sizetype D.25718;
  uint8_t * D.25719;
  unsigned char D.25720;
  signed char D.25721;
  int D.25722;
  int D.25723;
  signed char D.25724;
  signed char D.25725;
  unsigned char D.25726;
  struct MonoClass * * D.25727;
  guint16 * D.25728;
  long unsigned int D.25729;
  guint16 * D.25730;
  short unsigned int D.25731;
  struct GPtrArray * * D.25732;
  int D.25735;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  int i;
  int j;
  int max_iid;
  int num_ifaces;
  struct MonoClass * * interfaces_full;
  int * interface_offsets_full;
  struct GPtrArray * ifaces;
  struct GPtrArray * * ifaces_array;
  int interface_offsets_count;
  struct MonoClass * * array_interfaces;
  int num_array_interfaces;
  int is_enumerator;
  void end = <<< error >>>;

  try
    {
      interfaces_full = 0B;
      interface_offsets_full = 0B;
      ifaces_array = 0B;
      array_interfaces = 0B;
      is_enumerator = 0;
      mono_class_setup_supertypes (class);
      array_interfaces = get_implicit_generic_array_interfaces (class, &num_array_interfaces, &is_enumerator);
      max_iid = 0;
      num_ifaces = num_array_interfaces;
      D.25312 = class->idepth;
      D.25313 = (long unsigned int) D.25312;
      D.25314 = D.25313 * 8;
      ifaces_array = monoeg_malloc0 (D.25314);
      j = 0;
      goto <D.20208>;
      <D.20207>:
      D.25315 = class->supertypes;
      D.25316 = (long unsigned int) j;
      D.25317 = D.25316 * 8;
      D.25318 = D.25315 + D.25317;
      k = *D.25318;
      D.25319 = k->interface_count;
      D.25320 = (int) D.25319;
      num_ifaces = D.25320 + num_ifaces;
      i = 0;
      goto <D.20200>;
      <D.20199>:
      D.25321 = k->interfaces;
      D.25322 = (long unsigned int) i;
      D.25323 = D.25322 * 8;
      D.25324 = D.25321 + D.25323;
      ic = *D.25324;
      D.25325 = BIT_FIELD_REF <*ic, 64, 256>;
      D.25326 = D.25325 & 1;
      if (D.25326 == 0) goto <D.25327>; else goto <D.25328>;
      <D.25327>:
      mono_class_init (ic);
      <D.25328>:
      D.25329 = ic->interface_id;
      D.25330 = (int) D.25329;
      if (D.25330 > max_iid) goto <D.25331>; else goto <D.25332>;
      <D.25331>:
      D.25329 = ic->interface_id;
      max_iid = (int) D.25329;
      <D.25332>:
      i = i + 1;
      <D.20200>:
      D.25319 = k->interface_count;
      D.25320 = (int) D.25319;
      if (D.25320 > i) goto <D.20199>; else goto <D.20201>;
      <D.20201>:
      ifaces = mono_class_get_implemented_interfaces (k, &error);
      D.25333 = mono_error_ok (&error);
      if (D.25333 == 0) goto <D.25334>; else goto <D.25335>;
      <D.25334>:
      {
        char * name;

        name = mono_type_get_full_name (k);
        D.25336 = mono_error_get_message (&error);
        D.25337 = monoeg_g_strdup_printf ("Error getting the interfaces of %s due to %s", name, D.25336);
        mono_class_set_failure (class, 7, D.25337);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        cur_slot = -1;
        goto end;
      }
      <D.25335>:
      if (ifaces != 0B) goto <D.25338>; else goto <D.25339>;
      <D.25338>:
      D.25340 = ifaces->len;
      num_ifaces.110 = (unsigned int) num_ifaces;
      D.25342 = D.25340 + num_ifaces.110;
      num_ifaces = (int) D.25342;
      i = 0;
      goto <D.20205>;
      <D.20204>:
      D.25343 = ifaces->pdata;
      D.25322 = (long unsigned int) i;
      D.25323 = D.25322 * 8;
      D.25344 = D.25343 + D.25323;
      ic = *D.25344;
      D.25329 = ic->interface_id;
      D.25330 = (int) D.25329;
      if (D.25330 > max_iid) goto <D.25345>; else goto <D.25346>;
      <D.25345>:
      D.25329 = ic->interface_id;
      max_iid = (int) D.25329;
      <D.25346>:
      i = i + 1;
      <D.20205>:
      i.111 = (unsigned int) i;
      D.25340 = ifaces->len;
      if (i.111 < D.25340) goto <D.20204>; else goto <D.20206>;
      <D.20206>:
      D.25316 = (long unsigned int) j;
      D.25317 = D.25316 * 8;
      D.25348 = ifaces_array + D.25317;
      *D.25348 = ifaces;
      <D.25339>:
      j = j + 1;
      <D.20208>:
      D.25312 = class->idepth;
      D.25349 = (int) D.25312;
      if (D.25349 > j) goto <D.20207>; else goto <D.20209>;
      <D.20209>:
      i = 0;
      goto <D.20211>;
      <D.20210>:
      D.25322 = (long unsigned int) i;
      D.25323 = D.25322 * 8;
      D.25350 = array_interfaces + D.25323;
      ic = *D.25350;
      mono_class_init (ic);
      D.25329 = ic->interface_id;
      D.25330 = (int) D.25329;
      if (D.25330 > max_iid) goto <D.25351>; else goto <D.25352>;
      <D.25351>:
      D.25329 = ic->interface_id;
      max_iid = (int) D.25329;
      <D.25352>:
      i = i + 1;
      <D.20211>:
      num_array_interfaces.112 = num_array_interfaces;
      if (i < num_array_interfaces.112) goto <D.20210>; else goto <D.20212>;
      <D.20212>:
      D.25356 = class->flags;
      D.25357 = D.25356 & 32;
      if (D.25357 != 0) goto <D.25354>; else goto <D.25358>;
      <D.25358>:
      D.25359 = class->byval_arg.type;
      if (D.25359 == 19) goto <D.25354>; else goto <D.25360>;
      <D.25360>:
      D.25359 = class->byval_arg.type;
      if (D.25359 == 30) goto <D.25354>; else goto <D.25355>;
      <D.25354>:
      num_ifaces = num_ifaces + 1;
      D.25361 = class->interface_id;
      D.25362 = (int) D.25361;
      if (D.25362 > max_iid) goto <D.25363>; else goto <D.25364>;
      <D.25363>:
      D.25361 = class->interface_id;
      max_iid = (int) D.25361;
      <D.25364>:
      <D.25355>:
      D.25365 = (short unsigned int) max_iid;
      class->max_interface_id = D.25365;
      D.25366 = (long unsigned int) num_ifaces;
      D.25367 = D.25366 * 8;
      interfaces_full = monoeg_malloc0 (D.25367);
      D.25366 = (long unsigned int) num_ifaces;
      D.25368 = D.25366 * 4;
      interface_offsets_full = monoeg_malloc (D.25368);
      i = 0;
      goto <D.20214>;
      <D.20213>:
      D.25322 = (long unsigned int) i;
      D.25369 = D.25322 * 4;
      D.25370 = interface_offsets_full + D.25369;
      *D.25370 = -1;
      i = i + 1;
      <D.20214>:
      if (i < num_ifaces) goto <D.20213>; else goto <D.20215>;
      <D.20215>:
      j = 0;
      goto <D.20221>;
      <D.20220>:
      D.25315 = class->supertypes;
      D.25316 = (long unsigned int) j;
      D.25317 = D.25316 * 8;
      D.25318 = D.25315 + D.25317;
      k = *D.25318;
      D.25316 = (long unsigned int) j;
      D.25317 = D.25316 * 8;
      D.25348 = ifaces_array + D.25317;
      ifaces = *D.25348;
      if (ifaces != 0B) goto <D.25371>; else goto <D.25372>;
      <D.25371>:
      i = 0;
      goto <D.20218>;
      <D.20217>:
      {
        int io;

        D.25343 = ifaces->pdata;
        D.25322 = (long unsigned int) i;
        D.25323 = D.25322 * 8;
        D.25344 = D.25343 + D.25323;
        ic = *D.25344;
        io = mono_class_interface_offset (k, ic);
        D.25373 = io < 0;
        D.25374 = (long int) D.25373;
        D.25375 = __builtin_expect (D.25374, 0);
        if (D.25375 != 0) goto <D.25376>; else goto <D.25377>;
        <D.25376>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3372, "io >= 0");
        <D.25377>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, io, 1);
      }
      i = i + 1;
      <D.20218>:
      i.111 = (unsigned int) i;
      D.25340 = ifaces->len;
      if (i.111 < D.25340) goto <D.20217>; else goto <D.20219>;
      <D.20219>:
      <D.25372>:
      j = j + 1;
      <D.20221>:
      D.25312 = class->idepth;
      D.25349 = (int) D.25312;
      D.25378 = D.25349 + -1;
      if (D.25378 > j) goto <D.20220>; else goto <D.20222>;
      <D.20222>:
      D.25315 = class->supertypes;
      D.25312 = class->idepth;
      D.25313 = (long unsigned int) D.25312;
      D.25314 = D.25313 * 8;
      D.25379 = D.25314 + 18446744073709551608;
      D.25380 = D.25315 + D.25379;
      D.25381 = *D.25380;
      D.25382 = D.25381 != class;
      D.25383 = (long int) D.25382;
      D.25384 = __builtin_expect (D.25383, 0);
      if (D.25384 != 0) goto <D.25385>; else goto <D.25386>;
      <D.25385>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3378, "class == class->supertypes [class->idepth - 1]");
      <D.25386>:
      D.25312 = class->idepth;
      D.25313 = (long unsigned int) D.25312;
      D.25314 = D.25313 * 8;
      D.25379 = D.25314 + 18446744073709551608;
      D.25387 = ifaces_array + D.25379;
      ifaces = *D.25387;
      if (ifaces != 0B) goto <D.25388>; else goto <D.25389>;
      <D.25388>:
      i = 0;
      goto <D.20227>;
      <D.20226>:
      {
        int count;

        D.25343 = ifaces->pdata;
        D.25322 = (long unsigned int) i;
        D.25323 = D.25322 * 8;
        D.25344 = D.25343 + D.25323;
        ic = *D.25344;
        D.25390 = set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, cur_slot, 0);
        if (D.25390 != 0) goto <D.25391>; else goto <D.25392>;
        <D.25391>:
        // predicted unlikely by continue predictor.
        goto <D.20224>;
        <D.25392>:
        count = count_virtual_methods (ic);
        if (count == -1) goto <D.25393>; else goto <D.25394>;
        <D.25393>:
        {
          char * name;

          name = mono_type_get_full_name (ic);
          D.25395 = monoeg_g_strdup_printf ("Error calculating interface offset of %s", name);
          mono_class_set_failure (class, 7, D.25395);
          monoeg_g_free (name);
          cur_slot = -1;
          goto end;
        }
        <D.25394>:
        cur_slot = cur_slot + count;
      }
      <D.20224>:
      i = i + 1;
      <D.20227>:
      i.111 = (unsigned int) i;
      D.25340 = ifaces->len;
      if (i.111 < D.25340) goto <D.20226>; else goto <D.20228>;
      <D.20228>:
      <D.25389>:
      D.25356 = class->flags;
      D.25357 = D.25356 & 32;
      if (D.25357 != 0) goto <D.25396>; else goto <D.25398>;
      <D.25398>:
      D.25359 = class->byval_arg.type;
      if (D.25359 == 19) goto <D.25396>; else goto <D.25399>;
      <D.25399>:
      D.25359 = class->byval_arg.type;
      if (D.25359 == 30) goto <D.25396>; else goto <D.25397>;
      <D.25396>:
      set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, class, cur_slot, 1);
      <D.25397>:
      num_array_interfaces.112 = num_array_interfaces;
      if (num_array_interfaces.112 != 0) goto <D.25400>; else goto <D.25401>;
      <D.25400>:
      is_enumerator.113 = is_enumerator;
      if (is_enumerator.113 != 0) goto <D.25403>; else goto <D.25404>;
      <D.25403>:
      {
        int ienumerator_idx;
        int ienumerator_offset;

        ienumerator_idx = find_array_interface (class, "IEnumerator`1");
        D.25405 = class->interfaces;
        D.25406 = (long unsigned int) ienumerator_idx;
        D.25407 = D.25406 * 8;
        D.25408 = D.25405 + D.25407;
        D.25409 = *D.25408;
        ienumerator_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.25409);
        D.25410 = ienumerator_offset < 0;
        D.25411 = (long int) D.25410;
        D.25412 = __builtin_expect (D.25411, 0);
        if (D.25412 != 0) goto <D.25413>; else goto <D.25414>;
        <D.25413>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3405, "ienumerator_offset >= 0");
        <D.25414>:
        i = 0;
        goto <D.20241>;
        <D.20240>:
        D.25322 = (long unsigned int) i;
        D.25323 = D.25322 * 8;
        D.25350 = array_interfaces + D.25323;
        ic = *D.25350;
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = ic->name;
            D.25418 = "IEnumerator`1";
            D.25419 = MEM[(const unsigned char *)D.25418];
            D.25420 = (int) D.25419;
            D.25421 = *__s2;
            D.25422 = (int) D.25421;
            __result = D.25420 - D.25422;
            {
              if (__s2_len != 0) goto <D.25423>; else goto <D.25424>;
              <D.25423>:
              if (__result == 0) goto <D.25425>; else goto <D.25426>;
              <D.25425>:
              D.25427 = &MEM[(void *)"IEnumerator`1" + 1B];
              D.25428 = *D.25427;
              D.25429 = (int) D.25428;
              D.25430 = __s2 + 1;
              D.25431 = *D.25430;
              D.25432 = (int) D.25431;
              __result = D.25429 - D.25432;
              if (__s2_len > 1) goto <D.25433>; else goto <D.25434>;
              <D.25433>:
              if (__result == 0) goto <D.25435>; else goto <D.25436>;
              <D.25435>:
              D.25437 = &MEM[(void *)"IEnumerator`1" + 2B];
              D.25438 = *D.25437;
              D.25439 = (int) D.25438;
              D.25440 = __s2 + 2;
              D.25441 = *D.25440;
              D.25442 = (int) D.25441;
              __result = D.25439 - D.25442;
              if (__s2_len > 2) goto <D.25443>; else goto <D.25444>;
              <D.25443>:
              if (__result == 0) goto <D.25445>; else goto <D.25446>;
              <D.25445>:
              D.25447 = &MEM[(void *)"IEnumerator`1" + 3B];
              D.25448 = *D.25447;
              D.25449 = (int) D.25448;
              D.25450 = __s2 + 3;
              D.25451 = *D.25450;
              D.25452 = (int) D.25451;
              __result = D.25449 - D.25452;
              <D.25446>:
              <D.25444>:
              <D.25436>:
              <D.25434>:
              <D.25426>:
              <D.25424>:
            }
            D.20238 = __result;
          }
          iftmp.114 = -D.20238;
          goto <D.25453>;
          <D.25417>:
          D.25454 = ic->name;
          iftmp.114 = __builtin_strcmp (D.25454, "IEnumerator`1");
          <D.25453>:
          D.20239 = iftmp.114;
        }
        if (D.20239 == 0) goto <D.25455>; else goto <D.25456>;
        <D.25455>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, ienumerator_offset, 1);
        goto <D.25457>;
        <D.25456>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3411);
        <D.25457>:
        i = i + 1;
        <D.20241>:
        num_array_interfaces.112 = num_array_interfaces;
        if (i < num_array_interfaces.112) goto <D.20240>; else goto <D.20242>;
        <D.20242>:
      }
      goto <D.25458>;
      <D.25404>:
      {
        int ilist_offset;
        int icollection_offset;
        int ienumerable_offset;
        int ireadonlylist_offset;
        int ireadonlycollection_offset;
        int ilist_iface_idx;
        struct MonoClass * ilist_class;
        int ireadonlylist_iface_idx;
        struct MonoClass * ireadonlylist_class;
        int icollection_iface_idx;
        int ienumerable_iface_idx;
        int ireadonlycollection_iface_idx;

        ilist_iface_idx = find_array_interface (class, "IList`1");
        D.25405 = class->interfaces;
        D.25459 = (long unsigned int) ilist_iface_idx;
        D.25460 = D.25459 * 8;
        D.25461 = D.25405 + D.25460;
        ilist_class = *D.25461;
        ireadonlylist_iface_idx = find_array_interface (class, "IReadOnlyList`1");
        if (ireadonlylist_iface_idx != -1) goto <D.25463>; else goto <D.25464>;
        <D.25463>:
        D.25405 = class->interfaces;
        D.25465 = (long unsigned int) ireadonlylist_iface_idx;
        D.25466 = D.25465 * 8;
        D.25467 = D.25405 + D.25466;
        iftmp.115 = *D.25467;
        goto <D.25468>;
        <D.25464>:
        iftmp.115 = 0B;
        <D.25468>:
        ireadonlylist_class = iftmp.115;
        icollection_iface_idx = find_array_interface (ilist_class, "ICollection`1");
        ienumerable_iface_idx = find_array_interface (ilist_class, "IEnumerable`1");
        if (ireadonlylist_iface_idx != -1) goto <D.25470>; else goto <D.25471>;
        <D.25470>:
        iftmp.116 = find_array_interface (ireadonlylist_class, "IReadOnlyCollection`1");
        goto <D.25472>;
        <D.25471>:
        iftmp.116 = -1;
        <D.25472>:
        ireadonlycollection_iface_idx = iftmp.116;
        D.25405 = class->interfaces;
        D.25459 = (long unsigned int) ilist_iface_idx;
        D.25460 = D.25459 * 8;
        D.25461 = D.25405 + D.25460;
        D.25473 = *D.25461;
        ilist_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.25473);
        D.25474 = ilist_class->interfaces;
        D.25475 = (long unsigned int) icollection_iface_idx;
        D.25476 = D.25475 * 8;
        D.25477 = D.25474 + D.25476;
        D.25478 = *D.25477;
        icollection_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.25478);
        D.25474 = ilist_class->interfaces;
        D.25479 = (long unsigned int) ienumerable_iface_idx;
        D.25480 = D.25479 * 8;
        D.25481 = D.25474 + D.25480;
        D.25482 = *D.25481;
        ienumerable_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.25482);
        if (ireadonlylist_iface_idx != -1) goto <D.25484>; else goto <D.25485>;
        <D.25484>:
        D.25405 = class->interfaces;
        D.25465 = (long unsigned int) ireadonlylist_iface_idx;
        D.25466 = D.25465 * 8;
        D.25467 = D.25405 + D.25466;
        D.25486 = *D.25467;
        iftmp.117 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.25486);
        goto <D.25487>;
        <D.25485>:
        iftmp.117 = -1;
        <D.25487>:
        ireadonlylist_offset = iftmp.117;
        if (ireadonlycollection_iface_idx != -1) goto <D.25489>; else goto <D.25490>;
        <D.25489>:
        D.25491 = ireadonlylist_class->interfaces;
        D.25492 = (long unsigned int) ireadonlycollection_iface_idx;
        D.25493 = D.25492 * 8;
        D.25494 = D.25491 + D.25493;
        D.25495 = *D.25494;
        iftmp.118 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.25495);
        goto <D.25496>;
        <D.25490>:
        iftmp.118 = -1;
        <D.25496>:
        ireadonlycollection_offset = iftmp.118;
        if (ilist_offset < 0) goto <D.25498>; else goto <D.25501>;
        <D.25501>:
        if (icollection_offset < 0) goto <D.25498>; else goto <D.25502>;
        <D.25502>:
        if (ienumerable_offset < 0) goto <D.25498>; else goto <D.25499>;
        <D.25498>:
        iftmp.119 = 1;
        goto <D.25500>;
        <D.25499>:
        iftmp.119 = 0;
        <D.25500>:
        D.25503 = iftmp.119 != 0;
        D.25504 = (long int) D.25503;
        D.25505 = __builtin_expect (D.25504, 0);
        if (D.25505 != 0) goto <D.25506>; else goto <D.25507>;
        <D.25506>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3428, "ilist_offset >= 0 && icollection_offset >= 0 && ienumerable_offset >= 0");
        <D.25507>:
        i = 0;
        goto <D.20293>;
        <D.20292>:
        {
          int offset;

          D.25322 = (long unsigned int) i;
          D.25323 = D.25322 * 8;
          D.25350 = array_interfaces + D.25323;
          ic = *D.25350;
          D.25508 = ic->generic_class;
          D.25509 = D.25508->container_class;
          D.25510 = mono_defaults.generic_ilist_class;
          if (D.25509 == D.25510) goto <D.25511>; else goto <D.25512>;
          <D.25511>:
          offset = ilist_offset;
          goto <D.25513>;
          <D.25512>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25517 = "ICollection`1";
              D.25518 = MEM[(const unsigned char *)D.25517];
              D.25519 = (int) D.25518;
              D.25520 = *__s2;
              D.25521 = (int) D.25520;
              __result = D.25519 - D.25521;
              {
                if (__s2_len != 0) goto <D.25522>; else goto <D.25523>;
                <D.25522>:
                if (__result == 0) goto <D.25524>; else goto <D.25525>;
                <D.25524>:
                D.25526 = &MEM[(void *)"ICollection`1" + 1B];
                D.25527 = *D.25526;
                D.25528 = (int) D.25527;
                D.25529 = __s2 + 1;
                D.25530 = *D.25529;
                D.25531 = (int) D.25530;
                __result = D.25528 - D.25531;
                if (__s2_len > 1) goto <D.25532>; else goto <D.25533>;
                <D.25532>:
                if (__result == 0) goto <D.25534>; else goto <D.25535>;
                <D.25534>:
                D.25536 = &MEM[(void *)"ICollection`1" + 2B];
                D.25537 = *D.25536;
                D.25538 = (int) D.25537;
                D.25539 = __s2 + 2;
                D.25540 = *D.25539;
                D.25541 = (int) D.25540;
                __result = D.25538 - D.25541;
                if (__s2_len > 2) goto <D.25542>; else goto <D.25543>;
                <D.25542>:
                if (__result == 0) goto <D.25544>; else goto <D.25545>;
                <D.25544>:
                D.25546 = &MEM[(void *)"ICollection`1" + 3B];
                D.25547 = *D.25546;
                D.25548 = (int) D.25547;
                D.25549 = __s2 + 3;
                D.25550 = *D.25549;
                D.25551 = (int) D.25550;
                __result = D.25548 - D.25551;
                <D.25545>:
                <D.25543>:
                <D.25535>:
                <D.25533>:
                <D.25525>:
                <D.25523>:
              }
              D.20263 = __result;
            }
            iftmp.120 = -D.20263;
            goto <D.25552>;
            <D.25516>:
            D.25454 = ic->name;
            iftmp.120 = __builtin_strcmp (D.25454, "ICollection`1");
            <D.25552>:
            D.20264 = iftmp.120;
          }
          if (D.20264 == 0) goto <D.25553>; else goto <D.25554>;
          <D.25553>:
          offset = icollection_offset;
          goto <D.25555>;
          <D.25554>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25559 = "IEnumerable`1";
              D.25560 = MEM[(const unsigned char *)D.25559];
              D.25561 = (int) D.25560;
              D.25562 = *__s2;
              D.25563 = (int) D.25562;
              __result = D.25561 - D.25563;
              {
                if (__s2_len != 0) goto <D.25564>; else goto <D.25565>;
                <D.25564>:
                if (__result == 0) goto <D.25566>; else goto <D.25567>;
                <D.25566>:
                D.25568 = &MEM[(void *)"IEnumerable`1" + 1B];
                D.25569 = *D.25568;
                D.25570 = (int) D.25569;
                D.25571 = __s2 + 1;
                D.25572 = *D.25571;
                D.25573 = (int) D.25572;
                __result = D.25570 - D.25573;
                if (__s2_len > 1) goto <D.25574>; else goto <D.25575>;
                <D.25574>:
                if (__result == 0) goto <D.25576>; else goto <D.25577>;
                <D.25576>:
                D.25578 = &MEM[(void *)"IEnumerable`1" + 2B];
                D.25579 = *D.25578;
                D.25580 = (int) D.25579;
                D.25581 = __s2 + 2;
                D.25582 = *D.25581;
                D.25583 = (int) D.25582;
                __result = D.25580 - D.25583;
                if (__s2_len > 2) goto <D.25584>; else goto <D.25585>;
                <D.25584>:
                if (__result == 0) goto <D.25586>; else goto <D.25587>;
                <D.25586>:
                D.25588 = &MEM[(void *)"IEnumerable`1" + 3B];
                D.25589 = *D.25588;
                D.25590 = (int) D.25589;
                D.25591 = __s2 + 3;
                D.25592 = *D.25591;
                D.25593 = (int) D.25592;
                __result = D.25590 - D.25593;
                <D.25587>:
                <D.25585>:
                <D.25577>:
                <D.25575>:
                <D.25567>:
                <D.25565>:
              }
              D.20272 = __result;
            }
            iftmp.121 = -D.20272;
            goto <D.25594>;
            <D.25558>:
            D.25454 = ic->name;
            iftmp.121 = __builtin_strcmp (D.25454, "IEnumerable`1");
            <D.25594>:
            D.20273 = iftmp.121;
          }
          if (D.20273 == 0) goto <D.25595>; else goto <D.25596>;
          <D.25595>:
          offset = ienumerable_offset;
          goto <D.25597>;
          <D.25596>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25601 = "IReadOnlyList`1";
              D.25602 = MEM[(const unsigned char *)D.25601];
              D.25603 = (int) D.25602;
              D.25604 = *__s2;
              D.25605 = (int) D.25604;
              __result = D.25603 - D.25605;
              {
                if (__s2_len != 0) goto <D.25606>; else goto <D.25607>;
                <D.25606>:
                if (__result == 0) goto <D.25608>; else goto <D.25609>;
                <D.25608>:
                D.25610 = &MEM[(void *)"IReadOnlyList`1" + 1B];
                D.25611 = *D.25610;
                D.25612 = (int) D.25611;
                D.25613 = __s2 + 1;
                D.25614 = *D.25613;
                D.25615 = (int) D.25614;
                __result = D.25612 - D.25615;
                if (__s2_len > 1) goto <D.25616>; else goto <D.25617>;
                <D.25616>:
                if (__result == 0) goto <D.25618>; else goto <D.25619>;
                <D.25618>:
                D.25620 = &MEM[(void *)"IReadOnlyList`1" + 2B];
                D.25621 = *D.25620;
                D.25622 = (int) D.25621;
                D.25623 = __s2 + 2;
                D.25624 = *D.25623;
                D.25625 = (int) D.25624;
                __result = D.25622 - D.25625;
                if (__s2_len > 2) goto <D.25626>; else goto <D.25627>;
                <D.25626>:
                if (__result == 0) goto <D.25628>; else goto <D.25629>;
                <D.25628>:
                D.25630 = &MEM[(void *)"IReadOnlyList`1" + 3B];
                D.25631 = *D.25630;
                D.25632 = (int) D.25631;
                D.25633 = __s2 + 3;
                D.25634 = *D.25633;
                D.25635 = (int) D.25634;
                __result = D.25632 - D.25635;
                <D.25629>:
                <D.25627>:
                <D.25619>:
                <D.25617>:
                <D.25609>:
                <D.25607>:
              }
              D.20281 = __result;
            }
            iftmp.122 = -D.20281;
            goto <D.25636>;
            <D.25600>:
            D.25454 = ic->name;
            iftmp.122 = __builtin_strcmp (D.25454, "IReadOnlyList`1");
            <D.25636>:
            D.20282 = iftmp.122;
          }
          if (D.20282 == 0) goto <D.25637>; else goto <D.25638>;
          <D.25637>:
          offset = ireadonlylist_offset;
          goto <D.25639>;
          <D.25638>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25643 = "IReadOnlyCollection`1";
              D.25644 = MEM[(const unsigned char *)D.25643];
              D.25645 = (int) D.25644;
              D.25646 = *__s2;
              D.25647 = (int) D.25646;
              __result = D.25645 - D.25647;
              {
                if (__s2_len != 0) goto <D.25648>; else goto <D.25649>;
                <D.25648>:
                if (__result == 0) goto <D.25650>; else goto <D.25651>;
                <D.25650>:
                D.25652 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
                D.25653 = *D.25652;
                D.25654 = (int) D.25653;
                D.25655 = __s2 + 1;
                D.25656 = *D.25655;
                D.25657 = (int) D.25656;
                __result = D.25654 - D.25657;
                if (__s2_len > 1) goto <D.25658>; else goto <D.25659>;
                <D.25658>:
                if (__result == 0) goto <D.25660>; else goto <D.25661>;
                <D.25660>:
                D.25662 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
                D.25663 = *D.25662;
                D.25664 = (int) D.25663;
                D.25665 = __s2 + 2;
                D.25666 = *D.25665;
                D.25667 = (int) D.25666;
                __result = D.25664 - D.25667;
                if (__s2_len > 2) goto <D.25668>; else goto <D.25669>;
                <D.25668>:
                if (__result == 0) goto <D.25670>; else goto <D.25671>;
                <D.25670>:
                D.25672 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
                D.25673 = *D.25672;
                D.25674 = (int) D.25673;
                D.25675 = __s2 + 3;
                D.25676 = *D.25675;
                D.25677 = (int) D.25676;
                __result = D.25674 - D.25677;
                <D.25671>:
                <D.25669>:
                <D.25661>:
                <D.25659>:
                <D.25651>:
                <D.25649>:
              }
              D.20290 = __result;
            }
            iftmp.123 = -D.20290;
            goto <D.25678>;
            <D.25642>:
            D.25454 = ic->name;
            iftmp.123 = __builtin_strcmp (D.25454, "IReadOnlyCollection`1");
            <D.25678>:
            D.20291 = iftmp.123;
          }
          if (D.20291 == 0) goto <D.25679>; else goto <D.25680>;
          <D.25679>:
          offset = ireadonlycollection_offset;
          goto <D.25681>;
          <D.25680>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3443);
          <D.25681>:
          <D.25639>:
          <D.25597>:
          <D.25555>:
          <D.25513>:
          set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, offset, 1);
        }
        i = i + 1;
        <D.20293>:
        num_array_interfaces.112 = num_array_interfaces;
        if (i < num_array_interfaces.112) goto <D.20292>; else goto <D.20294>;
        <D.20294>:
      }
      <D.25458>:
      <D.25401>:
      interface_offsets_count = 0;
      i = 0;
      goto <D.20296>;
      <D.20295>:
      D.25322 = (long unsigned int) i;
      D.25369 = D.25322 * 4;
      D.25370 = interface_offsets_full + D.25369;
      D.25682 = *D.25370;
      if (D.25682 != -1) goto <D.25683>; else goto <D.25684>;
      <D.25683>:
      interface_offsets_count = interface_offsets_count + 1;
      <D.25684>:
      i = i + 1;
      <D.20296>:
      if (i < num_ifaces) goto <D.20295>; else goto <D.20297>;
      <D.20297>:
      D.25687 = class->interfaces_packed;
      if (D.25687 != 0B) goto <D.25688>; else goto <D.25685>;
      <D.25688>:
      if (overwrite == 0) goto <D.25689>; else goto <D.25685>;
      <D.25689>:
      D.25690 = class->interface_offsets_count;
      D.25691 = (int) D.25690;
      D.25692 = D.25691 != interface_offsets_count;
      D.25693 = (long int) D.25692;
      D.25694 = __builtin_expect (D.25693, 0);
      if (D.25694 != 0) goto <D.25695>; else goto <D.25696>;
      <D.25695>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3465, "class->interface_offsets_count == interface_offsets_count");
      <D.25696>:
      goto <D.25686>;
      <D.25685>:
      {
        uint8_t * bitmap;
        int bsize;

        D.25697 = (short unsigned int) interface_offsets_count;
        class->interface_offsets_count = D.25697;
        interface_offsets_count.124 = (unsigned int) interface_offsets_count;
        D.25699 = interface_offsets_count.124 * 8;
        D.25700 = (int) D.25699;
        D.25701 = mono_class_alloc (class, D.25700);
        class->interfaces_packed = D.25701;
        interface_offsets_count.124 = (unsigned int) interface_offsets_count;
        D.25702 = interface_offsets_count.124 * 2;
        D.25703 = (int) D.25702;
        D.25704 = mono_class_alloc (class, D.25703);
        class->interface_offsets_packed = D.25704;
        D.25705 = max_iid + 1;
        D.25706 = D.25705 >> 3;
        D.25707 = (unsigned int) D.25706;
        D.25705 = max_iid + 1;
        D.25709 = D.25705 & 7;
        if (D.25709 != 0) goto <D.25710>; else goto <D.25711>;
        <D.25710>:
        iftmp.125 = 1;
        goto <D.25712>;
        <D.25711>:
        iftmp.125 = 0;
        <D.25712>:
        D.25713 = D.25707 + iftmp.125;
        bsize = (int) D.25713;
        bitmap = mono_class_alloc0 (class, bsize);
        i = 0;
        goto <D.20302>;
        <D.20301>:
        {
          int id;

          D.25322 = (long unsigned int) i;
          D.25323 = D.25322 * 8;
          D.25714 = interfaces_full + D.25323;
          D.25715 = *D.25714;
          D.25716 = D.25715->interface_id;
          id = (int) D.25716;
          D.25717 = id >> 3;
          D.25718 = (sizetype) D.25717;
          D.25719 = bitmap + D.25718;
          D.25717 = id >> 3;
          D.25718 = (sizetype) D.25717;
          D.25719 = bitmap + D.25718;
          D.25720 = *D.25719;
          D.25721 = (signed char) D.25720;
          D.25722 = id & 7;
          D.25723 = 1 << D.25722;
          D.25724 = (signed char) D.25723;
          D.25725 = D.25721 | D.25724;
          D.25726 = (unsigned char) D.25725;
          *D.25719 = D.25726;
          D.25687 = class->interfaces_packed;
          D.25322 = (long unsigned int) i;
          D.25323 = D.25322 * 8;
          D.25727 = D.25687 + D.25323;
          D.25322 = (long unsigned int) i;
          D.25323 = D.25322 * 8;
          D.25714 = interfaces_full + D.25323;
          D.25715 = *D.25714;
          *D.25727 = D.25715;
          D.25728 = class->interface_offsets_packed;
          D.25322 = (long unsigned int) i;
          D.25729 = D.25322 * 2;
          D.25730 = D.25728 + D.25729;
          D.25322 = (long unsigned int) i;
          D.25369 = D.25322 * 4;
          D.25370 = interface_offsets_full + D.25369;
          D.25682 = *D.25370;
          D.25731 = (short unsigned int) D.25682;
          *D.25730 = D.25731;
        }
        i = i + 1;
        <D.20302>:
        if (i < interface_offsets_count) goto <D.20301>; else goto <D.20303>;
        <D.20303>:
        class->interface_bitmap = bitmap;
      }
      <D.25686>:
      end:
      monoeg_g_free (interfaces_full);
      monoeg_g_free (interface_offsets_full);
      monoeg_g_free (array_interfaces);
      i = 0;
      goto <D.20305>;
      <D.20304>:
      D.25322 = (long unsigned int) i;
      D.25323 = D.25322 * 8;
      D.25732 = ifaces_array + D.25323;
      ifaces = *D.25732;
      if (ifaces != 0B) goto <D.25733>; else goto <D.25734>;
      <D.25733>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.25734>:
      i = i + 1;
      <D.20305>:
      D.25312 = class->idepth;
      D.25349 = (int) D.25312;
      if (D.25349 > i) goto <D.20304>; else goto <D.20306>;
      <D.20306>:
      monoeg_g_free (ifaces_array);
      D.25735 = cur_slot;
      return D.25735;
    }
  finally
    {
      error = {CLOBBER};
      num_array_interfaces = {CLOBBER};
      is_enumerator = {CLOBBER};
    }
}


get_implicit_generic_array_interfaces (struct MonoClass * class, int * num, int * is_enumerator)
{
  struct MonoClass * D.25738;
  struct MonoClass * * D.25741;
  unsigned char D.25742;
  unsigned char D.25743;
  struct MonoGenericClass * D.25748;
  struct MonoClass * D.25750;
  struct MonoClass * D.25751;
  int D.20092;
  int iftmp.126;
  int D.20091;
  const char[21] * D.25756;
  unsigned char D.25757;
  int D.25758;
  unsigned char D.25759;
  int D.25760;
  const unsigned char * D.25765;
  unsigned char D.25766;
  int D.25767;
  const unsigned char * D.25768;
  unsigned char D.25769;
  int D.25770;
  const unsigned char * D.25775;
  unsigned char D.25776;
  int D.25777;
  const unsigned char * D.25778;
  unsigned char D.25779;
  int D.25780;
  const unsigned char * D.25785;
  unsigned char D.25786;
  int D.25787;
  const unsigned char * D.25788;
  unsigned char D.25789;
  int D.25790;
  const char * D.25792;
  struct MonoGenericInst * D.25794;
  struct MonoType * D.25795;
  int iftmp.127;
  struct MonoClass * D.25803;
  unsigned char D.25804;
  struct MonoClass * generic_icollection_class.128;
  struct MonoImage * D.25808;
  struct MonoClass * generic_icollection_class.129;
  struct MonoClass * generic_ienumerable_class.130;
  struct MonoClass * generic_ienumerator_class.131;
  struct MonoClass * generic_ireadonlylist_class.132;
  struct MonoClass * generic_ireadonlycollection_class.133;
  long unsigned int D.25814;
  long unsigned int D.25815;
  int iftmp.134;
  struct MonoClass * generic_ireadonlylist_class.135;
  int iftmp.136;
  struct MonoClass * D.25824;
  long unsigned int D.25832;
  long unsigned int D.25833;
  struct MonoClass * D.25834;
  long unsigned int D.25837;
  long unsigned int D.25838;
  struct MonoClass * * D.25839;
  short unsigned int D.25841;
  int iftmp.137;
  unsigned char D.25850;
  struct MonoImage * D.25855;
  long unsigned int D.25856;
  long unsigned int D.25857;
  long unsigned int D.25859;
  int iftmp.138;
  short unsigned int D.25863;
  short unsigned int D.25865;
  unsigned int D.25869;
  unsigned int D.25870;
  unsigned char D.25872;
  long unsigned int D.25876;
  long unsigned int D.25877;
  int iftmp.139;
  int D.25890;
  int D.25891;
  struct MonoClass * D.25898;
  struct MonoClass * * D.25899;
  long unsigned int D.25900;
  long unsigned int D.25901;
  struct MonoClass * * D.25902;
  struct MonoClass * D.25903;
  long unsigned int D.25904;
  long unsigned int D.25905;
  struct MonoClass * * D.25906;
  struct MonoClass * * D.25909;
  struct MonoClass * * D.25910;
  struct MonoClass * D.25911;
  struct MonoClass * * D.25913;
  struct MonoClass * * D.25914;
  struct MonoClass * D.25915;
  int D.25916;
  unsigned int original_rank.140;
  struct MonoClass * D.25920;
  struct MonoClass * * D.25921;
  struct MonoClass * D.25922;
  sizetype D.25923;
  sizetype D.25924;
  sizetype D.25925;
  struct MonoClass * * D.25926;
  struct MonoClass * D.25927;
  sizetype D.25930;
  sizetype D.25931;
  struct MonoClass * * D.25932;
  struct MonoClass * generic_ienumerable_class.141;
  struct MonoClass * D.25934;
  sizetype D.25937;
  sizetype D.25938;
  struct MonoClass * * D.25939;
  struct MonoClass * D.25940;
  sizetype D.25941;
  sizetype D.25942;
  struct MonoClass * * D.25943;
  struct MonoClass * generic_ireadonlycollection_class.142;
  struct MonoClass * D.25945;
  struct MonoClass * D.25949;
  struct MonoClass * generic_ienumerator_class.143;
  struct MonoClass * D.25953;
  struct MonoClass * D.25954;
  long unsigned int D.25961;
  long unsigned int D.25962;
  struct MonoClass * * D.25963;
  struct MonoClass * D.25964;
  struct MonoClass * D.25965;
  int D.25966;
  struct MonoClass * D.25967;
  int j.144;
  long unsigned int D.25970;
  long unsigned int D.25971;
  struct MonoClass * * D.25972;
  struct MonoClass * D.25973;
  struct MonoClass * D.25974;
  struct MonoClass * D.25977;
  struct MonoClass * D.25978;
  struct MonoClass * eclass;
  static struct MonoClass * generic_icollection_class = 0B;
  static struct MonoClass * generic_ienumerable_class = 0B;
  static struct MonoClass * generic_ienumerator_class = 0B;
  static struct MonoClass * generic_ireadonlylist_class = 0B;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;
  struct MonoClass * valuetype_types[2];
  struct MonoClass * * interfaces;
  int i;
  int nifaces;
  int interface_count;
  int real_count;
  int original_rank;
  int all_interfaces;
  gboolean internal_enumerator;
  gboolean eclass_is_valuetype;

  try
    {
      eclass = class->element_class;
      valuetype_types[0] = 0B;
      valuetype_types[1] = 0B;
      interfaces = 0B;
      D.25738 = mono_defaults.generic_ilist_class;
      if (D.25738 == 0B) goto <D.25739>; else goto <D.25740>;
      <D.25739>:
      *num = 0;
      D.25741 = 0B;
      return D.25741;
      <D.25740>:
      internal_enumerator = 0;
      eclass_is_valuetype = 0;
      D.25742 = eclass->rank;
      original_rank = (int) D.25742;
      D.25743 = class->byval_arg.type;
      if (D.25743 != 29) goto <D.25744>; else goto <D.25745>;
      <D.25744>:
      D.25748 = class->generic_class;
      if (D.25748 != 0B) goto <D.25749>; else goto <D.25746>;
      <D.25749>:
      D.25750 = class->nested_in;
      D.25751 = mono_defaults.array_class;
      if (D.25750 == D.25751) goto <D.25752>; else goto <D.25746>;
      <D.25752>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = class->name;
          D.25756 = "InternalEnumerator`1";
          D.25757 = MEM[(const unsigned char *)D.25756];
          D.25758 = (int) D.25757;
          D.25759 = *__s2;
          D.25760 = (int) D.25759;
          __result = D.25758 - D.25760;
          {
            if (__s2_len != 0) goto <D.25761>; else goto <D.25762>;
            <D.25761>:
            if (__result == 0) goto <D.25763>; else goto <D.25764>;
            <D.25763>:
            D.25765 = &MEM[(void *)"InternalEnumerator`1" + 1B];
            D.25766 = *D.25765;
            D.25767 = (int) D.25766;
            D.25768 = __s2 + 1;
            D.25769 = *D.25768;
            D.25770 = (int) D.25769;
            __result = D.25767 - D.25770;
            if (__s2_len > 1) goto <D.25771>; else goto <D.25772>;
            <D.25771>:
            if (__result == 0) goto <D.25773>; else goto <D.25774>;
            <D.25773>:
            D.25775 = &MEM[(void *)"InternalEnumerator`1" + 2B];
            D.25776 = *D.25775;
            D.25777 = (int) D.25776;
            D.25778 = __s2 + 2;
            D.25779 = *D.25778;
            D.25780 = (int) D.25779;
            __result = D.25777 - D.25780;
            if (__s2_len > 2) goto <D.25781>; else goto <D.25782>;
            <D.25781>:
            if (__result == 0) goto <D.25783>; else goto <D.25784>;
            <D.25783>:
            D.25785 = &MEM[(void *)"InternalEnumerator`1" + 3B];
            D.25786 = *D.25785;
            D.25787 = (int) D.25786;
            D.25788 = __s2 + 3;
            D.25789 = *D.25788;
            D.25790 = (int) D.25789;
            __result = D.25787 - D.25790;
            <D.25784>:
            <D.25782>:
            <D.25774>:
            <D.25772>:
            <D.25764>:
            <D.25762>:
          }
          D.20091 = __result;
        }
        iftmp.126 = -D.20091;
        goto <D.25791>;
        <D.25755>:
        D.25792 = class->name;
        iftmp.126 = __builtin_strcmp (D.25792, "InternalEnumerator`1");
        <D.25791>:
        D.20092 = iftmp.126;
      }
      if (D.20092 == 0) goto <D.25793>; else goto <D.25746>;
      <D.25793>:
      D.25748 = class->generic_class;
      D.25794 = D.25748->context.class_inst;
      D.25795 = D.25794->type_argv[0];
      eclass = mono_class_from_mono_type (D.25795);
      D.25742 = eclass->rank;
      original_rank = (int) D.25742;
      D.25742 = eclass->rank;
      if (D.25742 == 0) goto <D.25796>; else goto <D.25797>;
      <D.25796>:
      eclass = eclass->element_class;
      <D.25797>:
      internal_enumerator = 1;
      *is_enumerator = 1;
      goto <D.25747>;
      <D.25746>:
      *num = 0;
      D.25741 = 0B;
      return D.25741;
      <D.25747>:
      <D.25745>:
      D.25742 = eclass->rank;
      if (D.25742 == 0) goto <D.25799>; else goto <D.25802>;
      <D.25802>:
      D.25803 = eclass->element_class;
      D.25804 = D.25803->rank;
      if (D.25804 == 0) goto <D.25799>; else goto <D.25800>;
      <D.25799>:
      iftmp.127 = 1;
      goto <D.25801>;
      <D.25800>:
      iftmp.127 = 0;
      <D.25801>:
      all_interfaces = iftmp.127;
      generic_icollection_class.128 = generic_icollection_class;
      if (generic_icollection_class.128 == 0B) goto <D.25806>; else goto <D.25807>;
      <D.25806>:
      D.25808 = mono_defaults.corlib;
      generic_icollection_class.129 = mono_class_from_name (D.25808, "System.Collections.Generic", "ICollection`1");
      generic_icollection_class = generic_icollection_class.129;
      D.25808 = mono_defaults.corlib;
      generic_ienumerable_class.130 = mono_class_from_name (D.25808, "System.Collections.Generic", "IEnumerable`1");
      generic_ienumerable_class = generic_ienumerable_class.130;
      D.25808 = mono_defaults.corlib;
      generic_ienumerator_class.131 = mono_class_from_name (D.25808, "System.Collections.Generic", "IEnumerator`1");
      generic_ienumerator_class = generic_ienumerator_class.131;
      D.25808 = mono_defaults.corlib;
      generic_ireadonlylist_class.132 = mono_class_from_name (D.25808, "System.Collections.Generic", "IReadOnlyList`1");
      generic_ireadonlylist_class = generic_ireadonlylist_class.132;
      D.25808 = mono_defaults.corlib;
      generic_ireadonlycollection_class.133 = mono_class_from_name (D.25808, "System.Collections.Generic", "IReadOnlyCollection`1");
      generic_ireadonlycollection_class = generic_ireadonlycollection_class.133;
      <D.25807>:
      mono_class_init (eclass);
      D.25814 = BIT_FIELD_REF <*eclass, 64, 256>;
      D.25815 = D.25814 & 8;
      if (D.25815 != 0) goto <D.25816>; else goto <D.25817>;
      <D.25816>:
      generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
      if (generic_ireadonlylist_class.135 != 0B) goto <D.25820>; else goto <D.25821>;
      <D.25820>:
      iftmp.134 = 5;
      goto <D.25822>;
      <D.25821>:
      iftmp.134 = 3;
      <D.25822>:
      nifaces = iftmp.134;
      fill_valuetype_array_derived_types (&valuetype_types, eclass, original_rank);
      D.25824 = valuetype_types[1];
      if (D.25824 != 0B) goto <D.25825>; else goto <D.25826>;
      <D.25825>:
      iftmp.136 = nifaces * 2;
      goto <D.25827>;
      <D.25826>:
      iftmp.136 = nifaces;
      <D.25827>:
      interface_count = iftmp.136;
      real_count = interface_count;
      if (internal_enumerator != 0) goto <D.25828>; else goto <D.25829>;
      <D.25828>:
      real_count = real_count + 1;
      D.25824 = valuetype_types[1];
      if (D.25824 != 0B) goto <D.25830>; else goto <D.25831>;
      <D.25830>:
      real_count = real_count + 1;
      <D.25831>:
      <D.25829>:
      D.25832 = (long unsigned int) real_count;
      D.25833 = D.25832 * 8;
      interfaces = monoeg_malloc0 (D.25833);
      D.25834 = valuetype_types[0];
      *interfaces = D.25834;
      D.25824 = valuetype_types[1];
      if (D.25824 != 0B) goto <D.25835>; else goto <D.25836>;
      <D.25835>:
      D.25837 = (long unsigned int) nifaces;
      D.25838 = D.25837 * 8;
      D.25839 = interfaces + D.25838;
      D.25824 = valuetype_types[1];
      *D.25839 = D.25824;
      <D.25836>:
      eclass_is_valuetype = 1;
      goto <D.25840>;
      <D.25817>:
      {
        int j;
        int idepth;

        D.25841 = eclass->idepth;
        idepth = (int) D.25841;
        if (internal_enumerator == 0) goto <D.25842>; else goto <D.25843>;
        <D.25842>:
        idepth = idepth + -1;
        <D.25843>:
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.135 != 0B) goto <D.25845>; else goto <D.25846>;
        <D.25845>:
        iftmp.137 = 2;
        goto <D.25847>;
        <D.25846>:
        iftmp.137 = 3;
        <D.25847>:
        nifaces = iftmp.137;
        D.25850 = eclass->this_arg.type;
        if (D.25850 != 19) goto <D.25851>; else goto <D.25852>;
        <D.25851>:
        D.25850 = eclass->this_arg.type;
        if (D.25850 != 30) goto <D.25853>; else goto <D.25854>;
        <D.25853>:
        D.25855 = eclass->image;
        D.25856 = BIT_FIELD_REF <*D.25855, 64, 192>;
        D.25857 = D.25856 & 34359738368;
        if (D.25857 == 0) goto <D.25848>; else goto <D.25858>;
        <D.25858>:
        D.25814 = BIT_FIELD_REF <*eclass, 64, 256>;
        D.25859 = D.25814 & 128;
        if (D.25859 != 0) goto <D.25848>; else goto <D.25849>;
        <D.25848>:
        mono_class_setup_interface_offsets (eclass);
        <D.25849>:
        <D.25854>:
        <D.25852>:
        if (all_interfaces != 0) goto <D.25861>; else goto <D.25862>;
        <D.25861>:
        D.25863 = eclass->interface_offsets_count;
        iftmp.138 = (int) D.25863;
        goto <D.25864>;
        <D.25862>:
        D.25865 = eclass->interface_count;
        iftmp.138 = (int) D.25865;
        <D.25864>:
        interface_count = iftmp.138;
        D.25869 = eclass->flags;
        D.25870 = D.25869 & 32;
        if (D.25870 != 0) goto <D.25866>; else goto <D.25871>;
        <D.25871>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 == 19) goto <D.25866>; else goto <D.25873>;
        <D.25873>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 == 30) goto <D.25866>; else goto <D.25867>;
        <D.25866>:
        interface_count = interface_count + 1;
        goto <D.25868>;
        <D.25867>:
        interface_count = interface_count + idepth;
        <D.25868>:
        D.25742 = eclass->rank;
        if (D.25742 != 0) goto <D.25874>; else goto <D.25875>;
        <D.25874>:
        D.25803 = eclass->element_class;
        D.25876 = BIT_FIELD_REF <*D.25803, 64, 256>;
        D.25877 = D.25876 & 8;
        if (D.25877 != 0) goto <D.25878>; else goto <D.25879>;
        <D.25878>:
        D.25803 = eclass->element_class;
        fill_valuetype_array_derived_types (&valuetype_types, D.25803, original_rank);
        D.25824 = valuetype_types[1];
        if (D.25824 != 0B) goto <D.25880>; else goto <D.25881>;
        <D.25880>:
        interface_count = interface_count + 1;
        <D.25881>:
        <D.25879>:
        <D.25875>:
        interface_count = interface_count * nifaces;
        real_count = interface_count;
        if (internal_enumerator != 0) goto <D.25882>; else goto <D.25883>;
        <D.25882>:
        D.25869 = eclass->flags;
        D.25870 = D.25869 & 32;
        if (D.25870 == 0) goto <D.25887>; else goto <D.25885>;
        <D.25887>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 != 19) goto <D.25888>; else goto <D.25885>;
        <D.25888>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 != 30) goto <D.25889>; else goto <D.25885>;
        <D.25889>:
        iftmp.139 = idepth;
        goto <D.25886>;
        <D.25885>:
        iftmp.139 = 1;
        <D.25886>:
        D.25863 = eclass->interface_offsets_count;
        D.25890 = (int) D.25863;
        D.25891 = iftmp.139 + D.25890;
        real_count = D.25891 + real_count;
        D.25824 = valuetype_types[1];
        if (D.25824 != 0B) goto <D.25892>; else goto <D.25893>;
        <D.25892>:
        real_count = real_count + 1;
        <D.25893>:
        <D.25883>:
        D.25832 = (long unsigned int) real_count;
        D.25833 = D.25832 * 8;
        interfaces = monoeg_malloc0 (D.25833);
        D.25869 = eclass->flags;
        D.25870 = D.25869 & 32;
        if (D.25870 != 0) goto <D.25894>; else goto <D.25896>;
        <D.25896>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 == 19) goto <D.25894>; else goto <D.25897>;
        <D.25897>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 == 30) goto <D.25894>; else goto <D.25895>;
        <D.25894>:
        D.25898 = mono_defaults.object_class;
        *interfaces = D.25898;
        j = nifaces;
        goto <D.20097>;
        <D.25895>:
        j = 0;
        i = 0;
        goto <D.20096>;
        <D.20095>:
        D.25899 = eclass->supertypes;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25902 = D.25899 + D.25901;
        D.25903 = *D.25902;
        mono_class_init (D.25903);
        D.25904 = (long unsigned int) j;
        D.25905 = D.25904 * 8;
        D.25906 = interfaces + D.25905;
        D.25899 = eclass->supertypes;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25902 = D.25899 + D.25901;
        D.25903 = *D.25902;
        *D.25906 = D.25903;
        j = j + nifaces;
        i = i + 1;
        <D.20096>:
        if (i < idepth) goto <D.20095>; else goto <D.20097>;
        <D.20097>:
        if (all_interfaces != 0) goto <D.25907>; else goto <D.25908>;
        <D.25907>:
        i = 0;
        goto <D.20099>;
        <D.20098>:
        D.25904 = (long unsigned int) j;
        D.25905 = D.25904 * 8;
        D.25906 = interfaces + D.25905;
        D.25909 = eclass->interfaces_packed;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25910 = D.25909 + D.25901;
        D.25911 = *D.25910;
        *D.25906 = D.25911;
        j = j + nifaces;
        i = i + 1;
        <D.20099>:
        D.25863 = eclass->interface_offsets_count;
        D.25890 = (int) D.25863;
        if (D.25890 > i) goto <D.20098>; else goto <D.20100>;
        <D.20100>:
        goto <D.25912>;
        <D.25908>:
        i = 0;
        goto <D.20102>;
        <D.20101>:
        D.25904 = (long unsigned int) j;
        D.25905 = D.25904 * 8;
        D.25906 = interfaces + D.25905;
        D.25913 = eclass->interfaces;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25914 = D.25913 + D.25901;
        D.25915 = *D.25914;
        *D.25906 = D.25915;
        j = j + nifaces;
        i = i + 1;
        <D.20102>:
        D.25865 = eclass->interface_count;
        D.25916 = (int) D.25865;
        if (D.25916 > i) goto <D.20101>; else goto <D.20103>;
        <D.20103>:
        <D.25912>:
        D.25824 = valuetype_types[1];
        if (D.25824 != 0B) goto <D.25917>; else goto <D.25918>;
        <D.25917>:
        D.25904 = (long unsigned int) j;
        D.25905 = D.25904 * 8;
        D.25906 = interfaces + D.25905;
        D.25824 = valuetype_types[1];
        original_rank.140 = (unsigned int) original_rank;
        D.25920 = array_class_get_if_rank (D.25824, original_rank.140);
        *D.25906 = D.25920;
        j = j + nifaces;
        <D.25918>:
      }
      <D.25840>:
      i = 0;
      goto <D.20106>;
      <D.20105>:
      {
        struct MonoClass * iface;

        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25921 = interfaces + D.25901;
        iface = *D.25921;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25921 = interfaces + D.25901;
        D.25738 = mono_defaults.generic_ilist_class;
        D.25922 = inflate_class_one_arg (D.25738, iface);
        *D.25921 = D.25922;
        D.25923 = (sizetype) i;
        D.25924 = D.25923 + 1;
        D.25925 = D.25924 * 8;
        D.25926 = interfaces + D.25925;
        generic_icollection_class.128 = generic_icollection_class;
        D.25927 = inflate_class_one_arg (generic_icollection_class.128, iface);
        *D.25926 = D.25927;
        D.25814 = BIT_FIELD_REF <*eclass, 64, 256>;
        D.25815 = D.25814 & 8;
        if (D.25815 != 0) goto <D.25928>; else goto <D.25929>;
        <D.25928>:
        D.25923 = (sizetype) i;
        D.25930 = D.25923 + 2;
        D.25931 = D.25930 * 8;
        D.25932 = interfaces + D.25931;
        generic_ienumerable_class.141 = generic_ienumerable_class;
        D.25934 = inflate_class_one_arg (generic_ienumerable_class.141, iface);
        *D.25932 = D.25934;
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.135 != 0B) goto <D.25935>; else goto <D.25936>;
        <D.25935>:
        D.25923 = (sizetype) i;
        D.25937 = D.25923 + 3;
        D.25938 = D.25937 * 8;
        D.25939 = interfaces + D.25938;
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        D.25940 = inflate_class_one_arg (generic_ireadonlylist_class.135, iface);
        *D.25939 = D.25940;
        D.25923 = (sizetype) i;
        D.25941 = D.25923 + 4;
        D.25942 = D.25941 * 8;
        D.25943 = interfaces + D.25942;
        generic_ireadonlycollection_class.142 = generic_ireadonlycollection_class;
        D.25945 = inflate_class_one_arg (generic_ireadonlycollection_class.142, iface);
        *D.25943 = D.25945;
        <D.25936>:
        goto <D.25946>;
        <D.25929>:
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.135 == 0B) goto <D.25947>; else goto <D.25948>;
        <D.25947>:
        D.25923 = (sizetype) i;
        D.25930 = D.25923 + 2;
        D.25931 = D.25930 * 8;
        D.25932 = interfaces + D.25931;
        generic_ienumerable_class.141 = generic_ienumerable_class;
        D.25949 = inflate_class_one_arg (generic_ienumerable_class.141, iface);
        *D.25932 = D.25949;
        <D.25948>:
        <D.25946>:
      }
      i = i + nifaces;
      <D.20106>:
      if (i < interface_count) goto <D.20105>; else goto <D.20107>;
      <D.20107>:
      if (internal_enumerator != 0) goto <D.25950>; else goto <D.25951>;
      <D.25950>:
      {
        int j;

        i = 0;
        goto <D.20110>;
        <D.20109>:
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25921 = interfaces + D.25901;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25921 = interfaces + D.25901;
        D.25953 = *D.25921;
        D.25954 = inflate_class_one_arg (generic_ienumerator_class.143, D.25953);
        *D.25921 = D.25954;
        i = i + 1;
        <D.20110>:
        if (i < interface_count) goto <D.20109>; else goto <D.20111>;
        <D.20111>:
        j = interface_count;
        if (eclass_is_valuetype == 0) goto <D.25955>; else goto <D.25956>;
        <D.25955>:
        D.25869 = eclass->flags;
        D.25870 = D.25869 & 32;
        if (D.25870 != 0) goto <D.25957>; else goto <D.25959>;
        <D.25959>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 == 19) goto <D.25957>; else goto <D.25960>;
        <D.25960>:
        D.25872 = eclass->byval_arg.type;
        if (D.25872 == 30) goto <D.25957>; else goto <D.25958>;
        <D.25957>:
        D.25961 = (long unsigned int) j;
        D.25962 = D.25961 * 8;
        D.25963 = interfaces + D.25962;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25898 = mono_defaults.object_class;
        D.25964 = inflate_class_one_arg (generic_ienumerator_class.143, D.25898);
        *D.25963 = D.25964;
        j = j + 1;
        goto <D.20114>;
        <D.25958>:
        i = 0;
        goto <D.20113>;
        <D.20112>:
        D.25961 = (long unsigned int) j;
        D.25962 = D.25961 * 8;
        D.25963 = interfaces + D.25962;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25899 = eclass->supertypes;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25902 = D.25899 + D.25901;
        D.25903 = *D.25902;
        D.25965 = inflate_class_one_arg (generic_ienumerator_class.143, D.25903);
        *D.25963 = D.25965;
        j = j + 1;
        i = i + 1;
        <D.20113>:
        D.25841 = eclass->idepth;
        D.25966 = (int) D.25841;
        if (D.25966 > i) goto <D.20112>; else goto <D.20114>;
        <D.20114>:
        i = 0;
        goto <D.20116>;
        <D.20115>:
        D.25961 = (long unsigned int) j;
        D.25962 = D.25961 * 8;
        D.25963 = interfaces + D.25962;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25909 = eclass->interfaces_packed;
        D.25900 = (long unsigned int) i;
        D.25901 = D.25900 * 8;
        D.25910 = D.25909 + D.25901;
        D.25911 = *D.25910;
        D.25967 = inflate_class_one_arg (generic_ienumerator_class.143, D.25911);
        *D.25963 = D.25967;
        j = j + 1;
        i = i + 1;
        <D.20116>:
        D.25863 = eclass->interface_offsets_count;
        D.25890 = (int) D.25863;
        if (D.25890 > i) goto <D.20115>; else goto <D.20117>;
        <D.20117>:
        goto <D.25968>;
        <D.25956>:
        j.144 = j;
        j = j.144 + 1;
        D.25970 = (long unsigned int) j.144;
        D.25971 = D.25970 * 8;
        D.25972 = interfaces + D.25971;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25834 = valuetype_types[0];
        original_rank.140 = (unsigned int) original_rank;
        D.25973 = array_class_get_if_rank (D.25834, original_rank.140);
        D.25974 = inflate_class_one_arg (generic_ienumerator_class.143, D.25973);
        *D.25972 = D.25974;
        <D.25968>:
        D.25824 = valuetype_types[1];
        if (D.25824 != 0B) goto <D.25975>; else goto <D.25976>;
        <D.25975>:
        D.25961 = (long unsigned int) j;
        D.25962 = D.25961 * 8;
        D.25963 = interfaces + D.25962;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25824 = valuetype_types[1];
        original_rank.140 = (unsigned int) original_rank;
        D.25977 = array_class_get_if_rank (D.25824, original_rank.140);
        D.25978 = inflate_class_one_arg (generic_ienumerator_class.143, D.25977);
        *D.25963 = D.25978;
        <D.25976>:
      }
      <D.25951>:
      *num = real_count;
      D.25741 = interfaces;
      return D.25741;
    }
  finally
    {
      valuetype_types = {CLOBBER};
    }
}


fill_valuetype_array_derived_types (struct MonoClass * * valuetype_types, struct MonoClass * eclass, int rank)
{
  struct MonoClass * D.25981;
  struct MonoClass * * D.25984;
  struct MonoClass * D.25985;
  struct MonoClass * D.25990;
  struct MonoClass * D.25993;
  struct MonoClass * D.25998;
  struct MonoClass * D.26001;
  struct MonoClass * D.26006;
  struct MonoClass * D.26009;
  long unsigned int D.26014;
  long unsigned int D.26015;
  struct MonoType * D.26018;
  struct MonoType * D.26021;
  struct MonoClass * D.26022;

  *valuetype_types = eclass;
  D.25981 = mono_defaults.int16_class;
  if (D.25981 == eclass) goto <D.25982>; else goto <D.25983>;
  <D.25982>:
  D.25984 = valuetype_types + 8;
  D.25985 = mono_defaults.uint16_class;
  *D.25984 = D.25985;
  goto <D.25986>;
  <D.25983>:
  D.25985 = mono_defaults.uint16_class;
  if (D.25985 == eclass) goto <D.25987>; else goto <D.25988>;
  <D.25987>:
  D.25984 = valuetype_types + 8;
  D.25981 = mono_defaults.int16_class;
  *D.25984 = D.25981;
  goto <D.25989>;
  <D.25988>:
  D.25990 = mono_defaults.int32_class;
  if (D.25990 == eclass) goto <D.25991>; else goto <D.25992>;
  <D.25991>:
  D.25984 = valuetype_types + 8;
  D.25993 = mono_defaults.uint32_class;
  *D.25984 = D.25993;
  goto <D.25994>;
  <D.25992>:
  D.25993 = mono_defaults.uint32_class;
  if (D.25993 == eclass) goto <D.25995>; else goto <D.25996>;
  <D.25995>:
  D.25984 = valuetype_types + 8;
  D.25990 = mono_defaults.int32_class;
  *D.25984 = D.25990;
  goto <D.25997>;
  <D.25996>:
  D.25998 = mono_defaults.int64_class;
  if (D.25998 == eclass) goto <D.25999>; else goto <D.26000>;
  <D.25999>:
  D.25984 = valuetype_types + 8;
  D.26001 = mono_defaults.uint64_class;
  *D.25984 = D.26001;
  goto <D.26002>;
  <D.26000>:
  D.26001 = mono_defaults.uint64_class;
  if (D.26001 == eclass) goto <D.26003>; else goto <D.26004>;
  <D.26003>:
  D.25984 = valuetype_types + 8;
  D.25998 = mono_defaults.int64_class;
  *D.25984 = D.25998;
  goto <D.26005>;
  <D.26004>:
  D.26006 = mono_defaults.byte_class;
  if (D.26006 == eclass) goto <D.26007>; else goto <D.26008>;
  <D.26007>:
  D.25984 = valuetype_types + 8;
  D.26009 = mono_defaults.sbyte_class;
  *D.25984 = D.26009;
  goto <D.26010>;
  <D.26008>:
  D.26009 = mono_defaults.sbyte_class;
  if (D.26009 == eclass) goto <D.26011>; else goto <D.26012>;
  <D.26011>:
  D.25984 = valuetype_types + 8;
  D.26006 = mono_defaults.byte_class;
  *D.25984 = D.26006;
  goto <D.26013>;
  <D.26012>:
  D.26014 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.26015 = D.26014 & 16;
  if (D.26015 != 0) goto <D.26016>; else goto <D.26017>;
  <D.26016>:
  D.26018 = mono_class_enum_basetype (eclass);
  if (D.26018 != 0B) goto <D.26019>; else goto <D.26020>;
  <D.26019>:
  D.25984 = valuetype_types + 8;
  D.26021 = mono_class_enum_basetype (eclass);
  D.26022 = mono_class_from_mono_type (D.26021);
  *D.25984 = D.26022;
  <D.26020>:
  <D.26017>:
  <D.26013>:
  <D.26010>:
  <D.26005>:
  <D.26002>:
  <D.25997>:
  <D.25994>:
  <D.25989>:
  <D.25986>:
}


array_class_get_if_rank (struct MonoClass * class, guint rank)
{
  struct MonoClass * D.26023;
  struct MonoClass * iftmp.145;

  if (rank != 0) goto <D.26025>; else goto <D.26026>;
  <D.26025>:
  iftmp.145 = mono_array_class_get (class, rank);
  goto <D.26027>;
  <D.26026>:
  iftmp.145 = class;
  <D.26027>:
  D.26023 = iftmp.145;
  return D.26023;
}


inflate_class_one_arg (struct MonoClass * gtype, struct MonoClass * arg0)
{
  struct MonoType * D.26029;
  struct MonoClass * D.26030;
  struct MonoType * args[1];

  try
    {
      D.26029 = &arg0->byval_arg;
      args[0] = D.26029;
      D.26030 = mono_class_bind_generic_parameters (gtype, 1, &args, 0);
      return D.26030;
    }
  finally
    {
      args = {CLOBBER};
    }
}


count_virtual_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.26035;
  unsigned int D.26037;
  struct MonoImage * D.26039;
  long unsigned int D.26040;
  long unsigned int D.26041;
  struct MonoGenericClass * D.26043;
  unsigned char D.26044;
  int D.26047;
  long unsigned int D.26048;
  long unsigned int D.26049;
  struct MonoMethod * * D.26050;
  struct MonoMethod * D.26051;
  short unsigned int D.26052;
  unsigned int D.26053;
  unsigned int i.146;
  unsigned int D.26057;
  unsigned int D.26058;
  unsigned int D.26059;
  int D.26060;
  int i;
  int count;
  guint32 flags;

  count = 0;
  class = mono_class_get_generic_type_definition (class);
  D.26035 = class->methods;
  if (D.26035 != 0B) goto <D.26033>; else goto <D.26036>;
  <D.26036>:
  D.26037 = class->type_token;
  if (D.26037 == 0) goto <D.26033>; else goto <D.26038>;
  <D.26038>:
  D.26039 = class->image;
  D.26040 = BIT_FIELD_REF <*D.26039, 64, 192>;
  D.26041 = D.26040 & 34359738368;
  if (D.26041 != 0) goto <D.26033>; else goto <D.26042>;
  <D.26042>:
  D.26043 = class->generic_class;
  if (D.26043 != 0B) goto <D.26033>; else goto <D.26034>;
  <D.26033>:
  mono_class_setup_methods (class);
  D.26044 = class->exception_type;
  if (D.26044 != 0) goto <D.26045>; else goto <D.26046>;
  <D.26045>:
  D.26047 = -1;
  return D.26047;
  <D.26046>:
  i = 0;
  goto <D.20142>;
  <D.20141>:
  D.26035 = class->methods;
  D.26048 = (long unsigned int) i;
  D.26049 = D.26048 * 8;
  D.26050 = D.26035 + D.26049;
  D.26051 = *D.26050;
  D.26052 = D.26051->flags;
  flags = (guint32) D.26052;
  D.26053 = flags & 64;
  if (D.26053 != 0) goto <D.26054>; else goto <D.26055>;
  <D.26054>:
  count = count + 1;
  <D.26055>:
  i = i + 1;
  <D.20142>:
  i.146 = (unsigned int) i;
  D.26057 = class->method.count;
  if (i.146 < D.26057) goto <D.20141>; else goto <D.20143>;
  <D.20143>:
  goto <D.20146>;
  <D.26034>:
  i = 0;
  goto <D.20145>;
  <D.20144>:
  D.26039 = class->image;
  D.26058 = class->method.first;
  i.146 = (unsigned int) i;
  D.26059 = D.26058 + i.146;
  D.26060 = (int) D.26059;
  flags = mono_metadata_decode_table_row_col (D.26039, 6, D.26060, 2);
  D.26053 = flags & 64;
  if (D.26053 != 0) goto <D.26061>; else goto <D.26062>;
  <D.26061>:
  count = count + 1;
  <D.26062>:
  i = i + 1;
  <D.20145>:
  i.146 = (unsigned int) i;
  D.26057 = class->method.count;
  if (i.146 < D.26057) goto <D.20144>; else goto <D.20146>;
  <D.20146>:
  D.26047 = count;
  return D.26047;
}


find_array_interface (struct MonoClass * klass, const char * name)
{
  int D.20131;
  struct MonoClass * * D.26064;
  long unsigned int D.26065;
  long unsigned int D.26066;
  struct MonoClass * * D.26067;
  struct MonoClass * D.26068;
  const char * D.26069;
  int D.26072;
  short unsigned int D.26073;
  int D.26074;
  int i;

  i = 0;
  goto <D.20133>;
  <D.20132>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.26064 = klass->interfaces;
    D.26065 = (long unsigned int) i;
    D.26066 = D.26065 * 8;
    D.26067 = D.26064 + D.26066;
    D.26068 = *D.26067;
    D.26069 = D.26068->name;
    D.20131 = __builtin_strcmp (D.26069, name);
  }
  if (D.20131 == 0) goto <D.26070>; else goto <D.26071>;
  <D.26070>:
  D.26072 = i;
  return D.26072;
  <D.26071>:
  i = i + 1;
  <D.20133>:
  D.26073 = klass->interface_count;
  D.26074 = (int) D.26073;
  if (D.26074 > i) goto <D.20132>; else goto <D.20134>;
  <D.20134>:
  D.26072 = -1;
  return D.26072;
}


find_interface_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic)
{
  int D.26078;
  long unsigned int D.26079;
  long unsigned int D.26080;
  int * D.26081;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (1 != 0) goto <D.26076>; else goto <D.26077>;
  <D.26076>:
  D.26079 = (long unsigned int) i;
  D.26080 = D.26079 * 4;
  D.26081 = interface_offsets_full + D.26080;
  D.26078 = *D.26081;
  return D.26078;
  <D.26077>:
  D.26078 = -1;
  return D.26078;
}


find_interface (int num_ifaces, struct MonoClass * * interfaces_full, struct MonoClass * ic)
{
  int D.26085;
  int D.26088;
  long unsigned int D.26089;
  long unsigned int D.26090;
  struct MonoClass * * D.26091;
  struct MonoClass * D.26092;
  short unsigned int D.26101;
  short unsigned int D.26102;
  int m;
  int l;

  l = 0;
  if (num_ifaces == 0) goto <D.26083>; else goto <D.26084>;
  <D.26083>:
  D.26085 = -1;
  return D.26085;
  <D.26084>:
  <D.20154>:
  if (l > num_ifaces) goto <D.26086>; else goto <D.26087>;
  <D.26086>:
  D.26085 = -1;
  return D.26085;
  <D.26087>:
  D.26088 = l + num_ifaces;
  m = D.26088 / 2;
  D.26089 = (long unsigned int) m;
  D.26090 = D.26089 * 8;
  D.26091 = interfaces_full + D.26090;
  D.26092 = *D.26091;
  if (D.26092 == ic) goto <D.26093>; else goto <D.26094>;
  <D.26093>:
  D.26085 = m;
  return D.26085;
  <D.26094>:
  if (l == num_ifaces) goto <D.26095>; else goto <D.26096>;
  <D.26095>:
  D.26085 = -1;
  return D.26085;
  <D.26096>:
  D.26089 = (long unsigned int) m;
  D.26090 = D.26089 * 8;
  D.26091 = interfaces_full + D.26090;
  D.26092 = *D.26091;
  if (D.26092 == 0B) goto <D.26097>; else goto <D.26100>;
  <D.26100>:
  D.26089 = (long unsigned int) m;
  D.26090 = D.26089 * 8;
  D.26091 = interfaces_full + D.26090;
  D.26092 = *D.26091;
  D.26101 = D.26092->interface_id;
  D.26102 = ic->interface_id;
  if (D.26101 > D.26102) goto <D.26097>; else goto <D.26098>;
  <D.26097>:
  num_ifaces = m + -1;
  goto <D.26099>;
  <D.26098>:
  l = m + 1;
  <D.26099>:
  goto <D.20154>;
}


set_interface_and_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic, int offset, mono_bool force_set)
{
  mono_bool D.26108;
  long unsigned int D.26109;
  long unsigned int D.26110;
  int * D.26111;
  long unsigned int D.26112;
  struct MonoClass * * D.26113;
  struct MonoClass * D.26114;
  short unsigned int D.26117;
  short unsigned int D.26118;
  long unsigned int D.26122;
  long unsigned int D.26123;
  struct MonoClass * * D.26124;
  struct MonoClass * D.26125;
  sizetype D.26126;
  sizetype D.26127;
  sizetype D.26128;
  struct MonoClass * * D.26129;
  const void * D.26130;
  int D.26131;
  long unsigned int D.26132;
  long unsigned int D.26133;
  sizetype D.26134;
  int * D.26135;
  const void * D.26136;
  long unsigned int D.26137;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (i >= 0) goto <D.26104>; else goto <D.26105>;
  <D.26104>:
  if (force_set == 0) goto <D.26106>; else goto <D.26107>;
  <D.26106>:
  D.26108 = 1;
  return D.26108;
  <D.26107>:
  D.26109 = (long unsigned int) i;
  D.26110 = D.26109 * 4;
  D.26111 = interface_offsets_full + D.26110;
  *D.26111 = offset;
  D.26108 = 0;
  return D.26108;
  <D.26105>:
  i = 0;
  goto <D.20178>;
  <D.20177>:
  D.26109 = (long unsigned int) i;
  D.26112 = D.26109 * 8;
  D.26113 = interfaces_full + D.26112;
  D.26114 = *D.26113;
  if (D.26114 != 0B) goto <D.26115>; else goto <D.26116>;
  <D.26115>:
  {
    int end;

    D.26109 = (long unsigned int) i;
    D.26112 = D.26109 * 8;
    D.26113 = interfaces_full + D.26112;
    D.26114 = *D.26113;
    D.26117 = D.26114->interface_id;
    D.26118 = ic->interface_id;
    if (D.26117 < D.26118) goto <D.26119>; else goto <D.26120>;
    <D.26119>:
    // predicted unlikely by continue predictor.
    goto <D.20172>;
    <D.26120>:
    end = i + 1;
    goto <D.20174>;
    <D.20173>:
    end = end + 1;
    <D.20174>:
    if (end < num_ifaces) goto <D.26121>; else goto <D.20175>;
    <D.26121>:
    D.26122 = (long unsigned int) end;
    D.26123 = D.26122 * 8;
    D.26124 = interfaces_full + D.26123;
    D.26125 = *D.26124;
    if (D.26125 != 0B) goto <D.20173>; else goto <D.20175>;
    <D.20175>:
    D.26126 = (sizetype) i;
    D.26127 = D.26126 + 1;
    D.26128 = D.26127 * 8;
    D.26129 = interfaces_full + D.26128;
    D.26109 = (long unsigned int) i;
    D.26112 = D.26109 * 8;
    D.26130 = interfaces_full + D.26112;
    D.26131 = end - i;
    D.26132 = (long unsigned int) D.26131;
    D.26133 = D.26132 * 8;
    memmove (D.26129, D.26130, D.26133);
    D.26126 = (sizetype) i;
    D.26127 = D.26126 + 1;
    D.26134 = D.26127 * 4;
    D.26135 = interface_offsets_full + D.26134;
    D.26109 = (long unsigned int) i;
    D.26110 = D.26109 * 4;
    D.26136 = interface_offsets_full + D.26110;
    D.26131 = end - i;
    D.26132 = (long unsigned int) D.26131;
    D.26137 = D.26132 * 4;
    memmove (D.26135, D.26136, D.26137);
  }
  <D.26116>:
  D.26109 = (long unsigned int) i;
  D.26112 = D.26109 * 8;
  D.26113 = interfaces_full + D.26112;
  *D.26113 = ic;
  D.26109 = (long unsigned int) i;
  D.26110 = D.26109 * 4;
  D.26111 = interface_offsets_full + D.26110;
  *D.26111 = offset;
  goto <D.20176>;
  <D.20172>:
  i = i + 1;
  <D.20178>:
  if (i < num_ifaces) goto <D.20177>; else goto <D.20176>;
  <D.20176>:
  D.26108 = 0;
  return D.26108;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.26139;
  long unsigned int D.26140;

  D.26140 = __builtin_object_size (__dest, 0);
  D.26139 = __builtin___memmove_chk (__dest, __src, __len, D.26140);
  return D.26139;
}


mono_class_check_vtable_constraints (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoGenericClass * D.26142;
  gboolean D.26145;
  unsigned char D.26146;
  _Bool D.26147;
  struct MonoClass * D.26148;
  struct MonoClass * D.26149;
  unsigned char D.26150;
  gchar * D.26153;
  struct MonoType * D.26154;
  unsigned char D.26155;
  int D.26160;
  int D.26162;
  int D.26163;
  gchar * D.26166;
  <unnamed-unsigned:22> D.26167;
  int D.26168;
  struct MonoGenericInst * ginst;
  int i;

  D.26142 = class->generic_class;
  if (D.26142 == 0B) goto <D.26143>; else goto <D.26144>;
  <D.26143>:
  mono_class_setup_vtable_full (class, in_setup);
  D.26146 = class->exception_type;
  D.26147 = D.26146 == 0;
  D.26145 = (gboolean) D.26147;
  return D.26145;
  <D.26144>:
  D.26148 = mono_class_get_generic_type_definition (class);
  mono_class_setup_vtable_full (D.26148, in_setup);
  D.26142 = class->generic_class;
  D.26149 = D.26142->container_class;
  D.26150 = D.26149->exception_type;
  if (D.26150 != 0) goto <D.26151>; else goto <D.26152>;
  <D.26151>:
  D.26153 = monoeg_strdup ("Failed to load generic definition vtable");
  mono_class_set_failure (class, 7, D.26153);
  D.26145 = 0;
  return D.26145;
  <D.26152>:
  D.26142 = class->generic_class;
  ginst = D.26142->context.class_inst;
  i = 0;
  goto <D.20323>;
  <D.20322>:
  {
    struct MonoClass * arg;

    D.26154 = ginst->type_argv[i];
    D.26155 = D.26154->type;
    if (D.26155 != 21) goto <D.26156>; else goto <D.26157>;
    <D.26156>:
    // predicted unlikely by continue predictor.
    goto <D.20321>;
    <D.26157>:
    D.26154 = ginst->type_argv[i];
    arg = mono_class_from_mono_type (D.26154);
    D.26160 = mono_class_has_gtd_parent (class, arg);
    if (D.26160 != 0) goto <D.26158>; else goto <D.26161>;
    <D.26161>:
    D.26162 = mono_class_has_gtd_parent (arg, class);
    if (D.26162 != 0) goto <D.26158>; else goto <D.26159>;
    <D.26158>:
    // predicted unlikely by continue predictor.
    goto <D.20321>;
    <D.26159>:
    D.26163 = mono_class_check_vtable_constraints (arg, in_setup);
    if (D.26163 == 0) goto <D.26164>; else goto <D.26165>;
    <D.26164>:
    D.26166 = monoeg_g_strdup_printf ("Failed to load generic parameter %d", i);
    mono_class_set_failure (class, 7, D.26166);
    D.26145 = 0;
    return D.26145;
    <D.26165>:
  }
  <D.20321>:
  i = i + 1;
  <D.20323>:
  D.26167 = ginst->type_argc;
  D.26168 = (int) D.26167;
  if (D.26168 > i) goto <D.20322>; else goto <D.20324>;
  <D.20324>:
  D.26145 = 1;
  return D.26145;
}


mono_class_setup_vtable_full (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoMethod * * D.26170;
  unsigned int D.26175;
  unsigned int D.26176;
  unsigned char D.26178;
  unsigned char D.26180;
  struct GList * D.26183;
  long unsigned int D.26188;
  long unsigned int D.26189;
  struct MonoGenericClass * D.26190;
  int D.26193;
  struct MonoClass * D.26196;
  struct MonoImage * D.26198;
  long unsigned int D.26199;
  long unsigned int D.26200;
  struct MonoMethod * * overrides.147;
  int onum.148;
  gchar * D.26209;
  struct MonoMethod * * overrides;
  struct MonoGenericContext * context;
  guint32 type_token;
  int onum;
  gboolean ok;

  try
    {
      onum = 0;
      ok = 1;
      D.26170 = class->vtable;
      if (D.26170 != 0B) goto <D.26171>; else goto <D.26172>;
      <D.26171>:
      return;
      <D.26172>:
      D.26175 = class->flags;
      D.26176 = D.26175 & 32;
      if (D.26176 != 0) goto <D.26173>; else goto <D.26177>;
      <D.26177>:
      D.26178 = class->byval_arg.type;
      if (D.26178 == 19) goto <D.26173>; else goto <D.26179>;
      <D.26179>:
      D.26178 = class->byval_arg.type;
      if (D.26178 == 30) goto <D.26173>; else goto <D.26174>;
      <D.26173>:
      mono_class_setup_methods (class);
      return;
      <D.26174>:
      D.26180 = class->exception_type;
      if (D.26180 != 0) goto <D.26181>; else goto <D.26182>;
      <D.26181>:
      return;
      <D.26182>:
      D.26183 = monoeg_g_list_find (in_setup, class);
      if (D.26183 != 0B) goto <D.26184>; else goto <D.26185>;
      <D.26184>:
      return;
      <D.26185>:
      mono_loader_lock ();
      D.26170 = class->vtable;
      if (D.26170 != 0B) goto <D.26186>; else goto <D.26187>;
      <D.26186>:
      mono_loader_unlock ();
      return;
      <D.26187>:
      D.26188 = mono_stats.generic_vtable_count;
      D.26189 = D.26188 + 1;
      mono_stats.generic_vtable_count = D.26189;
      in_setup = monoeg_g_list_prepend (in_setup, class);
      D.26190 = class->generic_class;
      if (D.26190 != 0B) goto <D.26191>; else goto <D.26192>;
      <D.26191>:
      D.26193 = mono_class_check_vtable_constraints (class, in_setup);
      if (D.26193 == 0) goto <D.26194>; else goto <D.26195>;
      <D.26194>:
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
      <D.26195>:
      context = mono_class_get_context (class);
      D.26190 = class->generic_class;
      D.26196 = D.26190->container_class;
      type_token = D.26196->type_token;
      goto <D.26197>;
      <D.26192>:
      context = class->generic_container;
      type_token = class->type_token;
      <D.26197>:
      D.26198 = class->image;
      D.26199 = BIT_FIELD_REF <*D.26198, 64, 192>;
      D.26200 = D.26199 & 34359738368;
      if (D.26200 != 0) goto <D.26201>; else goto <D.26202>;
      <D.26201>:
      mono_reflection_get_dynamic_overrides (class, &overrides, &onum);
      goto <D.26203>;
      <D.26202>:
      D.26198 = class->image;
      ok = mono_class_get_overrides_full (D.26198, type_token, &overrides, &onum, context);
      <D.26203>:
      if (ok != 0) goto <D.26204>; else goto <D.26205>;
      <D.26204>:
      overrides.147 = overrides;
      onum.148 = onum;
      mono_class_setup_vtable_general (class, overrides.147, onum.148, in_setup);
      goto <D.26208>;
      <D.26205>:
      D.26209 = monoeg_strdup ("Could not load list of method overrides");
      mono_class_set_failure (class, 7, D.26209);
      <D.26208>:
      overrides.147 = overrides;
      monoeg_g_free (overrides.147);
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
    }
  finally
    {
      overrides = {CLOBBER};
      onum = {CLOBBER};
    }
}


mono_class_has_gtd_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.26212;
  int iftmp.149;
  short unsigned int D.26216;
  short unsigned int D.26217;
  struct MonoClass * * D.26219;
  long unsigned int D.26220;
  long unsigned int D.26221;
  sizetype D.26222;
  struct MonoClass * * D.26223;
  struct MonoClass * D.26224;
  struct MonoClass * D.26225;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  mono_class_setup_supertypes (parent);
  D.26216 = klass->idepth;
  D.26217 = parent->idepth;
  if (D.26216 >= D.26217) goto <D.26218>; else goto <D.26214>;
  <D.26218>:
  D.26219 = klass->supertypes;
  D.26217 = parent->idepth;
  D.26220 = (long unsigned int) D.26217;
  D.26221 = D.26220 * 8;
  D.26222 = D.26221 + 18446744073709551608;
  D.26223 = D.26219 + D.26222;
  D.26224 = *D.26223;
  D.26225 = mono_class_get_generic_type_definition (D.26224);
  if (D.26225 == parent) goto <D.26226>; else goto <D.26214>;
  <D.26226>:
  iftmp.149 = 1;
  goto <D.26215>;
  <D.26214>:
  iftmp.149 = 0;
  <D.26215>:
  D.26212 = iftmp.149;
  return D.26212;
}


mono_class_setup_vtable (struct MonoClass * class)
{
  mono_class_setup_vtable_full (class, 0B);
}


mono_class_setup_vtable_general (struct MonoClass * class, struct MonoMethod * * overrides, int onum, struct GList * in_setup)
{
  struct MonoMethod * * D.26228;
  int D.26233;
  int D.26236;
  const char * D.26239;
  gchar * D.26240;
  void * * D.26243;
  long unsigned int D.26244;
  long unsigned int D.26245;
  void * * D.26246;
  unsigned int D.26247;
  unsigned int max_vtsize.150;
  unsigned int D.26249;
  unsigned int i.151;
  unsigned int D.26251;
  struct MonoClass * D.26252;
  unsigned char D.26255;
  gchar * D.26258;
  int D.26259;
  unsigned int D.26260;
  unsigned int D.26261;
  int D.26262;
  long unsigned int D.26265;
  long unsigned int D.26266;
  short unsigned int D.26269;
  struct MonoGenericClass * D.26270;
  unsigned char D.26273;
  int D.26276;
  unsigned int D.26277;
  unsigned int D.26278;
  int D.26279;
  struct MonoMethod * * D.26280;
  struct MonoMethod * * D.26281;
  struct MonoMethod * D.26282;
  struct MonoGenericContext * D.26285;
  int D.26286;
  const char * D.26289;
  struct MonoMethod * * D.26290;
  struct MonoMethod * D.26291;
  short int D.26292;
  struct MonoMethod * * D.26293;
  struct MonoMethod * * D.26296;
  struct MonoMethod * * D.26299;
  struct MonoMethod * D.26300;
  short int D.26301;
  struct MonoMethod * * D.26304;
  struct MonoMethod * D.26305;
  short int D.26306;
  unsigned int i.152;
  struct MonoMethod * * D.26312;
  int D.26313;
  long unsigned int D.26314;
  long unsigned int D.26315;
  struct MonoClass * * D.26316;
  long unsigned int D.26317;
  long unsigned int D.26318;
  struct MonoClass * * D.26319;
  int D.26322;
  long unsigned int D.26323;
  long unsigned int D.26324;
  struct MonoMethod * * D.26325;
  int D.26326;
  long unsigned int D.26327;
  long unsigned int D.26328;
  struct MonoMethod * * D.26329;
  struct MonoMethod * D.26330;
  unsigned int j.153;
  unsigned int D.26332;
  unsigned char D.26334;
  short unsigned int D.26335;
  int D.26336;
  int D.26337;
  short int D.26340;
  short int D.26343;
  int D.26345;
  _Bool D.26346;
  long int D.26347;
  long int D.26348;
  long unsigned int D.26351;
  long unsigned int D.26352;
  struct MonoMethod * * D.26353;
  int D.26354;
  long unsigned int D.26355;
  long unsigned int D.26356;
  struct MonoMethod * * D.26357;
  struct MonoClass * D.26360;
  unsigned int D.26361;
  unsigned int D.26362;
  unsigned char D.26364;
  int D.26368;
  long unsigned int D.26369;
  long unsigned int D.26370;
  struct MonoMethod * * D.26371;
  sizetype D.26372;
  sizetype D.26373;
  sizetype D.26374;
  struct MonoMethod * * D.26375;
  struct MonoMethod * D.26376;
  struct MonoMethod * D.26377;
  short int D.26378;
  struct MonoMethod * D.26381;
  <unnamed type> D.26382;
  struct MonoClass * * D.26386;
  struct MonoClass * * D.26387;
  unsigned char D.26388;
  struct MonoClass * * D.26392;
  long unsigned int D.26393;
  long unsigned int D.26394;
  struct MonoClass * * D.26395;
  struct MonoClass * D.26396;
  short unsigned int D.26399;
  int D.26400;
  struct MonoMethod * * D.26402;
  long unsigned int D.26403;
  long unsigned int D.26404;
  struct MonoMethod * * D.26405;
  short int D.26406;
  int D.26407;
  struct MonoMethod * iftmp.154;
  short unsigned int D.26412;
  int D.26413;
  int D.26414;
  long unsigned int D.26419;
  long unsigned int D.26420;
  struct MonoMethod * * D.26421;
  struct MonoMethod * D.26422;
  _Bool D.26423;
  int D.26424;
  int D.26425;
  short int D.26428;
  short int D.26431;
  int D.26437;
  struct MonoMethod * * D.26438;
  long unsigned int D.26439;
  long unsigned int D.26440;
  struct MonoMethod * * D.26441;
  int D.26444;
  short int D.26447;
  _Bool D.26452;
  long int D.26453;
  long int D.26454;
  unsigned int im_index.155;
  unsigned int D.26458;
  short unsigned int D.26459;
  int D.26460;
  unsigned int D.26461;
  unsigned int D.26462;
  long unsigned int D.26465;
  long unsigned int D.26466;
  struct MonoMethod * * D.26467;
  short int D.26468;
  int D.26469;
  short unsigned int D.26470;
  int D.26471;
  int D.26472;
  long unsigned int D.26475;
  long unsigned int D.26476;
  struct MonoMethod * * D.26477;
  struct MonoMethod * D.26478;
  unsigned int im_index.156;
  short unsigned int D.26482;
  int D.26483;
  int D.26484;
  int D.20590;
  const char * D.26490;
  const char * D.26491;
  int D.26494;
  short unsigned int D.26499;
  int D.26500;
  int D.26501;
  <unnamed type> D.26504;
  int D.26508;
  int D.26511;
  gchar * D.26514;
  short int D.26515;
  int D.26516;
  _Bool D.26517;
  long int D.26518;
  long int D.26519;
  unsigned char D.26524;
  short int D.26529;
  unsigned int D.26530;
  unsigned int D.26531;
  int cur_slot.157;
  short int D.26539;
  int D.26540;
  long unsigned int D.26543;
  long unsigned int D.26544;
  struct MonoMethod * * D.26545;
  struct MonoClass * D.26546;
  unsigned int D.26547;
  unsigned int D.26548;
  unsigned char D.26551;
  short int D.26556;
  _Bool D.26557;
  long int D.26558;
  long int D.26559;
  long unsigned int D.26562;
  long unsigned int D.26563;
  struct MonoMethod * * D.26564;
  <unnamed type> D.26567;
  struct MonoMethod * D.26570;
  struct MonoMethod * * D.26573;
  struct MonoMethod * D.26574;
  short unsigned int D.26584;
  int D.26585;
  int D.26586;
  char * iftmp.158;
  gchar * D.26591;
  int D.26594;
  int D.26595;
  int D.26597;
  _Bool D.26600;
  long int D.26601;
  long int D.26602;
  struct MonoMethod * * D.26609;
  long unsigned int D.26610;
  long unsigned int D.26611;
  int D.26612;
  unsigned int D.26614;
  unsigned int D.26615;
  int D.26616;
  int mono_print_vtable.159;
  int D.26620;
  guint8 * D.26623;
  int D.26624;
  sizetype D.26625;
  guint8 * D.26626;
  unsigned char D.26627;
  int D.26628;
  int D.26629;
  int D.26630;
  int D.26631;
  struct MonoType * D.26634;
  char * D.26635;
  short int D.26638;
  int D.26639;
  char * D.26640;
  const char * D.26643;
  const char * D.26644;
  struct MonoClass * * D.26645;
  int D.26646;
  int D.26647;
  short unsigned int D.26648;
  int D.26649;
  struct MonoType * D.26650;
  char * D.26651;
  struct MonoClass * * D.26652;
  struct MonoClass * * D.26653;
  int D.26654;
  int D.26655;
  char * D.26656;
  short unsigned int D.26657;
  int D.26658;
  gchar * D.26659;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  struct MonoMethod * * vtable;
  int i;
  int max_vtsize;
  int max_iid;
  int cur_slot;
  struct GPtrArray * ifaces;
  struct GHashTable * override_map;
  gboolean security_enabled;
  struct MonoMethod * cm;
  void * class_iter;
  struct GSList * virt_methods;
  struct GSList * l;
  int stelemref_slot;
  void fail = <<< error >>>;

  try
    {
      max_vtsize = 0;
      cur_slot = 0;
      ifaces = 0B;
      override_map = 0B;
      security_enabled = mono_is_security_manager_active ();
      virt_methods = 0B;
      stelemref_slot = 0;
      D.26228 = class->vtable;
      if (D.26228 != 0B) goto <D.26229>; else goto <D.26230>;
      <D.26229>:
      return;
      <D.26230>:
      if (overrides != 0B) goto <D.26231>; else goto <D.26232>;
      <D.26231>:
      D.26233 = verify_class_overrides (class, overrides, onum);
      if (D.26233 == 0) goto <D.26234>; else goto <D.26235>;
      <D.26234>:
      return;
      <D.26235>:
      <D.26232>:
      ifaces = mono_class_get_implemented_interfaces (class, &error);
      D.26236 = mono_error_ok (&error);
      if (D.26236 == 0) goto <D.26237>; else goto <D.26238>;
      <D.26237>:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.26239 = mono_error_get_message (&error);
        D.26240 = monoeg_g_strdup_printf ("Could not resolve %s interfaces due to %s", name, D.26239);
        mono_class_set_failure (class, 7, D.26240);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.26238>:
      if (ifaces != 0B) goto <D.26241>; else goto <D.26242>;
      <D.26241>:
      i = 0;
      goto <D.20499>;
      <D.20498>:
      {
        struct MonoClass * ic;

        D.26243 = ifaces->pdata;
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26246 = D.26243 + D.26245;
        ic = *D.26246;
        D.26247 = ic->method.count;
        max_vtsize.150 = (unsigned int) max_vtsize;
        D.26249 = D.26247 + max_vtsize.150;
        max_vtsize = (int) D.26249;
      }
      i = i + 1;
      <D.20499>:
      i.151 = (unsigned int) i;
      D.26251 = ifaces->len;
      if (i.151 < D.26251) goto <D.20498>; else goto <D.20500>;
      <D.20500>:
      monoeg_g_ptr_array_free (ifaces, 1);
      ifaces = 0B;
      <D.26242>:
      D.26252 = class->parent;
      if (D.26252 != 0B) goto <D.26253>; else goto <D.26254>;
      <D.26253>:
      D.26252 = class->parent;
      mono_class_init (D.26252);
      D.26252 = class->parent;
      mono_class_setup_vtable_full (D.26252, in_setup);
      D.26252 = class->parent;
      D.26255 = D.26252->exception_type;
      if (D.26255 != 0) goto <D.26256>; else goto <D.26257>;
      <D.26256>:
      {
        char * name;

        D.26252 = class->parent;
        name = mono_type_get_full_name (D.26252);
        D.26258 = monoeg_g_strdup_printf ("Parent %s failed to load", name);
        mono_class_set_failure (class, 7, D.26258);
        monoeg_g_free (name);
        return;
      }
      <D.26257>:
      D.26252 = class->parent;
      D.26259 = D.26252->vtable_size;
      max_vtsize = D.26259 + max_vtsize;
      D.26252 = class->parent;
      cur_slot = D.26252->vtable_size;
      <D.26254>:
      D.26260 = class->method.count;
      max_vtsize.150 = (unsigned int) max_vtsize;
      D.26261 = D.26260 + max_vtsize.150;
      max_vtsize = (int) D.26261;
      D.26262 = mono_class_need_stelemref_method (class);
      if (D.26262 != 0) goto <D.26263>; else goto <D.26264>;
      <D.26263>:
      stelemref_slot = cur_slot;
      max_vtsize = max_vtsize + 1;
      cur_slot = cur_slot + 1;
      <D.26264>:
      D.26265 = (long unsigned int) max_vtsize;
      D.26266 = D.26265 * 8;
      vtable = __builtin_alloca (D.26266);
      D.26265 = (long unsigned int) max_vtsize;
      D.26266 = D.26265 * 8;
      memset (vtable, 0, D.26266);
      cur_slot = setup_interface_offsets (class, cur_slot, 1);
      if (cur_slot == -1) goto <D.26267>; else goto <D.26268>;
      <D.26267>:
      return;
      <D.26268>:
      D.26269 = class->max_interface_id;
      max_iid = (int) D.26269;
      D.26270 = class->generic_class;
      if (D.26270 != 0B) goto <D.26271>; else goto <D.26272>;
      <D.26271>:
      {
        struct MonoError error;
        struct MonoClass * gklass;
        struct MonoMethod * * tmp;

        try
          {
            D.26270 = class->generic_class;
            gklass = D.26270->container_class;
            mono_class_setup_vtable_full (gklass, in_setup);
            D.26273 = gklass->exception_type;
            if (D.26273 != 0) goto <D.26274>; else goto <D.26275>;
            <D.26274>:
            mono_class_set_failure (class, 7, 0B);
            return;
            <D.26275>:
            D.26276 = gklass->vtable_size;
            D.26277 = (unsigned int) D.26276;
            D.26278 = D.26277 * 8;
            D.26279 = (int) D.26278;
            tmp = mono_class_alloc0 (class, D.26279);
            D.26276 = gklass->vtable_size;
            class->vtable_size = D.26276;
            i = 0;
            goto <D.20508>;
            <D.20507>:
            D.26280 = gklass->vtable;
            D.26244 = (long unsigned int) i;
            D.26245 = D.26244 * 8;
            D.26281 = D.26280 + D.26245;
            D.26282 = *D.26281;
            if (D.26282 != 0B) goto <D.26283>; else goto <D.26284>;
            <D.26283>:
            {
              struct MonoMethod * inflated;

              D.26280 = gklass->vtable;
              D.26244 = (long unsigned int) i;
              D.26245 = D.26244 * 8;
              D.26281 = D.26280 + D.26245;
              D.26282 = *D.26281;
              D.26285 = mono_class_get_context (class);
              inflated = mono_class_inflate_generic_method_full_checked (D.26282, class, D.26285, &error);
              D.26286 = mono_error_ok (&error);
              if (D.26286 == 0) goto <D.26287>; else goto <D.26288>;
              <D.26287>:
              {
                char * err_msg;

                D.26289 = mono_error_get_message (&error);
                err_msg = monoeg_g_strdup_printf ("Could not inflate method due to %s", D.26289);
                mono_class_set_failure (class, 7, err_msg);
                monoeg_g_free (err_msg);
                mono_error_cleanup (&error);
                return;
              }
              <D.26288>:
              D.26244 = (long unsigned int) i;
              D.26245 = D.26244 * 8;
              D.26290 = tmp + D.26245;
              *D.26290 = inflated;
              D.26244 = (long unsigned int) i;
              D.26245 = D.26244 * 8;
              D.26290 = tmp + D.26245;
              D.26291 = *D.26290;
              D.26280 = gklass->vtable;
              D.26244 = (long unsigned int) i;
              D.26245 = D.26244 * 8;
              D.26281 = D.26280 + D.26245;
              D.26282 = *D.26281;
              D.26292 = D.26282->slot;
              D.26291->slot = D.26292;
            }
            <D.26284>:
            i = i + 1;
            <D.20508>:
            D.26276 = gklass->vtable_size;
            if (D.26276 > i) goto <D.20507>; else goto <D.20509>;
            <D.20509>:
            mono_memory_barrier ();
            class->vtable = tmp;
            D.26293 = class->methods;
            if (D.26293 != 0B) goto <D.26294>; else goto <D.26295>;
            <D.26294>:
            D.26296 = gklass->methods;
            if (D.26296 != 0B) goto <D.26297>; else goto <D.26298>;
            <D.26297>:
            i = 0;
            goto <D.20511>;
            <D.20510>:
            D.26293 = class->methods;
            D.26244 = (long unsigned int) i;
            D.26245 = D.26244 * 8;
            D.26299 = D.26293 + D.26245;
            D.26300 = *D.26299;
            D.26301 = D.26300->slot;
            if (D.26301 == -1) goto <D.26302>; else goto <D.26303>;
            <D.26302>:
            D.26293 = class->methods;
            D.26244 = (long unsigned int) i;
            D.26245 = D.26244 * 8;
            D.26299 = D.26293 + D.26245;
            D.26300 = *D.26299;
            D.26296 = gklass->methods;
            D.26244 = (long unsigned int) i;
            D.26245 = D.26244 * 8;
            D.26304 = D.26296 + D.26245;
            D.26305 = *D.26304;
            D.26306 = D.26305->slot;
            D.26300->slot = D.26306;
            <D.26303>:
            i = i + 1;
            <D.20511>:
            i.152 = (unsigned int) i;
            D.26260 = class->method.count;
            if (i.152 < D.26260) goto <D.20510>; else goto <D.20512>;
            <D.20512>:
            <D.26298>:
            <D.26295>:
            return;
          }
        finally
          {
            error = {CLOBBER};
          }
      }
      <D.26272>:
      D.26252 = class->parent;
      if (D.26252 != 0B) goto <D.26308>; else goto <D.26309>;
      <D.26308>:
      D.26252 = class->parent;
      D.26259 = D.26252->vtable_size;
      if (D.26259 != 0) goto <D.26310>; else goto <D.26311>;
      <D.26310>:
      {
        struct MonoClass * parent;
        int i;

        parent = class->parent;
        D.26312 = parent->vtable;
        D.26313 = parent->vtable_size;
        D.26314 = (long unsigned int) D.26313;
        D.26315 = D.26314 * 8;
        memcpy (vtable, D.26312, D.26315);
        i = 0;
        goto <D.20523>;
        <D.20522>:
        {
          struct MonoClass * parent_interface;
          int interface_offset;

          D.26316 = parent->interfaces_packed;
          D.26317 = (long unsigned int) i;
          D.26318 = D.26317 * 8;
          D.26319 = D.26316 + D.26318;
          parent_interface = *D.26319;
          interface_offset = mono_class_interface_offset (class, parent_interface);
          D.26313 = parent->vtable_size;
          if (D.26313 <= interface_offset) goto <D.26320>; else goto <D.26321>;
          <D.26320>:
          {
            int parent_interface_offset;
            int j;

            parent_interface_offset = mono_class_interface_offset (parent, parent_interface);
            mono_class_setup_methods (parent_interface);
            j = 0;
            goto <D.20520>;
            <D.20519>:
            D.26322 = interface_offset + j;
            D.26323 = (long unsigned int) D.26322;
            D.26324 = D.26323 * 8;
            D.26325 = vtable + D.26324;
            D.26312 = parent->vtable;
            D.26326 = parent_interface_offset + j;
            D.26327 = (long unsigned int) D.26326;
            D.26328 = D.26327 * 8;
            D.26329 = D.26312 + D.26328;
            D.26330 = *D.26329;
            *D.26325 = D.26330;
            j = j + 1;
            <D.20520>:
            j.153 = (unsigned int) j;
            D.26332 = parent_interface->method.count;
            if (j.153 < D.26332) goto <D.26333>; else goto <D.20521>;
            <D.26333>:
            D.26334 = class->exception_type;
            if (D.26334 == 0) goto <D.20519>; else goto <D.20521>;
            <D.20521>:
          }
          <D.26321>:
        }
        i = i + 1;
        <D.20523>:
        D.26335 = parent->interface_offsets_count;
        D.26336 = (int) D.26335;
        if (D.26336 > i) goto <D.20522>; else goto <D.20524>;
        <D.20524>:
      }
      <D.26311>:
      <D.26309>:
      D.26337 = mono_class_need_stelemref_method (class);
      if (D.26337 != 0) goto <D.26338>; else goto <D.26339>;
      <D.26338>:
      {
        struct MonoMethod * method;

        method = mono_marshal_get_virtual_stelemref (class);
        D.26340 = method->slot;
        if (D.26340 == 0) goto <D.26341>; else goto <D.26342>;
        <D.26341>:
        D.26343 = (short int) stelemref_slot;
        method->slot = D.26343;
        goto <D.26344>;
        <D.26342>:
        D.26340 = method->slot;
        D.26345 = (int) D.26340;
        D.26346 = D.26345 != stelemref_slot;
        D.26347 = (long int) D.26346;
        D.26348 = __builtin_expect (D.26347, 0);
        if (D.26348 != 0) goto <D.26349>; else goto <D.26350>;
        <D.26349>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4263, "method->slot == stelemref_slot");
        <D.26350>:
        <D.26344>:
        D.26351 = (long unsigned int) stelemref_slot;
        D.26352 = D.26351 * 8;
        D.26353 = vtable + D.26352;
        *D.26353 = method;
      }
      <D.26339>:
      i = 0;
      goto <D.20529>;
      <D.20528>:
      {
        struct MonoMethod * decl;

        D.26354 = i * 2;
        D.26355 = (long unsigned int) D.26354;
        D.26356 = D.26355 * 8;
        D.26357 = overrides + D.26356;
        decl = *D.26357;
        D.26360 = decl->klass;
        D.26361 = D.26360->flags;
        D.26362 = D.26361 & 32;
        if (D.26362 != 0) goto <D.26358>; else goto <D.26363>;
        <D.26363>:
        D.26360 = decl->klass;
        D.26364 = D.26360->byval_arg.type;
        if (D.26364 == 19) goto <D.26358>; else goto <D.26365>;
        <D.26365>:
        D.26360 = decl->klass;
        D.26364 = D.26360->byval_arg.type;
        if (D.26364 == 30) goto <D.26358>; else goto <D.26359>;
        <D.26358>:
        {
          int dslot;

          dslot = mono_method_get_vtable_slot (decl);
          if (dslot == -1) goto <D.26366>; else goto <D.26367>;
          <D.26366>:
          mono_class_set_failure (class, 7, 0B);
          return;
          <D.26367>:
          D.26360 = decl->klass;
          D.26368 = mono_class_interface_offset (class, D.26360);
          dslot = D.26368 + dslot;
          D.26369 = (long unsigned int) dslot;
          D.26370 = D.26369 * 8;
          D.26371 = vtable + D.26370;
          D.26354 = i * 2;
          D.26372 = (sizetype) D.26354;
          D.26373 = D.26372 + 1;
          D.26374 = D.26373 * 8;
          D.26375 = overrides + D.26374;
          D.26376 = *D.26375;
          *D.26371 = D.26376;
          D.26369 = (long unsigned int) dslot;
          D.26370 = D.26369 * 8;
          D.26371 = vtable + D.26370;
          D.26377 = *D.26371;
          D.26378 = (short int) dslot;
          D.26377->slot = D.26378;
          if (override_map == 0B) goto <D.26379>; else goto <D.26380>;
          <D.26379>:
          override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
          <D.26380>:
          D.26354 = i * 2;
          D.26355 = (long unsigned int) D.26354;
          D.26356 = D.26355 * 8;
          D.26357 = overrides + D.26356;
          D.26381 = *D.26357;
          D.26354 = i * 2;
          D.26372 = (sizetype) D.26354;
          D.26373 = D.26372 + 1;
          D.26374 = D.26373 * 8;
          D.26375 = overrides + D.26374;
          D.26376 = *D.26375;
          monoeg_g_hash_table_insert_replace (override_map, D.26381, D.26376, 0);
          D.26382 = mono_security_get_mode ();
          if (D.26382 == 1) goto <D.26383>; else goto <D.26384>;
          <D.26383>:
          D.26369 = (long unsigned int) dslot;
          D.26370 = D.26369 * 8;
          D.26371 = vtable + D.26370;
          D.26377 = *D.26371;
          mono_security_core_clr_check_override (class, D.26377, decl);
          <D.26384>:
        }
        <D.26359>:
      }
      i = i + 1;
      <D.20529>:
      if (i < onum) goto <D.20528>; else goto <D.20530>;
      <D.20530>:
      {
        void * iter;
        struct MonoMethod * cm;

        try
          {
            iter = 0B;
            virt_methods = 0B;
            goto <D.20534>;
            <D.20533>:
            virt_methods = monoeg_g_slist_prepend (virt_methods, cm);
            <D.20534>:
            cm = mono_class_get_virtual_methods (class, &iter);
            if (cm != 0B) goto <D.20533>; else goto <D.20535>;
            <D.20535>:
            D.26334 = class->exception_type;
            if (D.26334 != 0) goto fail; else goto <D.26385>;
            <D.26385>:
          }
        finally
          {
            iter = {CLOBBER};
          }
      }
      i = 0;
      goto <D.20564>;
      <D.20563>:
      {
        struct MonoClass * parent;
        int ic_offset;
        gboolean interface_is_explicitly_implemented_by_class;
        int im_index;

        parent = class->parent;
        D.26386 = class->interfaces_packed;
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26387 = D.26386 + D.26245;
        ic = *D.26387;
        ic_offset = mono_class_interface_offset (class, ic);
        mono_class_setup_methods (ic);
        D.26388 = ic->exception_type;
        if (D.26388 != 0) goto fail; else goto <D.26389>;
        <D.26389>:
        if (parent != 0B) goto <D.26390>; else goto <D.26391>;
        <D.26390>:
        {
          int implemented_interfaces_index;

          interface_is_explicitly_implemented_by_class = 0;
          implemented_interfaces_index = 0;
          goto <D.20544>;
          <D.20543>:
          D.26392 = class->interfaces;
          D.26393 = (long unsigned int) implemented_interfaces_index;
          D.26394 = D.26393 * 8;
          D.26395 = D.26392 + D.26394;
          D.26396 = *D.26395;
          if (D.26396 == ic) goto <D.26397>; else goto <D.26398>;
          <D.26397>:
          interface_is_explicitly_implemented_by_class = 1;
          goto <D.20542>;
          <D.26398>:
          implemented_interfaces_index = implemented_interfaces_index + 1;
          <D.20544>:
          D.26399 = class->interface_count;
          D.26400 = (int) D.26399;
          if (D.26400 > implemented_interfaces_index) goto <D.20543>; else goto <D.20542>;
          <D.20542>:
        }
        goto <D.26401>;
        <D.26391>:
        interface_is_explicitly_implemented_by_class = 1;
        <D.26401>:
        im_index = 0;
        goto <D.20561>;
        <D.20560>:
        {
          struct MonoMethod * im;
          int im_slot;
          struct MonoMethod * override_im;

          D.26402 = ic->methods;
          D.26403 = (long unsigned int) im_index;
          D.26404 = D.26403 * 8;
          D.26405 = D.26402 + D.26404;
          im = *D.26405;
          D.26406 = im->slot;
          D.26407 = (int) D.26406;
          im_slot = D.26407 + ic_offset;
          if (override_map != 0B) goto <D.26409>; else goto <D.26410>;
          <D.26409>:
          iftmp.154 = monoeg_g_hash_table_lookup (override_map, im);
          goto <D.26411>;
          <D.26410>:
          iftmp.154 = 0B;
          <D.26411>:
          override_im = iftmp.154;
          D.26412 = im->flags;
          D.26413 = (int) D.26412;
          D.26414 = D.26413 & 16;
          if (D.26414 != 0) goto <D.26415>; else goto <D.26416>;
          <D.26415>:
          // predicted unlikely by continue predictor.
          goto <D.20548>;
          <D.26416>:
          if (override_im == 0B) goto <D.26417>; else goto <D.26418>;
          <D.26417>:
          {
            int cm_index;
            void * iter;
            struct MonoMethod * cm;

            iter = 0B;
            l = virt_methods;
            goto <D.20553>;
            <D.20552>:
            cm = l->data;
            D.26419 = (long unsigned int) im_slot;
            D.26420 = D.26419 * 8;
            D.26421 = vtable + D.26420;
            D.26422 = *D.26421;
            D.26423 = D.26422 == 0B;
            D.26424 = (int) D.26423;
            D.26425 = check_interface_method_override (class, im, cm, 1, interface_is_explicitly_implemented_by_class, D.26424, security_enabled);
            if (D.26425 != 0) goto <D.26426>; else goto <D.26427>;
            <D.26426>:
            D.26419 = (long unsigned int) im_slot;
            D.26420 = D.26419 * 8;
            D.26421 = vtable + D.26420;
            *D.26421 = cm;
            D.26428 = cm->slot;
            if (D.26428 < 0) goto <D.26429>; else goto <D.26430>;
            <D.26429>:
            D.26431 = (short int) im_slot;
            cm->slot = D.26431;
            <D.26430>:
            <D.26427>:
            D.26334 = class->exception_type;
            if (D.26334 != 0) goto fail; else goto <D.26432>;
            <D.26432>:
            l = l->next;
            <D.20553>:
            if (l != 0B) goto <D.20552>; else goto <D.20554>;
            <D.20554>:
            D.26419 = (long unsigned int) im_slot;
            D.26420 = D.26419 * 8;
            D.26421 = vtable + D.26420;
            D.26422 = *D.26421;
            if (D.26422 == 0B) goto <D.26433>; else goto <D.26434>;
            <D.26433>:
            D.26252 = class->parent;
            if (D.26252 != 0B) goto <D.26435>; else goto <D.26436>;
            <D.26435>:
            {
              struct MonoClass * parent;

              parent = class->parent;
              D.26437 = parent->vtable_size;
              cm_index = D.26437 + -1;
              goto <D.20559>;
              <D.20558>:
              {
                struct MonoMethod * cm;

                D.26438 = parent->vtable;
                D.26439 = (long unsigned int) cm_index;
                D.26440 = D.26439 * 8;
                D.26441 = D.26438 + D.26440;
                cm = *D.26441;
                if (cm != 0B) goto <D.26442>; else goto <D.26443>;
                <D.26442>:
                D.26444 = check_interface_method_override (class, im, cm, 0, 0, 1, security_enabled);
                if (D.26444 != 0) goto <D.26445>; else goto <D.26446>;
                <D.26445>:
                D.26419 = (long unsigned int) im_slot;
                D.26420 = D.26419 * 8;
                D.26421 = vtable + D.26420;
                *D.26421 = cm;
                D.26447 = cm->slot;
                if (D.26447 < 0) goto <D.26448>; else goto <D.26449>;
                <D.26448>:
                D.26431 = (short int) im_slot;
                cm->slot = D.26431;
                <D.26449>:
                goto <D.20557>;
                <D.26446>:
                <D.26443>:
                D.26334 = class->exception_type;
                if (D.26334 != 0) goto fail; else goto <D.26450>;
                <D.26450>:
              }
              cm_index = cm_index + -1;
              <D.20559>:
              if (cm_index >= 0) goto <D.20558>; else goto <D.20557>;
              <D.20557>:
            }
            <D.26436>:
            <D.26434>:
          }
          goto <D.26451>;
          <D.26418>:
          D.26419 = (long unsigned int) im_slot;
          D.26420 = D.26419 * 8;
          D.26421 = vtable + D.26420;
          D.26422 = *D.26421;
          D.26452 = D.26422 != override_im;
          D.26453 = (long int) D.26452;
          D.26454 = __builtin_expect (D.26453, 0);
          if (D.26454 != 0) goto <D.26455>; else goto <D.26456>;
          <D.26455>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4399, "vtable [im_slot] == override_im");
          <D.26456>:
          <D.26451>:
        }
        <D.20548>:
        im_index = im_index + 1;
        <D.20561>:
        im_index.155 = (unsigned int) im_index;
        D.26458 = ic->method.count;
        if (im_index.155 < D.26458) goto <D.20560>; else goto <D.20562>;
        <D.20562>:
      }
      i = i + 1;
      <D.20564>:
      D.26459 = class->interface_offsets_count;
      D.26460 = (int) D.26459;
      if (D.26460 > i) goto <D.20563>; else goto <D.20565>;
      <D.20565>:
      D.26461 = class->flags;
      D.26462 = D.26461 & 128;
      if (D.26462 == 0) goto <D.26463>; else goto <D.26464>;
      <D.26463>:
      i = 0;
      goto <D.20575>;
      <D.20574>:
      {
        int ic_offset;
        int im_index;

        D.26386 = class->interfaces_packed;
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26387 = D.26386 + D.26245;
        ic = *D.26387;
        ic_offset = mono_class_interface_offset (class, ic);
        im_index = 0;
        goto <D.20572>;
        <D.20571>:
        {
          struct MonoMethod * im;
          int im_slot;

          D.26402 = ic->methods;
          D.26465 = (long unsigned int) im_index;
          D.26466 = D.26465 * 8;
          D.26467 = D.26402 + D.26466;
          im = *D.26467;
          D.26468 = im->slot;
          D.26469 = (int) D.26468;
          im_slot = D.26469 + ic_offset;
          D.26470 = im->flags;
          D.26471 = (int) D.26470;
          D.26472 = D.26471 & 16;
          if (D.26472 != 0) goto <D.26473>; else goto <D.26474>;
          <D.26473>:
          // predicted unlikely by continue predictor.
          goto <D.20570>;
          <D.26474>:
          D.26475 = (long unsigned int) im_slot;
          D.26476 = D.26475 * 8;
          D.26477 = vtable + D.26476;
          D.26478 = *D.26477;
          if (D.26478 == 0B) goto <D.26479>; else goto <D.26480>;
          <D.26479>:
          print_unimplemented_interface_method_info (class, ic, im, im_slot, overrides, onum);
          goto fail;
          <D.26480>:
        }
        <D.20570>:
        im_index = im_index + 1;
        <D.20572>:
        im_index.156 = (unsigned int) im_index;
        D.26458 = ic->method.count;
        if (im_index.156 < D.26458) goto <D.20571>; else goto <D.20573>;
        <D.20573>:
      }
      i = i + 1;
      <D.20575>:
      D.26459 = class->interface_offsets_count;
      D.26460 = (int) D.26459;
      if (D.26460 > i) goto <D.20574>; else goto <D.20576>;
      <D.20576>:
      <D.26464>:
      class_iter = 0B;
      l = virt_methods;
      goto <D.20600>;
      <D.20599>:
      cm = l->data;
      D.26482 = cm->flags;
      D.26483 = (int) D.26482;
      D.26484 = D.26483 & 256;
      if (D.26484 == 0) goto <D.26485>; else goto <D.26486>;
      <D.26485>:
      {
        int slot;

        slot = -1;
        k = class->parent;
        goto <D.20598>;
        <D.20597>:
        {
          void * k_iter;
          struct MonoMethod * m1;

          try
            {
              k_iter = 0B;
              goto <D.20595>;
              <D.20594>:
              {
                struct MonoMethodSignature * cmsig;
                struct MonoMethodSignature * m1sig;

                cmsig = mono_method_signature (cm);
                m1sig = mono_method_signature (m1);
                if (cmsig == 0B) goto <D.26487>; else goto <D.26489>;
                <D.26489>:
                if (m1sig == 0B) goto <D.26487>; else goto <D.26488>;
                <D.26487>:
                mono_class_set_failure (class, 7, 0B);
                return;
                <D.26488>:
                {
                  size_t __s1_len;
                  size_t __s2_len;

                  D.26490 = cm->name;
                  D.26491 = m1->name;
                  D.20590 = __builtin_strcmp (D.26490, D.26491);
                }
                if (D.20590 == 0) goto <D.26492>; else goto <D.26493>;
                <D.26492>:
                D.26494 = mono_metadata_signature_equal (cmsig, m1sig);
                if (D.26494 != 0) goto <D.26495>; else goto <D.26496>;
                <D.26495>:
                if (security_enabled != 0) goto <D.26497>; else goto <D.26498>;
                <D.26497>:
                D.26499 = m1->flags;
                D.26500 = (int) D.26499;
                D.26501 = D.26500 & 16384;
                if (D.26501 != 0) goto <D.26502>; else goto <D.26503>;
                <D.26502>:
                mono_secman_inheritancedemand_method (cm, m1);
                <D.26503>:
                <D.26498>:
                D.26504 = mono_security_get_mode ();
                if (D.26504 == 1) goto <D.26505>; else goto <D.26506>;
                <D.26505>:
                mono_security_core_clr_check_override (class, cm, m1);
                <D.26506>:
                slot = mono_method_get_vtable_slot (m1);
                if (slot == -1) goto fail; else goto <D.26507>;
                <D.26507>:
                D.26508 = is_wcf_hack_disabled ();
                if (D.26508 != 0) goto <D.26509>; else goto <D.26510>;
                <D.26509>:
                D.26511 = mono_method_can_access_method_full (cm, m1, 0B);
                if (D.26511 == 0) goto <D.26512>; else goto <D.26513>;
                <D.26512>:
                {
                  char * body_name;
                  char * decl_name;

                  body_name = mono_method_full_name (cm, 1);
                  decl_name = mono_method_full_name (m1, 1);
                  D.26514 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
                  mono_class_set_failure (class, 7, D.26514);
                  monoeg_g_free (body_name);
                  monoeg_g_free (decl_name);
                  goto fail;
                }
                <D.26513>:
                <D.26510>:
                D.26515 = cm->slot;
                D.26516 = (int) D.26515;
                D.26517 = D.26516 >= max_vtsize;
                D.26518 = (long int) D.26517;
                D.26519 = __builtin_expect (D.26518, 0);
                if (D.26519 != 0) goto <D.26520>; else goto <D.26521>;
                <D.26520>:
                monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4484, "cm->slot < max_vtsize");
                <D.26521>:
                if (override_map == 0B) goto <D.26522>; else goto <D.26523>;
                <D.26522>:
                override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
                <D.26523>:
                monoeg_g_hash_table_insert_replace (override_map, m1, cm, 0);
                goto <D.20593>;
                <D.26496>:
                <D.26493>:
              }
              <D.20595>:
              m1 = mono_class_get_virtual_methods (k, &k_iter);
              if (m1 != 0B) goto <D.20594>; else goto <D.20593>;
              <D.20593>:
              D.26524 = k->exception_type;
              if (D.26524 != 0) goto fail; else goto <D.26525>;
              <D.26525>:
              if (slot >= 0) goto <D.20596>; else goto <D.26526>;
              <D.26526>:
            }
          finally
            {
              k_iter = {CLOBBER};
            }
        }
        k = k->parent;
        <D.20598>:
        if (k != 0B) goto <D.20597>; else goto <D.20596>;
        <D.20596>:
        if (slot >= 0) goto <D.26527>; else goto <D.26528>;
        <D.26527>:
        D.26529 = (short int) slot;
        cm->slot = D.26529;
        <D.26528>:
      }
      <D.26486>:
      D.26482 = cm->flags;
      D.26530 = (unsigned int) D.26482;
      D.26531 = D.26530 & 288;
      if (D.26531 == 256) goto <D.26532>; else goto <D.26533>;
      <D.26532>:
      D.26515 = cm->slot;
      if (D.26515 >= 0) goto <D.26534>; else goto <D.26535>;
      <D.26534>:
      cm->slot = -1;
      <D.26535>:
      <D.26533>:
      D.26515 = cm->slot;
      if (D.26515 < 0) goto <D.26536>; else goto <D.26537>;
      <D.26536>:
      cur_slot.157 = cur_slot;
      cur_slot = cur_slot.157 + 1;
      D.26539 = (short int) cur_slot.157;
      cm->slot = D.26539;
      <D.26537>:
      D.26482 = cm->flags;
      D.26483 = (int) D.26482;
      D.26540 = D.26483 & 1024;
      if (D.26540 == 0) goto <D.26541>; else goto <D.26542>;
      <D.26541>:
      D.26515 = cm->slot;
      D.26543 = (long unsigned int) D.26515;
      D.26544 = D.26543 * 8;
      D.26545 = vtable + D.26544;
      *D.26545 = cm;
      <D.26542>:
      l = l->next;
      <D.20600>:
      if (l != 0B) goto <D.20599>; else goto <D.20601>;
      <D.20601>:
      i = 0;
      goto <D.20604>;
      <D.20603>:
      {
        struct MonoMethod * decl;

        D.26354 = i * 2;
        D.26355 = (long unsigned int) D.26354;
        D.26356 = D.26355 * 8;
        D.26357 = overrides + D.26356;
        decl = *D.26357;
        D.26546 = decl->klass;
        D.26547 = D.26546->flags;
        D.26548 = D.26547 & 32;
        if (D.26548 == 0) goto <D.26549>; else goto <D.26550>;
        <D.26549>:
        D.26546 = decl->klass;
        D.26551 = D.26546->byval_arg.type;
        if (D.26551 != 19) goto <D.26552>; else goto <D.26553>;
        <D.26552>:
        D.26546 = decl->klass;
        D.26551 = D.26546->byval_arg.type;
        if (D.26551 != 30) goto <D.26554>; else goto <D.26555>;
        <D.26554>:
        D.26556 = decl->slot;
        D.26557 = D.26556 == -1;
        D.26558 = (long int) D.26557;
        D.26559 = __builtin_expect (D.26558, 0);
        if (D.26559 != 0) goto <D.26560>; else goto <D.26561>;
        <D.26560>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4519, "decl->slot != -1");
        <D.26561>:
        D.26556 = decl->slot;
        D.26562 = (long unsigned int) D.26556;
        D.26563 = D.26562 * 8;
        D.26564 = vtable + D.26563;
        D.26354 = i * 2;
        D.26372 = (sizetype) D.26354;
        D.26373 = D.26372 + 1;
        D.26374 = D.26373 * 8;
        D.26375 = overrides + D.26374;
        D.26376 = *D.26375;
        *D.26564 = D.26376;
        D.26354 = i * 2;
        D.26372 = (sizetype) D.26354;
        D.26373 = D.26372 + 1;
        D.26374 = D.26373 * 8;
        D.26375 = overrides + D.26374;
        D.26376 = *D.26375;
        D.26556 = decl->slot;
        D.26376->slot = D.26556;
        if (override_map == 0B) goto <D.26565>; else goto <D.26566>;
        <D.26565>:
        override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
        <D.26566>:
        D.26354 = i * 2;
        D.26372 = (sizetype) D.26354;
        D.26373 = D.26372 + 1;
        D.26374 = D.26373 * 8;
        D.26375 = overrides + D.26374;
        D.26376 = *D.26375;
        monoeg_g_hash_table_insert_replace (override_map, decl, D.26376, 0);
        D.26567 = mono_security_get_mode ();
        if (D.26567 == 1) goto <D.26568>; else goto <D.26569>;
        <D.26568>:
        D.26556 = decl->slot;
        D.26562 = (long unsigned int) D.26556;
        D.26563 = D.26562 * 8;
        D.26564 = vtable + D.26563;
        D.26570 = *D.26564;
        mono_security_core_clr_check_override (class, D.26570, decl);
        <D.26569>:
        <D.26555>:
        <D.26553>:
        <D.26550>:
      }
      i = i + 1;
      <D.20604>:
      if (i < onum) goto <D.20603>; else goto <D.20605>;
      <D.20605>:
      if (override_map != 0B) goto <D.26571>; else goto <D.26572>;
      <D.26571>:
      {
        struct MonoMethod * cm;

        i = 0;
        goto <D.20608>;
        <D.20607>:
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26573 = vtable + D.26245;
        D.26574 = *D.26573;
        if (D.26574 != 0B) goto <D.26575>; else goto <D.26576>;
        <D.26575>:
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26573 = vtable + D.26245;
        D.26574 = *D.26573;
        cm = monoeg_g_hash_table_lookup (override_map, D.26574);
        if (cm != 0B) goto <D.26577>; else goto <D.26578>;
        <D.26577>:
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26573 = vtable + D.26245;
        *D.26573 = cm;
        <D.26578>:
        <D.26576>:
        i = i + 1;
        <D.20608>:
        if (i < max_vtsize) goto <D.20607>; else goto <D.20609>;
        <D.20609>:
        monoeg_g_hash_table_destroy (override_map);
        override_map = 0B;
      }
      <D.26572>:
      monoeg_g_slist_free (virt_methods);
      virt_methods = 0B;
      D.26461 = class->flags;
      D.26462 = D.26461 & 128;
      if (D.26462 == 0) goto <D.26579>; else goto <D.26580>;
      <D.26579>:
      i = 0;
      goto <D.20613>;
      <D.20612>:
      D.26244 = (long unsigned int) i;
      D.26245 = D.26244 * 8;
      D.26573 = vtable + D.26245;
      D.26574 = *D.26573;
      if (D.26574 == 0B) goto <D.26581>; else goto <D.26583>;
      <D.26583>:
      D.26244 = (long unsigned int) i;
      D.26245 = D.26244 * 8;
      D.26573 = vtable + D.26245;
      D.26574 = *D.26573;
      D.26584 = D.26574->flags;
      D.26585 = (int) D.26584;
      D.26586 = D.26585 & 1040;
      if (D.26586 != 0) goto <D.26581>; else goto <D.26582>;
      <D.26581>:
      {
        char * type_name;
        char * method_name;

        type_name = mono_type_get_full_name (class);
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26573 = vtable + D.26245;
        D.26574 = *D.26573;
        if (D.26574 != 0B) goto <D.26588>; else goto <D.26589>;
        <D.26588>:
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26573 = vtable + D.26245;
        D.26574 = *D.26573;
        iftmp.158 = mono_method_full_name (D.26574, 1);
        goto <D.26590>;
        <D.26589>:
        iftmp.158 = monoeg_strdup ("none");
        <D.26590>:
        method_name = iftmp.158;
        D.26591 = monoeg_g_strdup_printf ("Type %s has invalid vtable method slot %d with method %s", type_name, i, method_name);
        mono_class_set_failure (class, 7, D.26591);
        monoeg_g_free (type_name);
        monoeg_g_free (method_name);
        return;
      }
      <D.26582>:
      i = i + 1;
      <D.20613>:
      if (i < cur_slot) goto <D.20612>; else goto <D.20614>;
      <D.20614>:
      <D.26580>:
      D.26270 = class->generic_class;
      if (D.26270 != 0B) goto <D.26592>; else goto <D.26593>;
      <D.26592>:
      {
        struct MonoClass * gklass;

        D.26270 = class->generic_class;
        gklass = D.26270->container_class;
        mono_class_init (gklass);
        D.26594 = gklass->vtable_size;
        D.26595 = MAX_EXPR <D.26594, cur_slot>;
        class->vtable_size = D.26595;
      }
      goto <D.26596>;
      <D.26593>:
      D.26597 = class->vtable_size;
      if (D.26597 != 0) goto <D.26598>; else goto <D.26599>;
      <D.26598>:
      D.26597 = class->vtable_size;
      D.26600 = D.26597 != cur_slot;
      D.26601 = (long int) D.26600;
      D.26602 = __builtin_expect (D.26601, 0);
      if (D.26602 != 0) goto <D.26603>; else goto <D.26604>;
      <D.26603>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4580, "cur_slot == class->vtable_size");
      <D.26604>:
      <D.26599>:
      class->vtable_size = cur_slot;
      <D.26596>:
      D.26252 = class->parent;
      if (D.26252 != 0B) goto <D.26607>; else goto <D.26605>;
      <D.26607>:
      D.26252 = class->parent;
      D.26259 = D.26252->vtable_size;
      D.26597 = class->vtable_size;
      if (D.26259 == D.26597) goto <D.26608>; else goto <D.26605>;
      <D.26608>:
      D.26252 = class->parent;
      D.26609 = D.26252->vtable;
      D.26597 = class->vtable_size;
      D.26610 = (long unsigned int) D.26597;
      D.26611 = D.26610 * 8;
      D.26612 = memcmp (D.26609, vtable, D.26611);
      if (D.26612 == 0) goto <D.26613>; else goto <D.26605>;
      <D.26613>:
      mono_memory_barrier ();
      D.26252 = class->parent;
      D.26609 = D.26252->vtable;
      class->vtable = D.26609;
      goto <D.26606>;
      <D.26605>:
      {
        struct MonoMethod * * tmp;

        D.26597 = class->vtable_size;
        D.26614 = (unsigned int) D.26597;
        D.26615 = D.26614 * 8;
        D.26616 = (int) D.26615;
        tmp = mono_class_alloc0 (class, D.26616);
        D.26597 = class->vtable_size;
        D.26610 = (long unsigned int) D.26597;
        D.26611 = D.26610 * 8;
        memcpy (tmp, vtable, D.26611);
        mono_memory_barrier ();
        class->vtable = tmp;
      }
      <D.26606>:
      mono_print_vtable.159 = mono_print_vtable;
      if (mono_print_vtable.159 != 0) goto <D.26618>; else goto <D.26619>;
      <D.26618>:
      {
        int icount;

        icount = 0;
        print_implemented_interfaces (class);
        i = 0;
        goto <D.20619>;
        <D.20618>:
        D.26269 = class->max_interface_id;
        D.26620 = (int) D.26269;
        if (D.26620 >= i) goto <D.26621>; else goto <D.26622>;
        <D.26621>:
        D.26623 = class->interface_bitmap;
        D.26624 = i >> 3;
        D.26625 = (sizetype) D.26624;
        D.26626 = D.26623 + D.26625;
        D.26627 = *D.26626;
        D.26628 = (int) D.26627;
        D.26629 = i & 7;
        D.26630 = D.26628 >> D.26629;
        D.26631 = D.26630 & 1;
        if (D.26631 != 0) goto <D.26632>; else goto <D.26633>;
        <D.26632>:
        icount = icount + 1;
        <D.26633>:
        <D.26622>:
        i = i + 1;
        <D.20619>:
        if (i <= max_iid) goto <D.20618>; else goto <D.20620>;
        <D.20620>:
        D.26634 = &class->byval_arg;
        D.26635 = mono_type_full_name (D.26634);
        D.26597 = class->vtable_size;
        printf ("VTable %s (vtable entries = %d, interfaces = %d)\n", D.26635, D.26597, icount);
        i = 0;
        goto <D.20623>;
        <D.20622>:
        {
          struct MonoMethod * cm;

          D.26244 = (long unsigned int) i;
          D.26245 = D.26244 * 8;
          D.26573 = vtable + D.26245;
          cm = *D.26573;
          if (cm != 0B) goto <D.26636>; else goto <D.26637>;
          <D.26636>:
          D.26638 = cm->slot;
          D.26639 = (int) D.26638;
          D.26640 = mono_method_full_name (cm, 1);
          printf ("  slot assigned: %03d, slot index: %03d %s\n", i, D.26639, D.26640);
          <D.26637>:
        }
        i = i + 1;
        <D.20623>:
        if (i < cur_slot) goto <D.20622>; else goto <D.20624>;
        <D.20624>:
        if (icount != 0) goto <D.26641>; else goto <D.26642>;
        <D.26641>:
        D.26643 = class->name_space;
        D.26644 = class->name;
        printf ("Interfaces %s.%s (max_iid = %d)\n", D.26643, D.26644, max_iid);
        i = 0;
        goto <D.20626>;
        <D.20625>:
        D.26392 = class->interfaces;
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26645 = D.26392 + D.26245;
        ic = *D.26645;
        D.26646 = mono_class_interface_offset (class, ic);
        D.26647 = count_virtual_methods (ic);
        D.26648 = ic->interface_id;
        D.26649 = (int) D.26648;
        D.26650 = &ic->byval_arg;
        D.26651 = mono_type_full_name (D.26650);
        printf ("  slot offset: %03d, method count: %03d, iid: %03d %s\n", D.26646, D.26647, D.26649, D.26651);
        i = i + 1;
        <D.20626>:
        D.26399 = class->interface_count;
        D.26400 = (int) D.26399;
        if (D.26400 > i) goto <D.20625>; else goto <D.20627>;
        <D.20627>:
        k = class->parent;
        goto <D.20632>;
        <D.20631>:
        i = 0;
        goto <D.20629>;
        <D.20628>:
        D.26652 = k->interfaces;
        D.26244 = (long unsigned int) i;
        D.26245 = D.26244 * 8;
        D.26653 = D.26652 + D.26245;
        ic = *D.26653;
        D.26654 = mono_class_interface_offset (class, ic);
        D.26655 = count_virtual_methods (ic);
        D.26648 = ic->interface_id;
        D.26649 = (int) D.26648;
        D.26650 = &ic->byval_arg;
        D.26656 = mono_type_full_name (D.26650);
        printf ("  parent slot offset: %03d, method count: %03d, iid: %03d %s\n", D.26654, D.26655, D.26649, D.26656);
        i = i + 1;
        <D.20629>:
        D.26657 = k->interface_count;
        D.26658 = (int) D.26657;
        if (D.26658 > i) goto <D.20628>; else goto <D.20630>;
        <D.20630>:
        k = k->parent;
        <D.20632>:
        if (k != 0B) goto <D.20631>; else goto <D.20633>;
        <D.20633>:
        <D.26642>:
      }
      <D.26619>:
      return;
      fail:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.26659 = monoeg_g_strdup_printf ("VTable setup of type %s failed", name);
        mono_class_set_failure (class, 7, D.26659);
        monoeg_g_free (name);
        if (override_map != 0B) goto <D.26660>; else goto <D.26661>;
        <D.26660>:
        monoeg_g_hash_table_destroy (override_map);
        <D.26661>:
        if (virt_methods != 0B) goto <D.26662>; else goto <D.26663>;
        <D.26662>:
        monoeg_g_slist_free (virt_methods);
        <D.26663>:
      }
    }
  finally
    {
      error = {CLOBBER};
    }
}


verify_class_overrides (struct MonoClass * class, struct MonoMethod * * overrides, int onum)
{
  int D.26674;
  long unsigned int D.26675;
  long unsigned int D.26676;
  struct MonoMethod * * D.26677;
  sizetype D.26678;
  sizetype D.26679;
  sizetype D.26680;
  struct MonoMethod * * D.26681;
  struct MonoClass * D.26682;
  struct MonoClass * D.26683;
  struct MonoClass * D.26684;
  gchar * D.26687;
  gboolean D.26688;
  short unsigned int D.26689;
  unsigned int D.26690;
  unsigned int D.26691;
  int D.26694;
  int D.26695;
  gchar * D.26698;
  gchar * D.26700;
  short unsigned int D.26701;
  unsigned int D.26702;
  unsigned int D.26703;
  gchar * D.26708;
  gchar * D.26710;
  struct MonoClass * D.26711;
  int D.26712;
  gchar * D.26715;
  int D.26716;
  int D.26719;
  gchar * D.26722;
  int i;

  i = 0;
  goto <D.20469>;
  <D.20468>:
  {
    struct MonoMethod * decl;
    struct MonoMethod * body;

    D.26674 = i * 2;
    D.26675 = (long unsigned int) D.26674;
    D.26676 = D.26675 * 8;
    D.26677 = overrides + D.26676;
    decl = *D.26677;
    D.26674 = i * 2;
    D.26678 = (sizetype) D.26674;
    D.26679 = D.26678 + 1;
    D.26680 = D.26679 * 8;
    D.26681 = overrides + D.26680;
    body = *D.26681;
    D.26682 = body->klass;
    D.26683 = mono_class_get_generic_type_definition (D.26682);
    D.26684 = mono_class_get_generic_type_definition (class);
    if (D.26683 != D.26684) goto <D.26685>; else goto <D.26686>;
    <D.26685>:
    D.26687 = monoeg_strdup ("Method belongs to a different class than the declared one");
    mono_class_set_failure (class, 7, D.26687);
    D.26688 = 0;
    return D.26688;
    <D.26686>:
    D.26689 = body->flags;
    D.26690 = (unsigned int) D.26689;
    D.26691 = D.26690 & 80;
    if (D.26691 != 64) goto <D.26692>; else goto <D.26693>;
    <D.26692>:
    D.26689 = body->flags;
    D.26694 = (int) D.26689;
    D.26695 = D.26694 & 16;
    if (D.26695 != 0) goto <D.26696>; else goto <D.26697>;
    <D.26696>:
    D.26698 = monoeg_strdup ("Method must not be static to override a base type");
    mono_class_set_failure (class, 7, D.26698);
    goto <D.26699>;
    <D.26697>:
    D.26700 = monoeg_strdup ("Method must be virtual to override a base type");
    mono_class_set_failure (class, 7, D.26700);
    <D.26699>:
    D.26688 = 0;
    return D.26688;
    <D.26693>:
    D.26701 = decl->flags;
    D.26702 = (unsigned int) D.26701;
    D.26703 = D.26702 & 80;
    if (D.26703 != 64) goto <D.26704>; else goto <D.26705>;
    <D.26704>:
    D.26689 = body->flags;
    D.26694 = (int) D.26689;
    D.26695 = D.26694 & 16;
    if (D.26695 != 0) goto <D.26706>; else goto <D.26707>;
    <D.26706>:
    D.26708 = monoeg_strdup ("Cannot override a static method in a base type");
    mono_class_set_failure (class, 7, D.26708);
    goto <D.26709>;
    <D.26707>:
    D.26710 = monoeg_strdup ("Cannot override a non virtual method in a base type");
    mono_class_set_failure (class, 7, D.26710);
    <D.26709>:
    D.26688 = 0;
    return D.26688;
    <D.26705>:
    D.26711 = decl->klass;
    D.26712 = mono_class_is_assignable_from_slow (D.26711, class);
    if (D.26712 == 0) goto <D.26713>; else goto <D.26714>;
    <D.26713>:
    D.26715 = monoeg_strdup ("Method overrides a class or interface that extended or implemented by this type");
    mono_class_set_failure (class, 7, D.26715);
    D.26688 = 0;
    return D.26688;
    <D.26714>:
    body = mono_method_get_method_definition (body);
    decl = mono_method_get_method_definition (decl);
    D.26716 = is_wcf_hack_disabled ();
    if (D.26716 != 0) goto <D.26717>; else goto <D.26718>;
    <D.26717>:
    D.26719 = mono_method_can_access_method_full (body, decl, 0B);
    if (D.26719 == 0) goto <D.26720>; else goto <D.26721>;
    <D.26720>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (body, 1);
      decl_name = mono_method_full_name (decl, 1);
      D.26722 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.26722);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.26688 = 0;
      return D.26688;
    }
    <D.26721>:
    <D.26718>:
  }
  i = i + 1;
  <D.20469>:
  if (i < onum) goto <D.20468>; else goto <D.20470>;
  <D.20470>:
  D.26688 = 1;
  return D.26688;
}


mono_method_get_method_definition (struct MonoMethod * method)
{
  long unsigned int D.26724;
  long unsigned int D.26725;
  struct MonoMethod * D.26726;

  goto <D.20456>;
  <D.20455>:
  method = MEM[(struct MonoMethodInflated *)method].declaring;
  <D.20456>:
  D.26724 = BIT_FIELD_REF <*method, 64, 256>;
  D.26725 = D.26724 & 4096;
  if (D.26725 != 0) goto <D.20455>; else goto <D.20457>;
  <D.20457>:
  D.26726 = method;
  return D.26726;
}


mono_class_need_stelemref_method (struct MonoClass * class)
{
  gboolean D.26728;
  int iftmp.160;
  unsigned char D.26732;
  struct MonoClass * D.26734;
  struct MonoType * D.26735;
  int D.26736;

  D.26732 = class->rank;
  if (D.26732 == 1) goto <D.26733>; else goto <D.26730>;
  <D.26733>:
  D.26734 = class->element_class;
  D.26735 = &D.26734->byval_arg;
  D.26736 = mono_type_is_reference (D.26735);
  if (D.26736 != 0) goto <D.26737>; else goto <D.26730>;
  <D.26737>:
  iftmp.160 = 1;
  goto <D.26731>;
  <D.26730>:
  iftmp.160 = 0;
  <D.26731>:
  D.26728 = iftmp.160;
  return D.26728;
}


check_interface_method_override (struct MonoClass * class, struct MonoMethod * im, struct MonoMethod * cm, gboolean require_newslot, gboolean interface_is_explicitly_implemented_by_class, gboolean slot_is_empty, gboolean security_enabled)
{
  int D.20361;
  const char * D.26739;
  const char * D.26740;
  short unsigned int D.26743;
  int D.26744;
  int D.26745;
  gboolean D.26748;
  int D.26755;
  gchar * D.26762;
  int D.26763;
  short unsigned int D.26768;
  int D.26769;
  int D.26770;
  <unnamed type> D.26773;
  int D.26776;
  int D.26779;
  gchar * D.26782;
  struct MonoClass * D.26785;
  unsigned char D.26786;
  gchar * D.26792;
  int D.26793;
  struct MonoImage * D.26796;
  struct MonoImage * D.26797;
  int D.20376;
  int iftmp.161;
  int D.20375;
  const char[27] * D.26806;
  unsigned char D.26807;
  int D.26808;
  unsigned char D.26809;
  int D.26810;
  const unsigned char * D.26815;
  unsigned char D.26816;
  int D.26817;
  const unsigned char * D.26818;
  unsigned char D.26819;
  int D.26820;
  const unsigned char * D.26825;
  unsigned char D.26826;
  int D.26827;
  const unsigned char * D.26828;
  unsigned char D.26829;
  int D.26830;
  const unsigned char * D.26835;
  unsigned char D.26836;
  int D.26837;
  const unsigned char * D.26838;
  unsigned char D.26839;
  int D.26840;
  int D.20385;
  int iftmp.162;
  int D.20384;
  const char[14] * D.26848;
  unsigned char D.26849;
  int D.26850;
  unsigned char D.26851;
  int D.26852;
  const unsigned char * D.26857;
  unsigned char D.26858;
  int D.26859;
  const unsigned char * D.26860;
  unsigned char D.26861;
  int D.26862;
  const unsigned char * D.26867;
  unsigned char D.26868;
  int D.26869;
  const unsigned char * D.26870;
  unsigned char D.26871;
  int D.26872;
  const unsigned char * D.26877;
  unsigned char D.26878;
  int D.26879;
  const unsigned char * D.26880;
  unsigned char D.26881;
  int D.26882;
  int D.20394;
  int iftmp.163;
  int D.20393;
  const char[14] * D.26888;
  unsigned char D.26889;
  int D.26890;
  unsigned char D.26891;
  int D.26892;
  const unsigned char * D.26897;
  unsigned char D.26898;
  int D.26899;
  const unsigned char * D.26900;
  unsigned char D.26901;
  int D.26902;
  const unsigned char * D.26907;
  unsigned char D.26908;
  int D.26909;
  const unsigned char * D.26910;
  unsigned char D.26911;
  int D.26912;
  const unsigned char * D.26917;
  unsigned char D.26918;
  int D.26919;
  const unsigned char * D.26920;
  unsigned char D.26921;
  int D.26922;
  int D.20403;
  int iftmp.164;
  int D.20402;
  const char[8] * D.26928;
  unsigned char D.26929;
  int D.26930;
  unsigned char D.26931;
  int D.26932;
  const unsigned char * D.26937;
  unsigned char D.26938;
  int D.26939;
  const unsigned char * D.26940;
  unsigned char D.26941;
  int D.26942;
  const unsigned char * D.26947;
  unsigned char D.26948;
  int D.26949;
  const unsigned char * D.26950;
  unsigned char D.26951;
  int D.26952;
  const unsigned char * D.26957;
  unsigned char D.26958;
  int D.26959;
  const unsigned char * D.26960;
  unsigned char D.26961;
  int D.26962;
  int D.20412;
  int iftmp.165;
  int D.20411;
  const char[16] * D.26968;
  unsigned char D.26969;
  int D.26970;
  unsigned char D.26971;
  int D.26972;
  const unsigned char * D.26977;
  unsigned char D.26978;
  int D.26979;
  const unsigned char * D.26980;
  unsigned char D.26981;
  int D.26982;
  const unsigned char * D.26987;
  unsigned char D.26988;
  int D.26989;
  const unsigned char * D.26990;
  unsigned char D.26991;
  int D.26992;
  const unsigned char * D.26997;
  unsigned char D.26998;
  int D.26999;
  const unsigned char * D.27000;
  unsigned char D.27001;
  int D.27002;
  int D.20421;
  int iftmp.166;
  int D.20420;
  const char[22] * D.27008;
  unsigned char D.27009;
  int D.27010;
  unsigned char D.27011;
  int D.27012;
  const unsigned char * D.27017;
  unsigned char D.27018;
  int D.27019;
  const unsigned char * D.27020;
  unsigned char D.27021;
  int D.27022;
  const unsigned char * D.27027;
  unsigned char D.27028;
  int D.27029;
  const unsigned char * D.27030;
  unsigned char D.27031;
  int D.27032;
  const unsigned char * D.27037;
  unsigned char D.27038;
  int D.27039;
  const unsigned char * D.27040;
  unsigned char D.27041;
  int D.27042;
  long unsigned int D.27046;
  char D.27047;
  char * D.27050;
  long unsigned int D.27053;
  int D.20430;
  <unnamed type> D.27062;
  int D.27065;
  int D.27068;
  gchar * D.27071;
  struct MonoMethodSignature * cmsig;
  struct MonoMethodSignature * imsig;

  {
    size_t __s1_len;
    size_t __s2_len;

    D.26739 = im->name;
    D.26740 = cm->name;
    D.20361 = __builtin_strcmp (D.26739, D.26740);
  }
  if (D.20361 == 0) goto <D.26741>; else goto <D.26742>;
  <D.26741>:
  D.26743 = cm->flags;
  D.26744 = (int) D.26743;
  D.26745 = D.26744 & 6;
  if (D.26745 == 0) goto <D.26746>; else goto <D.26747>;
  <D.26746>:
  D.26748 = 0;
  return D.26748;
  <D.26747>:
  if (slot_is_empty == 0) goto <D.26749>; else goto <D.26750>;
  <D.26749>:
  if (require_newslot != 0) goto <D.26751>; else goto <D.26752>;
  <D.26751>:
  if (interface_is_explicitly_implemented_by_class == 0) goto <D.26753>; else goto <D.26754>;
  <D.26753>:
  D.26748 = 0;
  return D.26748;
  <D.26754>:
  D.26743 = cm->flags;
  D.26744 = (int) D.26743;
  D.26755 = D.26744 & 256;
  if (D.26755 == 0) goto <D.26756>; else goto <D.26757>;
  <D.26756>:
  D.26748 = 0;
  return D.26748;
  <D.26757>:
  goto <D.26758>;
  <D.26752>:
  <D.26758>:
  <D.26750>:
  cmsig = mono_method_signature (cm);
  imsig = mono_method_signature (im);
  if (cmsig == 0B) goto <D.26759>; else goto <D.26761>;
  <D.26761>:
  if (imsig == 0B) goto <D.26759>; else goto <D.26760>;
  <D.26759>:
  D.26762 = monoeg_strdup ("Could not resolve the signature of a virtual method");
  mono_class_set_failure (class, 7, D.26762);
  D.26748 = 0;
  return D.26748;
  <D.26760>:
  D.26763 = mono_metadata_signature_equal (cmsig, imsig);
  if (D.26763 == 0) goto <D.26764>; else goto <D.26765>;
  <D.26764>:
  D.26748 = 0;
  return D.26748;
  <D.26765>:
  if (security_enabled != 0) goto <D.26766>; else goto <D.26767>;
  <D.26766>:
  D.26768 = im->flags;
  D.26769 = (int) D.26768;
  D.26770 = D.26769 & 16384;
  if (D.26770 != 0) goto <D.26771>; else goto <D.26772>;
  <D.26771>:
  mono_secman_inheritancedemand_method (cm, im);
  <D.26772>:
  <D.26767>:
  D.26773 = mono_security_get_mode ();
  if (D.26773 == 1) goto <D.26774>; else goto <D.26775>;
  <D.26774>:
  mono_security_core_clr_check_override (class, cm, im);
  <D.26775>:
  D.26776 = is_wcf_hack_disabled ();
  if (D.26776 != 0) goto <D.26777>; else goto <D.26778>;
  <D.26777>:
  D.26779 = mono_method_can_access_method_full (cm, im, 0B);
  if (D.26779 == 0) goto <D.26780>; else goto <D.26781>;
  <D.26780>:
  {
    char * body_name;
    char * decl_name;

    body_name = mono_method_full_name (cm, 1);
    decl_name = mono_method_full_name (im, 1);
    D.26782 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
    mono_class_set_failure (class, 7, D.26782);
    monoeg_g_free (body_name);
    monoeg_g_free (decl_name);
    D.26748 = 0;
    return D.26748;
  }
  <D.26781>:
  <D.26778>:
  D.26748 = 1;
  return D.26748;
  <D.26742>:
  {
    struct MonoClass * ic;
    const char * ic_name_space;
    const char * ic_name;
    char * subname;

    ic = im->klass;
    ic_name_space = ic->name_space;
    ic_name = ic->name;
    if (require_newslot == 0) goto <D.26783>; else goto <D.26784>;
    <D.26783>:
    D.26748 = 0;
    return D.26748;
    <D.26784>:
    D.26785 = cm->klass;
    D.26786 = D.26785->rank;
    if (D.26786 == 0) goto <D.26787>; else goto <D.26788>;
    <D.26787>:
    D.26748 = 0;
    return D.26748;
    <D.26788>:
    cmsig = mono_method_signature (cm);
    imsig = mono_method_signature (im);
    if (cmsig == 0B) goto <D.26789>; else goto <D.26791>;
    <D.26791>:
    if (imsig == 0B) goto <D.26789>; else goto <D.26790>;
    <D.26789>:
    D.26792 = monoeg_strdup ("Could not resolve the signature of a virtual method");
    mono_class_set_failure (class, 7, D.26792);
    D.26748 = 0;
    return D.26748;
    <D.26790>:
    D.26793 = mono_metadata_signature_equal (cmsig, imsig);
    if (D.26793 == 0) goto <D.26794>; else goto <D.26795>;
    <D.26794>:
    D.26748 = 0;
    return D.26748;
    <D.26795>:
    D.26796 = mono_class_get_image (ic);
    D.26797 = mono_defaults.corlib;
    if (D.26796 != D.26797) goto <D.26798>; else goto <D.26799>;
    <D.26798>:
    D.26748 = 0;
    return D.26748;
    <D.26799>:
    if (ic_name_space == 0B) goto <D.26800>; else goto <D.26802>;
    <D.26802>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name_space;
        D.26806 = "System.Collections.Generic";
        D.26807 = MEM[(const unsigned char *)D.26806];
        D.26808 = (int) D.26807;
        D.26809 = *__s2;
        D.26810 = (int) D.26809;
        __result = D.26808 - D.26810;
        {
          if (__s2_len != 0) goto <D.26811>; else goto <D.26812>;
          <D.26811>:
          if (__result == 0) goto <D.26813>; else goto <D.26814>;
          <D.26813>:
          D.26815 = &MEM[(void *)"System.Collections.Generic" + 1B];
          D.26816 = *D.26815;
          D.26817 = (int) D.26816;
          D.26818 = __s2 + 1;
          D.26819 = *D.26818;
          D.26820 = (int) D.26819;
          __result = D.26817 - D.26820;
          if (__s2_len > 1) goto <D.26821>; else goto <D.26822>;
          <D.26821>:
          if (__result == 0) goto <D.26823>; else goto <D.26824>;
          <D.26823>:
          D.26825 = &MEM[(void *)"System.Collections.Generic" + 2B];
          D.26826 = *D.26825;
          D.26827 = (int) D.26826;
          D.26828 = __s2 + 2;
          D.26829 = *D.26828;
          D.26830 = (int) D.26829;
          __result = D.26827 - D.26830;
          if (__s2_len > 2) goto <D.26831>; else goto <D.26832>;
          <D.26831>:
          if (__result == 0) goto <D.26833>; else goto <D.26834>;
          <D.26833>:
          D.26835 = &MEM[(void *)"System.Collections.Generic" + 3B];
          D.26836 = *D.26835;
          D.26837 = (int) D.26836;
          D.26838 = __s2 + 3;
          D.26839 = *D.26838;
          D.26840 = (int) D.26839;
          __result = D.26837 - D.26840;
          <D.26834>:
          <D.26832>:
          <D.26824>:
          <D.26822>:
          <D.26814>:
          <D.26812>:
        }
        D.20375 = __result;
      }
      iftmp.161 = -D.20375;
      goto <D.26841>;
      <D.26805>:
      iftmp.161 = __builtin_strcmp (ic_name_space, "System.Collections.Generic");
      <D.26841>:
      D.20376 = iftmp.161;
    }
    if (D.20376 != 0) goto <D.26800>; else goto <D.26801>;
    <D.26800>:
    D.26748 = 0;
    return D.26748;
    <D.26801>:
    if (ic_name == 0B) goto <D.26842>; else goto <D.26844>;
    <D.26844>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26848 = "IEnumerable`1";
        D.26849 = MEM[(const unsigned char *)D.26848];
        D.26850 = (int) D.26849;
        D.26851 = *__s2;
        D.26852 = (int) D.26851;
        __result = D.26850 - D.26852;
        {
          if (__s2_len != 0) goto <D.26853>; else goto <D.26854>;
          <D.26853>:
          if (__result == 0) goto <D.26855>; else goto <D.26856>;
          <D.26855>:
          D.26857 = &MEM[(void *)"IEnumerable`1" + 1B];
          D.26858 = *D.26857;
          D.26859 = (int) D.26858;
          D.26860 = __s2 + 1;
          D.26861 = *D.26860;
          D.26862 = (int) D.26861;
          __result = D.26859 - D.26862;
          if (__s2_len > 1) goto <D.26863>; else goto <D.26864>;
          <D.26863>:
          if (__result == 0) goto <D.26865>; else goto <D.26866>;
          <D.26865>:
          D.26867 = &MEM[(void *)"IEnumerable`1" + 2B];
          D.26868 = *D.26867;
          D.26869 = (int) D.26868;
          D.26870 = __s2 + 2;
          D.26871 = *D.26870;
          D.26872 = (int) D.26871;
          __result = D.26869 - D.26872;
          if (__s2_len > 2) goto <D.26873>; else goto <D.26874>;
          <D.26873>:
          if (__result == 0) goto <D.26875>; else goto <D.26876>;
          <D.26875>:
          D.26877 = &MEM[(void *)"IEnumerable`1" + 3B];
          D.26878 = *D.26877;
          D.26879 = (int) D.26878;
          D.26880 = __s2 + 3;
          D.26881 = *D.26880;
          D.26882 = (int) D.26881;
          __result = D.26879 - D.26882;
          <D.26876>:
          <D.26874>:
          <D.26866>:
          <D.26864>:
          <D.26856>:
          <D.26854>:
        }
        D.20384 = __result;
      }
      iftmp.162 = -D.20384;
      goto <D.26883>;
      <D.26847>:
      iftmp.162 = __builtin_strcmp (ic_name, "IEnumerable`1");
      <D.26883>:
      D.20385 = iftmp.162;
    }
    if (D.20385 != 0) goto <D.26884>; else goto <D.26843>;
    <D.26884>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26888 = "ICollection`1";
        D.26889 = MEM[(const unsigned char *)D.26888];
        D.26890 = (int) D.26889;
        D.26891 = *__s2;
        D.26892 = (int) D.26891;
        __result = D.26890 - D.26892;
        {
          if (__s2_len != 0) goto <D.26893>; else goto <D.26894>;
          <D.26893>:
          if (__result == 0) goto <D.26895>; else goto <D.26896>;
          <D.26895>:
          D.26897 = &MEM[(void *)"ICollection`1" + 1B];
          D.26898 = *D.26897;
          D.26899 = (int) D.26898;
          D.26900 = __s2 + 1;
          D.26901 = *D.26900;
          D.26902 = (int) D.26901;
          __result = D.26899 - D.26902;
          if (__s2_len > 1) goto <D.26903>; else goto <D.26904>;
          <D.26903>:
          if (__result == 0) goto <D.26905>; else goto <D.26906>;
          <D.26905>:
          D.26907 = &MEM[(void *)"ICollection`1" + 2B];
          D.26908 = *D.26907;
          D.26909 = (int) D.26908;
          D.26910 = __s2 + 2;
          D.26911 = *D.26910;
          D.26912 = (int) D.26911;
          __result = D.26909 - D.26912;
          if (__s2_len > 2) goto <D.26913>; else goto <D.26914>;
          <D.26913>:
          if (__result == 0) goto <D.26915>; else goto <D.26916>;
          <D.26915>:
          D.26917 = &MEM[(void *)"ICollection`1" + 3B];
          D.26918 = *D.26917;
          D.26919 = (int) D.26918;
          D.26920 = __s2 + 3;
          D.26921 = *D.26920;
          D.26922 = (int) D.26921;
          __result = D.26919 - D.26922;
          <D.26916>:
          <D.26914>:
          <D.26906>:
          <D.26904>:
          <D.26896>:
          <D.26894>:
        }
        D.20393 = __result;
      }
      iftmp.163 = -D.20393;
      goto <D.26923>;
      <D.26887>:
      iftmp.163 = __builtin_strcmp (ic_name, "ICollection`1");
      <D.26923>:
      D.20394 = iftmp.163;
    }
    if (D.20394 != 0) goto <D.26924>; else goto <D.26843>;
    <D.26924>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26928 = "IList`1";
        D.26929 = MEM[(const unsigned char *)D.26928];
        D.26930 = (int) D.26929;
        D.26931 = *__s2;
        D.26932 = (int) D.26931;
        __result = D.26930 - D.26932;
        {
          if (__s2_len != 0) goto <D.26933>; else goto <D.26934>;
          <D.26933>:
          if (__result == 0) goto <D.26935>; else goto <D.26936>;
          <D.26935>:
          D.26937 = &MEM[(void *)"IList`1" + 1B];
          D.26938 = *D.26937;
          D.26939 = (int) D.26938;
          D.26940 = __s2 + 1;
          D.26941 = *D.26940;
          D.26942 = (int) D.26941;
          __result = D.26939 - D.26942;
          if (__s2_len > 1) goto <D.26943>; else goto <D.26944>;
          <D.26943>:
          if (__result == 0) goto <D.26945>; else goto <D.26946>;
          <D.26945>:
          D.26947 = &MEM[(void *)"IList`1" + 2B];
          D.26948 = *D.26947;
          D.26949 = (int) D.26948;
          D.26950 = __s2 + 2;
          D.26951 = *D.26950;
          D.26952 = (int) D.26951;
          __result = D.26949 - D.26952;
          if (__s2_len > 2) goto <D.26953>; else goto <D.26954>;
          <D.26953>:
          if (__result == 0) goto <D.26955>; else goto <D.26956>;
          <D.26955>:
          D.26957 = &MEM[(void *)"IList`1" + 3B];
          D.26958 = *D.26957;
          D.26959 = (int) D.26958;
          D.26960 = __s2 + 3;
          D.26961 = *D.26960;
          D.26962 = (int) D.26961;
          __result = D.26959 - D.26962;
          <D.26956>:
          <D.26954>:
          <D.26946>:
          <D.26944>:
          <D.26936>:
          <D.26934>:
        }
        D.20402 = __result;
      }
      iftmp.164 = -D.20402;
      goto <D.26963>;
      <D.26927>:
      iftmp.164 = __builtin_strcmp (ic_name, "IList`1");
      <D.26963>:
      D.20403 = iftmp.164;
    }
    if (D.20403 != 0) goto <D.26964>; else goto <D.26843>;
    <D.26964>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26968 = "IReadOnlyList`1";
        D.26969 = MEM[(const unsigned char *)D.26968];
        D.26970 = (int) D.26969;
        D.26971 = *__s2;
        D.26972 = (int) D.26971;
        __result = D.26970 - D.26972;
        {
          if (__s2_len != 0) goto <D.26973>; else goto <D.26974>;
          <D.26973>:
          if (__result == 0) goto <D.26975>; else goto <D.26976>;
          <D.26975>:
          D.26977 = &MEM[(void *)"IReadOnlyList`1" + 1B];
          D.26978 = *D.26977;
          D.26979 = (int) D.26978;
          D.26980 = __s2 + 1;
          D.26981 = *D.26980;
          D.26982 = (int) D.26981;
          __result = D.26979 - D.26982;
          if (__s2_len > 1) goto <D.26983>; else goto <D.26984>;
          <D.26983>:
          if (__result == 0) goto <D.26985>; else goto <D.26986>;
          <D.26985>:
          D.26987 = &MEM[(void *)"IReadOnlyList`1" + 2B];
          D.26988 = *D.26987;
          D.26989 = (int) D.26988;
          D.26990 = __s2 + 2;
          D.26991 = *D.26990;
          D.26992 = (int) D.26991;
          __result = D.26989 - D.26992;
          if (__s2_len > 2) goto <D.26993>; else goto <D.26994>;
          <D.26993>:
          if (__result == 0) goto <D.26995>; else goto <D.26996>;
          <D.26995>:
          D.26997 = &MEM[(void *)"IReadOnlyList`1" + 3B];
          D.26998 = *D.26997;
          D.26999 = (int) D.26998;
          D.27000 = __s2 + 3;
          D.27001 = *D.27000;
          D.27002 = (int) D.27001;
          __result = D.26999 - D.27002;
          <D.26996>:
          <D.26994>:
          <D.26986>:
          <D.26984>:
          <D.26976>:
          <D.26974>:
        }
        D.20411 = __result;
      }
      iftmp.165 = -D.20411;
      goto <D.27003>;
      <D.26967>:
      iftmp.165 = __builtin_strcmp (ic_name, "IReadOnlyList`1");
      <D.27003>:
      D.20412 = iftmp.165;
    }
    if (D.20412 != 0) goto <D.27004>; else goto <D.26843>;
    <D.27004>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.27008 = "IReadOnlyCollection`1";
        D.27009 = MEM[(const unsigned char *)D.27008];
        D.27010 = (int) D.27009;
        D.27011 = *__s2;
        D.27012 = (int) D.27011;
        __result = D.27010 - D.27012;
        {
          if (__s2_len != 0) goto <D.27013>; else goto <D.27014>;
          <D.27013>:
          if (__result == 0) goto <D.27015>; else goto <D.27016>;
          <D.27015>:
          D.27017 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
          D.27018 = *D.27017;
          D.27019 = (int) D.27018;
          D.27020 = __s2 + 1;
          D.27021 = *D.27020;
          D.27022 = (int) D.27021;
          __result = D.27019 - D.27022;
          if (__s2_len > 1) goto <D.27023>; else goto <D.27024>;
          <D.27023>:
          if (__result == 0) goto <D.27025>; else goto <D.27026>;
          <D.27025>:
          D.27027 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
          D.27028 = *D.27027;
          D.27029 = (int) D.27028;
          D.27030 = __s2 + 2;
          D.27031 = *D.27030;
          D.27032 = (int) D.27031;
          __result = D.27029 - D.27032;
          if (__s2_len > 2) goto <D.27033>; else goto <D.27034>;
          <D.27033>:
          if (__result == 0) goto <D.27035>; else goto <D.27036>;
          <D.27035>:
          D.27037 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
          D.27038 = *D.27037;
          D.27039 = (int) D.27038;
          D.27040 = __s2 + 3;
          D.27041 = *D.27040;
          D.27042 = (int) D.27041;
          __result = D.27039 - D.27042;
          <D.27036>:
          <D.27034>:
          <D.27026>:
          <D.27024>:
          <D.27016>:
          <D.27014>:
        }
        D.20420 = __result;
      }
      iftmp.166 = -D.20420;
      goto <D.27043>;
      <D.27007>:
      iftmp.166 = __builtin_strcmp (ic_name, "IReadOnlyCollection`1");
      <D.27043>:
      D.20421 = iftmp.166;
    }
    if (D.20421 != 0) goto <D.26842>; else goto <D.26843>;
    <D.26842>:
    D.26748 = 0;
    return D.26748;
    <D.26843>:
    D.26740 = cm->name;
    subname = strstr (D.26740, ic_name_space);
    D.26740 = cm->name;
    if (D.26740 != subname) goto <D.27044>; else goto <D.27045>;
    <D.27044>:
    D.26748 = 0;
    return D.26748;
    <D.27045>:
    D.27046 = strlen (ic_name_space);
    subname = subname + D.27046;
    D.27047 = *subname;
    if (D.27047 != 46) goto <D.27048>; else goto <D.27049>;
    <D.27048>:
    D.26748 = 0;
    return D.26748;
    <D.27049>:
    subname = subname + 1;
    D.27050 = strstr (subname, ic_name);
    if (D.27050 != subname) goto <D.27051>; else goto <D.27052>;
    <D.27051>:
    D.26748 = 0;
    return D.26748;
    <D.27052>:
    D.27053 = strlen (ic_name);
    subname = subname + D.27053;
    D.27047 = *subname;
    if (D.27047 != 46) goto <D.27054>; else goto <D.27055>;
    <D.27054>:
    D.26748 = 0;
    return D.26748;
    <D.27055>:
    subname = subname + 1;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.26739 = im->name;
      D.20430 = __builtin_strcmp (subname, D.26739);
    }
    if (D.20430 != 0) goto <D.27056>; else goto <D.27057>;
    <D.27056>:
    D.26748 = 0;
    return D.26748;
    <D.27057>:
    if (security_enabled != 0) goto <D.27058>; else goto <D.27059>;
    <D.27058>:
    D.26768 = im->flags;
    D.26769 = (int) D.26768;
    D.26770 = D.26769 & 16384;
    if (D.26770 != 0) goto <D.27060>; else goto <D.27061>;
    <D.27060>:
    mono_secman_inheritancedemand_method (cm, im);
    <D.27061>:
    <D.27059>:
    D.27062 = mono_security_get_mode ();
    if (D.27062 == 1) goto <D.27063>; else goto <D.27064>;
    <D.27063>:
    mono_security_core_clr_check_override (class, cm, im);
    <D.27064>:
    D.27065 = is_wcf_hack_disabled ();
    if (D.27065 != 0) goto <D.27066>; else goto <D.27067>;
    <D.27066>:
    D.27068 = mono_method_can_access_method_full (cm, im, 0B);
    if (D.27068 == 0) goto <D.27069>; else goto <D.27070>;
    <D.27069>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (cm, 1);
      decl_name = mono_method_full_name (im, 1);
      D.27071 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.27071);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.26748 = 0;
      return D.26748;
    }
    <D.27070>:
    <D.27067>:
    D.26748 = 1;
    return D.26748;
  }
}


print_unimplemented_interface_method_info (struct MonoClass * class, struct MonoClass * ic, struct MonoMethod * im, int im_slot, struct MonoMethod * * overrides, int onum)
{
  int D.27073;
  sizetype D.27074;
  sizetype D.27075;
  sizetype D.27076;
  struct MonoMethod * * D.27077;
  struct MonoMethod * D.27078;
  const char * D.27079;
  short int D.27080;
  int D.27081;
  long unsigned int D.27082;
  long unsigned int D.27083;
  struct MonoMethod * * D.27084;
  struct MonoMethod * D.27085;
  const char * D.27086;
  short int D.27087;
  int D.27088;
  struct MonoMethodSignature * D.27089;
  struct MonoType * D.27090;
  struct MonoType * D.27091;
  char * D.27092;
  const char * D.27093;
  unsigned char D.27094;
  struct MonoMethod * * D.27097;
  long unsigned int D.27098;
  long unsigned int D.27099;
  struct MonoMethod * * D.27100;
  struct MonoMethodSignature * D.27101;
  const char * D.27102;
  unsigned int index.167;
  unsigned int D.27104;
  int index;
  char * method_signature;
  char * type_name;

  index = 0;
  goto <D.20445>;
  <D.20444>:
  D.27073 = index * 2;
  D.27074 = (sizetype) D.27073;
  D.27075 = D.27074 + 1;
  D.27076 = D.27075 * 8;
  D.27077 = overrides + D.27076;
  D.27078 = *D.27077;
  D.27079 = D.27078->name;
  D.27073 = index * 2;
  D.27074 = (sizetype) D.27073;
  D.27075 = D.27074 + 1;
  D.27076 = D.27075 * 8;
  D.27077 = overrides + D.27076;
  D.27078 = *D.27077;
  D.27080 = D.27078->slot;
  D.27081 = (int) D.27080;
  D.27073 = index * 2;
  D.27082 = (long unsigned int) D.27073;
  D.27083 = D.27082 * 8;
  D.27084 = overrides + D.27083;
  D.27085 = *D.27084;
  D.27086 = D.27085->name;
  D.27073 = index * 2;
  D.27082 = (long unsigned int) D.27073;
  D.27083 = D.27082 * 8;
  D.27084 = overrides + D.27083;
  D.27085 = *D.27084;
  D.27087 = D.27085->slot;
  D.27088 = (int) D.27087;
  mono_trace (16, 2, " at slot %d: %s (%d) overrides %s (%d)\n", im_slot, D.27079, D.27081, D.27086, D.27088);
  index = index + 1;
  <D.20445>:
  if (index < onum) goto <D.20444>; else goto <D.20446>;
  <D.20446>:
  D.27089 = mono_method_signature (im);
  method_signature = mono_signature_get_desc (D.27089, 0);
  D.27090 = &class->byval_arg;
  type_name = mono_type_full_name (D.27090);
  D.27091 = &ic->byval_arg;
  D.27092 = mono_type_get_name (D.27091);
  D.27093 = im->name;
  mono_trace (16, 2, "no implementation for interface method %s::%s(%s) in class %s\n", D.27092, D.27093, method_signature, type_name);
  monoeg_g_free (method_signature);
  monoeg_g_free (type_name);
  mono_class_setup_methods (class);
  D.27094 = class->exception_type;
  if (D.27094 != 0) goto <D.27095>; else goto <D.27096>;
  <D.27095>:
  {
    char * name;

    name = mono_type_get_full_name (class);
    mono_trace (16, 2, "CLASS %s failed to resolve methods\n", name);
    monoeg_g_free (name);
    return;
  }
  <D.27096>:
  index = 0;
  goto <D.20450>;
  <D.20449>:
  {
    struct MonoMethod * cm;

    D.27097 = class->methods;
    D.27098 = (long unsigned int) index;
    D.27099 = D.27098 * 8;
    D.27100 = D.27097 + D.27099;
    cm = *D.27100;
    D.27101 = mono_method_signature (cm);
    method_signature = mono_signature_get_desc (D.27101, 1);
    D.27102 = cm->name;
    mono_trace (16, 2, "METHOD %s(%s)\n", D.27102, method_signature);
    monoeg_g_free (method_signature);
  }
  index = index + 1;
  <D.20450>:
  index.167 = (unsigned int) index;
  D.27104 = class->method.count;
  if (index.167 < D.27104) goto <D.20449>; else goto <D.20451>;
  <D.20451>:
}


is_wcf_hack_disabled ()
{
  int inited.168;
  const gchar * D.27109;
  _Bool D.27110;
  int disabled.169;
  gboolean D.27112;
  static gboolean disabled;
  static gboolean inited = 0;

  inited.168 = inited;
  if (inited.168 == 0) goto <D.27107>; else goto <D.27108>;
  <D.27107>:
  D.27109 = monoeg_g_getenv ("MONO_DISABLE_WCF_HACK");
  D.27110 = D.27109 != 0B;
  disabled.169 = (int) D.27110;
  disabled = disabled.169;
  inited = 1;
  <D.27108>:
  D.27112 = disabled;
  return D.27112;
}


mono_class_get_virtual_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.27116;
  struct MonoMethod * * D.27119;
  unsigned int D.27121;
  struct MonoImage * D.27123;
  long unsigned int D.27124;
  long unsigned int D.27125;
  struct MonoGenericClass * D.27127;
  void * D.27128;
  struct MonoMethod * D.27134;
  short unsigned int D.27137;
  int D.27138;
  int D.27139;
  unsigned int D.27141;
  long unsigned int D.27142;
  long unsigned int D.27143;
  struct MonoMethod * * D.27144;
  long int D.27150;
  unsigned int D.27151;
  unsigned int i.170;
  unsigned int D.27153;
  int D.27154;
  unsigned int D.27155;
  unsigned int D.27159;
  unsigned int D.27160;
  int D.27161;
  long unsigned int D.27162;
  void * D.27163;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.27114>; else goto <D.27115>;
  <D.27114>:
  D.27116 = 0B;
  return D.27116;
  <D.27115>:
  D.27119 = klass->methods;
  if (D.27119 != 0B) goto <D.27117>; else goto <D.27120>;
  <D.27120>:
  D.27121 = klass->type_token;
  if (D.27121 == 0) goto <D.27117>; else goto <D.27122>;
  <D.27122>:
  D.27123 = klass->image;
  D.27124 = BIT_FIELD_REF <*D.27123, 64, 192>;
  D.27125 = D.27124 & 34359738368;
  if (D.27125 != 0) goto <D.27117>; else goto <D.27126>;
  <D.27126>:
  D.27127 = klass->generic_class;
  if (D.27127 != 0B) goto <D.27117>; else goto <D.27118>;
  <D.27117>:
  D.27128 = *iter;
  if (D.27128 == 0B) goto <D.27129>; else goto <D.27130>;
  <D.27129>:
  mono_class_setup_methods (klass);
  D.27119 = klass->methods;
  if (D.27119 == 0B) goto <D.27131>; else goto <D.27132>;
  <D.27131>:
  D.27116 = 0B;
  return D.27116;
  <D.27132>:
  method = klass->methods;
  goto <D.27133>;
  <D.27130>:
  method = *iter;
  method = method + 8;
  <D.27133>:
  goto <D.22147>;
  <D.22146>:
  D.27134 = *method;
  if (D.27134 != 0B) goto <D.27135>; else goto <D.27136>;
  <D.27135>:
  D.27134 = *method;
  D.27137 = D.27134->flags;
  D.27138 = (int) D.27137;
  D.27139 = D.27138 & 64;
  if (D.27139 != 0) goto <D.22145>; else goto <D.27140>;
  <D.27140>:
  <D.27136>:
  method = method + 8;
  <D.22147>:
  D.27119 = klass->methods;
  D.27141 = klass->method.count;
  D.27142 = (long unsigned int) D.27141;
  D.27143 = D.27142 * 8;
  D.27144 = D.27119 + D.27143;
  if (D.27144 > method) goto <D.22146>; else goto <D.22145>;
  <D.22145>:
  D.27119 = klass->methods;
  D.27141 = klass->method.count;
  D.27142 = (long unsigned int) D.27141;
  D.27143 = D.27142 * 8;
  D.27144 = D.27119 + D.27143;
  if (D.27144 > method) goto <D.27145>; else goto <D.27146>;
  <D.27145>:
  *iter = method;
  D.27116 = *method;
  return D.27116;
  <D.27146>:
  D.27116 = 0B;
  return D.27116;
  <D.27118>:
  {
    struct MonoMethod * res;
    int i;
    int start_index;

    res = 0B;
    D.27128 = *iter;
    if (D.27128 == 0B) goto <D.27147>; else goto <D.27148>;
    <D.27147>:
    start_index = 0;
    goto <D.27149>;
    <D.27148>:
    D.27128 = *iter;
    D.27150 = (long int) D.27128;
    start_index = (int) D.27150;
    <D.27149>:
    i = start_index;
    goto <D.22154>;
    <D.22153>:
    {
      guint32 flags;

      D.27123 = klass->image;
      D.27151 = klass->method.first;
      i.170 = (unsigned int) i;
      D.27153 = D.27151 + i.170;
      D.27154 = (int) D.27153;
      flags = mono_metadata_decode_table_row_col (D.27123, 6, D.27154, 2);
      D.27155 = flags & 64;
      if (D.27155 != 0) goto <D.22152>; else goto <D.27156>;
      <D.27156>:
    }
    i = i + 1;
    <D.22154>:
    i.170 = (unsigned int) i;
    D.27141 = klass->method.count;
    if (i.170 < D.27141) goto <D.22153>; else goto <D.22152>;
    <D.22152>:
    i.170 = (unsigned int) i;
    D.27141 = klass->method.count;
    if (i.170 < D.27141) goto <D.27157>; else goto <D.27158>;
    <D.27157>:
    D.27123 = klass->image;
    D.27151 = klass->method.first;
    i.170 = (unsigned int) i;
    D.27153 = D.27151 + i.170;
    D.27159 = D.27153 + 1;
    D.27160 = D.27159 | 100663296;
    res = mono_get_method (D.27123, D.27160, klass);
    D.27161 = i + 1;
    D.27162 = (long unsigned int) D.27161;
    D.27163 = (void *) D.27162;
    *iter = D.27163;
    D.27116 = res;
    return D.27116;
    <D.27158>:
    D.27116 = 0B;
    return D.27116;
  }
}


print_implemented_interfaces (struct MonoClass * klass)
{
  short unsigned int D.27165;
  int D.27166;
  struct MonoClass * * D.27167;
  long unsigned int D.27168;
  long unsigned int D.27169;
  struct MonoClass * * D.27170;
  struct MonoClass * D.27171;
  short unsigned int D.27172;
  int D.27173;
  guint16 * D.27174;
  long unsigned int D.27175;
  guint16 * D.27176;
  short unsigned int D.27177;
  int D.27178;
  unsigned int D.27179;
  const char * D.27180;
  const char * D.27181;
  short unsigned int D.27184;
  int D.27185;
  guint8 * D.27187;
  int D.27188;
  sizetype D.27189;
  guint8 * D.27190;
  unsigned char D.27191;
  int D.27192;
  int D.27193;
  int D.27194;
  int D.27195;
  sizetype D.27197;
  guint8 * D.27198;
  unsigned char D.27199;
  int D.27200;
  int D.27201;
  int D.27202;
  int D.27203;
  _Bool D.27204;
  int D.27205;
  int D.27206;
  const char * D.27207;
  int D.27208;
  const char * D.27211;
  void * * D.27215;
  void * * D.27216;
  short unsigned int D.27217;
  int D.27218;
  const char * D.27219;
  int D.27220;
  unsigned int D.27221;
  const char * D.27222;
  unsigned int i.171;
  unsigned int D.27224;
  char * name;
  struct MonoError error;
  struct GPtrArray * ifaces;
  int i;
  int ancestor_level;

  try
    {
      ifaces = 0B;
      ancestor_level = 0;
      name = mono_type_get_full_name (klass);
      D.27165 = klass->interface_offsets_count;
      D.27166 = (int) D.27165;
      printf ("Packed interface table for class %s has size %d\n", name, D.27166);
      monoeg_g_free (name);
      i = 0;
      goto <D.20034>;
      <D.20033>:
      D.27167 = klass->interfaces_packed;
      D.27168 = (long unsigned int) i;
      D.27169 = D.27168 * 8;
      D.27170 = D.27167 + D.27169;
      D.27171 = *D.27170;
      D.27172 = D.27171->interface_id;
      D.27173 = (int) D.27172;
      D.27174 = klass->interface_offsets_packed;
      D.27168 = (long unsigned int) i;
      D.27175 = D.27168 * 2;
      D.27176 = D.27174 + D.27175;
      D.27177 = *D.27176;
      D.27178 = (int) D.27177;
      D.27167 = klass->interfaces_packed;
      D.27168 = (long unsigned int) i;
      D.27169 = D.27168 * 8;
      D.27170 = D.27167 + D.27169;
      D.27171 = *D.27170;
      D.27179 = D.27171->method.count;
      D.27167 = klass->interfaces_packed;
      D.27168 = (long unsigned int) i;
      D.27169 = D.27168 * 8;
      D.27170 = D.27167 + D.27169;
      D.27171 = *D.27170;
      D.27180 = D.27171->name_space;
      D.27167 = klass->interfaces_packed;
      D.27168 = (long unsigned int) i;
      D.27169 = D.27168 * 8;
      D.27170 = D.27167 + D.27169;
      D.27171 = *D.27170;
      D.27181 = D.27171->name;
      printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.27173, D.27178, D.27179, D.27180, D.27181);
      i = i + 1;
      <D.20034>:
      D.27165 = klass->interface_offsets_count;
      D.27166 = (int) D.27165;
      if (D.27166 > i) goto <D.20033>; else goto <D.20035>;
      <D.20035>:
      printf ("Interface flags: ");
      i = 0;
      goto <D.20037>;
      <D.20036>:
      D.27184 = klass->max_interface_id;
      D.27185 = (int) D.27184;
      if (D.27185 >= i) goto <D.27186>; else goto <D.27182>;
      <D.27186>:
      D.27187 = klass->interface_bitmap;
      D.27188 = i >> 3;
      D.27189 = (sizetype) D.27188;
      D.27190 = D.27187 + D.27189;
      D.27191 = *D.27190;
      D.27192 = (int) D.27191;
      D.27193 = i & 7;
      D.27194 = D.27192 >> D.27193;
      D.27195 = D.27194 & 1;
      if (D.27195 != 0) goto <D.27196>; else goto <D.27182>;
      <D.27196>:
      printf ("(%d,T)", i);
      goto <D.27183>;
      <D.27182>:
      printf ("(%d,F)", i);
      <D.27183>:
      i = i + 1;
      <D.20037>:
      D.27184 = klass->max_interface_id;
      D.27185 = (int) D.27184;
      if (D.27185 >= i) goto <D.20036>; else goto <D.20038>;
      <D.20038>:
      printf ("\n");
      printf ("Dump interface flags:");
      i = 0;
      goto <D.20040>;
      <D.20039>:
      D.27187 = klass->interface_bitmap;
      D.27197 = (sizetype) i;
      D.27198 = D.27187 + D.27197;
      D.27199 = *D.27198;
      D.27200 = (int) D.27199;
      printf (" %02X", D.27200);
      i = i + 1;
      <D.20040>:
      D.27184 = klass->max_interface_id;
      D.27185 = (int) D.27184;
      D.27201 = D.27185 + 1;
      D.27202 = D.27201 >> 3;
      D.27184 = klass->max_interface_id;
      D.27185 = (int) D.27184;
      D.27201 = D.27185 + 1;
      D.27203 = D.27201 & 7;
      D.27204 = D.27203 != 0;
      D.27205 = (int) D.27204;
      D.27206 = D.27202 + D.27205;
      if (D.27206 > i) goto <D.20039>; else goto <D.20041>;
      <D.20041>:
      printf ("\n");
      goto <D.20047>;
      <D.20046>:
      D.27207 = klass->name;
      printf ("[LEVEL %d] Implemented interfaces by class %s:\n", ancestor_level, D.27207);
      ifaces = mono_class_get_implemented_interfaces (klass, &error);
      D.27208 = mono_error_ok (&error);
      if (D.27208 == 0) goto <D.27209>; else goto <D.27210>;
      <D.27209>:
      D.27211 = mono_error_get_message (&error);
      printf ("  Type failed due to %s\n", D.27211);
      mono_error_cleanup (&error);
      goto <D.27212>;
      <D.27210>:
      if (ifaces != 0B) goto <D.27213>; else goto <D.27214>;
      <D.27213>:
      i = 0;
      goto <D.20044>;
      <D.20043>:
      {
        struct MonoClass * ic;

        D.27215 = ifaces->pdata;
        D.27168 = (long unsigned int) i;
        D.27169 = D.27168 * 8;
        D.27216 = D.27215 + D.27169;
        ic = *D.27216;
        D.27217 = ic->interface_id;
        D.27218 = (int) D.27217;
        D.27219 = ic->name;
        printf ("  [UIID %d] interface %s\n", D.27218, D.27219);
        D.27217 = ic->interface_id;
        D.27218 = (int) D.27217;
        D.27220 = mono_class_interface_offset (klass, ic);
        D.27221 = ic->method.count;
        D.27222 = ic->name_space;
        D.27219 = ic->name;
        printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.27218, D.27220, D.27221, D.27222, D.27219);
      }
      i = i + 1;
      <D.20044>:
      i.171 = (unsigned int) i;
      D.27224 = ifaces->len;
      if (i.171 < D.27224) goto <D.20043>; else goto <D.20045>;
      <D.20045>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.27214>:
      <D.27212>:
      ancestor_level = ancestor_level + 1;
      klass = klass->parent;
      <D.20047>:
      if (klass != 0B) goto <D.20046>; else goto <D.20048>;
      <D.20048>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


printf (const char * restrict __fmt)
{
  int D.27225;

  D.27225 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.27225;
}


mono_method_get_vtable_slot (struct MonoMethod * method)
{
  short int D.27227;
  struct MonoClass * D.27230;
  unsigned char D.27231;
  int D.27234;
  struct MonoGenericClass * D.27237;
  _Bool D.27238;
  long int D.27239;
  long int D.27240;
  struct MonoMethod * * D.27243;
  _Bool D.27244;
  long int D.27245;
  long int D.27246;
  long unsigned int D.27249;
  long unsigned int D.27250;
  struct MonoMethod * * D.27251;
  struct MonoMethod * D.27252;
  unsigned int i.172;
  unsigned int D.27255;
  _Bool D.27256;
  long int D.27257;
  long int D.27258;
  struct MonoMethod * * D.27261;
  _Bool D.27262;
  long int D.27263;
  long int D.27264;
  struct MonoMethod * * D.27267;
  struct MonoMethod * D.27268;
  short int D.27269;
  _Bool D.27270;
  long int D.27271;
  long int D.27272;

  D.27227 = method->slot;
  if (D.27227 == -1) goto <D.27228>; else goto <D.27229>;
  <D.27228>:
  D.27230 = method->klass;
  mono_class_setup_vtable (D.27230);
  D.27230 = method->klass;
  D.27231 = D.27230->exception_type;
  if (D.27231 != 0) goto <D.27232>; else goto <D.27233>;
  <D.27232>:
  D.27234 = -1;
  return D.27234;
  <D.27233>:
  D.27227 = method->slot;
  if (D.27227 == -1) goto <D.27235>; else goto <D.27236>;
  <D.27235>:
  {
    struct MonoClass * gklass;
    int i;

    D.27230 = method->klass;
    D.27237 = D.27230->generic_class;
    D.27238 = D.27237 == 0B;
    D.27239 = (long int) D.27238;
    D.27240 = __builtin_expect (D.27239, 0);
    if (D.27240 != 0) goto <D.27241>; else goto <D.27242>;
    <D.27241>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4676, "method->klass->generic_class");
    <D.27242>:
    D.27230 = method->klass;
    D.27237 = D.27230->generic_class;
    gklass = D.27237->container_class;
    D.27230 = method->klass;
    mono_class_setup_methods (D.27230);
    D.27230 = method->klass;
    D.27243 = D.27230->methods;
    D.27244 = D.27243 == 0B;
    D.27245 = (long int) D.27244;
    D.27246 = __builtin_expect (D.27245, 0);
    if (D.27246 != 0) goto <D.27247>; else goto <D.27248>;
    <D.27247>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4679, "method->klass->methods");
    <D.27248>:
    i = 0;
    goto <D.20642>;
    <D.20641>:
    D.27230 = method->klass;
    D.27243 = D.27230->methods;
    D.27249 = (long unsigned int) i;
    D.27250 = D.27249 * 8;
    D.27251 = D.27243 + D.27250;
    D.27252 = *D.27251;
    if (D.27252 == method) goto <D.20640>; else goto <D.27253>;
    <D.27253>:
    i = i + 1;
    <D.20642>:
    i.172 = (unsigned int) i;
    D.27230 = method->klass;
    D.27255 = D.27230->method.count;
    if (i.172 < D.27255) goto <D.20641>; else goto <D.20640>;
    <D.20640>:
    i.172 = (unsigned int) i;
    D.27230 = method->klass;
    D.27255 = D.27230->method.count;
    D.27256 = i.172 >= D.27255;
    D.27257 = (long int) D.27256;
    D.27258 = __builtin_expect (D.27257, 0);
    if (D.27258 != 0) goto <D.27259>; else goto <D.27260>;
    <D.27259>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4684, "i < method->klass->method.count");
    <D.27260>:
    D.27261 = gklass->methods;
    D.27262 = D.27261 == 0B;
    D.27263 = (long int) D.27262;
    D.27264 = __builtin_expect (D.27263, 0);
    if (D.27264 != 0) goto <D.27265>; else goto <D.27266>;
    <D.27265>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4685, "gklass->methods");
    <D.27266>:
    D.27261 = gklass->methods;
    D.27249 = (long unsigned int) i;
    D.27250 = D.27249 * 8;
    D.27267 = D.27261 + D.27250;
    D.27268 = *D.27267;
    D.27269 = D.27268->slot;
    method->slot = D.27269;
  }
  <D.27236>:
  D.27227 = method->slot;
  D.27270 = D.27227 == -1;
  D.27271 = (long int) D.27270;
  D.27272 = __builtin_expect (D.27271, 0);
  if (D.27272 != 0) goto <D.27273>; else goto <D.27274>;
  <D.27273>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4688, "method->slot != -1");
  <D.27274>:
  <D.27229>:
  D.27227 = method->slot;
  D.27234 = (int) D.27227;
  return D.27234;
}


mono_method_get_vtable_index (struct MonoMethod * method)
{
  long unsigned int D.27276;
  long unsigned int D.27277;
  short unsigned int D.27280;
  int D.27281;
  int D.27282;
  struct MonoMethod * D.27285;
  long unsigned int D.27286;
  long unsigned int D.27287;
  int D.27290;

  D.27276 = BIT_FIELD_REF <*method, 64, 256>;
  D.27277 = D.27276 & 4096;
  if (D.27277 != 0) goto <D.27278>; else goto <D.27279>;
  <D.27278>:
  D.27280 = method->flags;
  D.27281 = (int) D.27280;
  D.27282 = D.27281 & 64;
  if (D.27282 != 0) goto <D.27283>; else goto <D.27284>;
  <D.27283>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.27285 = imethod->declaring;
    D.27286 = BIT_FIELD_REF <*D.27285, 64, 256>;
    D.27287 = D.27286 & 2048;
    if (D.27287 != 0) goto <D.27288>; else goto <D.27289>;
    <D.27288>:
    D.27285 = imethod->declaring;
    D.27290 = mono_method_get_vtable_slot (D.27285);
    return D.27290;
    <D.27289>:
  }
  <D.27284>:
  <D.27279>:
  D.27290 = mono_method_get_vtable_slot (method);
  return D.27290;
}


mono_class_init (struct MonoClass * class)
{
  _Bool D.27292;
  long int D.27293;
  long int D.27294;
  long unsigned int D.27297;
  long unsigned int D.27298;
  mono_bool D.27301;
  unsigned char D.27302;
  _Bool D.27303;
  long unsigned int D.27306;
  gchar * D.27309;
  int D.27310;
  int D.27313;
  struct MonoImage * D.27316;
  const char * D.27317;
  const char * D.27318;
  char * D.27319;
  unsigned char D.27322;
  long unsigned int D.27324;
  long unsigned int D.27325;
  unsigned char D.27328;
  int D.27331;
  struct MonoClass * D.27334;
  unsigned int D.27337;
  unsigned int D.27338;
  long unsigned int D.27341;
  long unsigned int D.27342;
  struct MonoGenericClass * D.27343;
  long unsigned int D.27346;
  long unsigned int D.27347;
  long unsigned int D.27350;
  long unsigned int D.27351;
  unsigned char D.27352;
  gchar * D.27357;
  unsigned int D.27360;
  unsigned int D.27361;
  unsigned int D.27364;
  short unsigned int D.27365;
  long unsigned int D.27368;
  long unsigned int D.27369;
  long unsigned int D.27375;
  long unsigned int D.27376;
  unsigned int D.27378;
  long unsigned int D.27381;
  long unsigned int D.27382;
  unsigned int D.27385;
  int D.27386;
  unsigned int D.27387;
  int D.27388;
  unsigned int D.27389;
  unsigned char D.27390;
  <unnamed-unsigned:4> D.27391;
  unsigned int D.27392;
  unsigned char D.27393;
  <unnamed-unsigned:1> D.27394;
  <unnamed-unsigned:1> D.27395;
  <unnamed-unsigned:1> D.27396;
  <unnamed-unsigned:1> D.27397;
  long unsigned int D.27399;
  struct MonoLoaderError * D.27403;
  unsigned char D.27405;
  guint32 iftmp.173;
  short unsigned int D.27412;
  unsigned int D.27415;
  int D.27416;
  int D.27417;
  unsigned int D.27418;
  unsigned int D.27419;
  struct MonoMethod * default_ghc.174;
  unsigned int D.27425;
  int D.27426;
  <unnamed-unsigned:1> D.27427;
  <unnamed-unsigned:1> D.27428;
  <unnamed-unsigned:1> D.27429;
  struct MonoClass * D.27435;
  struct MonoType * D.27436;
  int D.27437;
  _Bool D.27438;
  int D.27439;
  int D.27442;
  <unnamed-unsigned:1> D.27450;
  int D.27451;
  unsigned char D.27452;
  <unnamed-unsigned:1> D.27453;
  <unnamed-unsigned:1> D.27454;
  unsigned char D.27455;
  int D.27458;
  struct MonoImage * D.27464;
  short unsigned int D.27469;
  int D.27470;
  int D.27471;
  struct MonoMethod * * D.27476;
  long unsigned int D.27477;
  long unsigned int D.27478;
  struct MonoMethod * * D.27479;
  short unsigned int D.27480;
  int D.27481;
  int D.27482;
  int D.20817;
  int iftmp.175;
  int D.20813;
  const char[7] * D.27488;
  unsigned char D.27489;
  int D.27490;
  unsigned char D.27491;
  int D.27492;
  const unsigned char * D.27497;
  unsigned char D.27498;
  int D.27499;
  const unsigned char * D.27500;
  unsigned char D.27501;
  int D.27502;
  const unsigned char * D.27507;
  unsigned char D.27508;
  int D.27509;
  const unsigned char * D.27510;
  unsigned char D.27511;
  int D.27512;
  const unsigned char * D.27517;
  unsigned char D.27518;
  int D.27519;
  const unsigned char * D.27520;
  unsigned char D.27521;
  int D.27522;
  const char * D.27524;
  unsigned int i.176;
  unsigned char D.27530;
  struct MonoLoaderError * D.27533;
  int D.27535;
  struct MonoLoaderError * D.27540;
  int D.27542;
  <unnamed type> D.27546;
  struct MonoLoaderError * D.27549;
  struct MonoLoaderError * D.27554;
  int D.27557;
  gchar * D.27560;
  void (*<T1ecf>) (struct MonoClass *) mono_debugger_class_init_func.177;
  int i;
  struct MonoCachedClassInfo cached_info;
  gboolean has_cached_info;
  void leave = <<< error >>>;

  try
    {
      D.27292 = class == 0B;
      D.27293 = (long int) D.27292;
      D.27294 = __builtin_expect (D.27293, 0);
      if (D.27294 != 0) goto <D.27295>; else goto <D.27296>;
      <D.27295>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4915, "class");
      <D.27296>:
      D.27297 = BIT_FIELD_REF <*class, 64, 256>;
      D.27298 = D.27297 & 280375465082881;
      if (D.27298 != 0) goto <D.27299>; else goto <D.27300>;
      <D.27299>:
      D.27302 = class->exception_type;
      D.27303 = D.27302 == 0;
      D.27301 = (mono_bool) D.27303;
      return D.27301;
      <D.27300>:
      mono_loader_lock ();
      D.27297 = BIT_FIELD_REF <*class, 64, 256>;
      D.27298 = D.27297 & 280375465082881;
      if (D.27298 != 0) goto <D.27304>; else goto <D.27305>;
      <D.27304>:
      mono_loader_unlock ();
      D.27302 = class->exception_type;
      D.27303 = D.27302 == 0;
      D.27301 = (mono_bool) D.27303;
      return D.27301;
      <D.27305>:
      D.27297 = BIT_FIELD_REF <*class, 64, 256>;
      D.27306 = D.27297 & 2;
      if (D.27306 != 0) goto <D.27307>; else goto <D.27308>;
      <D.27307>:
      D.27309 = monoeg_strdup ("Recursive type definition detected");
      mono_class_set_failure (class, 7, D.27309);
      goto leave;
      <D.27308>:
      class->init_pending = 1;
      D.27310 = mono_verifier_is_enabled_for_class (class);
      if (D.27310 != 0) goto <D.27311>; else goto <D.27312>;
      <D.27311>:
      D.27313 = mono_verifier_verify_class (class);
      if (D.27313 == 0) goto <D.27314>; else goto <D.27315>;
      <D.27314>:
      D.27316 = class->image;
      D.27317 = class->name;
      D.27316 = class->image;
      D.27318 = D.27316->assembly_name;
      D.27319 = concat_two_strings_with_zero (D.27316, D.27317, D.27318);
      mono_class_set_failure (class, 7, D.27319);
      goto leave;
      <D.27315>:
      <D.27312>:
      D.27322 = class->byval_arg.type;
      if (D.27322 == 20) goto <D.27320>; else goto <D.27323>;
      <D.27323>:
      D.27322 = class->byval_arg.type;
      if (D.27322 == 29) goto <D.27320>; else goto <D.27321>;
      <D.27320>:
      {
        struct MonoClass * element_class;

        element_class = class->element_class;
        D.27324 = BIT_FIELD_REF <*element_class, 64, 256>;
        D.27325 = D.27324 & 1;
        if (D.27325 == 0) goto <D.27326>; else goto <D.27327>;
        <D.27326>:
        mono_class_init (element_class);
        <D.27327>:
        D.27328 = element_class->exception_type;
        if (D.27328 != 0) goto <D.27329>; else goto <D.27330>;
        <D.27329>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.27330>:
      }
      <D.27321>:
      D.27331 = mono_is_security_manager_active ();
      if (D.27331 != 0) goto <D.27332>; else goto <D.27333>;
      <D.27332>:
      D.27334 = class->parent;
      if (D.27334 != 0B) goto <D.27335>; else goto <D.27336>;
      <D.27335>:
      D.27334 = class->parent;
      D.27337 = D.27334->flags;
      D.27338 = D.27337 & 262144;
      if (D.27338 != 0) goto <D.27339>; else goto <D.27340>;
      <D.27339>:
      D.27334 = class->parent;
      mono_secman_inheritancedemand_class (class, D.27334);
      <D.27340>:
      <D.27336>:
      <D.27333>:
      D.27341 = mono_stats.initialized_class_count;
      D.27342 = D.27341 + 1;
      mono_stats.initialized_class_count = D.27342;
      D.27343 = class->generic_class;
      if (D.27343 != 0B) goto <D.27344>; else goto <D.27345>;
      <D.27344>:
      D.27343 = class->generic_class;
      D.27346 = BIT_FIELD_REF <*D.27343, 64, 192>;
      D.27347 = D.27346 & 1;
      if (D.27347 == 0) goto <D.27348>; else goto <D.27349>;
      <D.27348>:
      {
        struct MonoClass * gklass;

        D.27343 = class->generic_class;
        gklass = D.27343->container_class;
        D.27350 = mono_stats.generic_class_count;
        D.27351 = D.27350 + 1;
        mono_stats.generic_class_count = D.27351;
        class->method = gklass->method;
        class->field = gklass->field;
        mono_class_init (gklass);
        D.27352 = gklass->exception_type;
        if (D.27352 == 0) goto <D.27353>; else goto <D.27354>;
        <D.27353>:
        mono_class_setup_methods (gklass);
        <D.27354>:
        D.27352 = gklass->exception_type;
        if (D.27352 != 0) goto <D.27355>; else goto <D.27356>;
        <D.27355>:
        D.27357 = monoeg_g_strdup_printf ("Generic Type Defintion failed to init");
        mono_class_set_failure (class, 7, D.27357);
        goto leave;
        <D.27356>:
        D.27360 = class->flags;
        D.27361 = D.27360 & 32;
        if (D.27361 != 0) goto <D.27358>; else goto <D.27362>;
        <D.27362>:
        D.27322 = class->byval_arg.type;
        if (D.27322 == 19) goto <D.27358>; else goto <D.27363>;
        <D.27363>:
        D.27322 = class->byval_arg.type;
        if (D.27322 == 30) goto <D.27358>; else goto <D.27359>;
        <D.27358>:
        D.27364 = mono_get_unique_iid (class);
        D.27365 = (short unsigned int) D.27364;
        class->interface_id = D.27365;
        <D.27359>:
      }
      <D.27349>:
      <D.27345>:
      D.27334 = class->parent;
      if (D.27334 != 0B) goto <D.27366>; else goto <D.27367>;
      <D.27366>:
      D.27334 = class->parent;
      D.27368 = BIT_FIELD_REF <*D.27334, 64, 256>;
      D.27369 = D.27368 & 1;
      if (D.27369 == 0) goto <D.27370>; else goto <D.27371>;
      <D.27370>:
      D.27334 = class->parent;
      mono_class_init (D.27334);
      <D.27371>:
      <D.27367>:
      has_cached_info = mono_class_get_cached_class_info (class, &cached_info);
      D.27343 = class->generic_class;
      if (D.27343 != 0B) goto <D.27372>; else goto <D.27374>;
      <D.27374>:
      D.27316 = class->image;
      D.27375 = BIT_FIELD_REF <*D.27316, 64, 192>;
      D.27376 = D.27375 & 34359738368;
      if (D.27376 != 0) goto <D.27372>; else goto <D.27377>;
      <D.27377>:
      D.27378 = class->type_token;
      if (D.27378 == 0) goto <D.27372>; else goto <D.27379>;
      <D.27379>:
      if (has_cached_info != 0) goto <D.27380>; else goto <D.27373>;
      <D.27380>:
      D.27381 = BIT_FIELD_REF <cached_info, 64, 0>;
      D.27382 = D.27381 & 34359738368;
      if (D.27382 == 0) goto <D.27372>; else goto <D.27373>;
      <D.27372>:
      class->nested_classes_inited = 1;
      <D.27373>:
      if (has_cached_info != 0) goto <D.27383>; else goto <D.27384>;
      <D.27383>:
      D.27385 = cached_info.instance_size;
      D.27386 = (int) D.27385;
      class->instance_size = D.27386;
      D.27387 = cached_info.class_size;
      D.27388 = (int) D.27387;
      class->sizes.class_size = D.27388;
      D.27389 = cached_info.packing_size;
      D.27390 = (unsigned char) D.27389;
      D.27391 = (<unnamed-unsigned:4>) D.27390;
      class->packing_size = D.27391;
      D.27392 = cached_info.min_align;
      D.27393 = (unsigned char) D.27392;
      class->min_align = D.27393;
      D.27394 = cached_info.blittable;
      class->blittable = D.27394;
      D.27395 = cached_info.has_references;
      class->has_references = D.27395;
      D.27396 = cached_info.has_static_refs;
      class->has_static_refs = D.27396;
      D.27397 = cached_info.no_special_static_fields;
      class->no_special_static_fields = D.27397;
      goto <D.27398>;
      <D.27384>:
      D.27297 = BIT_FIELD_REF <*class, 64, 256>;
      D.27399 = D.27297 & 4;
      if (D.27399 == 0) goto <D.27400>; else goto <D.27401>;
      <D.27400>:
      mono_class_setup_fields (class);
      D.27302 = class->exception_type;
      if (D.27302 != 0) goto leave; else goto <D.27402>;
      <D.27402>:
      D.27403 = mono_loader_get_last_error ();
      if (D.27403 != 0B) goto leave; else goto <D.27404>;
      <D.27404>:
      <D.27401>:
      <D.27398>:
      D.27405 = class->rank;
      if (D.27405 != 0) goto <D.27406>; else goto <D.27407>;
      <D.27406>:
      D.27405 = class->rank;
      if (D.27405 > 1) goto <D.27409>; else goto <D.27410>;
      <D.27409>:
      iftmp.173 = 5;
      goto <D.27411>;
      <D.27410>:
      iftmp.173 = 4;
      <D.27411>:
      class->method.count = iftmp.173;
      D.27412 = class->interface_count;
      if (D.27412 != 0) goto <D.27413>; else goto <D.27414>;
      <D.27413>:
      {
        int count_generic;

        count_generic = generic_array_methods (class);
        D.27415 = class->method.count;
        D.27412 = class->interface_count;
        D.27416 = (int) D.27412;
        D.27417 = D.27416 * count_generic;
        D.27418 = (unsigned int) D.27417;
        D.27419 = D.27415 + D.27418;
        class->method.count = D.27419;
      }
      <D.27414>:
      <D.27407>:
      mono_class_setup_supertypes (class);
      default_ghc.174 = default_ghc;
      if (default_ghc.174 == 0B) goto <D.27421>; else goto <D.27422>;
      <D.27421>:
      initialize_object_slots (class);
      <D.27422>:
      if (has_cached_info != 0) goto <D.27423>; else goto <D.27424>;
      <D.27423>:
      D.27425 = cached_info.vtable_size;
      D.27426 = (int) D.27425;
      class->vtable_size = D.27426;
      D.27427 = cached_info.has_finalize;
      class->has_finalize = D.27427;
      class->has_finalize_inited = 1;
      D.27428 = cached_info.ghcimpl;
      class->ghcimpl = D.27428;
      D.27429 = cached_info.has_cctor;
      class->has_cctor = D.27429;
      goto <D.27430>;
      <D.27424>:
      D.27405 = class->rank;
      if (D.27405 == 1) goto <D.27433>; else goto <D.27431>;
      <D.27433>:
      D.27322 = class->byval_arg.type;
      if (D.27322 == 29) goto <D.27434>; else goto <D.27431>;
      <D.27434>:
      {
        static int szarray_vtable_size[2] = {0};
        int slot;

        D.27435 = class->element_class;
        D.27436 = &D.27435->byval_arg;
        D.27437 = mono_type_is_reference (D.27436);
        D.27438 = D.27437 == 0;
        slot = (int) D.27438;
        D.27439 = szarray_vtable_size[slot];
        if (D.27439 == 0) goto <D.27440>; else goto <D.27441>;
        <D.27440>:
        mono_class_setup_vtable (class);
        D.27442 = class->vtable_size;
        szarray_vtable_size[slot] = D.27442;
        goto <D.27443>;
        <D.27441>:
        D.27439 = szarray_vtable_size[slot];
        class->vtable_size = D.27439;
        <D.27443>:
        class->has_finalize_inited = 1;
      }
      goto <D.27432>;
      <D.27431>:
      D.27343 = class->generic_class;
      if (D.27343 != 0B) goto <D.27446>; else goto <D.27444>;
      <D.27446>:
      D.27360 = class->flags;
      D.27361 = D.27360 & 32;
      if (D.27361 == 0) goto <D.27447>; else goto <D.27444>;
      <D.27447>:
      D.27322 = class->byval_arg.type;
      if (D.27322 != 19) goto <D.27448>; else goto <D.27444>;
      <D.27448>:
      D.27322 = class->byval_arg.type;
      if (D.27322 != 30) goto <D.27449>; else goto <D.27444>;
      <D.27449>:
      {
        struct MonoClass * gklass;

        D.27343 = class->generic_class;
        gklass = D.27343->container_class;
        D.27450 = gklass->ghcimpl;
        class->ghcimpl = D.27450;
        D.27451 = mono_class_has_finalizer (gklass);
        D.27452 = (unsigned char) D.27451;
        D.27453 = (<unnamed-unsigned:1>) D.27452;
        class->has_finalize = D.27453;
        class->has_finalize_inited = 1;
        D.27454 = gklass->has_cctor;
        class->has_cctor = D.27454;
        mono_class_setup_vtable (gklass);
        D.27455 = gklass->exception_type;
        if (D.27455 != 0) goto <D.27456>; else goto <D.27457>;
        <D.27456>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.27457>:
        D.27458 = gklass->vtable_size;
        class->vtable_size = D.27458;
      }
      goto <D.27445>;
      <D.27444>:
      D.27360 = class->flags;
      D.27361 = D.27360 & 32;
      if (D.27361 == 0) goto <D.27462>; else goto <D.27459>;
      <D.27462>:
      D.27322 = class->byval_arg.type;
      if (D.27322 != 19) goto <D.27463>; else goto <D.27459>;
      <D.27463>:
      D.27322 = class->byval_arg.type;
      if (D.27322 != 30) goto <D.27460>; else goto <D.27459>;
      <D.27459>:
      D.27316 = class->image;
      D.27464 = mono_defaults.corlib;
      if (D.27316 != D.27464) goto <D.27460>; else goto <D.27461>;
      <D.27460>:
      {
        struct MonoMethod * cmethod;

        cmethod = 0B;
        D.27378 = class->type_token;
        if (D.27378 != 0) goto <D.27465>; else goto <D.27466>;
        <D.27465>:
        cmethod = find_method_in_metadata (class, ".cctor", 0, 2048);
        if (cmethod != 0B) goto <D.27467>; else goto <D.27468>;
        <D.27467>:
        D.27469 = cmethod->flags;
        D.27470 = (int) D.27469;
        D.27471 = D.27470 & 2048;
        if (D.27471 != 0) goto <D.27472>; else goto <D.27473>;
        <D.27472>:
        class->has_cctor = 1;
        <D.27473>:
        <D.27468>:
        goto <D.27474>;
        <D.27466>:
        mono_class_setup_methods (class);
        D.27302 = class->exception_type;
        if (D.27302 != 0) goto leave; else goto <D.27475>;
        <D.27475>:
        i = 0;
        goto <D.20820>;
        <D.20819>:
        {
          struct MonoMethod * method;

          D.27476 = class->methods;
          D.27477 = (long unsigned int) i;
          D.27478 = D.27477 * 8;
          D.27479 = D.27476 + D.27478;
          method = *D.27479;
          D.27480 = method->flags;
          D.27481 = (int) D.27480;
          D.27482 = D.27481 & 2048;
          if (D.27482 != 0) goto <D.27483>; else goto <D.27484>;
          <D.27483>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s1_len = 6;
            if (__s1_len <= 3) goto <D.27486>; else goto <D.27487>;
            <D.27486>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = method->name;
              D.27488 = ".cctor";
              D.27489 = MEM[(const unsigned char *)D.27488];
              D.27490 = (int) D.27489;
              D.27491 = *__s2;
              D.27492 = (int) D.27491;
              __result = D.27490 - D.27492;
              {
                if (__s1_len != 0) goto <D.27493>; else goto <D.27494>;
                <D.27493>:
                if (__result == 0) goto <D.27495>; else goto <D.27496>;
                <D.27495>:
                D.27497 = &MEM[(void *)".cctor" + 1B];
                D.27498 = *D.27497;
                D.27499 = (int) D.27498;
                D.27500 = __s2 + 1;
                D.27501 = *D.27500;
                D.27502 = (int) D.27501;
                __result = D.27499 - D.27502;
                if (__s1_len > 1) goto <D.27503>; else goto <D.27504>;
                <D.27503>:
                if (__result == 0) goto <D.27505>; else goto <D.27506>;
                <D.27505>:
                D.27507 = &MEM[(void *)".cctor" + 2B];
                D.27508 = *D.27507;
                D.27509 = (int) D.27508;
                D.27510 = __s2 + 2;
                D.27511 = *D.27510;
                D.27512 = (int) D.27511;
                __result = D.27509 - D.27512;
                if (__s1_len > 2) goto <D.27513>; else goto <D.27514>;
                <D.27513>:
                if (__result == 0) goto <D.27515>; else goto <D.27516>;
                <D.27515>:
                D.27517 = &MEM[(void *)".cctor" + 3B];
                D.27518 = *D.27517;
                D.27519 = (int) D.27518;
                D.27520 = __s2 + 3;
                D.27521 = *D.27520;
                D.27522 = (int) D.27521;
                __result = D.27519 - D.27522;
                <D.27516>:
                <D.27514>:
                <D.27506>:
                <D.27504>:
                <D.27496>:
                <D.27494>:
              }
              D.20813 = __result;
            }
            iftmp.175 = D.20813;
            goto <D.27523>;
            <D.27487>:
            D.27524 = method->name;
            iftmp.175 = __builtin_strcmp (".cctor", D.27524);
            <D.27523>:
            D.20817 = iftmp.175;
          }
          if (D.20817 == 0) goto <D.27525>; else goto <D.27526>;
          <D.27525>:
          class->has_cctor = 1;
          goto <D.20818>;
          <D.27526>:
          <D.27484>:
        }
        i = i + 1;
        <D.20820>:
        i.176 = (unsigned int) i;
        D.27415 = class->method.count;
        if (i.176 < D.27415) goto <D.20819>; else goto <D.20818>;
        <D.20818>:
        <D.27474>:
      }
      <D.27461>:
      <D.27445>:
      <D.27432>:
      <D.27430>:
      D.27334 = class->parent;
      if (D.27334 != 0B) goto <D.27528>; else goto <D.27529>;
      <D.27528>:
      {
        int first_iface_slot;

        D.27334 = class->parent;
        mono_class_init (D.27334);
        D.27334 = class->parent;
        D.27530 = D.27334->exception_type;
        if (D.27530 != 0) goto <D.27531>; else goto <D.27532>;
        <D.27531>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.27532>:
        D.27533 = mono_loader_get_last_error ();
        if (D.27533 != 0B) goto leave; else goto <D.27534>;
        <D.27534>:
        D.27334 = class->parent;
        D.27535 = D.27334->vtable_size;
        if (D.27535 == 0) goto <D.27536>; else goto <D.27537>;
        <D.27536>:
        D.27334 = class->parent;
        mono_class_setup_vtable (D.27334);
        D.27334 = class->parent;
        D.27530 = D.27334->exception_type;
        if (D.27530 != 0) goto <D.27538>; else goto <D.27539>;
        <D.27538>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.27539>:
        D.27540 = mono_loader_get_last_error ();
        if (D.27540 != 0B) goto leave; else goto <D.27541>;
        <D.27541>:
        <D.27537>:
        D.27334 = class->parent;
        first_iface_slot = D.27334->vtable_size;
        D.27542 = mono_class_need_stelemref_method (class);
        if (D.27542 != 0) goto <D.27543>; else goto <D.27544>;
        <D.27543>:
        first_iface_slot = first_iface_slot + 1;
        <D.27544>:
        setup_interface_offsets (class, first_iface_slot, 1);
      }
      goto <D.27545>;
      <D.27529>:
      setup_interface_offsets (class, 0, 1);
      <D.27545>:
      D.27546 = mono_security_get_mode ();
      if (D.27546 == 1) goto <D.27547>; else goto <D.27548>;
      <D.27547>:
      mono_security_core_clr_check_inheritance (class);
      <D.27548>:
      D.27549 = mono_loader_get_last_error ();
      if (D.27549 != 0B) goto <D.27550>; else goto <D.27551>;
      <D.27550>:
      D.27302 = class->exception_type;
      if (D.27302 == 0) goto <D.27552>; else goto <D.27553>;
      <D.27552>:
      D.27554 = mono_loader_get_last_error ();
      set_failure_from_loader_error (class, D.27554);
      <D.27553>:
      mono_loader_clear_error ();
      <D.27551>:
      D.27343 = class->generic_class;
      if (D.27343 != 0B) goto <D.27555>; else goto <D.27556>;
      <D.27555>:
      D.27557 = mono_verifier_class_is_valid_generic_instantiation (class);
      if (D.27557 == 0) goto <D.27558>; else goto <D.27559>;
      <D.27558>:
      D.27560 = monoeg_strdup ("Invalid generic instantiation");
      mono_class_set_failure (class, 7, D.27560);
      <D.27559>:
      <D.27556>:
      goto leave;
      leave:
      mono_memory_barrier ();
      class->inited = 1;
      class->init_pending = 0;
      mono_loader_unlock ();
      mono_debugger_class_init_func.177 = mono_debugger_class_init_func;
      if (mono_debugger_class_init_func.177 != 0B) goto <D.27562>; else goto <D.27563>;
      <D.27562>:
      mono_debugger_class_init_func.177 = mono_debugger_class_init_func;
      mono_debugger_class_init_func.177 (class);
      <D.27563>:
      D.27302 = class->exception_type;
      D.27303 = D.27302 == 0;
      D.27301 = (mono_bool) D.27303;
      return D.27301;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_get_unique_iid (struct MonoClass * class)
{
  int iftmp.178;
  unsigned int D.27569;
  unsigned int D.27570;
  unsigned char D.27572;
  _Bool D.27575;
  long int D.27576;
  long int D.27577;
  struct MonoBitSet * global_interface_bitset.179;
  struct MonoBitSet * global_interface_bitset.180;
  unsigned int D.27586;
  int D.27587;
  unsigned int D.27588;
  unsigned int iid.181;
  struct MonoGenericClass * D.27590;
  struct MonoImage * D.27593;
  struct MonoBitSet * D.27594;
  unsigned int D.27597;
  int D.27600;
  unsigned int D.27601;
  struct MonoBitSet * D.27603;
  int mono_print_vtable.182;
  struct MonoType * D.27607;
  struct MonoGenericInst * D.27611;
  long unsigned int D.27612;
  long unsigned int D.27613;
  unsigned int D.27615;
  _Bool D.27616;
  long int D.27617;
  long int D.27618;
  char * D.27621;
  _Bool D.27622;
  long int D.27623;
  long int D.27624;
  guint D.27627;
  int iid;

  D.27569 = class->flags;
  D.27570 = D.27569 & 32;
  if (D.27570 == 0) goto <D.27571>; else goto <D.27567>;
  <D.27571>:
  D.27572 = class->byval_arg.type;
  if (D.27572 != 19) goto <D.27573>; else goto <D.27567>;
  <D.27573>:
  D.27572 = class->byval_arg.type;
  if (D.27572 != 30) goto <D.27574>; else goto <D.27567>;
  <D.27574>:
  iftmp.178 = 1;
  goto <D.27568>;
  <D.27567>:
  iftmp.178 = 0;
  <D.27568>:
  D.27575 = iftmp.178 != 0;
  D.27576 = (long int) D.27575;
  D.27577 = __builtin_expect (D.27576, 0);
  if (D.27577 != 0) goto <D.27578>; else goto <D.27579>;
  <D.27578>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2592, "MONO_CLASS_IS_INTERFACE (class)");
  <D.27579>:
  global_interface_bitset.179 = global_interface_bitset;
  if (global_interface_bitset.179 == 0B) goto <D.27581>; else goto <D.27582>;
  <D.27581>:
  global_interface_bitset.180 = mono_bitset_new (128, 0);
  global_interface_bitset = global_interface_bitset.180;
  <D.27582>:
  global_interface_bitset.179 = global_interface_bitset;
  iid = mono_bitset_find_first_unset (global_interface_bitset.179, -1);
  if (iid < 0) goto <D.27584>; else goto <D.27585>;
  <D.27584>:
  {
    int old_size;
    struct MonoBitSet * new_set;

    global_interface_bitset.179 = global_interface_bitset;
    D.27586 = mono_bitset_size (global_interface_bitset.179);
    old_size = (int) D.27586;
    global_interface_bitset.179 = global_interface_bitset;
    D.27587 = old_size * 2;
    D.27588 = (unsigned int) D.27587;
    new_set = mono_bitset_clone (global_interface_bitset.179, D.27588);
    global_interface_bitset.179 = global_interface_bitset;
    mono_bitset_free (global_interface_bitset.179);
    global_interface_bitset = new_set;
    iid = old_size;
  }
  <D.27585>:
  global_interface_bitset.179 = global_interface_bitset;
  iid.181 = (unsigned int) iid;
  mono_bitset_set (global_interface_bitset.179, iid.181);
  D.27590 = class->generic_class;
  if (D.27590 == 0B) goto <D.27591>; else goto <D.27592>;
  <D.27591>:
  D.27593 = class->image;
  D.27594 = D.27593->interface_bitset;
  if (D.27594 != 0B) goto <D.27595>; else goto <D.27596>;
  <D.27595>:
  iid.181 = (unsigned int) iid;
  D.27593 = class->image;
  D.27594 = D.27593->interface_bitset;
  D.27597 = mono_bitset_size (D.27594);
  if (iid.181 >= D.27597) goto <D.27598>; else goto <D.27599>;
  <D.27598>:
  {
    struct MonoBitSet * new_set;

    D.27593 = class->image;
    D.27594 = D.27593->interface_bitset;
    D.27600 = iid + 1;
    D.27601 = (unsigned int) D.27600;
    new_set = mono_bitset_clone (D.27594, D.27601);
    D.27593 = class->image;
    D.27594 = D.27593->interface_bitset;
    mono_bitset_free (D.27594);
    D.27593 = class->image;
    D.27593->interface_bitset = new_set;
  }
  <D.27599>:
  goto <D.27602>;
  <D.27596>:
  D.27593 = class->image;
  D.27600 = iid + 1;
  D.27601 = (unsigned int) D.27600;
  D.27603 = mono_bitset_new (D.27601, 0);
  D.27593->interface_bitset = D.27603;
  <D.27602>:
  D.27593 = class->image;
  D.27594 = D.27593->interface_bitset;
  iid.181 = (unsigned int) iid;
  mono_bitset_set (D.27594, iid.181);
  <D.27592>:
  mono_print_vtable.182 = mono_print_vtable;
  if (mono_print_vtable.182 != 0) goto <D.27605>; else goto <D.27606>;
  <D.27605>:
  {
    int generic_id;
    char * type_name;

    D.27607 = &class->byval_arg;
    type_name = mono_type_full_name (D.27607);
    D.27590 = class->generic_class;
    if (D.27590 != 0B) goto <D.27610>; else goto <D.27608>;
    <D.27610>:
    D.27590 = class->generic_class;
    D.27611 = D.27590->context.class_inst;
    D.27612 = BIT_FIELD_REF <*D.27611, 64, 0>;
    D.27613 = D.27612 & 18014398509481984;
    if (D.27613 == 0) goto <D.27614>; else goto <D.27608>;
    <D.27614>:
    D.27590 = class->generic_class;
    D.27611 = D.27590->context.class_inst;
    D.27615 = D.27611->id;
    generic_id = (int) D.27615;
    D.27616 = generic_id == 0;
    D.27617 = (long int) D.27616;
    D.27618 = __builtin_expect (D.27617, 0);
    if (D.27618 != 0) goto <D.27619>; else goto <D.27620>;
    <D.27619>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2627, "generic_id != 0");
    <D.27620>:
    goto <D.27609>;
    <D.27608>:
    generic_id = 0;
    <D.27609>:
    D.27593 = class->image;
    D.27621 = D.27593->name;
    printf ("Interface: assigned id %d to %s|%s|%d\n", iid, D.27621, type_name, generic_id);
    monoeg_g_free (type_name);
  }
  <D.27606>:
  D.27622 = iid > 65535;
  D.27623 = (long int) D.27622;
  D.27624 = __builtin_expect (D.27623, 0);
  if (D.27624 != 0) goto <D.27625>; else goto <D.27626>;
  <D.27625>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2636, "iid <= 65535");
  <D.27626>:
  D.27627 = (guint) iid;
  return D.27627;
}


mono_class_get_cached_class_info (struct MonoClass * klass, struct MonoCachedClassInfo * res)
{
  gboolean (*<T1f06>) (struct MonoClass *, struct MonoCachedClassInfo *) get_cached_class_info.183;
  gboolean D.27632;

  get_cached_class_info.183 = get_cached_class_info;
  if (get_cached_class_info.183 == 0B) goto <D.27630>; else goto <D.27631>;
  <D.27630>:
  D.27632 = 0;
  return D.27632;
  <D.27631>:
  get_cached_class_info.183 = get_cached_class_info;
  D.27632 = get_cached_class_info.183 (klass, res);
  return D.27632;
}


initialize_object_slots (struct MonoClass * class)
{
  struct MonoMethod * default_ghc.184;
  struct MonoClass * D.27637;
  struct MonoMethod * * D.27640;
  long unsigned int D.27641;
  long unsigned int D.27642;
  struct MonoMethod * * D.27643;
  int D.20664;
  int iftmp.185;
  int D.20663;
  const char[12] * D.27647;
  unsigned char D.27648;
  int D.27649;
  unsigned char D.27650;
  int D.27651;
  const unsigned char * D.27656;
  unsigned char D.27657;
  int D.27658;
  const unsigned char * D.27659;
  unsigned char D.27660;
  int D.27661;
  const unsigned char * D.27666;
  unsigned char D.27667;
  int D.27668;
  const unsigned char * D.27669;
  unsigned char D.27670;
  int D.27671;
  const unsigned char * D.27676;
  unsigned char D.27677;
  int D.27678;
  const unsigned char * D.27679;
  unsigned char D.27680;
  int D.27681;
  const char * D.27683;
  int D.20673;
  int iftmp.186;
  int D.20672;
  const char[9] * D.27690;
  unsigned char D.27691;
  int D.27692;
  unsigned char D.27693;
  int D.27694;
  const unsigned char * D.27699;
  unsigned char D.27700;
  int D.27701;
  const unsigned char * D.27702;
  unsigned char D.27703;
  int D.27704;
  const unsigned char * D.27709;
  unsigned char D.27710;
  int D.27711;
  const unsigned char * D.27712;
  unsigned char D.27713;
  int D.27714;
  const unsigned char * D.27719;
  unsigned char D.27720;
  int D.27721;
  const unsigned char * D.27722;
  unsigned char D.27723;
  int D.27724;
  int D.27728;
  int ghc_slot.187;
  _Bool D.27730;
  long int D.27731;
  long int D.27732;
  long unsigned int D.27735;
  long unsigned int D.27736;
  struct MonoMethod * * D.27737;
  struct MonoMethod * default_ghc.188;
  int finalize_slot.189;
  _Bool D.27740;
  long int D.27741;
  long int D.27742;
  long unsigned int D.27745;
  long unsigned int D.27746;
  struct MonoMethod * * D.27747;
  struct MonoMethod * default_finalize.190;
  int i;

  default_ghc.184 = default_ghc;
  if (default_ghc.184 != 0B) goto <D.27635>; else goto <D.27636>;
  <D.27635>:
  return;
  <D.27636>:
  D.27637 = mono_defaults.object_class;
  if (D.27637 == class) goto <D.27638>; else goto <D.27639>;
  <D.27638>:
  mono_class_setup_vtable (class);
  i = 0;
  goto <D.20675>;
  <D.20674>:
  {
    struct MonoMethod * cm;

    D.27640 = class->vtable;
    D.27641 = (long unsigned int) i;
    D.27642 = D.27641 * 8;
    D.27643 = D.27640 + D.27642;
    cm = *D.27643;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = cm->name;
        D.27647 = "GetHashCode";
        D.27648 = MEM[(const unsigned char *)D.27647];
        D.27649 = (int) D.27648;
        D.27650 = *__s2;
        D.27651 = (int) D.27650;
        __result = D.27649 - D.27651;
        {
          if (__s2_len != 0) goto <D.27652>; else goto <D.27653>;
          <D.27652>:
          if (__result == 0) goto <D.27654>; else goto <D.27655>;
          <D.27654>:
          D.27656 = &MEM[(void *)"GetHashCode" + 1B];
          D.27657 = *D.27656;
          D.27658 = (int) D.27657;
          D.27659 = __s2 + 1;
          D.27660 = *D.27659;
          D.27661 = (int) D.27660;
          __result = D.27658 - D.27661;
          if (__s2_len > 1) goto <D.27662>; else goto <D.27663>;
          <D.27662>:
          if (__result == 0) goto <D.27664>; else goto <D.27665>;
          <D.27664>:
          D.27666 = &MEM[(void *)"GetHashCode" + 2B];
          D.27667 = *D.27666;
          D.27668 = (int) D.27667;
          D.27669 = __s2 + 2;
          D.27670 = *D.27669;
          D.27671 = (int) D.27670;
          __result = D.27668 - D.27671;
          if (__s2_len > 2) goto <D.27672>; else goto <D.27673>;
          <D.27672>:
          if (__result == 0) goto <D.27674>; else goto <D.27675>;
          <D.27674>:
          D.27676 = &MEM[(void *)"GetHashCode" + 3B];
          D.27677 = *D.27676;
          D.27678 = (int) D.27677;
          D.27679 = __s2 + 3;
          D.27680 = *D.27679;
          D.27681 = (int) D.27680;
          __result = D.27678 - D.27681;
          <D.27675>:
          <D.27673>:
          <D.27665>:
          <D.27663>:
          <D.27655>:
          <D.27653>:
        }
        D.20663 = __result;
      }
      iftmp.185 = -D.20663;
      goto <D.27682>;
      <D.27646>:
      D.27683 = cm->name;
      iftmp.185 = __builtin_strcmp (D.27683, "GetHashCode");
      <D.27682>:
      D.20664 = iftmp.185;
    }
    if (D.20664 == 0) goto <D.27684>; else goto <D.27685>;
    <D.27684>:
    ghc_slot = i;
    goto <D.27686>;
    <D.27685>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = cm->name;
        D.27690 = "Finalize";
        D.27691 = MEM[(const unsigned char *)D.27690];
        D.27692 = (int) D.27691;
        D.27693 = *__s2;
        D.27694 = (int) D.27693;
        __result = D.27692 - D.27694;
        {
          if (__s2_len != 0) goto <D.27695>; else goto <D.27696>;
          <D.27695>:
          if (__result == 0) goto <D.27697>; else goto <D.27698>;
          <D.27697>:
          D.27699 = &MEM[(void *)"Finalize" + 1B];
          D.27700 = *D.27699;
          D.27701 = (int) D.27700;
          D.27702 = __s2 + 1;
          D.27703 = *D.27702;
          D.27704 = (int) D.27703;
          __result = D.27701 - D.27704;
          if (__s2_len > 1) goto <D.27705>; else goto <D.27706>;
          <D.27705>:
          if (__result == 0) goto <D.27707>; else goto <D.27708>;
          <D.27707>:
          D.27709 = &MEM[(void *)"Finalize" + 2B];
          D.27710 = *D.27709;
          D.27711 = (int) D.27710;
          D.27712 = __s2 + 2;
          D.27713 = *D.27712;
          D.27714 = (int) D.27713;
          __result = D.27711 - D.27714;
          if (__s2_len > 2) goto <D.27715>; else goto <D.27716>;
          <D.27715>:
          if (__result == 0) goto <D.27717>; else goto <D.27718>;
          <D.27717>:
          D.27719 = &MEM[(void *)"Finalize" + 3B];
          D.27720 = *D.27719;
          D.27721 = (int) D.27720;
          D.27722 = __s2 + 3;
          D.27723 = *D.27722;
          D.27724 = (int) D.27723;
          __result = D.27721 - D.27724;
          <D.27718>:
          <D.27716>:
          <D.27708>:
          <D.27706>:
          <D.27698>:
          <D.27696>:
        }
        D.20672 = __result;
      }
      iftmp.186 = -D.20672;
      goto <D.27725>;
      <D.27689>:
      D.27683 = cm->name;
      iftmp.186 = __builtin_strcmp (D.27683, "Finalize");
      <D.27725>:
      D.20673 = iftmp.186;
    }
    if (D.20673 == 0) goto <D.27726>; else goto <D.27727>;
    <D.27726>:
    finalize_slot = i;
    <D.27727>:
    <D.27686>:
  }
  i = i + 1;
  <D.20675>:
  D.27728 = class->vtable_size;
  if (D.27728 > i) goto <D.20674>; else goto <D.20676>;
  <D.20676>:
  ghc_slot.187 = ghc_slot;
  D.27730 = ghc_slot.187 <= 0;
  D.27731 = (long int) D.27730;
  D.27732 = __builtin_expect (D.27731, 0);
  if (D.27732 != 0) goto <D.27733>; else goto <D.27734>;
  <D.27733>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4736, "ghc_slot > 0");
  <D.27734>:
  D.27640 = class->vtable;
  ghc_slot.187 = ghc_slot;
  D.27735 = (long unsigned int) ghc_slot.187;
  D.27736 = D.27735 * 8;
  D.27737 = D.27640 + D.27736;
  default_ghc.188 = *D.27737;
  default_ghc = default_ghc.188;
  finalize_slot.189 = finalize_slot;
  D.27740 = finalize_slot.189 <= 0;
  D.27741 = (long int) D.27740;
  D.27742 = __builtin_expect (D.27741, 0);
  if (D.27742 != 0) goto <D.27743>; else goto <D.27744>;
  <D.27743>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4739, "finalize_slot > 0");
  <D.27744>:
  D.27640 = class->vtable;
  finalize_slot.189 = finalize_slot;
  D.27745 = (long unsigned int) finalize_slot.189;
  D.27746 = D.27745 * 8;
  D.27747 = D.27640 + D.27746;
  default_finalize.190 = *D.27747;
  default_finalize = default_finalize.190;
  <D.27639>:
}


find_method_in_metadata (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoImage * D.27750;
  unsigned int D.27751;
  unsigned int i.191;
  unsigned int D.27753;
  int D.27754;
  int D.22278;
  unsigned int D.27755;
  const char * D.27756;
  unsigned int D.27759;
  unsigned int D.27760;
  short unsigned int D.27765;
  int D.27766;
  unsigned int D.27769;
  struct MonoMethod * D.27770;
  struct MonoMethod * res;
  int i;

  res = 0B;
  i = 0;
  goto <D.22281>;
  <D.22280>:
  {
    guint32 cols[6];
    struct MonoMethod * method;
    struct MonoMethodSignature * sig;

    try
      {
        D.27750 = klass->image;
        D.27751 = klass->method.first;
        i.191 = (unsigned int) i;
        D.27753 = D.27751 + i.191;
        D.27754 = (int) D.27753;
        mono_metadata_decode_table_row (D.27750, 6, D.27754, &cols, 6);
        {
          size_t __s1_len;
          size_t __s2_len;

          D.27750 = klass->image;
          D.27755 = cols[3];
          D.27756 = mono_metadata_string_heap (D.27750, D.27755);
          D.22278 = __builtin_strcmp (D.27756, name);
        }
        if (D.22278 == 0) goto <D.27757>; else goto <D.27758>;
        <D.27757>:
        D.27750 = klass->image;
        D.27751 = klass->method.first;
        i.191 = (unsigned int) i;
        D.27753 = D.27751 + i.191;
        D.27759 = D.27753 + 1;
        D.27760 = D.27759 | 100663296;
        method = mono_get_method (D.27750, D.27760, klass);
        if (param_count == -1) goto <D.27761>; else goto <D.27762>;
        <D.27761>:
        res = method;
        goto <D.22279>;
        <D.27762>:
        sig = mono_method_signature (method);
        if (sig != 0B) goto <D.27763>; else goto <D.27764>;
        <D.27763>:
        D.27765 = sig->param_count;
        D.27766 = (int) D.27765;
        if (D.27766 == param_count) goto <D.27767>; else goto <D.27768>;
        <D.27767>:
        res = method;
        goto <D.22279>;
        <D.27768>:
        <D.27764>:
        <D.27758>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  i = i + 1;
  <D.22281>:
  i.191 = (unsigned int) i;
  D.27769 = klass->method.count;
  if (i.191 < D.27769) goto <D.22280>; else goto <D.22279>;
  <D.22279>:
  D.27770 = res;
  return D.27770;
}


mono_class_has_finalizer (struct MonoClass * klass)
{
  long unsigned int D.27774;
  long unsigned int D.27775;
  unsigned int D.27778;
  unsigned int D.27779;
  unsigned char D.27782;
  long unsigned int D.27787;
  long unsigned int D.27788;
  struct MonoClass * D.27793;
  long unsigned int D.27795;
  long unsigned int D.27796;
  unsigned char D.27800;
  struct MonoLoaderError * D.27802;
  struct MonoMethod * * D.27804;
  int finalize_slot.192;
  long unsigned int D.27806;
  long unsigned int D.27807;
  struct MonoMethod * * D.27808;
  int D.27811;
  _Bool D.27812;
  long int D.27813;
  long int D.27814;
  long unsigned int D.27819;
  long unsigned int D.27820;
  struct MonoMethod * default_finalize.193;
  gboolean D.27826;
  <unnamed-unsigned:1> D.27827;
  void leave = <<< error >>>;

  D.27774 = BIT_FIELD_REF <*klass, 64, 256>;
  D.27775 = D.27774 & 68719476736;
  if (D.27775 == 0) goto <D.27776>; else goto <D.27777>;
  <D.27776>:
  {
    struct MonoClass * class;

    class = klass;
    mono_loader_lock ();
    D.27778 = class->flags;
    D.27779 = D.27778 & 32;
    if (D.27779 == 0) goto <D.27780>; else goto <D.27781>;
    <D.27780>:
    D.27782 = class->byval_arg.type;
    if (D.27782 != 19) goto <D.27783>; else goto <D.27784>;
    <D.27783>:
    D.27782 = class->byval_arg.type;
    if (D.27782 != 30) goto <D.27785>; else goto <D.27786>;
    <D.27785>:
    D.27787 = BIT_FIELD_REF <*class, 64, 256>;
    D.27788 = D.27787 & 8;
    if (D.27788 == 0) goto <D.27789>; else goto <D.27790>;
    <D.27789>:
    {
      struct MonoMethod * cmethod;

      cmethod = 0B;
      D.27793 = class->parent;
      if (D.27793 != 0B) goto <D.27794>; else goto <D.27791>;
      <D.27794>:
      D.27793 = class->parent;
      D.27795 = BIT_FIELD_REF <*D.27793, 64, 256>;
      D.27796 = D.27795 & 2097152;
      if (D.27796 != 0) goto <D.27797>; else goto <D.27791>;
      <D.27797>:
      class->has_finalize = 1;
      goto <D.27792>;
      <D.27791>:
      D.27793 = class->parent;
      if (D.27793 != 0B) goto <D.27798>; else goto <D.27799>;
      <D.27798>:
      mono_class_setup_vtable (class);
      D.27800 = class->exception_type;
      if (D.27800 != 0) goto leave; else goto <D.27801>;
      <D.27801>:
      D.27802 = mono_loader_get_last_error ();
      if (D.27802 != 0B) goto leave; else goto <D.27803>;
      <D.27803>:
      D.27804 = class->vtable;
      finalize_slot.192 = finalize_slot;
      D.27806 = (long unsigned int) finalize_slot.192;
      D.27807 = D.27806 * 8;
      D.27808 = D.27804 + D.27807;
      cmethod = *D.27808;
      <D.27799>:
      if (cmethod != 0B) goto <D.27809>; else goto <D.27810>;
      <D.27809>:
      D.27811 = class->vtable_size;
      finalize_slot.192 = finalize_slot;
      D.27812 = D.27811 <= finalize_slot.192;
      D.27813 = (long int) D.27812;
      D.27814 = __builtin_expect (D.27813, 0);
      if (D.27814 != 0) goto <D.27815>; else goto <D.27816>;
      <D.27815>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5201, "class->vtable_size > finalize_slot");
      <D.27816>:
      class->has_finalize = 0;
      D.27793 = class->parent;
      if (D.27793 != 0B) goto <D.27817>; else goto <D.27818>;
      <D.27817>:
      D.27819 = BIT_FIELD_REF <*cmethod, 64, 256>;
      D.27820 = D.27819 & 4096;
      if (D.27820 != 0) goto <D.27821>; else goto <D.27822>;
      <D.27821>:
      cmethod = MEM[(struct MonoMethodInflated *)cmethod].declaring;
      <D.27822>:
      default_finalize.193 = default_finalize;
      if (cmethod != default_finalize.193) goto <D.27824>; else goto <D.27825>;
      <D.27824>:
      class->has_finalize = 1;
      <D.27825>:
      <D.27818>:
      <D.27810>:
      <D.27792>:
    }
    <D.27790>:
    <D.27786>:
    <D.27784>:
    <D.27781>:
    mono_memory_barrier ();
    klass->has_finalize_inited = 1;
    mono_loader_unlock ();
  }
  <D.27777>:
  D.27827 = klass->has_finalize;
  D.27826 = (gboolean) D.27827;
  return D.27826;
  leave:
  mono_loader_unlock ();
  D.27826 = 0;
  return D.27826;
}


mono_is_corlib_image (struct MonoImage * image)
{
  long unsigned int D.27829;
  long unsigned int D.27830;
  gboolean D.27833;
  int iftmp.194;
  struct MonoAssembly * D.27837;
  int D.20839;
  int iftmp.195;
  int D.20838;
  const char[9] * D.27842;
  unsigned char D.27843;
  int D.27844;
  unsigned char D.27845;
  int D.27846;
  const unsigned char * D.27851;
  unsigned char D.27852;
  int D.27853;
  const unsigned char * D.27854;
  unsigned char D.27855;
  int D.27856;
  const unsigned char * D.27861;
  unsigned char D.27862;
  int D.27863;
  const unsigned char * D.27864;
  unsigned char D.27865;
  int D.27866;
  const unsigned char * D.27871;
  unsigned char D.27872;
  int D.27873;
  const unsigned char * D.27874;
  unsigned char D.27875;
  int D.27876;
  const char * D.27878;
  struct MonoImage * D.27880;
  _Bool D.27881;

  D.27829 = BIT_FIELD_REF <*image, 64, 192>;
  D.27830 = D.27829 & 34359738368;
  if (D.27830 != 0) goto <D.27831>; else goto <D.27832>;
  <D.27831>:
  D.27837 = image->assembly;
  if (D.27837 != 0B) goto <D.27838>; else goto <D.27835>;
  <D.27838>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.27837 = image->assembly;
      __s2 = D.27837->aname.name;
      D.27842 = "mscorlib";
      D.27843 = MEM[(const unsigned char *)D.27842];
      D.27844 = (int) D.27843;
      D.27845 = *__s2;
      D.27846 = (int) D.27845;
      __result = D.27844 - D.27846;
      {
        if (__s2_len != 0) goto <D.27847>; else goto <D.27848>;
        <D.27847>:
        if (__result == 0) goto <D.27849>; else goto <D.27850>;
        <D.27849>:
        D.27851 = &MEM[(void *)"mscorlib" + 1B];
        D.27852 = *D.27851;
        D.27853 = (int) D.27852;
        D.27854 = __s2 + 1;
        D.27855 = *D.27854;
        D.27856 = (int) D.27855;
        __result = D.27853 - D.27856;
        if (__s2_len > 1) goto <D.27857>; else goto <D.27858>;
        <D.27857>:
        if (__result == 0) goto <D.27859>; else goto <D.27860>;
        <D.27859>:
        D.27861 = &MEM[(void *)"mscorlib" + 2B];
        D.27862 = *D.27861;
        D.27863 = (int) D.27862;
        D.27864 = __s2 + 2;
        D.27865 = *D.27864;
        D.27866 = (int) D.27865;
        __result = D.27863 - D.27866;
        if (__s2_len > 2) goto <D.27867>; else goto <D.27868>;
        <D.27867>:
        if (__result == 0) goto <D.27869>; else goto <D.27870>;
        <D.27869>:
        D.27871 = &MEM[(void *)"mscorlib" + 3B];
        D.27872 = *D.27871;
        D.27873 = (int) D.27872;
        D.27874 = __s2 + 3;
        D.27875 = *D.27874;
        D.27876 = (int) D.27875;
        __result = D.27873 - D.27876;
        <D.27870>:
        <D.27868>:
        <D.27860>:
        <D.27858>:
        <D.27850>:
        <D.27848>:
      }
      D.20838 = __result;
    }
    iftmp.195 = -D.20838;
    goto <D.27877>;
    <D.27841>:
    D.27837 = image->assembly;
    D.27878 = D.27837->aname.name;
    iftmp.195 = __builtin_strcmp (D.27878, "mscorlib");
    <D.27877>:
    D.20839 = iftmp.195;
  }
  if (D.20839 == 0) goto <D.27879>; else goto <D.27835>;
  <D.27879>:
  iftmp.194 = 1;
  goto <D.27836>;
  <D.27835>:
  iftmp.194 = 0;
  <D.27836>:
  D.27833 = iftmp.194;
  return D.27833;
  <D.27832>:
  D.27880 = mono_defaults.corlib;
  D.27881 = D.27880 == image;
  D.27833 = (gboolean) D.27881;
  return D.27833;
}


mono_class_setup_mono_type (struct MonoClass * class)
{
  struct MonoImage * D.27883;
  int D.20854;
  int iftmp.196;
  int D.20853;
  const char[7] * D.27889;
  unsigned char D.27890;
  int D.27891;
  unsigned char D.27892;
  int D.27893;
  const unsigned char * D.27898;
  unsigned char D.27899;
  int D.27900;
  const unsigned char * D.27901;
  unsigned char D.27902;
  int D.27903;
  const unsigned char * D.27908;
  unsigned char D.27909;
  int D.27910;
  const unsigned char * D.27911;
  unsigned char D.27912;
  int D.27913;
  const unsigned char * D.27918;
  unsigned char D.27919;
  int D.27920;
  const unsigned char * D.27921;
  unsigned char D.27922;
  int D.27923;
  int D.20863;
  int iftmp.197;
  int D.20862;
  const char[10] * D.27930;
  unsigned char D.27931;
  int D.27932;
  unsigned char D.27933;
  int D.27934;
  const unsigned char * D.27939;
  unsigned char D.27940;
  int D.27941;
  const unsigned char * D.27942;
  unsigned char D.27943;
  int D.27944;
  const unsigned char * D.27949;
  unsigned char D.27950;
  int D.27951;
  const unsigned char * D.27952;
  unsigned char D.27953;
  int D.27954;
  const unsigned char * D.27959;
  unsigned char D.27960;
  int D.27961;
  const unsigned char * D.27962;
  unsigned char D.27963;
  int D.27964;
  int D.20872;
  int iftmp.198;
  int D.20871;
  const char[5] * D.27972;
  unsigned char D.27973;
  int D.27974;
  unsigned char D.27975;
  int D.27976;
  const unsigned char * D.27981;
  unsigned char D.27982;
  int D.27983;
  const unsigned char * D.27984;
  unsigned char D.27985;
  int D.27986;
  const unsigned char * D.27991;
  unsigned char D.27992;
  int D.27993;
  const unsigned char * D.27994;
  unsigned char D.27995;
  int D.27996;
  const unsigned char * D.28001;
  unsigned char D.28002;
  int D.28003;
  const unsigned char * D.28004;
  unsigned char D.28005;
  int D.28006;
  int D.20881;
  int iftmp.199;
  int D.20880;
  const char[7] * D.28014;
  unsigned char D.28015;
  int D.28016;
  unsigned char D.28017;
  int D.28018;
  const unsigned char * D.28023;
  unsigned char D.28024;
  int D.28025;
  const unsigned char * D.28026;
  unsigned char D.28027;
  int D.28028;
  const unsigned char * D.28033;
  unsigned char D.28034;
  int D.28035;
  const unsigned char * D.28036;
  unsigned char D.28037;
  int D.28038;
  const unsigned char * D.28043;
  unsigned char D.28044;
  int D.28045;
  const unsigned char * D.28046;
  unsigned char D.28047;
  int D.28048;
  unsigned char D.28052;
  int D.20890;
  int iftmp.200;
  int D.20889;
  const char[7] * D.28057;
  unsigned char D.28058;
  int D.28059;
  unsigned char D.28060;
  int D.28061;
  const unsigned char * D.28066;
  unsigned char D.28067;
  int D.28068;
  const unsigned char * D.28069;
  unsigned char D.28070;
  int D.28071;
  const unsigned char * D.28076;
  unsigned char D.28077;
  int D.28078;
  const unsigned char * D.28079;
  unsigned char D.28080;
  int D.28081;
  const unsigned char * D.28086;
  unsigned char D.28087;
  int D.28088;
  const unsigned char * D.28089;
  unsigned char D.28090;
  int D.28091;
  int D.20899;
  int iftmp.201;
  int D.20898;
  const char[15] * D.28099;
  unsigned char D.28100;
  int D.28101;
  unsigned char D.28102;
  int D.28103;
  const unsigned char * D.28108;
  unsigned char D.28109;
  int D.28110;
  const unsigned char * D.28111;
  unsigned char D.28112;
  int D.28113;
  const unsigned char * D.28118;
  unsigned char D.28119;
  int D.28120;
  const unsigned char * D.28121;
  unsigned char D.28122;
  int D.28123;
  const unsigned char * D.28128;
  unsigned char D.28129;
  int D.28130;
  const unsigned char * D.28131;
  unsigned char D.28132;
  int D.28133;
  long unsigned int D.28137;
  long unsigned int D.28138;
  int D.20909;
  int iftmp.202;
  int D.20908;
  unsigned char D.28146;
  int D.28147;
  const unsigned char * D.28152;
  unsigned char D.28153;
  int D.28154;
  const unsigned char * D.28159;
  unsigned char D.28160;
  int D.28161;
  const unsigned char * D.28166;
  unsigned char D.28167;
  int D.28168;
  char D.28172;
  int D.28173;
  int D.20919;
  int iftmp.203;
  int D.20918;
  const char[8] * D.28177;
  unsigned char D.28178;
  int D.28179;
  unsigned char D.28180;
  int D.28181;
  const unsigned char * D.28186;
  unsigned char D.28187;
  int D.28188;
  const unsigned char * D.28189;
  unsigned char D.28190;
  int D.28191;
  const unsigned char * D.28196;
  unsigned char D.28197;
  int D.28198;
  const unsigned char * D.28199;
  unsigned char D.28200;
  int D.28201;
  const unsigned char * D.28206;
  unsigned char D.28207;
  int D.28208;
  const unsigned char * D.28209;
  unsigned char D.28210;
  int D.28211;
  int D.20928;
  int iftmp.204;
  int D.20927;
  const char[5] * D.28219;
  unsigned char D.28220;
  int D.28221;
  unsigned char D.28222;
  int D.28223;
  const unsigned char * D.28228;
  unsigned char D.28229;
  int D.28230;
  const unsigned char * D.28231;
  unsigned char D.28232;
  int D.28233;
  const unsigned char * D.28238;
  unsigned char D.28239;
  int D.28240;
  const unsigned char * D.28241;
  unsigned char D.28242;
  int D.28243;
  const unsigned char * D.28248;
  unsigned char D.28249;
  int D.28250;
  const unsigned char * D.28251;
  unsigned char D.28252;
  int D.28253;
  int D.20939;
  int iftmp.205;
  int D.20938;
  const char[5] * D.28260;
  unsigned char D.28261;
  int D.28262;
  unsigned char D.28263;
  int D.28264;
  const unsigned char * D.28269;
  unsigned char D.28270;
  int D.28271;
  const unsigned char * D.28272;
  unsigned char D.28273;
  int D.28274;
  const unsigned char * D.28279;
  unsigned char D.28280;
  int D.28281;
  const unsigned char * D.28282;
  unsigned char D.28283;
  int D.28284;
  const unsigned char * D.28289;
  unsigned char D.28290;
  int D.28291;
  const unsigned char * D.28292;
  unsigned char D.28293;
  int D.28294;
  int D.20949;
  int iftmp.206;
  int D.20948;
  const char[7] * D.28301;
  unsigned char D.28302;
  int D.28303;
  unsigned char D.28304;
  int D.28305;
  const unsigned char * D.28310;
  unsigned char D.28311;
  int D.28312;
  const unsigned char * D.28313;
  unsigned char D.28314;
  int D.28315;
  const unsigned char * D.28320;
  unsigned char D.28321;
  int D.28322;
  const unsigned char * D.28323;
  unsigned char D.28324;
  int D.28325;
  const unsigned char * D.28330;
  unsigned char D.28331;
  int D.28332;
  const unsigned char * D.28333;
  unsigned char D.28334;
  int D.28335;
  int D.20959;
  int iftmp.207;
  int D.20958;
  const char[6] * D.28342;
  unsigned char D.28343;
  int D.28344;
  unsigned char D.28345;
  int D.28346;
  const unsigned char * D.28351;
  unsigned char D.28352;
  int D.28353;
  const unsigned char * D.28354;
  unsigned char D.28355;
  int D.28356;
  const unsigned char * D.28361;
  unsigned char D.28362;
  int D.28363;
  const unsigned char * D.28364;
  unsigned char D.28365;
  int D.28366;
  const unsigned char * D.28371;
  unsigned char D.28372;
  int D.28373;
  const unsigned char * D.28374;
  unsigned char D.28375;
  int D.28376;
  int D.20968;
  int iftmp.208;
  int D.20967;
  const char[6] * D.28384;
  unsigned char D.28385;
  int D.28386;
  unsigned char D.28387;
  int D.28388;
  const unsigned char * D.28393;
  unsigned char D.28394;
  int D.28395;
  const unsigned char * D.28396;
  unsigned char D.28397;
  int D.28398;
  const unsigned char * D.28403;
  unsigned char D.28404;
  int D.28405;
  const unsigned char * D.28406;
  unsigned char D.28407;
  int D.28408;
  const unsigned char * D.28413;
  unsigned char D.28414;
  int D.28415;
  const unsigned char * D.28416;
  unsigned char D.28417;
  int D.28418;
  int D.20977;
  int iftmp.209;
  int D.20976;
  const char[6] * D.28426;
  unsigned char D.28427;
  int D.28428;
  unsigned char D.28429;
  int D.28430;
  const unsigned char * D.28435;
  unsigned char D.28436;
  int D.28437;
  const unsigned char * D.28438;
  unsigned char D.28439;
  int D.28440;
  const unsigned char * D.28445;
  unsigned char D.28446;
  int D.28447;
  const unsigned char * D.28448;
  unsigned char D.28449;
  int D.28450;
  const unsigned char * D.28455;
  unsigned char D.28456;
  int D.28457;
  const unsigned char * D.28458;
  unsigned char D.28459;
  int D.28460;
  int D.20986;
  int iftmp.210;
  int D.20985;
  const char[7] * D.28468;
  unsigned char D.28469;
  int D.28470;
  unsigned char D.28471;
  int D.28472;
  const unsigned char * D.28477;
  unsigned char D.28478;
  int D.28479;
  const unsigned char * D.28480;
  unsigned char D.28481;
  int D.28482;
  const unsigned char * D.28487;
  unsigned char D.28488;
  int D.28489;
  const unsigned char * D.28490;
  unsigned char D.28491;
  int D.28492;
  const unsigned char * D.28497;
  unsigned char D.28498;
  int D.28499;
  const unsigned char * D.28500;
  unsigned char D.28501;
  int D.28502;
  int D.20996;
  int iftmp.211;
  int D.20995;
  const char[7] * D.28509;
  unsigned char D.28510;
  int D.28511;
  unsigned char D.28512;
  int D.28513;
  const unsigned char * D.28518;
  unsigned char D.28519;
  int D.28520;
  const unsigned char * D.28521;
  unsigned char D.28522;
  int D.28523;
  const unsigned char * D.28528;
  unsigned char D.28529;
  int D.28530;
  const unsigned char * D.28531;
  unsigned char D.28532;
  int D.28533;
  const unsigned char * D.28538;
  unsigned char D.28539;
  int D.28540;
  const unsigned char * D.28541;
  unsigned char D.28542;
  int D.28543;
  int D.21005;
  int iftmp.212;
  int D.21004;
  const char[6] * D.28551;
  unsigned char D.28552;
  int D.28553;
  unsigned char D.28554;
  int D.28555;
  const unsigned char * D.28560;
  unsigned char D.28561;
  int D.28562;
  const unsigned char * D.28563;
  unsigned char D.28564;
  int D.28565;
  const unsigned char * D.28570;
  unsigned char D.28571;
  int D.28572;
  const unsigned char * D.28573;
  unsigned char D.28574;
  int D.28575;
  const unsigned char * D.28580;
  unsigned char D.28581;
  int D.28582;
  const unsigned char * D.28583;
  unsigned char D.28584;
  int D.28585;
  int D.21015;
  int iftmp.213;
  int D.21014;
  const char[7] * D.28592;
  unsigned char D.28593;
  int D.28594;
  unsigned char D.28595;
  int D.28596;
  const unsigned char * D.28601;
  unsigned char D.28602;
  int D.28603;
  const unsigned char * D.28604;
  unsigned char D.28605;
  int D.28606;
  const unsigned char * D.28611;
  unsigned char D.28612;
  int D.28613;
  const unsigned char * D.28614;
  unsigned char D.28615;
  int D.28616;
  const unsigned char * D.28621;
  unsigned char D.28622;
  int D.28623;
  const unsigned char * D.28624;
  unsigned char D.28625;
  int D.28626;
  int D.21024;
  int iftmp.214;
  int D.21023;
  const char[7] * D.28634;
  unsigned char D.28635;
  int D.28636;
  unsigned char D.28637;
  int D.28638;
  const unsigned char * D.28643;
  unsigned char D.28644;
  int D.28645;
  const unsigned char * D.28646;
  unsigned char D.28647;
  int D.28648;
  const unsigned char * D.28653;
  unsigned char D.28654;
  int D.28655;
  const unsigned char * D.28656;
  unsigned char D.28657;
  int D.28658;
  const unsigned char * D.28663;
  unsigned char D.28664;
  int D.28665;
  const unsigned char * D.28666;
  unsigned char D.28667;
  int D.28668;
  int D.21033;
  int iftmp.215;
  int D.21032;
  const char[7] * D.28676;
  unsigned char D.28677;
  int D.28678;
  unsigned char D.28679;
  int D.28680;
  const unsigned char * D.28685;
  unsigned char D.28686;
  int D.28687;
  const unsigned char * D.28688;
  unsigned char D.28689;
  int D.28690;
  const unsigned char * D.28695;
  unsigned char D.28696;
  int D.28697;
  const unsigned char * D.28698;
  unsigned char D.28699;
  int D.28700;
  const unsigned char * D.28705;
  unsigned char D.28706;
  int D.28707;
  const unsigned char * D.28708;
  unsigned char D.28709;
  int D.28710;
  int D.21042;
  int iftmp.216;
  int D.21041;
  const char[8] * D.28718;
  unsigned char D.28719;
  int D.28720;
  unsigned char D.28721;
  int D.28722;
  const unsigned char * D.28727;
  unsigned char D.28728;
  int D.28729;
  const unsigned char * D.28730;
  unsigned char D.28731;
  int D.28732;
  const unsigned char * D.28737;
  unsigned char D.28738;
  int D.28739;
  const unsigned char * D.28740;
  unsigned char D.28741;
  int D.28742;
  const unsigned char * D.28747;
  unsigned char D.28748;
  int D.28749;
  const unsigned char * D.28750;
  unsigned char D.28751;
  int D.28752;
  int D.21052;
  int iftmp.217;
  int D.21051;
  unsigned char D.28759;
  int D.28760;
  const unsigned char * D.28765;
  unsigned char D.28766;
  int D.28767;
  const unsigned char * D.28772;
  unsigned char D.28773;
  int D.28774;
  const unsigned char * D.28779;
  unsigned char D.28780;
  int D.28781;
  int D.21062;
  int iftmp.218;
  int D.21061;
  const char[5] * D.28788;
  unsigned char D.28789;
  int D.28790;
  unsigned char D.28791;
  int D.28792;
  const unsigned char * D.28797;
  unsigned char D.28798;
  int D.28799;
  const unsigned char * D.28800;
  unsigned char D.28801;
  int D.28802;
  const unsigned char * D.28807;
  unsigned char D.28808;
  int D.28809;
  const unsigned char * D.28810;
  unsigned char D.28811;
  int D.28812;
  const unsigned char * D.28817;
  unsigned char D.28818;
  int D.28819;
  const unsigned char * D.28820;
  unsigned char D.28821;
  int D.28822;
  unsigned char D.28826;
  unsigned int D.28829;
  unsigned int D.28830;
  unsigned int D.28833;
  short unsigned int D.28834;
  const char * name;
  const char * nspace;
  gboolean is_corlib;

  name = class->name;
  nspace = class->name_space;
  D.27883 = class->image;
  is_corlib = mono_is_corlib_image (D.27883);
  class->this_arg.byref = 1;
  class->this_arg.data.klass = class;
  class->this_arg.type = 18;
  class->byval_arg.data.klass = class;
  class->byval_arg.type = 18;
  if (is_corlib != 0) goto <D.27884>; else goto <D.27885>;
  <D.27884>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = nspace;
      D.27889 = "System";
      D.27890 = MEM[(const unsigned char *)D.27889];
      D.27891 = (int) D.27890;
      D.27892 = *__s2;
      D.27893 = (int) D.27892;
      __result = D.27891 - D.27893;
      {
        if (__s2_len != 0) goto <D.27894>; else goto <D.27895>;
        <D.27894>:
        if (__result == 0) goto <D.27896>; else goto <D.27897>;
        <D.27896>:
        D.27898 = &MEM[(void *)"System" + 1B];
        D.27899 = *D.27898;
        D.27900 = (int) D.27899;
        D.27901 = __s2 + 1;
        D.27902 = *D.27901;
        D.27903 = (int) D.27902;
        __result = D.27900 - D.27903;
        if (__s2_len > 1) goto <D.27904>; else goto <D.27905>;
        <D.27904>:
        if (__result == 0) goto <D.27906>; else goto <D.27907>;
        <D.27906>:
        D.27908 = &MEM[(void *)"System" + 2B];
        D.27909 = *D.27908;
        D.27910 = (int) D.27909;
        D.27911 = __s2 + 2;
        D.27912 = *D.27911;
        D.27913 = (int) D.27912;
        __result = D.27910 - D.27913;
        if (__s2_len > 2) goto <D.27914>; else goto <D.27915>;
        <D.27914>:
        if (__result == 0) goto <D.27916>; else goto <D.27917>;
        <D.27916>:
        D.27918 = &MEM[(void *)"System" + 3B];
        D.27919 = *D.27918;
        D.27920 = (int) D.27919;
        D.27921 = __s2 + 3;
        D.27922 = *D.27921;
        D.27923 = (int) D.27922;
        __result = D.27920 - D.27923;
        <D.27917>:
        <D.27915>:
        <D.27907>:
        <D.27905>:
        <D.27897>:
        <D.27895>:
      }
      D.20853 = __result;
    }
    iftmp.196 = -D.20853;
    goto <D.27924>;
    <D.27888>:
    iftmp.196 = __builtin_strcmp (nspace, "System");
    <D.27924>:
    D.20854 = iftmp.196;
  }
  if (D.20854 == 0) goto <D.27925>; else goto <D.27926>;
  <D.27925>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27930 = "ValueType";
      D.27931 = MEM[(const unsigned char *)D.27930];
      D.27932 = (int) D.27931;
      D.27933 = *__s2;
      D.27934 = (int) D.27933;
      __result = D.27932 - D.27934;
      {
        if (__s2_len != 0) goto <D.27935>; else goto <D.27936>;
        <D.27935>:
        if (__result == 0) goto <D.27937>; else goto <D.27938>;
        <D.27937>:
        D.27939 = &MEM[(void *)"ValueType" + 1B];
        D.27940 = *D.27939;
        D.27941 = (int) D.27940;
        D.27942 = __s2 + 1;
        D.27943 = *D.27942;
        D.27944 = (int) D.27943;
        __result = D.27941 - D.27944;
        if (__s2_len > 1) goto <D.27945>; else goto <D.27946>;
        <D.27945>:
        if (__result == 0) goto <D.27947>; else goto <D.27948>;
        <D.27947>:
        D.27949 = &MEM[(void *)"ValueType" + 2B];
        D.27950 = *D.27949;
        D.27951 = (int) D.27950;
        D.27952 = __s2 + 2;
        D.27953 = *D.27952;
        D.27954 = (int) D.27953;
        __result = D.27951 - D.27954;
        if (__s2_len > 2) goto <D.27955>; else goto <D.27956>;
        <D.27955>:
        if (__result == 0) goto <D.27957>; else goto <D.27958>;
        <D.27957>:
        D.27959 = &MEM[(void *)"ValueType" + 3B];
        D.27960 = *D.27959;
        D.27961 = (int) D.27960;
        D.27962 = __s2 + 3;
        D.27963 = *D.27962;
        D.27964 = (int) D.27963;
        __result = D.27961 - D.27964;
        <D.27958>:
        <D.27956>:
        <D.27948>:
        <D.27946>:
        <D.27938>:
        <D.27936>:
      }
      D.20862 = __result;
    }
    iftmp.197 = -D.20862;
    goto <D.27965>;
    <D.27929>:
    iftmp.197 = __builtin_strcmp (name, "ValueType");
    <D.27965>:
    D.20863 = iftmp.197;
  }
  if (D.20863 == 0) goto <D.27966>; else goto <D.27967>;
  <D.27966>:
  class->blittable = 1;
  goto <D.27968>;
  <D.27967>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27972 = "Enum";
      D.27973 = MEM[(const unsigned char *)D.27972];
      D.27974 = (int) D.27973;
      D.27975 = *__s2;
      D.27976 = (int) D.27975;
      __result = D.27974 - D.27976;
      {
        if (__s2_len != 0) goto <D.27977>; else goto <D.27978>;
        <D.27977>:
        if (__result == 0) goto <D.27979>; else goto <D.27980>;
        <D.27979>:
        D.27981 = &MEM[(void *)"Enum" + 1B];
        D.27982 = *D.27981;
        D.27983 = (int) D.27982;
        D.27984 = __s2 + 1;
        D.27985 = *D.27984;
        D.27986 = (int) D.27985;
        __result = D.27983 - D.27986;
        if (__s2_len > 1) goto <D.27987>; else goto <D.27988>;
        <D.27987>:
        if (__result == 0) goto <D.27989>; else goto <D.27990>;
        <D.27989>:
        D.27991 = &MEM[(void *)"Enum" + 2B];
        D.27992 = *D.27991;
        D.27993 = (int) D.27992;
        D.27994 = __s2 + 2;
        D.27995 = *D.27994;
        D.27996 = (int) D.27995;
        __result = D.27993 - D.27996;
        if (__s2_len > 2) goto <D.27997>; else goto <D.27998>;
        <D.27997>:
        if (__result == 0) goto <D.27999>; else goto <D.28000>;
        <D.27999>:
        D.28001 = &MEM[(void *)"Enum" + 3B];
        D.28002 = *D.28001;
        D.28003 = (int) D.28002;
        D.28004 = __s2 + 3;
        D.28005 = *D.28004;
        D.28006 = (int) D.28005;
        __result = D.28003 - D.28006;
        <D.28000>:
        <D.27998>:
        <D.27990>:
        <D.27988>:
        <D.27980>:
        <D.27978>:
      }
      D.20871 = __result;
    }
    iftmp.198 = -D.20871;
    goto <D.28007>;
    <D.27971>:
    iftmp.198 = __builtin_strcmp (name, "Enum");
    <D.28007>:
    D.20872 = iftmp.198;
  }
  if (D.20872 == 0) goto <D.28008>; else goto <D.28009>;
  <D.28008>:
  class->valuetype = 0;
  class->enumtype = 0;
  goto <D.28010>;
  <D.28009>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.28014 = "Object";
      D.28015 = MEM[(const unsigned char *)D.28014];
      D.28016 = (int) D.28015;
      D.28017 = *__s2;
      D.28018 = (int) D.28017;
      __result = D.28016 - D.28018;
      {
        if (__s2_len != 0) goto <D.28019>; else goto <D.28020>;
        <D.28019>:
        if (__result == 0) goto <D.28021>; else goto <D.28022>;
        <D.28021>:
        D.28023 = &MEM[(void *)"Object" + 1B];
        D.28024 = *D.28023;
        D.28025 = (int) D.28024;
        D.28026 = __s2 + 1;
        D.28027 = *D.28026;
        D.28028 = (int) D.28027;
        __result = D.28025 - D.28028;
        if (__s2_len > 1) goto <D.28029>; else goto <D.28030>;
        <D.28029>:
        if (__result == 0) goto <D.28031>; else goto <D.28032>;
        <D.28031>:
        D.28033 = &MEM[(void *)"Object" + 2B];
        D.28034 = *D.28033;
        D.28035 = (int) D.28034;
        D.28036 = __s2 + 2;
        D.28037 = *D.28036;
        D.28038 = (int) D.28037;
        __result = D.28035 - D.28038;
        if (__s2_len > 2) goto <D.28039>; else goto <D.28040>;
        <D.28039>:
        if (__result == 0) goto <D.28041>; else goto <D.28042>;
        <D.28041>:
        D.28043 = &MEM[(void *)"Object" + 3B];
        D.28044 = *D.28043;
        D.28045 = (int) D.28044;
        D.28046 = __s2 + 3;
        D.28047 = *D.28046;
        D.28048 = (int) D.28047;
        __result = D.28045 - D.28048;
        <D.28042>:
        <D.28040>:
        <D.28032>:
        <D.28030>:
        <D.28022>:
        <D.28020>:
      }
      D.20880 = __result;
    }
    iftmp.199 = -D.20880;
    goto <D.28049>;
    <D.28013>:
    iftmp.199 = __builtin_strcmp (name, "Object");
    <D.28049>:
    D.20881 = iftmp.199;
  }
  if (D.20881 == 0) goto <D.28050>; else goto <D.28051>;
  <D.28050>:
  class->byval_arg.type = 28;
  D.28052 = class->byval_arg.type;
  class->this_arg.type = D.28052;
  goto <D.28053>;
  <D.28051>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.28057 = "String";
      D.28058 = MEM[(const unsigned char *)D.28057];
      D.28059 = (int) D.28058;
      D.28060 = *__s2;
      D.28061 = (int) D.28060;
      __result = D.28059 - D.28061;
      {
        if (__s2_len != 0) goto <D.28062>; else goto <D.28063>;
        <D.28062>:
        if (__result == 0) goto <D.28064>; else goto <D.28065>;
        <D.28064>:
        D.28066 = &MEM[(void *)"String" + 1B];
        D.28067 = *D.28066;
        D.28068 = (int) D.28067;
        D.28069 = __s2 + 1;
        D.28070 = *D.28069;
        D.28071 = (int) D.28070;
        __result = D.28068 - D.28071;
        if (__s2_len > 1) goto <D.28072>; else goto <D.28073>;
        <D.28072>:
        if (__result == 0) goto <D.28074>; else goto <D.28075>;
        <D.28074>:
        D.28076 = &MEM[(void *)"String" + 2B];
        D.28077 = *D.28076;
        D.28078 = (int) D.28077;
        D.28079 = __s2 + 2;
        D.28080 = *D.28079;
        D.28081 = (int) D.28080;
        __result = D.28078 - D.28081;
        if (__s2_len > 2) goto <D.28082>; else goto <D.28083>;
        <D.28082>:
        if (__result == 0) goto <D.28084>; else goto <D.28085>;
        <D.28084>:
        D.28086 = &MEM[(void *)"String" + 3B];
        D.28087 = *D.28086;
        D.28088 = (int) D.28087;
        D.28089 = __s2 + 3;
        D.28090 = *D.28089;
        D.28091 = (int) D.28090;
        __result = D.28088 - D.28091;
        <D.28085>:
        <D.28083>:
        <D.28075>:
        <D.28073>:
        <D.28065>:
        <D.28063>:
      }
      D.20889 = __result;
    }
    iftmp.200 = -D.20889;
    goto <D.28092>;
    <D.28056>:
    iftmp.200 = __builtin_strcmp (name, "String");
    <D.28092>:
    D.20890 = iftmp.200;
  }
  if (D.20890 == 0) goto <D.28093>; else goto <D.28094>;
  <D.28093>:
  class->byval_arg.type = 14;
  D.28052 = class->byval_arg.type;
  class->this_arg.type = D.28052;
  goto <D.28095>;
  <D.28094>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.28099 = "TypedReference";
      D.28100 = MEM[(const unsigned char *)D.28099];
      D.28101 = (int) D.28100;
      D.28102 = *__s2;
      D.28103 = (int) D.28102;
      __result = D.28101 - D.28103;
      {
        if (__s2_len != 0) goto <D.28104>; else goto <D.28105>;
        <D.28104>:
        if (__result == 0) goto <D.28106>; else goto <D.28107>;
        <D.28106>:
        D.28108 = &MEM[(void *)"TypedReference" + 1B];
        D.28109 = *D.28108;
        D.28110 = (int) D.28109;
        D.28111 = __s2 + 1;
        D.28112 = *D.28111;
        D.28113 = (int) D.28112;
        __result = D.28110 - D.28113;
        if (__s2_len > 1) goto <D.28114>; else goto <D.28115>;
        <D.28114>:
        if (__result == 0) goto <D.28116>; else goto <D.28117>;
        <D.28116>:
        D.28118 = &MEM[(void *)"TypedReference" + 2B];
        D.28119 = *D.28118;
        D.28120 = (int) D.28119;
        D.28121 = __s2 + 2;
        D.28122 = *D.28121;
        D.28123 = (int) D.28122;
        __result = D.28120 - D.28123;
        if (__s2_len > 2) goto <D.28124>; else goto <D.28125>;
        <D.28124>:
        if (__result == 0) goto <D.28126>; else goto <D.28127>;
        <D.28126>:
        D.28128 = &MEM[(void *)"TypedReference" + 3B];
        D.28129 = *D.28128;
        D.28130 = (int) D.28129;
        D.28131 = __s2 + 3;
        D.28132 = *D.28131;
        D.28133 = (int) D.28132;
        __result = D.28130 - D.28133;
        <D.28127>:
        <D.28125>:
        <D.28117>:
        <D.28115>:
        <D.28107>:
        <D.28105>:
      }
      D.20898 = __result;
    }
    iftmp.201 = -D.20898;
    goto <D.28134>;
    <D.28098>:
    iftmp.201 = __builtin_strcmp (name, "TypedReference");
    <D.28134>:
    D.20899 = iftmp.201;
  }
  if (D.20899 == 0) goto <D.28135>; else goto <D.28136>;
  <D.28135>:
  class->byval_arg.type = 22;
  D.28052 = class->byval_arg.type;
  class->this_arg.type = D.28052;
  <D.28136>:
  <D.28095>:
  <D.28053>:
  <D.28010>:
  <D.27968>:
  <D.27926>:
  <D.27885>:
  D.28137 = BIT_FIELD_REF <*class, 64, 256>;
  D.28138 = D.28137 & 8;
  if (D.28138 != 0) goto <D.28139>; else goto <D.28140>;
  <D.28139>:
  {
    int t;

    t = 17;
    if (is_corlib != 0) goto <D.28141>; else goto <D.28142>;
    <D.28141>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = nspace;
        D.27889 = "System";
        D.27890 = MEM[(const unsigned char *)D.27889];
        D.27891 = (int) D.27890;
        D.28146 = *__s2;
        D.28147 = (int) D.28146;
        __result = D.27891 - D.28147;
        {
          if (__s2_len != 0) goto <D.28148>; else goto <D.28149>;
          <D.28148>:
          if (__result == 0) goto <D.28150>; else goto <D.28151>;
          <D.28150>:
          D.27898 = &MEM[(void *)"System" + 1B];
          D.27899 = *D.27898;
          D.27900 = (int) D.27899;
          D.28152 = __s2 + 1;
          D.28153 = *D.28152;
          D.28154 = (int) D.28153;
          __result = D.27900 - D.28154;
          if (__s2_len > 1) goto <D.28155>; else goto <D.28156>;
          <D.28155>:
          if (__result == 0) goto <D.28157>; else goto <D.28158>;
          <D.28157>:
          D.27908 = &MEM[(void *)"System" + 2B];
          D.27909 = *D.27908;
          D.27910 = (int) D.27909;
          D.28159 = __s2 + 2;
          D.28160 = *D.28159;
          D.28161 = (int) D.28160;
          __result = D.27910 - D.28161;
          if (__s2_len > 2) goto <D.28162>; else goto <D.28163>;
          <D.28162>:
          if (__result == 0) goto <D.28164>; else goto <D.28165>;
          <D.28164>:
          D.27918 = &MEM[(void *)"System" + 3B];
          D.27919 = *D.27918;
          D.27920 = (int) D.27919;
          D.28166 = __s2 + 3;
          D.28167 = *D.28166;
          D.28168 = (int) D.28167;
          __result = D.27920 - D.28168;
          <D.28165>:
          <D.28163>:
          <D.28158>:
          <D.28156>:
          <D.28151>:
          <D.28149>:
        }
        D.20908 = __result;
      }
      iftmp.202 = -D.20908;
      goto <D.28169>;
      <D.28145>:
      iftmp.202 = __builtin_strcmp (nspace, "System");
      <D.28169>:
      D.20909 = iftmp.202;
    }
    if (D.20909 == 0) goto <D.28170>; else goto <D.28171>;
    <D.28170>:
    D.28172 = *name;
    D.28173 = (int) D.28172;
    switch (D.28173) <default: <D.21063>, case 66: <D.20910>, case 67: <D.20930>, case 68: <D.20940>, case 73: <D.20950>, case 83: <D.20987>, case 84: <D.21043>, case 85: <D.21006>, case 86: <D.21053>>
    <D.20910>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28177 = "Boolean";
        D.28178 = MEM[(const unsigned char *)D.28177];
        D.28179 = (int) D.28178;
        D.28180 = *__s2;
        D.28181 = (int) D.28180;
        __result = D.28179 - D.28181;
        {
          if (__s2_len != 0) goto <D.28182>; else goto <D.28183>;
          <D.28182>:
          if (__result == 0) goto <D.28184>; else goto <D.28185>;
          <D.28184>:
          D.28186 = &MEM[(void *)"Boolean" + 1B];
          D.28187 = *D.28186;
          D.28188 = (int) D.28187;
          D.28189 = __s2 + 1;
          D.28190 = *D.28189;
          D.28191 = (int) D.28190;
          __result = D.28188 - D.28191;
          if (__s2_len > 1) goto <D.28192>; else goto <D.28193>;
          <D.28192>:
          if (__result == 0) goto <D.28194>; else goto <D.28195>;
          <D.28194>:
          D.28196 = &MEM[(void *)"Boolean" + 2B];
          D.28197 = *D.28196;
          D.28198 = (int) D.28197;
          D.28199 = __s2 + 2;
          D.28200 = *D.28199;
          D.28201 = (int) D.28200;
          __result = D.28198 - D.28201;
          if (__s2_len > 2) goto <D.28202>; else goto <D.28203>;
          <D.28202>:
          if (__result == 0) goto <D.28204>; else goto <D.28205>;
          <D.28204>:
          D.28206 = &MEM[(void *)"Boolean" + 3B];
          D.28207 = *D.28206;
          D.28208 = (int) D.28207;
          D.28209 = __s2 + 3;
          D.28210 = *D.28209;
          D.28211 = (int) D.28210;
          __result = D.28208 - D.28211;
          <D.28205>:
          <D.28203>:
          <D.28195>:
          <D.28193>:
          <D.28185>:
          <D.28183>:
        }
        D.20918 = __result;
      }
      iftmp.203 = -D.20918;
      goto <D.28212>;
      <D.28176>:
      iftmp.203 = __builtin_strcmp (name, "Boolean");
      <D.28212>:
      D.20919 = iftmp.203;
    }
    if (D.20919 == 0) goto <D.28213>; else goto <D.28214>;
    <D.28213>:
    t = 2;
    goto <D.28215>;
    <D.28214>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28219 = "Byte";
        D.28220 = MEM[(const unsigned char *)D.28219];
        D.28221 = (int) D.28220;
        D.28222 = *__s2;
        D.28223 = (int) D.28222;
        __result = D.28221 - D.28223;
        {
          if (__s2_len != 0) goto <D.28224>; else goto <D.28225>;
          <D.28224>:
          if (__result == 0) goto <D.28226>; else goto <D.28227>;
          <D.28226>:
          D.28228 = &MEM[(void *)"Byte" + 1B];
          D.28229 = *D.28228;
          D.28230 = (int) D.28229;
          D.28231 = __s2 + 1;
          D.28232 = *D.28231;
          D.28233 = (int) D.28232;
          __result = D.28230 - D.28233;
          if (__s2_len > 1) goto <D.28234>; else goto <D.28235>;
          <D.28234>:
          if (__result == 0) goto <D.28236>; else goto <D.28237>;
          <D.28236>:
          D.28238 = &MEM[(void *)"Byte" + 2B];
          D.28239 = *D.28238;
          D.28240 = (int) D.28239;
          D.28241 = __s2 + 2;
          D.28242 = *D.28241;
          D.28243 = (int) D.28242;
          __result = D.28240 - D.28243;
          if (__s2_len > 2) goto <D.28244>; else goto <D.28245>;
          <D.28244>:
          if (__result == 0) goto <D.28246>; else goto <D.28247>;
          <D.28246>:
          D.28248 = &MEM[(void *)"Byte" + 3B];
          D.28249 = *D.28248;
          D.28250 = (int) D.28249;
          D.28251 = __s2 + 3;
          D.28252 = *D.28251;
          D.28253 = (int) D.28252;
          __result = D.28250 - D.28253;
          <D.28247>:
          <D.28245>:
          <D.28237>:
          <D.28235>:
          <D.28227>:
          <D.28225>:
        }
        D.20927 = __result;
      }
      iftmp.204 = -D.20927;
      goto <D.28254>;
      <D.28218>:
      iftmp.204 = __builtin_strcmp (name, "Byte");
      <D.28254>:
      D.20928 = iftmp.204;
    }
    if (D.20928 == 0) goto <D.28255>; else goto <D.28256>;
    <D.28255>:
    t = 5;
    class->blittable = 1;
    <D.28256>:
    <D.28215>:
    goto <D.20929>;
    <D.20930>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28260 = "Char";
        D.28261 = MEM[(const unsigned char *)D.28260];
        D.28262 = (int) D.28261;
        D.28263 = *__s2;
        D.28264 = (int) D.28263;
        __result = D.28262 - D.28264;
        {
          if (__s2_len != 0) goto <D.28265>; else goto <D.28266>;
          <D.28265>:
          if (__result == 0) goto <D.28267>; else goto <D.28268>;
          <D.28267>:
          D.28269 = &MEM[(void *)"Char" + 1B];
          D.28270 = *D.28269;
          D.28271 = (int) D.28270;
          D.28272 = __s2 + 1;
          D.28273 = *D.28272;
          D.28274 = (int) D.28273;
          __result = D.28271 - D.28274;
          if (__s2_len > 1) goto <D.28275>; else goto <D.28276>;
          <D.28275>:
          if (__result == 0) goto <D.28277>; else goto <D.28278>;
          <D.28277>:
          D.28279 = &MEM[(void *)"Char" + 2B];
          D.28280 = *D.28279;
          D.28281 = (int) D.28280;
          D.28282 = __s2 + 2;
          D.28283 = *D.28282;
          D.28284 = (int) D.28283;
          __result = D.28281 - D.28284;
          if (__s2_len > 2) goto <D.28285>; else goto <D.28286>;
          <D.28285>:
          if (__result == 0) goto <D.28287>; else goto <D.28288>;
          <D.28287>:
          D.28289 = &MEM[(void *)"Char" + 3B];
          D.28290 = *D.28289;
          D.28291 = (int) D.28290;
          D.28292 = __s2 + 3;
          D.28293 = *D.28292;
          D.28294 = (int) D.28293;
          __result = D.28291 - D.28294;
          <D.28288>:
          <D.28286>:
          <D.28278>:
          <D.28276>:
          <D.28268>:
          <D.28266>:
        }
        D.20938 = __result;
      }
      iftmp.205 = -D.20938;
      goto <D.28295>;
      <D.28259>:
      iftmp.205 = __builtin_strcmp (name, "Char");
      <D.28295>:
      D.20939 = iftmp.205;
    }
    if (D.20939 == 0) goto <D.28296>; else goto <D.28297>;
    <D.28296>:
    t = 3;
    <D.28297>:
    goto <D.20929>;
    <D.20940>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28301 = "Double";
        D.28302 = MEM[(const unsigned char *)D.28301];
        D.28303 = (int) D.28302;
        D.28304 = *__s2;
        D.28305 = (int) D.28304;
        __result = D.28303 - D.28305;
        {
          if (__s2_len != 0) goto <D.28306>; else goto <D.28307>;
          <D.28306>:
          if (__result == 0) goto <D.28308>; else goto <D.28309>;
          <D.28308>:
          D.28310 = &MEM[(void *)"Double" + 1B];
          D.28311 = *D.28310;
          D.28312 = (int) D.28311;
          D.28313 = __s2 + 1;
          D.28314 = *D.28313;
          D.28315 = (int) D.28314;
          __result = D.28312 - D.28315;
          if (__s2_len > 1) goto <D.28316>; else goto <D.28317>;
          <D.28316>:
          if (__result == 0) goto <D.28318>; else goto <D.28319>;
          <D.28318>:
          D.28320 = &MEM[(void *)"Double" + 2B];
          D.28321 = *D.28320;
          D.28322 = (int) D.28321;
          D.28323 = __s2 + 2;
          D.28324 = *D.28323;
          D.28325 = (int) D.28324;
          __result = D.28322 - D.28325;
          if (__s2_len > 2) goto <D.28326>; else goto <D.28327>;
          <D.28326>:
          if (__result == 0) goto <D.28328>; else goto <D.28329>;
          <D.28328>:
          D.28330 = &MEM[(void *)"Double" + 3B];
          D.28331 = *D.28330;
          D.28332 = (int) D.28331;
          D.28333 = __s2 + 3;
          D.28334 = *D.28333;
          D.28335 = (int) D.28334;
          __result = D.28332 - D.28335;
          <D.28329>:
          <D.28327>:
          <D.28319>:
          <D.28317>:
          <D.28309>:
          <D.28307>:
        }
        D.20948 = __result;
      }
      iftmp.206 = -D.20948;
      goto <D.28336>;
      <D.28300>:
      iftmp.206 = __builtin_strcmp (name, "Double");
      <D.28336>:
      D.20949 = iftmp.206;
    }
    if (D.20949 == 0) goto <D.28337>; else goto <D.28338>;
    <D.28337>:
    t = 13;
    class->blittable = 1;
    <D.28338>:
    goto <D.20929>;
    <D.20950>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28342 = "Int32";
        D.28343 = MEM[(const unsigned char *)D.28342];
        D.28344 = (int) D.28343;
        D.28345 = *__s2;
        D.28346 = (int) D.28345;
        __result = D.28344 - D.28346;
        {
          if (__s2_len != 0) goto <D.28347>; else goto <D.28348>;
          <D.28347>:
          if (__result == 0) goto <D.28349>; else goto <D.28350>;
          <D.28349>:
          D.28351 = &MEM[(void *)"Int32" + 1B];
          D.28352 = *D.28351;
          D.28353 = (int) D.28352;
          D.28354 = __s2 + 1;
          D.28355 = *D.28354;
          D.28356 = (int) D.28355;
          __result = D.28353 - D.28356;
          if (__s2_len > 1) goto <D.28357>; else goto <D.28358>;
          <D.28357>:
          if (__result == 0) goto <D.28359>; else goto <D.28360>;
          <D.28359>:
          D.28361 = &MEM[(void *)"Int32" + 2B];
          D.28362 = *D.28361;
          D.28363 = (int) D.28362;
          D.28364 = __s2 + 2;
          D.28365 = *D.28364;
          D.28366 = (int) D.28365;
          __result = D.28363 - D.28366;
          if (__s2_len > 2) goto <D.28367>; else goto <D.28368>;
          <D.28367>:
          if (__result == 0) goto <D.28369>; else goto <D.28370>;
          <D.28369>:
          D.28371 = &MEM[(void *)"Int32" + 3B];
          D.28372 = *D.28371;
          D.28373 = (int) D.28372;
          D.28374 = __s2 + 3;
          D.28375 = *D.28374;
          D.28376 = (int) D.28375;
          __result = D.28373 - D.28376;
          <D.28370>:
          <D.28368>:
          <D.28360>:
          <D.28358>:
          <D.28350>:
          <D.28348>:
        }
        D.20958 = __result;
      }
      iftmp.207 = -D.20958;
      goto <D.28377>;
      <D.28341>:
      iftmp.207 = __builtin_strcmp (name, "Int32");
      <D.28377>:
      D.20959 = iftmp.207;
    }
    if (D.20959 == 0) goto <D.28378>; else goto <D.28379>;
    <D.28378>:
    t = 8;
    class->blittable = 1;
    goto <D.28380>;
    <D.28379>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28384 = "Int16";
        D.28385 = MEM[(const unsigned char *)D.28384];
        D.28386 = (int) D.28385;
        D.28387 = *__s2;
        D.28388 = (int) D.28387;
        __result = D.28386 - D.28388;
        {
          if (__s2_len != 0) goto <D.28389>; else goto <D.28390>;
          <D.28389>:
          if (__result == 0) goto <D.28391>; else goto <D.28392>;
          <D.28391>:
          D.28393 = &MEM[(void *)"Int16" + 1B];
          D.28394 = *D.28393;
          D.28395 = (int) D.28394;
          D.28396 = __s2 + 1;
          D.28397 = *D.28396;
          D.28398 = (int) D.28397;
          __result = D.28395 - D.28398;
          if (__s2_len > 1) goto <D.28399>; else goto <D.28400>;
          <D.28399>:
          if (__result == 0) goto <D.28401>; else goto <D.28402>;
          <D.28401>:
          D.28403 = &MEM[(void *)"Int16" + 2B];
          D.28404 = *D.28403;
          D.28405 = (int) D.28404;
          D.28406 = __s2 + 2;
          D.28407 = *D.28406;
          D.28408 = (int) D.28407;
          __result = D.28405 - D.28408;
          if (__s2_len > 2) goto <D.28409>; else goto <D.28410>;
          <D.28409>:
          if (__result == 0) goto <D.28411>; else goto <D.28412>;
          <D.28411>:
          D.28413 = &MEM[(void *)"Int16" + 3B];
          D.28414 = *D.28413;
          D.28415 = (int) D.28414;
          D.28416 = __s2 + 3;
          D.28417 = *D.28416;
          D.28418 = (int) D.28417;
          __result = D.28415 - D.28418;
          <D.28412>:
          <D.28410>:
          <D.28402>:
          <D.28400>:
          <D.28392>:
          <D.28390>:
        }
        D.20967 = __result;
      }
      iftmp.208 = -D.20967;
      goto <D.28419>;
      <D.28383>:
      iftmp.208 = __builtin_strcmp (name, "Int16");
      <D.28419>:
      D.20968 = iftmp.208;
    }
    if (D.20968 == 0) goto <D.28420>; else goto <D.28421>;
    <D.28420>:
    t = 6;
    class->blittable = 1;
    goto <D.28422>;
    <D.28421>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28426 = "Int64";
        D.28427 = MEM[(const unsigned char *)D.28426];
        D.28428 = (int) D.28427;
        D.28429 = *__s2;
        D.28430 = (int) D.28429;
        __result = D.28428 - D.28430;
        {
          if (__s2_len != 0) goto <D.28431>; else goto <D.28432>;
          <D.28431>:
          if (__result == 0) goto <D.28433>; else goto <D.28434>;
          <D.28433>:
          D.28435 = &MEM[(void *)"Int64" + 1B];
          D.28436 = *D.28435;
          D.28437 = (int) D.28436;
          D.28438 = __s2 + 1;
          D.28439 = *D.28438;
          D.28440 = (int) D.28439;
          __result = D.28437 - D.28440;
          if (__s2_len > 1) goto <D.28441>; else goto <D.28442>;
          <D.28441>:
          if (__result == 0) goto <D.28443>; else goto <D.28444>;
          <D.28443>:
          D.28445 = &MEM[(void *)"Int64" + 2B];
          D.28446 = *D.28445;
          D.28447 = (int) D.28446;
          D.28448 = __s2 + 2;
          D.28449 = *D.28448;
          D.28450 = (int) D.28449;
          __result = D.28447 - D.28450;
          if (__s2_len > 2) goto <D.28451>; else goto <D.28452>;
          <D.28451>:
          if (__result == 0) goto <D.28453>; else goto <D.28454>;
          <D.28453>:
          D.28455 = &MEM[(void *)"Int64" + 3B];
          D.28456 = *D.28455;
          D.28457 = (int) D.28456;
          D.28458 = __s2 + 3;
          D.28459 = *D.28458;
          D.28460 = (int) D.28459;
          __result = D.28457 - D.28460;
          <D.28454>:
          <D.28452>:
          <D.28444>:
          <D.28442>:
          <D.28434>:
          <D.28432>:
        }
        D.20976 = __result;
      }
      iftmp.209 = -D.20976;
      goto <D.28461>;
      <D.28425>:
      iftmp.209 = __builtin_strcmp (name, "Int64");
      <D.28461>:
      D.20977 = iftmp.209;
    }
    if (D.20977 == 0) goto <D.28462>; else goto <D.28463>;
    <D.28462>:
    t = 10;
    class->blittable = 1;
    goto <D.28464>;
    <D.28463>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28468 = "IntPtr";
        D.28469 = MEM[(const unsigned char *)D.28468];
        D.28470 = (int) D.28469;
        D.28471 = *__s2;
        D.28472 = (int) D.28471;
        __result = D.28470 - D.28472;
        {
          if (__s2_len != 0) goto <D.28473>; else goto <D.28474>;
          <D.28473>:
          if (__result == 0) goto <D.28475>; else goto <D.28476>;
          <D.28475>:
          D.28477 = &MEM[(void *)"IntPtr" + 1B];
          D.28478 = *D.28477;
          D.28479 = (int) D.28478;
          D.28480 = __s2 + 1;
          D.28481 = *D.28480;
          D.28482 = (int) D.28481;
          __result = D.28479 - D.28482;
          if (__s2_len > 1) goto <D.28483>; else goto <D.28484>;
          <D.28483>:
          if (__result == 0) goto <D.28485>; else goto <D.28486>;
          <D.28485>:
          D.28487 = &MEM[(void *)"IntPtr" + 2B];
          D.28488 = *D.28487;
          D.28489 = (int) D.28488;
          D.28490 = __s2 + 2;
          D.28491 = *D.28490;
          D.28492 = (int) D.28491;
          __result = D.28489 - D.28492;
          if (__s2_len > 2) goto <D.28493>; else goto <D.28494>;
          <D.28493>:
          if (__result == 0) goto <D.28495>; else goto <D.28496>;
          <D.28495>:
          D.28497 = &MEM[(void *)"IntPtr" + 3B];
          D.28498 = *D.28497;
          D.28499 = (int) D.28498;
          D.28500 = __s2 + 3;
          D.28501 = *D.28500;
          D.28502 = (int) D.28501;
          __result = D.28499 - D.28502;
          <D.28496>:
          <D.28494>:
          <D.28486>:
          <D.28484>:
          <D.28476>:
          <D.28474>:
        }
        D.20985 = __result;
      }
      iftmp.210 = -D.20985;
      goto <D.28503>;
      <D.28467>:
      iftmp.210 = __builtin_strcmp (name, "IntPtr");
      <D.28503>:
      D.20986 = iftmp.210;
    }
    if (D.20986 == 0) goto <D.28504>; else goto <D.28505>;
    <D.28504>:
    t = 24;
    class->blittable = 1;
    <D.28505>:
    <D.28464>:
    <D.28422>:
    <D.28380>:
    goto <D.20929>;
    <D.20987>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28509 = "Single";
        D.28510 = MEM[(const unsigned char *)D.28509];
        D.28511 = (int) D.28510;
        D.28512 = *__s2;
        D.28513 = (int) D.28512;
        __result = D.28511 - D.28513;
        {
          if (__s2_len != 0) goto <D.28514>; else goto <D.28515>;
          <D.28514>:
          if (__result == 0) goto <D.28516>; else goto <D.28517>;
          <D.28516>:
          D.28518 = &MEM[(void *)"Single" + 1B];
          D.28519 = *D.28518;
          D.28520 = (int) D.28519;
          D.28521 = __s2 + 1;
          D.28522 = *D.28521;
          D.28523 = (int) D.28522;
          __result = D.28520 - D.28523;
          if (__s2_len > 1) goto <D.28524>; else goto <D.28525>;
          <D.28524>:
          if (__result == 0) goto <D.28526>; else goto <D.28527>;
          <D.28526>:
          D.28528 = &MEM[(void *)"Single" + 2B];
          D.28529 = *D.28528;
          D.28530 = (int) D.28529;
          D.28531 = __s2 + 2;
          D.28532 = *D.28531;
          D.28533 = (int) D.28532;
          __result = D.28530 - D.28533;
          if (__s2_len > 2) goto <D.28534>; else goto <D.28535>;
          <D.28534>:
          if (__result == 0) goto <D.28536>; else goto <D.28537>;
          <D.28536>:
          D.28538 = &MEM[(void *)"Single" + 3B];
          D.28539 = *D.28538;
          D.28540 = (int) D.28539;
          D.28541 = __s2 + 3;
          D.28542 = *D.28541;
          D.28543 = (int) D.28542;
          __result = D.28540 - D.28543;
          <D.28537>:
          <D.28535>:
          <D.28527>:
          <D.28525>:
          <D.28517>:
          <D.28515>:
        }
        D.20995 = __result;
      }
      iftmp.211 = -D.20995;
      goto <D.28544>;
      <D.28508>:
      iftmp.211 = __builtin_strcmp (name, "Single");
      <D.28544>:
      D.20996 = iftmp.211;
    }
    if (D.20996 == 0) goto <D.28545>; else goto <D.28546>;
    <D.28545>:
    t = 12;
    class->blittable = 1;
    goto <D.28547>;
    <D.28546>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28551 = "SByte";
        D.28552 = MEM[(const unsigned char *)D.28551];
        D.28553 = (int) D.28552;
        D.28554 = *__s2;
        D.28555 = (int) D.28554;
        __result = D.28553 - D.28555;
        {
          if (__s2_len != 0) goto <D.28556>; else goto <D.28557>;
          <D.28556>:
          if (__result == 0) goto <D.28558>; else goto <D.28559>;
          <D.28558>:
          D.28560 = &MEM[(void *)"SByte" + 1B];
          D.28561 = *D.28560;
          D.28562 = (int) D.28561;
          D.28563 = __s2 + 1;
          D.28564 = *D.28563;
          D.28565 = (int) D.28564;
          __result = D.28562 - D.28565;
          if (__s2_len > 1) goto <D.28566>; else goto <D.28567>;
          <D.28566>:
          if (__result == 0) goto <D.28568>; else goto <D.28569>;
          <D.28568>:
          D.28570 = &MEM[(void *)"SByte" + 2B];
          D.28571 = *D.28570;
          D.28572 = (int) D.28571;
          D.28573 = __s2 + 2;
          D.28574 = *D.28573;
          D.28575 = (int) D.28574;
          __result = D.28572 - D.28575;
          if (__s2_len > 2) goto <D.28576>; else goto <D.28577>;
          <D.28576>:
          if (__result == 0) goto <D.28578>; else goto <D.28579>;
          <D.28578>:
          D.28580 = &MEM[(void *)"SByte" + 3B];
          D.28581 = *D.28580;
          D.28582 = (int) D.28581;
          D.28583 = __s2 + 3;
          D.28584 = *D.28583;
          D.28585 = (int) D.28584;
          __result = D.28582 - D.28585;
          <D.28579>:
          <D.28577>:
          <D.28569>:
          <D.28567>:
          <D.28559>:
          <D.28557>:
        }
        D.21004 = __result;
      }
      iftmp.212 = -D.21004;
      goto <D.28586>;
      <D.28550>:
      iftmp.212 = __builtin_strcmp (name, "SByte");
      <D.28586>:
      D.21005 = iftmp.212;
    }
    if (D.21005 == 0) goto <D.28587>; else goto <D.28588>;
    <D.28587>:
    t = 4;
    class->blittable = 1;
    <D.28588>:
    <D.28547>:
    goto <D.20929>;
    <D.21006>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28592 = "UInt32";
        D.28593 = MEM[(const unsigned char *)D.28592];
        D.28594 = (int) D.28593;
        D.28595 = *__s2;
        D.28596 = (int) D.28595;
        __result = D.28594 - D.28596;
        {
          if (__s2_len != 0) goto <D.28597>; else goto <D.28598>;
          <D.28597>:
          if (__result == 0) goto <D.28599>; else goto <D.28600>;
          <D.28599>:
          D.28601 = &MEM[(void *)"UInt32" + 1B];
          D.28602 = *D.28601;
          D.28603 = (int) D.28602;
          D.28604 = __s2 + 1;
          D.28605 = *D.28604;
          D.28606 = (int) D.28605;
          __result = D.28603 - D.28606;
          if (__s2_len > 1) goto <D.28607>; else goto <D.28608>;
          <D.28607>:
          if (__result == 0) goto <D.28609>; else goto <D.28610>;
          <D.28609>:
          D.28611 = &MEM[(void *)"UInt32" + 2B];
          D.28612 = *D.28611;
          D.28613 = (int) D.28612;
          D.28614 = __s2 + 2;
          D.28615 = *D.28614;
          D.28616 = (int) D.28615;
          __result = D.28613 - D.28616;
          if (__s2_len > 2) goto <D.28617>; else goto <D.28618>;
          <D.28617>:
          if (__result == 0) goto <D.28619>; else goto <D.28620>;
          <D.28619>:
          D.28621 = &MEM[(void *)"UInt32" + 3B];
          D.28622 = *D.28621;
          D.28623 = (int) D.28622;
          D.28624 = __s2 + 3;
          D.28625 = *D.28624;
          D.28626 = (int) D.28625;
          __result = D.28623 - D.28626;
          <D.28620>:
          <D.28618>:
          <D.28610>:
          <D.28608>:
          <D.28600>:
          <D.28598>:
        }
        D.21014 = __result;
      }
      iftmp.213 = -D.21014;
      goto <D.28627>;
      <D.28591>:
      iftmp.213 = __builtin_strcmp (name, "UInt32");
      <D.28627>:
      D.21015 = iftmp.213;
    }
    if (D.21015 == 0) goto <D.28628>; else goto <D.28629>;
    <D.28628>:
    t = 9;
    class->blittable = 1;
    goto <D.28630>;
    <D.28629>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28634 = "UInt16";
        D.28635 = MEM[(const unsigned char *)D.28634];
        D.28636 = (int) D.28635;
        D.28637 = *__s2;
        D.28638 = (int) D.28637;
        __result = D.28636 - D.28638;
        {
          if (__s2_len != 0) goto <D.28639>; else goto <D.28640>;
          <D.28639>:
          if (__result == 0) goto <D.28641>; else goto <D.28642>;
          <D.28641>:
          D.28643 = &MEM[(void *)"UInt16" + 1B];
          D.28644 = *D.28643;
          D.28645 = (int) D.28644;
          D.28646 = __s2 + 1;
          D.28647 = *D.28646;
          D.28648 = (int) D.28647;
          __result = D.28645 - D.28648;
          if (__s2_len > 1) goto <D.28649>; else goto <D.28650>;
          <D.28649>:
          if (__result == 0) goto <D.28651>; else goto <D.28652>;
          <D.28651>:
          D.28653 = &MEM[(void *)"UInt16" + 2B];
          D.28654 = *D.28653;
          D.28655 = (int) D.28654;
          D.28656 = __s2 + 2;
          D.28657 = *D.28656;
          D.28658 = (int) D.28657;
          __result = D.28655 - D.28658;
          if (__s2_len > 2) goto <D.28659>; else goto <D.28660>;
          <D.28659>:
          if (__result == 0) goto <D.28661>; else goto <D.28662>;
          <D.28661>:
          D.28663 = &MEM[(void *)"UInt16" + 3B];
          D.28664 = *D.28663;
          D.28665 = (int) D.28664;
          D.28666 = __s2 + 3;
          D.28667 = *D.28666;
          D.28668 = (int) D.28667;
          __result = D.28665 - D.28668;
          <D.28662>:
          <D.28660>:
          <D.28652>:
          <D.28650>:
          <D.28642>:
          <D.28640>:
        }
        D.21023 = __result;
      }
      iftmp.214 = -D.21023;
      goto <D.28669>;
      <D.28633>:
      iftmp.214 = __builtin_strcmp (name, "UInt16");
      <D.28669>:
      D.21024 = iftmp.214;
    }
    if (D.21024 == 0) goto <D.28670>; else goto <D.28671>;
    <D.28670>:
    t = 7;
    class->blittable = 1;
    goto <D.28672>;
    <D.28671>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28676 = "UInt64";
        D.28677 = MEM[(const unsigned char *)D.28676];
        D.28678 = (int) D.28677;
        D.28679 = *__s2;
        D.28680 = (int) D.28679;
        __result = D.28678 - D.28680;
        {
          if (__s2_len != 0) goto <D.28681>; else goto <D.28682>;
          <D.28681>:
          if (__result == 0) goto <D.28683>; else goto <D.28684>;
          <D.28683>:
          D.28685 = &MEM[(void *)"UInt64" + 1B];
          D.28686 = *D.28685;
          D.28687 = (int) D.28686;
          D.28688 = __s2 + 1;
          D.28689 = *D.28688;
          D.28690 = (int) D.28689;
          __result = D.28687 - D.28690;
          if (__s2_len > 1) goto <D.28691>; else goto <D.28692>;
          <D.28691>:
          if (__result == 0) goto <D.28693>; else goto <D.28694>;
          <D.28693>:
          D.28695 = &MEM[(void *)"UInt64" + 2B];
          D.28696 = *D.28695;
          D.28697 = (int) D.28696;
          D.28698 = __s2 + 2;
          D.28699 = *D.28698;
          D.28700 = (int) D.28699;
          __result = D.28697 - D.28700;
          if (__s2_len > 2) goto <D.28701>; else goto <D.28702>;
          <D.28701>:
          if (__result == 0) goto <D.28703>; else goto <D.28704>;
          <D.28703>:
          D.28705 = &MEM[(void *)"UInt64" + 3B];
          D.28706 = *D.28705;
          D.28707 = (int) D.28706;
          D.28708 = __s2 + 3;
          D.28709 = *D.28708;
          D.28710 = (int) D.28709;
          __result = D.28707 - D.28710;
          <D.28704>:
          <D.28702>:
          <D.28694>:
          <D.28692>:
          <D.28684>:
          <D.28682>:
        }
        D.21032 = __result;
      }
      iftmp.215 = -D.21032;
      goto <D.28711>;
      <D.28675>:
      iftmp.215 = __builtin_strcmp (name, "UInt64");
      <D.28711>:
      D.21033 = iftmp.215;
    }
    if (D.21033 == 0) goto <D.28712>; else goto <D.28713>;
    <D.28712>:
    t = 11;
    class->blittable = 1;
    goto <D.28714>;
    <D.28713>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28718 = "UIntPtr";
        D.28719 = MEM[(const unsigned char *)D.28718];
        D.28720 = (int) D.28719;
        D.28721 = *__s2;
        D.28722 = (int) D.28721;
        __result = D.28720 - D.28722;
        {
          if (__s2_len != 0) goto <D.28723>; else goto <D.28724>;
          <D.28723>:
          if (__result == 0) goto <D.28725>; else goto <D.28726>;
          <D.28725>:
          D.28727 = &MEM[(void *)"UIntPtr" + 1B];
          D.28728 = *D.28727;
          D.28729 = (int) D.28728;
          D.28730 = __s2 + 1;
          D.28731 = *D.28730;
          D.28732 = (int) D.28731;
          __result = D.28729 - D.28732;
          if (__s2_len > 1) goto <D.28733>; else goto <D.28734>;
          <D.28733>:
          if (__result == 0) goto <D.28735>; else goto <D.28736>;
          <D.28735>:
          D.28737 = &MEM[(void *)"UIntPtr" + 2B];
          D.28738 = *D.28737;
          D.28739 = (int) D.28738;
          D.28740 = __s2 + 2;
          D.28741 = *D.28740;
          D.28742 = (int) D.28741;
          __result = D.28739 - D.28742;
          if (__s2_len > 2) goto <D.28743>; else goto <D.28744>;
          <D.28743>:
          if (__result == 0) goto <D.28745>; else goto <D.28746>;
          <D.28745>:
          D.28747 = &MEM[(void *)"UIntPtr" + 3B];
          D.28748 = *D.28747;
          D.28749 = (int) D.28748;
          D.28750 = __s2 + 3;
          D.28751 = *D.28750;
          D.28752 = (int) D.28751;
          __result = D.28749 - D.28752;
          <D.28746>:
          <D.28744>:
          <D.28736>:
          <D.28734>:
          <D.28726>:
          <D.28724>:
        }
        D.21041 = __result;
      }
      iftmp.216 = -D.21041;
      goto <D.28753>;
      <D.28717>:
      iftmp.216 = __builtin_strcmp (name, "UIntPtr");
      <D.28753>:
      D.21042 = iftmp.216;
    }
    if (D.21042 == 0) goto <D.28754>; else goto <D.28755>;
    <D.28754>:
    t = 25;
    class->blittable = 1;
    <D.28755>:
    <D.28714>:
    <D.28672>:
    <D.28630>:
    goto <D.20929>;
    <D.21043>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28099 = "TypedReference";
        D.28100 = MEM[(const unsigned char *)D.28099];
        D.28101 = (int) D.28100;
        D.28759 = *__s2;
        D.28760 = (int) D.28759;
        __result = D.28101 - D.28760;
        {
          if (__s2_len != 0) goto <D.28761>; else goto <D.28762>;
          <D.28761>:
          if (__result == 0) goto <D.28763>; else goto <D.28764>;
          <D.28763>:
          D.28108 = &MEM[(void *)"TypedReference" + 1B];
          D.28109 = *D.28108;
          D.28110 = (int) D.28109;
          D.28765 = __s2 + 1;
          D.28766 = *D.28765;
          D.28767 = (int) D.28766;
          __result = D.28110 - D.28767;
          if (__s2_len > 1) goto <D.28768>; else goto <D.28769>;
          <D.28768>:
          if (__result == 0) goto <D.28770>; else goto <D.28771>;
          <D.28770>:
          D.28118 = &MEM[(void *)"TypedReference" + 2B];
          D.28119 = *D.28118;
          D.28120 = (int) D.28119;
          D.28772 = __s2 + 2;
          D.28773 = *D.28772;
          D.28774 = (int) D.28773;
          __result = D.28120 - D.28774;
          if (__s2_len > 2) goto <D.28775>; else goto <D.28776>;
          <D.28775>:
          if (__result == 0) goto <D.28777>; else goto <D.28778>;
          <D.28777>:
          D.28128 = &MEM[(void *)"TypedReference" + 3B];
          D.28129 = *D.28128;
          D.28130 = (int) D.28129;
          D.28779 = __s2 + 3;
          D.28780 = *D.28779;
          D.28781 = (int) D.28780;
          __result = D.28130 - D.28781;
          <D.28778>:
          <D.28776>:
          <D.28771>:
          <D.28769>:
          <D.28764>:
          <D.28762>:
        }
        D.21051 = __result;
      }
      iftmp.217 = -D.21051;
      goto <D.28782>;
      <D.28758>:
      iftmp.217 = __builtin_strcmp (name, "TypedReference");
      <D.28782>:
      D.21052 = iftmp.217;
    }
    if (D.21052 == 0) goto <D.28783>; else goto <D.28784>;
    <D.28783>:
    t = 22;
    class->blittable = 1;
    <D.28784>:
    goto <D.20929>;
    <D.21053>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28788 = "Void";
        D.28789 = MEM[(const unsigned char *)D.28788];
        D.28790 = (int) D.28789;
        D.28791 = *__s2;
        D.28792 = (int) D.28791;
        __result = D.28790 - D.28792;
        {
          if (__s2_len != 0) goto <D.28793>; else goto <D.28794>;
          <D.28793>:
          if (__result == 0) goto <D.28795>; else goto <D.28796>;
          <D.28795>:
          D.28797 = &MEM[(void *)"Void" + 1B];
          D.28798 = *D.28797;
          D.28799 = (int) D.28798;
          D.28800 = __s2 + 1;
          D.28801 = *D.28800;
          D.28802 = (int) D.28801;
          __result = D.28799 - D.28802;
          if (__s2_len > 1) goto <D.28803>; else goto <D.28804>;
          <D.28803>:
          if (__result == 0) goto <D.28805>; else goto <D.28806>;
          <D.28805>:
          D.28807 = &MEM[(void *)"Void" + 2B];
          D.28808 = *D.28807;
          D.28809 = (int) D.28808;
          D.28810 = __s2 + 2;
          D.28811 = *D.28810;
          D.28812 = (int) D.28811;
          __result = D.28809 - D.28812;
          if (__s2_len > 2) goto <D.28813>; else goto <D.28814>;
          <D.28813>:
          if (__result == 0) goto <D.28815>; else goto <D.28816>;
          <D.28815>:
          D.28817 = &MEM[(void *)"Void" + 3B];
          D.28818 = *D.28817;
          D.28819 = (int) D.28818;
          D.28820 = __s2 + 3;
          D.28821 = *D.28820;
          D.28822 = (int) D.28821;
          __result = D.28819 - D.28822;
          <D.28816>:
          <D.28814>:
          <D.28806>:
          <D.28804>:
          <D.28796>:
          <D.28794>:
        }
        D.21061 = __result;
      }
      iftmp.218 = -D.21061;
      goto <D.28823>;
      <D.28787>:
      iftmp.218 = __builtin_strcmp (name, "Void");
      <D.28823>:
      D.21062 = iftmp.218;
    }
    if (D.21062 == 0) goto <D.28824>; else goto <D.28825>;
    <D.28824>:
    t = 1;
    <D.28825>:
    goto <D.20929>;
    <D.21063>:
    goto <D.20929>;
    <D.20929>:
    <D.28171>:
    <D.28142>:
    D.28826 = (unsigned char) t;
    class->byval_arg.type = D.28826;
    D.28052 = class->byval_arg.type;
    class->this_arg.type = D.28052;
  }
  <D.28140>:
  D.28829 = class->flags;
  D.28830 = D.28829 & 32;
  if (D.28830 != 0) goto <D.28827>; else goto <D.28831>;
  <D.28831>:
  D.28052 = class->byval_arg.type;
  if (D.28052 == 19) goto <D.28827>; else goto <D.28832>;
  <D.28832>:
  D.28052 = class->byval_arg.type;
  if (D.28052 == 30) goto <D.28827>; else goto <D.28828>;
  <D.28827>:
  D.28833 = mono_get_unique_iid (class);
  D.28834 = (short unsigned int) D.28833;
  class->interface_id = D.28834;
  <D.28828>:
}


mono_class_setup_parent (struct MonoClass * class, struct MonoClass * parent)
{
  struct MonoImage * D.28836;
  int iftmp.219;
  int D.21081;
  int iftmp.220;
  int D.21080;
  const char[7] * D.28843;
  unsigned char D.28844;
  int D.28845;
  unsigned char D.28846;
  int D.28847;
  const unsigned char * D.28852;
  unsigned char D.28853;
  int D.28854;
  const unsigned char * D.28855;
  unsigned char D.28856;
  int D.28857;
  const unsigned char * D.28862;
  unsigned char D.28863;
  int D.28864;
  const unsigned char * D.28865;
  unsigned char D.28866;
  int D.28867;
  const unsigned char * D.28872;
  unsigned char D.28873;
  int D.28874;
  const unsigned char * D.28875;
  unsigned char D.28876;
  int D.28877;
  const char * D.28879;
  int D.21090;
  int iftmp.221;
  int D.21089;
  const char[7] * D.28887;
  unsigned char D.28888;
  int D.28889;
  unsigned char D.28890;
  int D.28891;
  const unsigned char * D.28896;
  unsigned char D.28897;
  int D.28898;
  const unsigned char * D.28899;
  unsigned char D.28900;
  int D.28901;
  const unsigned char * D.28906;
  unsigned char D.28907;
  int D.28908;
  const unsigned char * D.28909;
  unsigned char D.28910;
  int D.28911;
  const unsigned char * D.28916;
  unsigned char D.28917;
  int D.28918;
  const unsigned char * D.28919;
  unsigned char D.28920;
  int D.28921;
  const char * D.28923;
  int D.21099;
  int iftmp.222;
  int D.21098;
  const char[9] * D.28929;
  unsigned char D.28930;
  int D.28931;
  unsigned char D.28932;
  int D.28933;
  const unsigned char * D.28938;
  unsigned char D.28939;
  int D.28940;
  const unsigned char * D.28941;
  unsigned char D.28942;
  int D.28943;
  const unsigned char * D.28948;
  unsigned char D.28949;
  int D.28950;
  const unsigned char * D.28951;
  unsigned char D.28952;
  int D.28953;
  const unsigned char * D.28958;
  unsigned char D.28959;
  int D.28960;
  const unsigned char * D.28961;
  unsigned char D.28962;
  int D.28963;
  unsigned int D.28969;
  unsigned int D.28970;
  unsigned char D.28972;
  unsigned int D.28975;
  struct MonoClass * D.28978;
  struct MonoGenericClass * D.28983;
  const char * D.28986;
  <unnamed-unsigned:1> D.28989;
  <unnamed-unsigned:1> D.28990;
  <unnamed-unsigned:1> D.28991;
  long unsigned int D.28995;
  long unsigned int D.28996;
  char D.28999;
  int D.21108;
  int iftmp.223;
  int D.21107;
  const char[19] * D.29005;
  unsigned char D.29006;
  int D.29007;
  unsigned char D.29008;
  int D.29009;
  const unsigned char * D.29014;
  unsigned char D.29015;
  int D.29016;
  const unsigned char * D.29017;
  unsigned char D.29018;
  int D.29019;
  const unsigned char * D.29024;
  unsigned char D.29025;
  int D.29026;
  const unsigned char * D.29027;
  unsigned char D.29028;
  int D.29029;
  const unsigned char * D.29034;
  unsigned char D.29035;
  int D.29036;
  const unsigned char * D.29037;
  unsigned char D.29038;
  int D.29039;
  int D.21117;
  int iftmp.224;
  int D.21116;
  const char[19] * D.29048;
  unsigned char D.29049;
  int D.29050;
  unsigned char D.29051;
  int D.29052;
  const unsigned char * D.29057;
  unsigned char D.29058;
  int D.29059;
  const unsigned char * D.29060;
  unsigned char D.29061;
  int D.29062;
  const unsigned char * D.29067;
  unsigned char D.29068;
  int D.29069;
  const unsigned char * D.29070;
  unsigned char D.29071;
  int D.29072;
  const unsigned char * D.29077;
  unsigned char D.29078;
  int D.29079;
  const unsigned char * D.29080;
  unsigned char D.29081;
  int D.29082;
  int D.21126;
  int iftmp.225;
  int D.21125;
  const char[9] * D.29091;
  unsigned char D.29092;
  int D.29093;
  unsigned char D.29094;
  int D.29095;
  const unsigned char * D.29100;
  unsigned char D.29101;
  int D.29102;
  const unsigned char * D.29103;
  unsigned char D.29104;
  int D.29105;
  const unsigned char * D.29110;
  unsigned char D.29111;
  int D.29112;
  const unsigned char * D.29113;
  unsigned char D.29114;
  int D.29115;
  const unsigned char * D.29120;
  unsigned char D.29121;
  int D.29122;
  const unsigned char * D.29123;
  unsigned char D.29124;
  int D.29125;
  struct MonoClass * D.29131;
  long unsigned int D.29132;
  long unsigned int D.29133;
  struct MonoImage * D.29135;
  int D.29136;
  int D.21135;
  int iftmp.226;
  int D.21134;
  const char[10] * D.29141;
  unsigned char D.29142;
  int D.29143;
  unsigned char D.29144;
  int D.29145;
  const unsigned char * D.29150;
  unsigned char D.29151;
  int D.29152;
  const unsigned char * D.29153;
  unsigned char D.29154;
  int D.29155;
  const unsigned char * D.29160;
  unsigned char D.29161;
  int D.29162;
  const unsigned char * D.29163;
  unsigned char D.29164;
  int D.29165;
  const unsigned char * D.29170;
  unsigned char D.29171;
  int D.29172;
  const unsigned char * D.29173;
  unsigned char D.29174;
  int D.29175;
  const char * D.29177;
  int D.21144;
  int iftmp.227;
  int D.21143;
  unsigned char D.29182;
  int D.29183;
  const unsigned char * D.29188;
  unsigned char D.29189;
  int D.29190;
  const unsigned char * D.29195;
  unsigned char D.29196;
  int D.29197;
  const unsigned char * D.29202;
  unsigned char D.29203;
  int D.29204;
  const char * D.29206;
  int D.29207;
  int D.21153;
  int iftmp.228;
  int D.21152;
  const char[5] * D.29213;
  unsigned char D.29214;
  int D.29215;
  unsigned char D.29216;
  int D.29217;
  const unsigned char * D.29222;
  unsigned char D.29223;
  int D.29224;
  const unsigned char * D.29225;
  unsigned char D.29226;
  int D.29227;
  const unsigned char * D.29232;
  unsigned char D.29233;
  int D.29234;
  const unsigned char * D.29235;
  unsigned char D.29236;
  int D.29237;
  const unsigned char * D.29242;
  unsigned char D.29243;
  int D.29244;
  const unsigned char * D.29245;
  unsigned char D.29246;
  int D.29247;
  int D.21162;
  int iftmp.229;
  int D.21161;
  unsigned char D.29254;
  int D.29255;
  const unsigned char * D.29260;
  unsigned char D.29261;
  int D.29262;
  const unsigned char * D.29267;
  unsigned char D.29268;
  int D.29269;
  const unsigned char * D.29274;
  unsigned char D.29275;
  int D.29276;
  <unnamed-unsigned:1> D.29280;
  gboolean system_namespace;
  gboolean is_corlib;

  D.28836 = class->image;
  is_corlib = mono_is_corlib_image (D.28836);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name_space;
      D.28843 = "System";
      D.28844 = MEM[(const unsigned char *)D.28843];
      D.28845 = (int) D.28844;
      D.28846 = *__s2;
      D.28847 = (int) D.28846;
      __result = D.28845 - D.28847;
      {
        if (__s2_len != 0) goto <D.28848>; else goto <D.28849>;
        <D.28848>:
        if (__result == 0) goto <D.28850>; else goto <D.28851>;
        <D.28850>:
        D.28852 = &MEM[(void *)"System" + 1B];
        D.28853 = *D.28852;
        D.28854 = (int) D.28853;
        D.28855 = __s2 + 1;
        D.28856 = *D.28855;
        D.28857 = (int) D.28856;
        __result = D.28854 - D.28857;
        if (__s2_len > 1) goto <D.28858>; else goto <D.28859>;
        <D.28858>:
        if (__result == 0) goto <D.28860>; else goto <D.28861>;
        <D.28860>:
        D.28862 = &MEM[(void *)"System" + 2B];
        D.28863 = *D.28862;
        D.28864 = (int) D.28863;
        D.28865 = __s2 + 2;
        D.28866 = *D.28865;
        D.28867 = (int) D.28866;
        __result = D.28864 - D.28867;
        if (__s2_len > 2) goto <D.28868>; else goto <D.28869>;
        <D.28868>:
        if (__result == 0) goto <D.28870>; else goto <D.28871>;
        <D.28870>:
        D.28872 = &MEM[(void *)"System" + 3B];
        D.28873 = *D.28872;
        D.28874 = (int) D.28873;
        D.28875 = __s2 + 3;
        D.28876 = *D.28875;
        D.28877 = (int) D.28876;
        __result = D.28874 - D.28877;
        <D.28871>:
        <D.28869>:
        <D.28861>:
        <D.28859>:
        <D.28851>:
        <D.28849>:
      }
      D.21080 = __result;
    }
    iftmp.220 = -D.21080;
    goto <D.28878>;
    <D.28842>:
    D.28879 = class->name_space;
    iftmp.220 = __builtin_strcmp (D.28879, "System");
    <D.28878>:
    D.21081 = iftmp.220;
  }
  if (D.21081 == 0) goto <D.28880>; else goto <D.28838>;
  <D.28880>:
  if (is_corlib != 0) goto <D.28881>; else goto <D.28838>;
  <D.28881>:
  iftmp.219 = 1;
  goto <D.28839>;
  <D.28838>:
  iftmp.219 = 0;
  <D.28839>:
  system_namespace = iftmp.219;
  if (system_namespace != 0) goto <D.28882>; else goto <D.28883>;
  <D.28882>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28887 = "Object";
      D.28888 = MEM[(const unsigned char *)D.28887];
      D.28889 = (int) D.28888;
      D.28890 = *__s2;
      D.28891 = (int) D.28890;
      __result = D.28889 - D.28891;
      {
        if (__s2_len != 0) goto <D.28892>; else goto <D.28893>;
        <D.28892>:
        if (__result == 0) goto <D.28894>; else goto <D.28895>;
        <D.28894>:
        D.28896 = &MEM[(void *)"Object" + 1B];
        D.28897 = *D.28896;
        D.28898 = (int) D.28897;
        D.28899 = __s2 + 1;
        D.28900 = *D.28899;
        D.28901 = (int) D.28900;
        __result = D.28898 - D.28901;
        if (__s2_len > 1) goto <D.28902>; else goto <D.28903>;
        <D.28902>:
        if (__result == 0) goto <D.28904>; else goto <D.28905>;
        <D.28904>:
        D.28906 = &MEM[(void *)"Object" + 2B];
        D.28907 = *D.28906;
        D.28908 = (int) D.28907;
        D.28909 = __s2 + 2;
        D.28910 = *D.28909;
        D.28911 = (int) D.28910;
        __result = D.28908 - D.28911;
        if (__s2_len > 2) goto <D.28912>; else goto <D.28913>;
        <D.28912>:
        if (__result == 0) goto <D.28914>; else goto <D.28915>;
        <D.28914>:
        D.28916 = &MEM[(void *)"Object" + 3B];
        D.28917 = *D.28916;
        D.28918 = (int) D.28917;
        D.28919 = __s2 + 3;
        D.28920 = *D.28919;
        D.28921 = (int) D.28920;
        __result = D.28918 - D.28921;
        <D.28915>:
        <D.28913>:
        <D.28905>:
        <D.28903>:
        <D.28895>:
        <D.28893>:
      }
      D.21089 = __result;
    }
    iftmp.221 = -D.21089;
    goto <D.28922>;
    <D.28886>:
    D.28923 = class->name;
    iftmp.221 = __builtin_strcmp (D.28923, "Object");
    <D.28922>:
    D.21090 = iftmp.221;
  }
  if (D.21090 == 0) goto <D.28924>; else goto <D.28925>;
  <D.28924>:
  class->parent = 0B;
  class->instance_size = 16;
  return;
  <D.28925>:
  <D.28883>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28929 = "<Module>";
      D.28930 = MEM[(const unsigned char *)D.28929];
      D.28931 = (int) D.28930;
      D.28932 = *__s2;
      D.28933 = (int) D.28932;
      __result = D.28931 - D.28933;
      {
        if (__s2_len != 0) goto <D.28934>; else goto <D.28935>;
        <D.28934>:
        if (__result == 0) goto <D.28936>; else goto <D.28937>;
        <D.28936>:
        D.28938 = &MEM[(void *)"<Module>" + 1B];
        D.28939 = *D.28938;
        D.28940 = (int) D.28939;
        D.28941 = __s2 + 1;
        D.28942 = *D.28941;
        D.28943 = (int) D.28942;
        __result = D.28940 - D.28943;
        if (__s2_len > 1) goto <D.28944>; else goto <D.28945>;
        <D.28944>:
        if (__result == 0) goto <D.28946>; else goto <D.28947>;
        <D.28946>:
        D.28948 = &MEM[(void *)"<Module>" + 2B];
        D.28949 = *D.28948;
        D.28950 = (int) D.28949;
        D.28951 = __s2 + 2;
        D.28952 = *D.28951;
        D.28953 = (int) D.28952;
        __result = D.28950 - D.28953;
        if (__s2_len > 2) goto <D.28954>; else goto <D.28955>;
        <D.28954>:
        if (__result == 0) goto <D.28956>; else goto <D.28957>;
        <D.28956>:
        D.28958 = &MEM[(void *)"<Module>" + 3B];
        D.28959 = *D.28958;
        D.28960 = (int) D.28959;
        D.28961 = __s2 + 3;
        D.28962 = *D.28961;
        D.28963 = (int) D.28962;
        __result = D.28960 - D.28963;
        <D.28957>:
        <D.28955>:
        <D.28947>:
        <D.28945>:
        <D.28937>:
        <D.28935>:
      }
      D.21098 = __result;
    }
    iftmp.222 = -D.21098;
    goto <D.28964>;
    <D.28928>:
    D.28923 = class->name;
    iftmp.222 = __builtin_strcmp (D.28923, "<Module>");
    <D.28964>:
    D.21099 = iftmp.222;
  }
  if (D.21099 == 0) goto <D.28965>; else goto <D.28966>;
  <D.28965>:
  class->parent = 0B;
  class->instance_size = 0;
  return;
  <D.28966>:
  D.28969 = class->flags;
  D.28970 = D.28969 & 32;
  if (D.28970 == 0) goto <D.28971>; else goto <D.28967>;
  <D.28971>:
  D.28972 = class->byval_arg.type;
  if (D.28972 != 19) goto <D.28973>; else goto <D.28967>;
  <D.28973>:
  D.28972 = class->byval_arg.type;
  if (D.28972 != 30) goto <D.28974>; else goto <D.28967>;
  <D.28974>:
  D.28969 = class->flags;
  D.28975 = D.28969 & 4096;
  if (D.28975 != 0) goto <D.28976>; else goto <D.28977>;
  <D.28976>:
  init_com_from_comimport (class);
  D.28978 = mono_defaults.object_class;
  if (D.28978 == parent) goto <D.28979>; else goto <D.28980>;
  <D.28979>:
  parent = mono_class_get_com_object_class ();
  <D.28980>:
  <D.28977>:
  if (parent == 0B) goto <D.28981>; else goto <D.28982>;
  <D.28981>:
  parent = mono_defaults.object_class;
  mono_class_set_failure (class, 7, 0B);
  <D.28982>:
  class->parent = parent;
  D.28983 = parent->generic_class;
  if (D.28983 != 0B) goto <D.28984>; else goto <D.28985>;
  <D.28984>:
  D.28986 = parent->name;
  if (D.28986 == 0B) goto <D.28987>; else goto <D.28988>;
  <D.28987>:
  return;
  <D.28988>:
  <D.28985>:
  D.28989 = parent->marshalbyref;
  class->marshalbyref = D.28989;
  D.28990 = parent->contextbound;
  class->contextbound = D.28990;
  D.28991 = parent->delegate;
  class->delegate = D.28991;
  D.28969 = class->flags;
  D.28975 = D.28969 & 4096;
  if (D.28975 != 0) goto <D.28992>; else goto <D.28994>;
  <D.28994>:
  D.28995 = BIT_FIELD_REF <*parent, 64, 256>;
  D.28996 = D.28995 & 1073741824;
  if (D.28996 != 0) goto <D.28992>; else goto <D.28993>;
  <D.28992>:
  class->is_com_object = 1;
  <D.28993>:
  if (system_namespace != 0) goto <D.28997>; else goto <D.28998>;
  <D.28997>:
  D.28923 = class->name;
  D.28999 = *D.28923;
  if (D.28999 == 77) goto <D.29000>; else goto <D.29001>;
  <D.29000>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.29005 = "MarshalByRefObject";
      D.29006 = MEM[(const unsigned char *)D.29005];
      D.29007 = (int) D.29006;
      D.29008 = *__s2;
      D.29009 = (int) D.29008;
      __result = D.29007 - D.29009;
      {
        if (__s2_len != 0) goto <D.29010>; else goto <D.29011>;
        <D.29010>:
        if (__result == 0) goto <D.29012>; else goto <D.29013>;
        <D.29012>:
        D.29014 = &MEM[(void *)"MarshalByRefObject" + 1B];
        D.29015 = *D.29014;
        D.29016 = (int) D.29015;
        D.29017 = __s2 + 1;
        D.29018 = *D.29017;
        D.29019 = (int) D.29018;
        __result = D.29016 - D.29019;
        if (__s2_len > 1) goto <D.29020>; else goto <D.29021>;
        <D.29020>:
        if (__result == 0) goto <D.29022>; else goto <D.29023>;
        <D.29022>:
        D.29024 = &MEM[(void *)"MarshalByRefObject" + 2B];
        D.29025 = *D.29024;
        D.29026 = (int) D.29025;
        D.29027 = __s2 + 2;
        D.29028 = *D.29027;
        D.29029 = (int) D.29028;
        __result = D.29026 - D.29029;
        if (__s2_len > 2) goto <D.29030>; else goto <D.29031>;
        <D.29030>:
        if (__result == 0) goto <D.29032>; else goto <D.29033>;
        <D.29032>:
        D.29034 = &MEM[(void *)"MarshalByRefObject" + 3B];
        D.29035 = *D.29034;
        D.29036 = (int) D.29035;
        D.29037 = __s2 + 3;
        D.29038 = *D.29037;
        D.29039 = (int) D.29038;
        __result = D.29036 - D.29039;
        <D.29033>:
        <D.29031>:
        <D.29023>:
        <D.29021>:
        <D.29013>:
        <D.29011>:
      }
      D.21107 = __result;
    }
    iftmp.223 = -D.21107;
    goto <D.29040>;
    <D.29004>:
    D.28923 = class->name;
    iftmp.223 = __builtin_strcmp (D.28923, "MarshalByRefObject");
    <D.29040>:
    D.21108 = iftmp.223;
  }
  if (D.21108 == 0) goto <D.29041>; else goto <D.29042>;
  <D.29041>:
  class->marshalbyref = 1;
  <D.29042>:
  <D.29001>:
  D.28923 = class->name;
  D.28999 = *D.28923;
  if (D.28999 == 67) goto <D.29043>; else goto <D.29044>;
  <D.29043>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.29048 = "ContextBoundObject";
      D.29049 = MEM[(const unsigned char *)D.29048];
      D.29050 = (int) D.29049;
      D.29051 = *__s2;
      D.29052 = (int) D.29051;
      __result = D.29050 - D.29052;
      {
        if (__s2_len != 0) goto <D.29053>; else goto <D.29054>;
        <D.29053>:
        if (__result == 0) goto <D.29055>; else goto <D.29056>;
        <D.29055>:
        D.29057 = &MEM[(void *)"ContextBoundObject" + 1B];
        D.29058 = *D.29057;
        D.29059 = (int) D.29058;
        D.29060 = __s2 + 1;
        D.29061 = *D.29060;
        D.29062 = (int) D.29061;
        __result = D.29059 - D.29062;
        if (__s2_len > 1) goto <D.29063>; else goto <D.29064>;
        <D.29063>:
        if (__result == 0) goto <D.29065>; else goto <D.29066>;
        <D.29065>:
        D.29067 = &MEM[(void *)"ContextBoundObject" + 2B];
        D.29068 = *D.29067;
        D.29069 = (int) D.29068;
        D.29070 = __s2 + 2;
        D.29071 = *D.29070;
        D.29072 = (int) D.29071;
        __result = D.29069 - D.29072;
        if (__s2_len > 2) goto <D.29073>; else goto <D.29074>;
        <D.29073>:
        if (__result == 0) goto <D.29075>; else goto <D.29076>;
        <D.29075>:
        D.29077 = &MEM[(void *)"ContextBoundObject" + 3B];
        D.29078 = *D.29077;
        D.29079 = (int) D.29078;
        D.29080 = __s2 + 3;
        D.29081 = *D.29080;
        D.29082 = (int) D.29081;
        __result = D.29079 - D.29082;
        <D.29076>:
        <D.29074>:
        <D.29066>:
        <D.29064>:
        <D.29056>:
        <D.29054>:
      }
      D.21116 = __result;
    }
    iftmp.224 = -D.21116;
    goto <D.29083>;
    <D.29047>:
    D.28923 = class->name;
    iftmp.224 = __builtin_strcmp (D.28923, "ContextBoundObject");
    <D.29083>:
    D.21117 = iftmp.224;
  }
  if (D.21117 == 0) goto <D.29084>; else goto <D.29085>;
  <D.29084>:
  class->contextbound = 1;
  <D.29085>:
  <D.29044>:
  D.28923 = class->name;
  D.28999 = *D.28923;
  if (D.28999 == 68) goto <D.29086>; else goto <D.29087>;
  <D.29086>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.29091 = "Delegate";
      D.29092 = MEM[(const unsigned char *)D.29091];
      D.29093 = (int) D.29092;
      D.29094 = *__s2;
      D.29095 = (int) D.29094;
      __result = D.29093 - D.29095;
      {
        if (__s2_len != 0) goto <D.29096>; else goto <D.29097>;
        <D.29096>:
        if (__result == 0) goto <D.29098>; else goto <D.29099>;
        <D.29098>:
        D.29100 = &MEM[(void *)"Delegate" + 1B];
        D.29101 = *D.29100;
        D.29102 = (int) D.29101;
        D.29103 = __s2 + 1;
        D.29104 = *D.29103;
        D.29105 = (int) D.29104;
        __result = D.29102 - D.29105;
        if (__s2_len > 1) goto <D.29106>; else goto <D.29107>;
        <D.29106>:
        if (__result == 0) goto <D.29108>; else goto <D.29109>;
        <D.29108>:
        D.29110 = &MEM[(void *)"Delegate" + 2B];
        D.29111 = *D.29110;
        D.29112 = (int) D.29111;
        D.29113 = __s2 + 2;
        D.29114 = *D.29113;
        D.29115 = (int) D.29114;
        __result = D.29112 - D.29115;
        if (__s2_len > 2) goto <D.29116>; else goto <D.29117>;
        <D.29116>:
        if (__result == 0) goto <D.29118>; else goto <D.29119>;
        <D.29118>:
        D.29120 = &MEM[(void *)"Delegate" + 3B];
        D.29121 = *D.29120;
        D.29122 = (int) D.29121;
        D.29123 = __s2 + 3;
        D.29124 = *D.29123;
        D.29125 = (int) D.29124;
        __result = D.29122 - D.29125;
        <D.29119>:
        <D.29117>:
        <D.29109>:
        <D.29107>:
        <D.29099>:
        <D.29097>:
      }
      D.21125 = __result;
    }
    iftmp.225 = -D.21125;
    goto <D.29126>;
    <D.29090>:
    D.28923 = class->name;
    iftmp.225 = __builtin_strcmp (D.28923, "Delegate");
    <D.29126>:
    D.21126 = iftmp.225;
  }
  if (D.21126 == 0) goto <D.29127>; else goto <D.29128>;
  <D.29127>:
  class->delegate = 1;
  <D.29128>:
  <D.29087>:
  <D.28998>:
  D.29131 = class->parent;
  D.29132 = BIT_FIELD_REF <*D.29131, 64, 256>;
  D.29133 = D.29132 & 16;
  if (D.29133 != 0) goto <D.29129>; else goto <D.29134>;
  <D.29134>:
  D.29131 = class->parent;
  D.29135 = D.29131->image;
  D.29136 = mono_is_corlib_image (D.29135);
  if (D.29136 != 0) goto <D.29137>; else goto <D.29130>;
  <D.29137>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29131 = class->parent;
      __s2 = D.29131->name;
      D.29141 = "ValueType";
      D.29142 = MEM[(const unsigned char *)D.29141];
      D.29143 = (int) D.29142;
      D.29144 = *__s2;
      D.29145 = (int) D.29144;
      __result = D.29143 - D.29145;
      {
        if (__s2_len != 0) goto <D.29146>; else goto <D.29147>;
        <D.29146>:
        if (__result == 0) goto <D.29148>; else goto <D.29149>;
        <D.29148>:
        D.29150 = &MEM[(void *)"ValueType" + 1B];
        D.29151 = *D.29150;
        D.29152 = (int) D.29151;
        D.29153 = __s2 + 1;
        D.29154 = *D.29153;
        D.29155 = (int) D.29154;
        __result = D.29152 - D.29155;
        if (__s2_len > 1) goto <D.29156>; else goto <D.29157>;
        <D.29156>:
        if (__result == 0) goto <D.29158>; else goto <D.29159>;
        <D.29158>:
        D.29160 = &MEM[(void *)"ValueType" + 2B];
        D.29161 = *D.29160;
        D.29162 = (int) D.29161;
        D.29163 = __s2 + 2;
        D.29164 = *D.29163;
        D.29165 = (int) D.29164;
        __result = D.29162 - D.29165;
        if (__s2_len > 2) goto <D.29166>; else goto <D.29167>;
        <D.29166>:
        if (__result == 0) goto <D.29168>; else goto <D.29169>;
        <D.29168>:
        D.29170 = &MEM[(void *)"ValueType" + 3B];
        D.29171 = *D.29170;
        D.29172 = (int) D.29171;
        D.29173 = __s2 + 3;
        D.29174 = *D.29173;
        D.29175 = (int) D.29174;
        __result = D.29172 - D.29175;
        <D.29169>:
        <D.29167>:
        <D.29159>:
        <D.29157>:
        <D.29149>:
        <D.29147>:
      }
      D.21134 = __result;
    }
    iftmp.226 = -D.21134;
    goto <D.29176>;
    <D.29140>:
    D.29131 = class->parent;
    D.29177 = D.29131->name;
    iftmp.226 = __builtin_strcmp (D.29177, "ValueType");
    <D.29176>:
    D.21135 = iftmp.226;
  }
  if (D.21135 == 0) goto <D.29178>; else goto <D.29130>;
  <D.29178>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29131 = class->parent;
      __s2 = D.29131->name_space;
      D.28843 = "System";
      D.28844 = MEM[(const unsigned char *)D.28843];
      D.28845 = (int) D.28844;
      D.29182 = *__s2;
      D.29183 = (int) D.29182;
      __result = D.28845 - D.29183;
      {
        if (__s2_len != 0) goto <D.29184>; else goto <D.29185>;
        <D.29184>:
        if (__result == 0) goto <D.29186>; else goto <D.29187>;
        <D.29186>:
        D.28852 = &MEM[(void *)"System" + 1B];
        D.28853 = *D.28852;
        D.28854 = (int) D.28853;
        D.29188 = __s2 + 1;
        D.29189 = *D.29188;
        D.29190 = (int) D.29189;
        __result = D.28854 - D.29190;
        if (__s2_len > 1) goto <D.29191>; else goto <D.29192>;
        <D.29191>:
        if (__result == 0) goto <D.29193>; else goto <D.29194>;
        <D.29193>:
        D.28862 = &MEM[(void *)"System" + 2B];
        D.28863 = *D.28862;
        D.28864 = (int) D.28863;
        D.29195 = __s2 + 2;
        D.29196 = *D.29195;
        D.29197 = (int) D.29196;
        __result = D.28864 - D.29197;
        if (__s2_len > 2) goto <D.29198>; else goto <D.29199>;
        <D.29198>:
        if (__result == 0) goto <D.29200>; else goto <D.29201>;
        <D.29200>:
        D.28872 = &MEM[(void *)"System" + 3B];
        D.28873 = *D.28872;
        D.28874 = (int) D.28873;
        D.29202 = __s2 + 3;
        D.29203 = *D.29202;
        D.29204 = (int) D.29203;
        __result = D.28874 - D.29204;
        <D.29201>:
        <D.29199>:
        <D.29194>:
        <D.29192>:
        <D.29187>:
        <D.29185>:
      }
      D.21143 = __result;
    }
    iftmp.227 = -D.21143;
    goto <D.29205>;
    <D.29181>:
    D.29131 = class->parent;
    D.29206 = D.29131->name_space;
    iftmp.227 = __builtin_strcmp (D.29206, "System");
    <D.29205>:
    D.21144 = iftmp.227;
  }
  if (D.21144 == 0) goto <D.29129>; else goto <D.29130>;
  <D.29129>:
  class->valuetype = 1;
  <D.29130>:
  D.29131 = class->parent;
  D.29135 = D.29131->image;
  D.29207 = mono_is_corlib_image (D.29135);
  if (D.29207 != 0) goto <D.29208>; else goto <D.29209>;
  <D.29208>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29131 = class->parent;
      __s2 = D.29131->name;
      D.29213 = "Enum";
      D.29214 = MEM[(const unsigned char *)D.29213];
      D.29215 = (int) D.29214;
      D.29216 = *__s2;
      D.29217 = (int) D.29216;
      __result = D.29215 - D.29217;
      {
        if (__s2_len != 0) goto <D.29218>; else goto <D.29219>;
        <D.29218>:
        if (__result == 0) goto <D.29220>; else goto <D.29221>;
        <D.29220>:
        D.29222 = &MEM[(void *)"Enum" + 1B];
        D.29223 = *D.29222;
        D.29224 = (int) D.29223;
        D.29225 = __s2 + 1;
        D.29226 = *D.29225;
        D.29227 = (int) D.29226;
        __result = D.29224 - D.29227;
        if (__s2_len > 1) goto <D.29228>; else goto <D.29229>;
        <D.29228>:
        if (__result == 0) goto <D.29230>; else goto <D.29231>;
        <D.29230>:
        D.29232 = &MEM[(void *)"Enum" + 2B];
        D.29233 = *D.29232;
        D.29234 = (int) D.29233;
        D.29235 = __s2 + 2;
        D.29236 = *D.29235;
        D.29237 = (int) D.29236;
        __result = D.29234 - D.29237;
        if (__s2_len > 2) goto <D.29238>; else goto <D.29239>;
        <D.29238>:
        if (__result == 0) goto <D.29240>; else goto <D.29241>;
        <D.29240>:
        D.29242 = &MEM[(void *)"Enum" + 3B];
        D.29243 = *D.29242;
        D.29244 = (int) D.29243;
        D.29245 = __s2 + 3;
        D.29246 = *D.29245;
        D.29247 = (int) D.29246;
        __result = D.29244 - D.29247;
        <D.29241>:
        <D.29239>:
        <D.29231>:
        <D.29229>:
        <D.29221>:
        <D.29219>:
      }
      D.21152 = __result;
    }
    iftmp.228 = -D.21152;
    goto <D.29248>;
    <D.29212>:
    D.29131 = class->parent;
    D.29177 = D.29131->name;
    iftmp.228 = __builtin_strcmp (D.29177, "Enum");
    <D.29248>:
    D.21153 = iftmp.228;
  }
  if (D.21153 == 0) goto <D.29249>; else goto <D.29250>;
  <D.29249>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29131 = class->parent;
      __s2 = D.29131->name_space;
      D.28843 = "System";
      D.28844 = MEM[(const unsigned char *)D.28843];
      D.28845 = (int) D.28844;
      D.29254 = *__s2;
      D.29255 = (int) D.29254;
      __result = D.28845 - D.29255;
      {
        if (__s2_len != 0) goto <D.29256>; else goto <D.29257>;
        <D.29256>:
        if (__result == 0) goto <D.29258>; else goto <D.29259>;
        <D.29258>:
        D.28852 = &MEM[(void *)"System" + 1B];
        D.28853 = *D.28852;
        D.28854 = (int) D.28853;
        D.29260 = __s2 + 1;
        D.29261 = *D.29260;
        D.29262 = (int) D.29261;
        __result = D.28854 - D.29262;
        if (__s2_len > 1) goto <D.29263>; else goto <D.29264>;
        <D.29263>:
        if (__result == 0) goto <D.29265>; else goto <D.29266>;
        <D.29265>:
        D.28862 = &MEM[(void *)"System" + 2B];
        D.28863 = *D.28862;
        D.28864 = (int) D.28863;
        D.29267 = __s2 + 2;
        D.29268 = *D.29267;
        D.29269 = (int) D.29268;
        __result = D.28864 - D.29269;
        if (__s2_len > 2) goto <D.29270>; else goto <D.29271>;
        <D.29270>:
        if (__result == 0) goto <D.29272>; else goto <D.29273>;
        <D.29272>:
        D.28872 = &MEM[(void *)"System" + 3B];
        D.28873 = *D.28872;
        D.28874 = (int) D.28873;
        D.29274 = __s2 + 3;
        D.29275 = *D.29274;
        D.29276 = (int) D.29275;
        __result = D.28874 - D.29276;
        <D.29273>:
        <D.29271>:
        <D.29266>:
        <D.29264>:
        <D.29259>:
        <D.29257>:
      }
      D.21161 = __result;
    }
    iftmp.229 = -D.21161;
    goto <D.29277>;
    <D.29253>:
    D.29131 = class->parent;
    D.29206 = D.29131->name_space;
    iftmp.229 = __builtin_strcmp (D.29206, "System");
    <D.29277>:
    D.21162 = iftmp.229;
  }
  if (D.21162 == 0) goto <D.29278>; else goto <D.29279>;
  <D.29278>:
  class->enumtype = 1;
  D.29280 = class->enumtype;
  class->valuetype = D.29280;
  <D.29279>:
  <D.29250>:
  <D.29209>:
  goto <D.28968>;
  <D.28967>:
  D.28969 = class->flags;
  D.28975 = D.28969 & 4096;
  if (D.28975 != 0) goto <D.29281>; else goto <D.29282>;
  <D.29281>:
  init_com_from_comimport (class);
  <D.29282>:
  class->parent = 0B;
  <D.28968>:
}


init_com_from_comimport (struct MonoClass * class)
{
  <unnamed type> D.29284;
  struct MonoImage * D.29287;
  int D.29288;

  D.29284 = mono_security_get_mode ();
  if (D.29284 == 1) goto <D.29285>; else goto <D.29286>;
  <D.29285>:
  D.29287 = class->image;
  D.29288 = mono_security_core_clr_determine_platform_image (D.29287);
  if (D.29288 == 0) goto <D.29289>; else goto <D.29290>;
  <D.29289>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.29290>:
  <D.29286>:
}


mono_class_setup_supertypes (struct MonoClass * class)
{
  struct MonoClass * D.29294;
  struct MonoClass * * D.29297;
  short unsigned int D.29302;
  short unsigned int D.29303;
  int iftmp.230;
  short unsigned int D.29306;
  unsigned int ms.231;
  unsigned int D.29311;
  int D.29312;
  long unsigned int D.29315;
  long unsigned int D.29316;
  sizetype D.29317;
  struct MonoClass * * D.29318;
  long unsigned int D.29319;
  long unsigned int D.29320;
  int ms;
  struct MonoClass * * supertypes;

  {
    void * __tmp;

    __tmp = class->supertypes;
    mono_memory_barrier ();
    supertypes = __tmp;
  }
  if (supertypes != 0B) goto <D.29292>; else goto <D.29293>;
  <D.29292>:
  return;
  <D.29293>:
  D.29294 = class->parent;
  if (D.29294 != 0B) goto <D.29295>; else goto <D.29296>;
  <D.29295>:
  D.29294 = class->parent;
  D.29297 = D.29294->supertypes;
  if (D.29297 == 0B) goto <D.29298>; else goto <D.29299>;
  <D.29298>:
  D.29294 = class->parent;
  mono_class_setup_supertypes (D.29294);
  <D.29299>:
  <D.29296>:
  D.29294 = class->parent;
  if (D.29294 != 0B) goto <D.29300>; else goto <D.29301>;
  <D.29300>:
  D.29294 = class->parent;
  D.29302 = D.29294->idepth;
  D.29303 = D.29302 + 1;
  class->idepth = D.29303;
  goto <D.29304>;
  <D.29301>:
  class->idepth = 1;
  <D.29304>:
  D.29306 = class->idepth;
  if (D.29306 > 5) goto <D.29307>; else goto <D.29308>;
  <D.29307>:
  D.29306 = class->idepth;
  iftmp.230 = (int) D.29306;
  goto <D.29309>;
  <D.29308>:
  iftmp.230 = 6;
  <D.29309>:
  ms = iftmp.230;
  ms.231 = (unsigned int) ms;
  D.29311 = ms.231 * 8;
  D.29312 = (int) D.29311;
  supertypes = mono_class_alloc0 (class, D.29312);
  D.29294 = class->parent;
  if (D.29294 != 0B) goto <D.29313>; else goto <D.29314>;
  <D.29313>:
  D.29306 = class->idepth;
  D.29315 = (long unsigned int) D.29306;
  D.29316 = D.29315 * 8;
  D.29317 = D.29316 + 18446744073709551608;
  D.29318 = supertypes + D.29317;
  *D.29318 = class;
  D.29294 = class->parent;
  D.29297 = D.29294->supertypes;
  D.29294 = class->parent;
  D.29302 = D.29294->idepth;
  D.29319 = (long unsigned int) D.29302;
  D.29320 = D.29319 * 8;
  memcpy (supertypes, D.29297, D.29320);
  goto <D.29321>;
  <D.29314>:
  *supertypes = class;
  <D.29321>:
  mono_memory_barrier ();
  class->supertypes = supertypes;
}


mono_class_is_nullable (struct MonoClass * klass)
{
  gboolean D.29323;
  int iftmp.232;
  struct MonoGenericClass * D.29327;
  struct MonoClass * D.29329;
  struct MonoClass * D.29330;

  D.29327 = klass->generic_class;
  if (D.29327 != 0B) goto <D.29328>; else goto <D.29325>;
  <D.29328>:
  D.29327 = klass->generic_class;
  D.29329 = D.29327->container_class;
  D.29330 = mono_defaults.generic_nullable_class;
  if (D.29329 == D.29330) goto <D.29331>; else goto <D.29325>;
  <D.29331>:
  iftmp.232 = 1;
  goto <D.29326>;
  <D.29325>:
  iftmp.232 = 0;
  <D.29326>:
  D.29323 = iftmp.232;
  return D.29323;
}


mono_class_get_nullable_param (struct MonoClass * klass)
{
  int D.29333;
  _Bool D.29334;
  long int D.29335;
  long int D.29336;
  struct MonoClass * D.29339;
  struct MonoGenericClass * D.29340;
  struct MonoGenericInst * D.29341;
  struct MonoType * D.29342;

  D.29333 = mono_class_is_nullable (klass);
  D.29334 = D.29333 == 0;
  D.29335 = (long int) D.29334;
  D.29336 = __builtin_expect (D.29335, 0);
  if (D.29336 != 0) goto <D.29337>; else goto <D.29338>;
  <D.29337>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5807, "mono_class_is_nullable (klass)");
  <D.29338>:
  D.29340 = klass->generic_class;
  D.29341 = D.29340->context.class_inst;
  D.29342 = D.29341->type_argv[0];
  D.29339 = mono_class_from_mono_type (D.29342);
  return D.29339;
}


mono_generic_class_get_class (struct MonoGenericClass * gclass)
{
  struct MonoClass * D.29344;
  struct MonoClass * D.29347;
  struct MonoImageSet * D.29350;
  int record_gclass_instantiation.233;
  struct GSList * gclass_recorded_list.234;
  struct GSList * gclass_recorded_list.235;
  struct MonoClass * D.29356;
  const char * D.29359;
  const char * D.29360;
  struct MonoImage * D.29361;
  unsigned int D.29362;
  unsigned int D.29363;
  unsigned int D.29364;
  unsigned char D.29365;
  struct MonoGenericClass * D.29366;
  <unnamed-unsigned:1> D.29367;
  <unnamed-unsigned:1> D.29368;
  struct MonoClass * D.29369;
  int D.29370;
  struct MonoClass * D.29373;
  long unsigned int D.29374;
  long unsigned int D.29375;
  long unsigned int D.29378;
  long unsigned int D.29379;
  int D.29382;
  int D.29383;
  unsigned int inflated_classes.236;
  unsigned int inflated_classes.237;
  unsigned int inflated_classes_size.238;
  unsigned int inflated_classes_size.239;
  struct MonoClass * klass;
  struct MonoClass * gklass;

  D.29344 = gclass->cached_class;
  if (D.29344 != 0B) goto <D.29345>; else goto <D.29346>;
  <D.29345>:
  D.29347 = gclass->cached_class;
  return D.29347;
  <D.29346>:
  mono_loader_lock ();
  D.29344 = gclass->cached_class;
  if (D.29344 != 0B) goto <D.29348>; else goto <D.29349>;
  <D.29348>:
  mono_loader_unlock ();
  D.29347 = gclass->cached_class;
  return D.29347;
  <D.29349>:
  D.29350 = gclass->owner;
  klass = mono_image_set_alloc0 (D.29350, 272);
  gklass = gclass->container_class;
  record_gclass_instantiation.233 = record_gclass_instantiation;
  if (record_gclass_instantiation.233 > 0) goto <D.29352>; else goto <D.29353>;
  <D.29352>:
  gclass_recorded_list.234 = gclass_recorded_list;
  gclass_recorded_list.235 = monoeg_g_slist_append (gclass_recorded_list.234, klass);
  gclass_recorded_list = gclass_recorded_list.235;
  <D.29353>:
  D.29356 = gklass->nested_in;
  if (D.29356 != 0B) goto <D.29357>; else goto <D.29358>;
  <D.29357>:
  D.29356 = gklass->nested_in;
  klass->nested_in = D.29356;
  <D.29358>:
  D.29359 = gklass->name;
  klass->name = D.29359;
  D.29360 = gklass->name_space;
  klass->name_space = D.29360;
  mono_profiler_class_event (klass, 0);
  D.29361 = gklass->image;
  klass->image = D.29361;
  D.29362 = gklass->flags;
  klass->flags = D.29362;
  D.29363 = gklass->type_token;
  klass->type_token = D.29363;
  D.29364 = gklass->field.count;
  klass->field.count = D.29364;
  klass->is_inflated = 1;
  klass->generic_class = gclass;
  klass->byval_arg.type = 21;
  D.29365 = klass->byval_arg.type;
  klass->this_arg.type = D.29365;
  klass->byval_arg.data.generic_class = gclass;
  D.29366 = klass->byval_arg.data.generic_class;
  klass->this_arg.data.generic_class = D.29366;
  klass->this_arg.byref = 1;
  D.29367 = gklass->enumtype;
  klass->enumtype = D.29367;
  D.29368 = gklass->valuetype;
  klass->valuetype = D.29368;
  klass->element_class = klass;
  D.29369 = klass->element_class;
  klass->cast_class = D.29369;
  D.29370 = mono_class_is_nullable (klass);
  if (D.29370 != 0) goto <D.29371>; else goto <D.29372>;
  <D.29371>:
  D.29373 = mono_class_get_nullable_param (klass);
  klass->element_class = D.29373;
  D.29369 = klass->element_class;
  klass->cast_class = D.29369;
  <D.29372>:
  mono_generic_class_setup_parent (klass, gklass);
  D.29374 = BIT_FIELD_REF <*gclass, 64, 192>;
  D.29375 = D.29374 & 1;
  if (D.29375 != 0) goto <D.29376>; else goto <D.29377>;
  <D.29376>:
  klass->inited = 1;
  mono_class_setup_supertypes (klass);
  D.29378 = BIT_FIELD_REF <*klass, 64, 256>;
  D.29379 = D.29378 & 16;
  if (D.29379 != 0) goto <D.29380>; else goto <D.29381>;
  <D.29380>:
  D.29382 = gklass->instance_size;
  klass->instance_size = D.29382;
  D.29383 = gklass->sizes.class_size;
  klass->sizes.class_size = D.29383;
  mono_memory_barrier ();
  klass->size_inited = 1;
  <D.29381>:
  <D.29377>:
  mono_memory_barrier ();
  gclass->cached_class = klass;
  mono_profiler_class_loaded (klass, 0);
  inflated_classes.236 = inflated_classes;
  inflated_classes.237 = inflated_classes.236 + 1;
  inflated_classes = inflated_classes.237;
  inflated_classes_size.238 = inflated_classes_size;
  inflated_classes_size.239 = inflated_classes_size.238 + 272;
  inflated_classes_size = inflated_classes_size.239;
  mono_loader_unlock ();
  D.29347 = klass;
  return D.29347;
}


mono_class_from_generic_parameter (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar)
{
  struct MonoGenericParamInfo * iftmp.240;
  struct MonoGenericContainer * D.29392;
  struct MonoClass * D.29396;
  struct MonoClass * D.29399;
  struct MonoImage * iftmp.241;
  struct MonoClass * D.29413;
  struct MonoImage * iftmp.242;
  struct MonoGenericContainer * container;
  struct MonoGenericParamInfo * pinfo;
  struct MonoClass * klass;

  container = param->owner;
  mono_loader_lock ();
  if (container != 0B) goto <D.29389>; else goto <D.29390>;
  <D.29389>:
  D.29392 = param->owner;
  if (D.29392 != 0B) goto <D.29393>; else goto <D.29394>;
  <D.29393>:
  iftmp.240 = &MEM[(struct MonoGenericParamFull *)param].info;
  goto <D.29395>;
  <D.29394>:
  iftmp.240 = 0B;
  <D.29395>:
  pinfo = iftmp.240;
  D.29396 = pinfo->pklass;
  if (D.29396 != 0B) goto <D.29397>; else goto <D.29398>;
  <D.29397>:
  mono_loader_unlock ();
  D.29399 = pinfo->pklass;
  return D.29399;
  <D.29398>:
  goto <D.29400>;
  <D.29390>:
  pinfo = 0B;
  image = 0B;
  klass = get_anon_gparam_class (param, is_mvar);
  if (klass != 0B) goto <D.29401>; else goto <D.29402>;
  <D.29401>:
  mono_loader_unlock ();
  D.29399 = klass;
  return D.29399;
  <D.29402>:
  <D.29400>:
  if (image == 0B) goto <D.29403>; else goto <D.29404>;
  <D.29403>:
  if (container != 0B) goto <D.29405>; else goto <D.29406>;
  <D.29405>:
  if (is_mvar != 0) goto <D.29407>; else goto <D.29408>;
  <D.29407>:
  {
    struct MonoMethod * method;

    method = container->owner.method;
    if (method != 0B) goto <D.29412>; else goto <D.29410>;
    <D.29412>:
    D.29413 = method->klass;
    if (D.29413 != 0B) goto <D.29414>; else goto <D.29410>;
    <D.29414>:
    D.29413 = method->klass;
    iftmp.241 = D.29413->image;
    goto <D.29411>;
    <D.29410>:
    iftmp.241 = 0B;
    <D.29411>:
    image = iftmp.241;
  }
  goto <D.29415>;
  <D.29408>:
  {
    struct MonoClass * klass;

    klass = container->owner.klass;
    if (klass != 0B) goto <D.29417>; else goto <D.29418>;
    <D.29417>:
    iftmp.242 = klass->image;
    goto <D.29419>;
    <D.29418>:
    iftmp.242 = 0B;
    <D.29419>:
    image = iftmp.242;
  }
  <D.29415>:
  <D.29406>:
  <D.29404>:
  klass = make_generic_param_class (param, image, is_mvar, pinfo);
  mono_memory_barrier ();
  if (container != 0B) goto <D.29420>; else goto <D.29421>;
  <D.29420>:
  pinfo->pklass = klass;
  goto <D.29422>;
  <D.29421>:
  set_anon_gparam_class (param, is_mvar, klass);
  <D.29422>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (klass, 0);
  D.29399 = klass;
  return D.29399;
}


get_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar)
{
  short unsigned int D.29424;
  unsigned int D.29425;
  short unsigned int D.29426;
  unsigned int D.29427;
  unsigned int D.29428;
  unsigned int D.29429;
  _Bool D.29430;
  long int D.29431;
  long int D.29432;
  struct MonoClass * D.29439;
  struct MonoClass * iftmp.243;
  struct MonoClass * * D.29441;
  long unsigned int D.29444;
  long unsigned int D.29445;
  struct MonoClass * * D.29446;
  struct MonoClass * iftmp.244;
  struct MonoClass * * D.29449;
  struct MonoClass * * D.29452;
  struct GHashTable * iftmp.245;
  struct MonoClass * iftmp.246;
  long int D.29461;
  const void * D.29462;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.29424 = param->num;
  D.29425 = (unsigned int) D.29424;
  D.29426 = param->serial;
  D.29427 = (unsigned int) D.29426;
  D.29428 = D.29427 << 16;
  D.29429 = D.29425 | D.29428;
  n = (int) D.29429;
  image = param->image;
  D.29430 = image == 0B;
  D.29431 = (long int) D.29430;
  D.29432 = __builtin_expect (D.29431, 0);
  if (D.29432 != 0) goto <D.29433>; else goto <D.29434>;
  <D.29433>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6028, "image");
  <D.29434>:
  if (n <= 15) goto <D.29435>; else goto <D.29436>;
  <D.29435>:
  if (is_mvar != 0) goto <D.29437>; else goto <D.29438>;
  <D.29437>:
  D.29441 = image->mvar_cache_fast;
  if (D.29441 != 0B) goto <D.29442>; else goto <D.29443>;
  <D.29442>:
  D.29441 = image->mvar_cache_fast;
  D.29444 = (long unsigned int) n;
  D.29445 = D.29444 * 8;
  D.29446 = D.29441 + D.29445;
  iftmp.243 = *D.29446;
  goto <D.29447>;
  <D.29443>:
  iftmp.243 = 0B;
  <D.29447>:
  D.29439 = iftmp.243;
  return D.29439;
  <D.29438>:
  D.29449 = image->var_cache_fast;
  if (D.29449 != 0B) goto <D.29450>; else goto <D.29451>;
  <D.29450>:
  D.29449 = image->var_cache_fast;
  D.29444 = (long unsigned int) n;
  D.29445 = D.29444 * 8;
  D.29452 = D.29449 + D.29445;
  iftmp.244 = *D.29452;
  goto <D.29453>;
  <D.29451>:
  iftmp.244 = 0B;
  <D.29453>:
  D.29439 = iftmp.244;
  return D.29439;
  <D.29436>:
  if (is_mvar != 0) goto <D.29455>; else goto <D.29456>;
  <D.29455>:
  iftmp.245 = image->mvar_cache_slow;
  goto <D.29457>;
  <D.29456>:
  iftmp.245 = image->var_cache_slow;
  <D.29457>:
  ht = iftmp.245;
  if (ht != 0B) goto <D.29459>; else goto <D.29460>;
  <D.29459>:
  D.29461 = (long int) n;
  D.29462 = (const void *) D.29461;
  iftmp.246 = monoeg_g_hash_table_lookup (ht, D.29462);
  goto <D.29463>;
  <D.29460>:
  iftmp.246 = 0B;
  <D.29463>:
  D.29439 = iftmp.246;
  return D.29439;
}


make_generic_param_class (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar, struct MonoGenericParamInfo * pinfo)
{
  unsigned int classes_size.247;
  unsigned int classes_size.248;
  const char * D.29471;
  short unsigned int D.29473;
  void * D.29474;
  const char * D.29475;
  const char * iftmp.249;
  struct MonoClass * D.29484;
  const char * iftmp.250;
  struct MonoClass * D.29495;
  struct MonoClass * * D.29499;
  struct MonoClass * D.29500;
  unsigned int D.29501;
  unsigned int D.29502;
  unsigned char D.29504;
  short unsigned int D.29510;
  int D.29511;
  int D.29512;
  struct MonoImage * D.29514;
  struct MonoClass * D.29515;
  struct MonoClass * D.29516;
  int D.29517;
  short unsigned int D.29520;
  short unsigned int D.29521;
  short unsigned int D.29522;
  long unsigned int D.29523;
  unsigned int D.29524;
  unsigned int D.29525;
  void * D.29526;
  struct MonoClass * * D.29527;
  int D.29528;
  long unsigned int D.29529;
  long unsigned int D.29530;
  struct MonoClass * * D.29531;
  long unsigned int D.29532;
  long unsigned int D.29533;
  struct MonoClass * * D.29534;
  struct MonoClass * D.29535;
  struct MonoClass * D.29536;
  unsigned char iftmp.251;
  unsigned char D.29541;
  struct MonoGenericParam * D.29542;
  int iftmp.252;
  unsigned int D.29546;
  struct MonoClass * D.29550;
  unsigned char D.29551;
  gchar * D.29554;
  int D.29556;
  struct MonoClass * D.29557;
  struct MonoClass * klass;
  struct MonoClass * * ptr;
  int count;
  int pos;
  int i;
  struct MonoGenericContainer * container;

  container = param->owner;
  if (image == 0B) goto <D.29465>; else goto <D.29466>;
  <D.29465>:
  image = mono_defaults.corlib;
  <D.29466>:
  klass = mono_image_alloc0 (image, 272);
  classes_size.247 = classes_size;
  classes_size.248 = classes_size.247 + 272;
  classes_size = classes_size.248;
  if (pinfo != 0B) goto <D.29469>; else goto <D.29470>;
  <D.29469>:
  D.29471 = pinfo->name;
  klass->name = D.29471;
  goto <D.29472>;
  <D.29470>:
  {
    int n;

    D.29473 = param->num;
    n = (int) D.29473;
    D.29474 = mono_image_alloc0 (image, 16);
    klass->name = D.29474;
    D.29475 = klass->name;
    sprintf (D.29475, "%d", n);
  }
  <D.29472>:
  if (container != 0B) goto <D.29476>; else goto <D.29477>;
  <D.29476>:
  if (is_mvar != 0) goto <D.29478>; else goto <D.29479>;
  <D.29478>:
  {
    struct MonoMethod * omethod;

    omethod = container->owner.method;
    if (omethod != 0B) goto <D.29483>; else goto <D.29481>;
    <D.29483>:
    D.29484 = omethod->klass;
    if (D.29484 != 0B) goto <D.29485>; else goto <D.29481>;
    <D.29485>:
    D.29484 = omethod->klass;
    iftmp.249 = D.29484->name_space;
    goto <D.29482>;
    <D.29481>:
    iftmp.249 = "";
    <D.29482>:
    klass->name_space = iftmp.249;
  }
  goto <D.29486>;
  <D.29479>:
  {
    struct MonoClass * oklass;

    oklass = container->owner.klass;
    if (oklass != 0B) goto <D.29488>; else goto <D.29489>;
    <D.29488>:
    iftmp.250 = oklass->name_space;
    goto <D.29490>;
    <D.29489>:
    iftmp.250 = "";
    <D.29490>:
    klass->name_space = iftmp.250;
  }
  <D.29486>:
  goto <D.29491>;
  <D.29477>:
  klass->name_space = "";
  <D.29491>:
  mono_profiler_class_event (klass, 0);
  count = 0;
  if (pinfo != 0B) goto <D.29492>; else goto <D.29493>;
  <D.29492>:
  ptr = pinfo->constraints;
  goto <D.21379>;
  <D.21378>:
  ptr = ptr + 8;
  count = count + 1;
  <D.21379>:
  if (ptr != 0B) goto <D.29494>; else goto <D.21380>;
  <D.29494>:
  D.29495 = *ptr;
  if (D.29495 != 0B) goto <D.21378>; else goto <D.21380>;
  <D.21380>:
  <D.29493>:
  pos = 0;
  if (count > 0) goto <D.29498>; else goto <D.29496>;
  <D.29498>:
  D.29499 = pinfo->constraints;
  D.29500 = *D.29499;
  D.29501 = D.29500->flags;
  D.29502 = D.29501 & 32;
  if (D.29502 == 0) goto <D.29503>; else goto <D.29496>;
  <D.29503>:
  D.29499 = pinfo->constraints;
  D.29500 = *D.29499;
  D.29504 = D.29500->byval_arg.type;
  if (D.29504 != 19) goto <D.29505>; else goto <D.29496>;
  <D.29505>:
  D.29499 = pinfo->constraints;
  D.29500 = *D.29499;
  D.29504 = D.29500->byval_arg.type;
  if (D.29504 != 30) goto <D.29506>; else goto <D.29496>;
  <D.29506>:
  D.29499 = pinfo->constraints;
  D.29500 = *D.29499;
  klass->parent = D.29500;
  pos = pos + 1;
  goto <D.29497>;
  <D.29496>:
  if (pinfo != 0B) goto <D.29509>; else goto <D.29507>;
  <D.29509>:
  D.29510 = pinfo->flags;
  D.29511 = (int) D.29510;
  D.29512 = D.29511 & 8;
  if (D.29512 != 0) goto <D.29513>; else goto <D.29507>;
  <D.29513>:
  D.29514 = mono_defaults.corlib;
  D.29515 = mono_class_from_name (D.29514, "System", "ValueType");
  klass->parent = D.29515;
  goto <D.29508>;
  <D.29507>:
  D.29516 = mono_defaults.object_class;
  klass->parent = D.29516;
  <D.29508>:
  <D.29497>:
  D.29517 = count - pos;
  if (D.29517 > 0) goto <D.29518>; else goto <D.29519>;
  <D.29518>:
  D.29520 = (short unsigned int) count;
  D.29521 = (short unsigned int) pos;
  D.29522 = D.29520 - D.29521;
  klass->interface_count = D.29522;
  D.29517 = count - pos;
  D.29523 = (long unsigned int) D.29517;
  D.29524 = (unsigned int) D.29523;
  D.29525 = D.29524 * 8;
  D.29526 = mono_image_alloc0 (image, D.29525);
  klass->interfaces = D.29526;
  klass->interfaces_inited = 1;
  i = pos;
  goto <D.21382>;
  <D.21381>:
  D.29527 = klass->interfaces;
  D.29528 = i - pos;
  D.29529 = (long unsigned int) D.29528;
  D.29530 = D.29529 * 8;
  D.29531 = D.29527 + D.29530;
  D.29499 = pinfo->constraints;
  D.29532 = (long unsigned int) i;
  D.29533 = D.29532 * 8;
  D.29534 = D.29499 + D.29533;
  D.29535 = *D.29534;
  *D.29531 = D.29535;
  i = i + 1;
  <D.21382>:
  if (i < count) goto <D.21381>; else goto <D.21383>;
  <D.21383>:
  <D.29519>:
  klass->image = image;
  klass->inited = 1;
  klass->element_class = klass;
  D.29536 = klass->element_class;
  klass->cast_class = D.29536;
  klass->flags = 1;
  if (is_mvar != 0) goto <D.29538>; else goto <D.29539>;
  <D.29538>:
  iftmp.251 = 30;
  goto <D.29540>;
  <D.29539>:
  iftmp.251 = 19;
  <D.29540>:
  klass->byval_arg.type = iftmp.251;
  D.29541 = klass->byval_arg.type;
  klass->this_arg.type = D.29541;
  klass->byval_arg.data.generic_param = param;
  D.29542 = klass->byval_arg.data.generic_param;
  klass->this_arg.data.generic_param = D.29542;
  klass->this_arg.byref = 1;
  if (pinfo != 0B) goto <D.29544>; else goto <D.29545>;
  <D.29544>:
  D.29546 = pinfo->token;
  iftmp.252 = (int) D.29546;
  goto <D.29547>;
  <D.29545>:
  iftmp.252 = 0;
  <D.29547>:
  klass->sizes.generic_param_token = iftmp.252;
  klass->min_align = 1;
  klass->instance_size = 8;
  mono_memory_barrier ();
  klass->size_inited = 1;
  mono_class_setup_supertypes (klass);
  D.29517 = count - pos;
  if (D.29517 > 0) goto <D.29548>; else goto <D.29549>;
  <D.29548>:
  D.29550 = klass->parent;
  mono_class_setup_vtable (D.29550);
  D.29550 = klass->parent;
  D.29551 = D.29550->exception_type;
  if (D.29551 != 0) goto <D.29552>; else goto <D.29553>;
  <D.29552>:
  D.29554 = monoeg_strdup ("Failed to setup parent interfaces");
  mono_class_set_failure (klass, 7, D.29554);
  goto <D.29555>;
  <D.29553>:
  D.29550 = klass->parent;
  D.29556 = D.29550->vtable_size;
  setup_interface_offsets (klass, D.29556, 1);
  <D.29555>:
  <D.29549>:
  D.29557 = klass;
  return D.29557;
}


sprintf (char * restrict __s, const char * restrict __fmt)
{
  int D.29559;
  long unsigned int D.29560;

  D.29560 = __builtin_object_size (__s, 1);
  D.29559 = __builtin___sprintf_chk (__s, 1, D.29560, __fmt, __builtin_va_arg_pack ());
  return D.29559;
}


set_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar, struct MonoClass * klass)
{
  short unsigned int D.29562;
  unsigned int D.29563;
  short unsigned int D.29564;
  unsigned int D.29565;
  unsigned int D.29566;
  unsigned int D.29567;
  _Bool D.29568;
  long int D.29569;
  long int D.29570;
  struct MonoClass * * D.29577;
  void * D.29580;
  long unsigned int D.29581;
  long unsigned int D.29582;
  struct MonoClass * * D.29583;
  struct MonoClass * * D.29585;
  void * D.29588;
  struct MonoClass * * D.29589;
  struct GHashTable * iftmp.253;
  struct GHashTable * iftmp.254;
  long int D.29605;
  void * D.29606;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.29562 = param->num;
  D.29563 = (unsigned int) D.29562;
  D.29564 = param->serial;
  D.29565 = (unsigned int) D.29564;
  D.29566 = D.29565 << 16;
  D.29567 = D.29563 | D.29566;
  n = (int) D.29567;
  image = param->image;
  D.29568 = image == 0B;
  D.29569 = (long int) D.29568;
  D.29570 = __builtin_expect (D.29569, 0);
  if (D.29570 != 0) goto <D.29571>; else goto <D.29572>;
  <D.29571>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6051, "image");
  <D.29572>:
  if (n <= 15) goto <D.29573>; else goto <D.29574>;
  <D.29573>:
  if (is_mvar != 0) goto <D.29575>; else goto <D.29576>;
  <D.29575>:
  D.29577 = image->mvar_cache_fast;
  if (D.29577 == 0B) goto <D.29578>; else goto <D.29579>;
  <D.29578>:
  D.29580 = mono_image_alloc0 (image, 128);
  image->mvar_cache_fast = D.29580;
  <D.29579>:
  D.29577 = image->mvar_cache_fast;
  D.29581 = (long unsigned int) n;
  D.29582 = D.29581 * 8;
  D.29583 = D.29577 + D.29582;
  *D.29583 = klass;
  goto <D.29584>;
  <D.29576>:
  D.29585 = image->var_cache_fast;
  if (D.29585 == 0B) goto <D.29586>; else goto <D.29587>;
  <D.29586>:
  D.29588 = mono_image_alloc0 (image, 128);
  image->var_cache_fast = D.29588;
  <D.29587>:
  D.29585 = image->var_cache_fast;
  D.29581 = (long unsigned int) n;
  D.29582 = D.29581 * 8;
  D.29589 = D.29585 + D.29582;
  *D.29589 = klass;
  <D.29584>:
  return;
  <D.29574>:
  if (is_mvar != 0) goto <D.29591>; else goto <D.29592>;
  <D.29591>:
  iftmp.253 = image->mvar_cache_slow;
  goto <D.29593>;
  <D.29592>:
  iftmp.253 = image->var_cache_slow;
  <D.29593>:
  ht = iftmp.253;
  if (ht == 0B) goto <D.29594>; else goto <D.29595>;
  <D.29594>:
  mono_loader_lock ();
  if (is_mvar != 0) goto <D.29597>; else goto <D.29598>;
  <D.29597>:
  iftmp.254 = image->mvar_cache_slow;
  goto <D.29599>;
  <D.29598>:
  iftmp.254 = image->var_cache_slow;
  <D.29599>:
  ht = iftmp.254;
  if (ht == 0B) goto <D.29600>; else goto <D.29601>;
  <D.29600>:
  ht = monoeg_g_hash_table_new (0B, 0B);
  mono_memory_barrier ();
  if (is_mvar != 0) goto <D.29602>; else goto <D.29603>;
  <D.29602>:
  image->mvar_cache_slow = ht;
  goto <D.29604>;
  <D.29603>:
  image->var_cache_slow = ht;
  <D.29604>:
  <D.29601>:
  mono_loader_unlock ();
  <D.29595>:
  D.29605 = (long int) n;
  D.29606 = (void *) D.29605;
  monoeg_g_hash_table_insert_replace (ht, D.29606, klass, 0);
}


mono_ptr_class_get (struct MonoType * type)
{
  struct GHashTable * D.29608;
  struct GHashTable * D.29611;
  struct MonoClass * D.29614;
  unsigned int classes_size.255;
  unsigned int classes_size.256;
  const char * D.29617;
  const char * D.29618;
  char * D.29619;
  struct MonoImage * D.29620;
  unsigned int D.29621;
  unsigned int D.29622;
  struct MonoClass * D.29623;
  unsigned char D.29624;
  struct MonoType * D.29625;
  struct MonoType * D.29626;
  struct MonoClass * result;
  struct MonoClass * el_class;
  struct MonoImage * image;
  char * name;

  el_class = mono_class_from_mono_type (type);
  image = el_class->image;
  mono_loader_lock ();
  D.29608 = image->ptr_cache;
  if (D.29608 == 0B) goto <D.29609>; else goto <D.29610>;
  <D.29609>:
  D.29611 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->ptr_cache = D.29611;
  <D.29610>:
  D.29608 = image->ptr_cache;
  result = monoeg_g_hash_table_lookup (D.29608, el_class);
  if (result != 0B) goto <D.29612>; else goto <D.29613>;
  <D.29612>:
  mono_loader_unlock ();
  D.29614 = result;
  return D.29614;
  <D.29613>:
  result = mono_image_alloc0 (image, 272);
  classes_size.255 = classes_size;
  classes_size.256 = classes_size.255 + 272;
  classes_size = classes_size.256;
  result->parent = 0B;
  D.29617 = el_class->name_space;
  result->name_space = D.29617;
  D.29618 = el_class->name;
  name = monoeg_g_strdup_printf ("%s*", D.29618);
  D.29619 = mono_image_strdup (image, name);
  result->name = D.29619;
  monoeg_g_free (name);
  mono_profiler_class_event (result, 0);
  D.29620 = el_class->image;
  result->image = D.29620;
  result->inited = 1;
  D.29621 = el_class->flags;
  D.29622 = D.29621 & 7;
  result->flags = D.29622;
  result->instance_size = 8;
  result->element_class = el_class;
  D.29623 = result->element_class;
  result->cast_class = D.29623;
  result->blittable = 1;
  result->byval_arg.type = 15;
  D.29624 = result->byval_arg.type;
  result->this_arg.type = D.29624;
  D.29623 = result->element_class;
  D.29625 = &D.29623->byval_arg;
  result->byval_arg.data.type = D.29625;
  D.29626 = result->byval_arg.data.type;
  result->this_arg.data.type = D.29626;
  result->this_arg.byref = 1;
  mono_class_setup_supertypes (result);
  D.29608 = image->ptr_cache;
  monoeg_g_hash_table_insert_replace (D.29608, el_class, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.29614 = result;
  return D.29614;
}


mono_class_from_mono_type (struct MonoType * type)
{
  unsigned char D.29628;
  int D.29629;
  struct MonoClass * D.29630;
  struct MonoClass * iftmp.257;
  struct MonoClass * D.29632;
  struct MonoClass * iftmp.258;
  struct MonoClass * iftmp.259;
  struct MonoClass * iftmp.260;
  struct MonoClass * iftmp.261;
  struct MonoClass * iftmp.262;
  struct MonoClass * iftmp.263;
  struct MonoClass * iftmp.264;
  struct MonoClass * iftmp.265;
  struct MonoClass * iftmp.266;
  struct MonoClass * iftmp.267;
  struct MonoClass * iftmp.268;
  struct MonoClass * iftmp.269;
  struct MonoClass * iftmp.270;
  struct MonoClass * iftmp.271;
  struct MonoClass * iftmp.272;
  struct MonoClass * iftmp.273;
  struct MonoClass * iftmp.274;
  struct MonoArrayType * D.29704;
  struct MonoClass * D.29705;
  unsigned char D.29706;
  unsigned int D.29707;
  struct MonoType * D.29708;
  struct MonoMethodSignature * D.29709;
  struct MonoGenericClass * D.29710;
  struct MonoGenericParam * D.29711;

  D.29628 = type->type;
  D.29629 = (int) D.29628;
  switch (D.29629) <default: <D.21451>, case 1: <D.21425>, case 2: <D.21426>, case 3: <D.21427>, case 4: <D.21428>, case 5: <D.21429>, case 6: <D.21430>, case 7: <D.21431>, case 8: <D.21432>, case 9: <D.21433>, case 10: <D.21436>, case 11: <D.21437>, case 12: <D.21438>, case 13: <D.21439>, case 14: <D.21440>, case 15: <D.21443>, case 17: <D.21447>, case 18: <D.21446>, case 19: <D.21449>, case 20: <D.21442>, case 21: <D.21448>, case 22: <D.21441>, case 24: <D.21434>, case 25: <D.21435>, case 27: <D.21444>, case 28: <D.21424>, case 29: <D.21445>, case 30: <D.21450>>
  <D.21424>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29633>; else goto <D.29634>;
  <D.29633>:
  iftmp.257 = type->data.klass;
  goto <D.29635>;
  <D.29634>:
  iftmp.257 = mono_defaults.object_class;
  <D.29635>:
  D.29630 = iftmp.257;
  return D.29630;
  <D.21425>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29637>; else goto <D.29638>;
  <D.29637>:
  iftmp.258 = type->data.klass;
  goto <D.29639>;
  <D.29638>:
  iftmp.258 = mono_defaults.void_class;
  <D.29639>:
  D.29630 = iftmp.258;
  return D.29630;
  <D.21426>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29641>; else goto <D.29642>;
  <D.29641>:
  iftmp.259 = type->data.klass;
  goto <D.29643>;
  <D.29642>:
  iftmp.259 = mono_defaults.boolean_class;
  <D.29643>:
  D.29630 = iftmp.259;
  return D.29630;
  <D.21427>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29645>; else goto <D.29646>;
  <D.29645>:
  iftmp.260 = type->data.klass;
  goto <D.29647>;
  <D.29646>:
  iftmp.260 = mono_defaults.char_class;
  <D.29647>:
  D.29630 = iftmp.260;
  return D.29630;
  <D.21428>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29649>; else goto <D.29650>;
  <D.29649>:
  iftmp.261 = type->data.klass;
  goto <D.29651>;
  <D.29650>:
  iftmp.261 = mono_defaults.sbyte_class;
  <D.29651>:
  D.29630 = iftmp.261;
  return D.29630;
  <D.21429>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29653>; else goto <D.29654>;
  <D.29653>:
  iftmp.262 = type->data.klass;
  goto <D.29655>;
  <D.29654>:
  iftmp.262 = mono_defaults.byte_class;
  <D.29655>:
  D.29630 = iftmp.262;
  return D.29630;
  <D.21430>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29657>; else goto <D.29658>;
  <D.29657>:
  iftmp.263 = type->data.klass;
  goto <D.29659>;
  <D.29658>:
  iftmp.263 = mono_defaults.int16_class;
  <D.29659>:
  D.29630 = iftmp.263;
  return D.29630;
  <D.21431>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29661>; else goto <D.29662>;
  <D.29661>:
  iftmp.264 = type->data.klass;
  goto <D.29663>;
  <D.29662>:
  iftmp.264 = mono_defaults.uint16_class;
  <D.29663>:
  D.29630 = iftmp.264;
  return D.29630;
  <D.21432>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29665>; else goto <D.29666>;
  <D.29665>:
  iftmp.265 = type->data.klass;
  goto <D.29667>;
  <D.29666>:
  iftmp.265 = mono_defaults.int32_class;
  <D.29667>:
  D.29630 = iftmp.265;
  return D.29630;
  <D.21433>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29669>; else goto <D.29670>;
  <D.29669>:
  iftmp.266 = type->data.klass;
  goto <D.29671>;
  <D.29670>:
  iftmp.266 = mono_defaults.uint32_class;
  <D.29671>:
  D.29630 = iftmp.266;
  return D.29630;
  <D.21434>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29673>; else goto <D.29674>;
  <D.29673>:
  iftmp.267 = type->data.klass;
  goto <D.29675>;
  <D.29674>:
  iftmp.267 = mono_defaults.int_class;
  <D.29675>:
  D.29630 = iftmp.267;
  return D.29630;
  <D.21435>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29677>; else goto <D.29678>;
  <D.29677>:
  iftmp.268 = type->data.klass;
  goto <D.29679>;
  <D.29678>:
  iftmp.268 = mono_defaults.uint_class;
  <D.29679>:
  D.29630 = iftmp.268;
  return D.29630;
  <D.21436>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29681>; else goto <D.29682>;
  <D.29681>:
  iftmp.269 = type->data.klass;
  goto <D.29683>;
  <D.29682>:
  iftmp.269 = mono_defaults.int64_class;
  <D.29683>:
  D.29630 = iftmp.269;
  return D.29630;
  <D.21437>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29685>; else goto <D.29686>;
  <D.29685>:
  iftmp.270 = type->data.klass;
  goto <D.29687>;
  <D.29686>:
  iftmp.270 = mono_defaults.uint64_class;
  <D.29687>:
  D.29630 = iftmp.270;
  return D.29630;
  <D.21438>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29689>; else goto <D.29690>;
  <D.29689>:
  iftmp.271 = type->data.klass;
  goto <D.29691>;
  <D.29690>:
  iftmp.271 = mono_defaults.single_class;
  <D.29691>:
  D.29630 = iftmp.271;
  return D.29630;
  <D.21439>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29693>; else goto <D.29694>;
  <D.29693>:
  iftmp.272 = type->data.klass;
  goto <D.29695>;
  <D.29694>:
  iftmp.272 = mono_defaults.double_class;
  <D.29695>:
  D.29630 = iftmp.272;
  return D.29630;
  <D.21440>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29697>; else goto <D.29698>;
  <D.29697>:
  iftmp.273 = type->data.klass;
  goto <D.29699>;
  <D.29698>:
  iftmp.273 = mono_defaults.string_class;
  <D.29699>:
  D.29630 = iftmp.273;
  return D.29630;
  <D.21441>:
  D.29632 = type->data.klass;
  if (D.29632 != 0B) goto <D.29701>; else goto <D.29702>;
  <D.29701>:
  iftmp.274 = type->data.klass;
  goto <D.29703>;
  <D.29702>:
  iftmp.274 = mono_defaults.typed_reference_class;
  <D.29703>:
  D.29630 = iftmp.274;
  return D.29630;
  <D.21442>:
  D.29704 = type->data.array;
  D.29705 = D.29704->eklass;
  D.29704 = type->data.array;
  D.29706 = D.29704->rank;
  D.29707 = (unsigned int) D.29706;
  D.29630 = mono_bounded_array_class_get (D.29705, D.29707, 1);
  return D.29630;
  <D.21443>:
  D.29708 = type->data.type;
  D.29630 = mono_ptr_class_get (D.29708);
  return D.29630;
  <D.21444>:
  D.29709 = type->data.method;
  D.29630 = mono_fnptr_class_get (D.29709);
  return D.29630;
  <D.21445>:
  D.29632 = type->data.klass;
  D.29630 = mono_array_class_get (D.29632, 1);
  return D.29630;
  <D.21446>:
  <D.21447>:
  D.29630 = type->data.klass;
  return D.29630;
  <D.21448>:
  D.29710 = type->data.generic_class;
  D.29630 = mono_generic_class_get_class (D.29710);
  return D.29630;
  <D.21449>:
  D.29711 = type->data.generic_param;
  D.29630 = mono_class_from_generic_parameter (D.29711, 0B, 0);
  return D.29630;
  <D.21450>:
  D.29711 = type->data.generic_param;
  D.29630 = mono_class_from_generic_parameter (D.29711, 0B, 1);
  return D.29630;
  <D.21451>:
  D.29628 = type->type;
  D.29629 = (int) D.29628;
  monoeg_g_log (0B, 16, "mono_class_from_mono_type: implement me 0x%02x\n", D.29629);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6305);
  D.29630 = 0B;
  return D.29630;
}


mono_fnptr_class_get (struct MonoMethodSignature * sig)
{
  struct GHashTable * ptr_hash.275;
  struct GHashTable * ptr_hash.276;
  struct MonoClass * D.29719;
  struct MonoImage * D.29720;
  struct MonoClass * D.29721;
  unsigned char D.29722;
  struct MonoMethodSignature * D.29723;
  struct MonoClass * result;
  static struct GHashTable * ptr_hash = 0B;

  mono_loader_lock ();
  ptr_hash.275 = ptr_hash;
  if (ptr_hash.275 == 0B) goto <D.29714>; else goto <D.29715>;
  <D.29714>:
  ptr_hash.276 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  ptr_hash = ptr_hash.276;
  <D.29715>:
  ptr_hash.275 = ptr_hash;
  result = monoeg_g_hash_table_lookup (ptr_hash.275, sig);
  if (result != 0B) goto <D.29717>; else goto <D.29718>;
  <D.29717>:
  mono_loader_unlock ();
  D.29719 = result;
  return D.29719;
  <D.29718>:
  result = monoeg_malloc0 (272);
  result->parent = 0B;
  result->name_space = "System";
  result->name = "MonoFNPtrFakeClass";
  mono_profiler_class_event (result, 0);
  D.29720 = mono_defaults.corlib;
  result->image = D.29720;
  result->inited = 1;
  result->flags = 0;
  result->instance_size = 8;
  result->element_class = result;
  D.29721 = result->element_class;
  result->cast_class = D.29721;
  result->blittable = 1;
  result->byval_arg.type = 27;
  D.29722 = result->byval_arg.type;
  result->this_arg.type = D.29722;
  result->byval_arg.data.method = sig;
  D.29723 = result->byval_arg.data.method;
  result->this_arg.data.method = D.29723;
  result->this_arg.byref = 1;
  result->blittable = 1;
  mono_class_setup_supertypes (result);
  ptr_hash.275 = ptr_hash;
  monoeg_g_hash_table_insert_replace (ptr_hash.275, sig, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.29719 = result;
  return D.29719;
}


mono_bounded_array_class_get (struct MonoClass * eclass, guint32 rank, gboolean bounded)
{
  _Bool D.29725;
  long int D.29726;
  long int D.29727;
  union mono_mutex_t * D.29736;
  _Bool D.29739;
  long int D.29740;
  long int D.29741;
  struct GHashTable * D.29744;
  struct GHashTable * D.29747;
  _Bool D.29750;
  long int D.29751;
  long int D.29752;
  struct MonoClass * D.29757;
  struct GHashTable * D.29758;
  struct GHashTable * D.29761;
  unsigned char D.29764;
  unsigned int D.29765;
  unsigned char D.29768;
  int D.29769;
  int iftmp.277;
  struct MonoAssembly * D.29779;
  unsigned char D.29781;
  const char * D.29783;
  int D.21498;
  int iftmp.278;
  int D.21497;
  const char[9] * D.29788;
  unsigned char D.29789;
  int D.29790;
  unsigned char D.29791;
  int D.29792;
  const unsigned char * D.29797;
  unsigned char D.29798;
  int D.29799;
  const unsigned char * D.29800;
  unsigned char D.29801;
  int D.29802;
  const unsigned char * D.29807;
  unsigned char D.29808;
  int D.29809;
  const unsigned char * D.29810;
  unsigned char D.29811;
  int D.29812;
  const unsigned char * D.29817;
  unsigned char D.29818;
  int D.29819;
  const unsigned char * D.29820;
  unsigned char D.29821;
  int D.29822;
  long unsigned int D.29825;
  long unsigned int D.29826;
  const char * D.29829;
  const char * D.29830;
  long unsigned int D.29831;
  unsigned int nsize.279;
  unsigned int D.29833;
  unsigned int D.29834;
  long unsigned int D.29835;
  long unsigned int D.29836;
  sizetype D.29837;
  char * D.29838;
  sizetype D.29841;
  char * D.29842;
  unsigned int D.29843;
  long unsigned int D.29844;
  sizetype D.29847;
  char * D.29848;
  unsigned int bounded.280;
  unsigned int D.29850;
  sizetype D.29851;
  char * D.29852;
  unsigned int D.29853;
  sizetype D.29854;
  char * D.29855;
  char * D.29856;
  unsigned int classes_size.281;
  unsigned int classes_size.282;
  struct MonoClass * D.29859;
  int D.29860;
  unsigned char D.29864;
  long unsigned int D.29868;
  long unsigned int D.29869;
  struct MonoType * D.29871;
  unsigned int D.29875;
  long unsigned int D.29877;
  int iftmp.283;
  _Bool D.29883;
  long int D.29884;
  long int D.29885;
  int D.29888;
  struct MonoGenericClass * D.29889;
  long unsigned int D.29892;
  unsigned char D.29895;
  int iftmp.284;
  struct MonoType * D.29902;
  int D.29903;
  long unsigned int D.29905;
  unsigned char D.29906;
  <unnamed-unsigned:1> D.29907;
  unsigned char D.29908;
  struct MonoClass * D.29911;
  struct MonoClass * D.29913;
  unsigned char D.29914;
  int D.29915;
  struct MonoClass * D.29916;
  struct MonoClass * D.29917;
  struct MonoClass * D.29918;
  struct MonoClass * D.29919;
  unsigned char D.29925;
  struct MonoGenericContainer * D.29928;
  _Bool D.29935;
  long int D.29936;
  long int D.29937;
  _Bool D.29945;
  long int D.29946;
  long int D.29947;
  struct MonoImage * image;
  struct MonoClass * class;
  struct MonoClass * parent;
  struct GSList * list;
  struct GSList * rootlist;
  int nsize;
  char * name;
  gboolean corlib_type;

  parent = 0B;
  rootlist = 0B;
  corlib_type = 0;
  D.29725 = rank > 255;
  D.29726 = (long int) D.29725;
  D.29727 = __builtin_expect (D.29726, 0);
  if (D.29727 != 0) goto <D.29728>; else goto <D.29729>;
  <D.29728>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6386, "rank <= 255");
  <D.29729>:
  if (rank > 1) goto <D.29730>; else goto <D.29731>;
  <D.29730>:
  bounded = 0;
  <D.29731>:
  image = eclass->image;
  if (rank == 1) goto <D.29734>; else goto <D.29732>;
  <D.29734>:
  if (bounded == 0) goto <D.29735>; else goto <D.29732>;
  <D.29735>:
  {
    int ret;

    D.29736 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_lock (D.29736);
    if (ret != 0) goto <D.29737>; else goto <D.29738>;
    <D.29737>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.29738>:
    D.29739 = ret != 0;
    D.29740 = (long int) D.29739;
    D.29741 = __builtin_expect (D.29740, 0);
    if (D.29741 != 0) goto <D.29742>; else goto <D.29743>;
    <D.29742>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6400, "ret == 0");
    <D.29743>:
  }
  D.29744 = image->szarray_cache;
  if (D.29744 == 0B) goto <D.29745>; else goto <D.29746>;
  <D.29745>:
  D.29747 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->szarray_cache = D.29747;
  <D.29746>:
  D.29744 = image->szarray_cache;
  class = monoeg_g_hash_table_lookup (D.29744, eclass);
  {
    int ret;

    D.29736 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_unlock (D.29736);
    if (ret != 0) goto <D.29748>; else goto <D.29749>;
    <D.29748>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.29749>:
    D.29750 = ret != 0;
    D.29751 = (long int) D.29750;
    D.29752 = __builtin_expect (D.29751, 0);
    if (D.29752 != 0) goto <D.29753>; else goto <D.29754>;
    <D.29753>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6404, "ret == 0");
    <D.29754>:
  }
  if (class != 0B) goto <D.29755>; else goto <D.29756>;
  <D.29755>:
  D.29757 = class;
  return D.29757;
  <D.29756>:
  mono_loader_lock ();
  goto <D.29733>;
  <D.29732>:
  mono_loader_lock ();
  D.29758 = image->array_cache;
  if (D.29758 == 0B) goto <D.29759>; else goto <D.29760>;
  <D.29759>:
  D.29761 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->array_cache = D.29761;
  <D.29760>:
  D.29758 = image->array_cache;
  list = monoeg_g_hash_table_lookup (D.29758, eclass);
  rootlist = list;
  if (rootlist != 0B) goto <D.29762>; else goto <D.29763>;
  <D.29762>:
  goto <D.21488>;
  <D.21487>:
  class = list->data;
  D.29764 = class->rank;
  D.29765 = (unsigned int) D.29764;
  if (D.29765 == rank) goto <D.29766>; else goto <D.29767>;
  <D.29766>:
  D.29768 = class->byval_arg.type;
  D.29769 = (int) D.29768;
  if (rank > 1) goto <D.29771>; else goto <D.29774>;
  <D.29774>:
  if (bounded != 0) goto <D.29771>; else goto <D.29772>;
  <D.29771>:
  iftmp.277 = 20;
  goto <D.29773>;
  <D.29772>:
  iftmp.277 = 29;
  <D.29773>:
  if (D.29769 == iftmp.277) goto <D.29775>; else goto <D.29776>;
  <D.29775>:
  mono_loader_unlock ();
  D.29757 = class;
  return D.29757;
  <D.29776>:
  <D.29767>:
  list = list->next;
  <D.21488>:
  if (list != 0B) goto <D.21487>; else goto <D.21489>;
  <D.21489>:
  <D.29763>:
  <D.29733>:
  D.29779 = image->assembly;
  if (D.29779 != 0B) goto <D.29780>; else goto <D.29777>;
  <D.29780>:
  D.29779 = image->assembly;
  D.29781 = D.29779->dynamic;
  if (D.29781 != 0) goto <D.29782>; else goto <D.29777>;
  <D.29782>:
  D.29783 = image->assembly_name;
  if (D.29783 != 0B) goto <D.29784>; else goto <D.29777>;
  <D.29784>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = image->assembly_name;
      D.29788 = "mscorlib";
      D.29789 = MEM[(const unsigned char *)D.29788];
      D.29790 = (int) D.29789;
      D.29791 = *__s2;
      D.29792 = (int) D.29791;
      __result = D.29790 - D.29792;
      {
        if (__s2_len != 0) goto <D.29793>; else goto <D.29794>;
        <D.29793>:
        if (__result == 0) goto <D.29795>; else goto <D.29796>;
        <D.29795>:
        D.29797 = &MEM[(void *)"mscorlib" + 1B];
        D.29798 = *D.29797;
        D.29799 = (int) D.29798;
        D.29800 = __s2 + 1;
        D.29801 = *D.29800;
        D.29802 = (int) D.29801;
        __result = D.29799 - D.29802;
        if (__s2_len > 1) goto <D.29803>; else goto <D.29804>;
        <D.29803>:
        if (__result == 0) goto <D.29805>; else goto <D.29806>;
        <D.29805>:
        D.29807 = &MEM[(void *)"mscorlib" + 2B];
        D.29808 = *D.29807;
        D.29809 = (int) D.29808;
        D.29810 = __s2 + 2;
        D.29811 = *D.29810;
        D.29812 = (int) D.29811;
        __result = D.29809 - D.29812;
        if (__s2_len > 2) goto <D.29813>; else goto <D.29814>;
        <D.29813>:
        if (__result == 0) goto <D.29815>; else goto <D.29816>;
        <D.29815>:
        D.29817 = &MEM[(void *)"mscorlib" + 3B];
        D.29818 = *D.29817;
        D.29819 = (int) D.29818;
        D.29820 = __s2 + 3;
        D.29821 = *D.29820;
        D.29822 = (int) D.29821;
        __result = D.29819 - D.29822;
        <D.29816>:
        <D.29814>:
        <D.29806>:
        <D.29804>:
        <D.29796>:
        <D.29794>:
      }
      D.21497 = __result;
    }
    iftmp.278 = -D.21497;
    goto <D.29823>;
    <D.29787>:
    D.29783 = image->assembly_name;
    iftmp.278 = __builtin_strcmp (D.29783, "mscorlib");
    <D.29823>:
    D.21498 = iftmp.278;
  }
  if (D.21498 == 0) goto <D.29824>; else goto <D.29777>;
  <D.29824>:
  parent = mono_class_from_name (image, "System", "Array");
  corlib_type = 1;
  goto <D.29778>;
  <D.29777>:
  parent = mono_defaults.array_class;
  D.29825 = BIT_FIELD_REF <*parent, 64, 256>;
  D.29826 = D.29825 & 1;
  if (D.29826 == 0) goto <D.29827>; else goto <D.29828>;
  <D.29827>:
  mono_class_init (parent);
  <D.29828>:
  <D.29778>:
  class = mono_image_alloc0 (image, 272);
  class->image = image;
  D.29829 = eclass->name_space;
  class->name_space = D.29829;
  D.29830 = eclass->name;
  D.29831 = strlen (D.29830);
  nsize = (int) D.29831;
  nsize.279 = (unsigned int) nsize;
  D.29833 = nsize.279 + rank;
  D.29834 = D.29833 + 3;
  D.29835 = (long unsigned int) D.29834;
  name = monoeg_malloc (D.29835);
  D.29830 = eclass->name;
  D.29836 = (long unsigned int) nsize;
  memcpy (name, D.29830, D.29836);
  D.29837 = (sizetype) nsize;
  D.29838 = name + D.29837;
  *D.29838 = 91;
  if (rank > 1) goto <D.29839>; else goto <D.29840>;
  <D.29839>:
  D.29837 = (sizetype) nsize;
  D.29841 = D.29837 + 1;
  D.29842 = name + D.29841;
  D.29843 = rank + 4294967295;
  D.29844 = (long unsigned int) D.29843;
  memset (D.29842, 44, D.29844);
  <D.29840>:
  if (bounded != 0) goto <D.29845>; else goto <D.29846>;
  <D.29845>:
  nsize.279 = (unsigned int) nsize;
  D.29833 = nsize.279 + rank;
  D.29847 = (sizetype) D.29833;
  D.29848 = name + D.29847;
  *D.29848 = 42;
  <D.29846>:
  nsize.279 = (unsigned int) nsize;
  D.29833 = nsize.279 + rank;
  bounded.280 = (unsigned int) bounded;
  D.29850 = D.29833 + bounded.280;
  D.29851 = (sizetype) D.29850;
  D.29852 = name + D.29851;
  *D.29852 = 93;
  nsize.279 = (unsigned int) nsize;
  D.29833 = nsize.279 + rank;
  bounded.280 = (unsigned int) bounded;
  D.29850 = D.29833 + bounded.280;
  D.29853 = D.29850 + 1;
  D.29854 = (sizetype) D.29853;
  D.29855 = name + D.29854;
  *D.29855 = 0;
  D.29856 = mono_image_strdup (image, name);
  class->name = D.29856;
  monoeg_g_free (name);
  mono_profiler_class_event (class, 0);
  classes_size.281 = classes_size;
  classes_size.282 = classes_size.281 + 272;
  classes_size = classes_size.282;
  class->type_token = 0;
  class->flags = 8449;
  class->parent = parent;
  D.29859 = class->parent;
  D.29860 = mono_class_instance_size (D.29859);
  class->instance_size = D.29860;
  D.29864 = eclass->byval_arg.type;
  if (D.29864 == 22) goto <D.29861>; else goto <D.29865>;
  <D.29865>:
  D.29864 = eclass->byval_arg.type;
  if (D.29864 == 1) goto <D.29861>; else goto <D.29862>;
  <D.29861>:
  mono_class_set_failure (class, 7, 0B);
  goto <D.29863>;
  <D.29862>:
  D.29868 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.29869 = D.29868 & 16;
  if (D.29869 != 0) goto <D.29870>; else goto <D.29866>;
  <D.29870>:
  D.29871 = mono_class_enum_basetype (eclass);
  if (D.29871 == 0B) goto <D.29872>; else goto <D.29866>;
  <D.29872>:
  D.29875 = eclass->ref_info_handle;
  if (D.29875 == 0) goto <D.29873>; else goto <D.29876>;
  <D.29876>:
  D.29868 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.29877 = D.29868 & 128;
  if (D.29877 != 0) goto <D.29873>; else goto <D.29874>;
  <D.29873>:
  monoeg_g_log (0B, 16, "Only incomplete TypeBuilder objects are allowed to be an enum without base_type");
  D.29875 = eclass->ref_info_handle;
  if (D.29875 == 0) goto <D.29879>; else goto <D.29882>;
  <D.29882>:
  D.29868 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.29877 = D.29868 & 128;
  if (D.29877 != 0) goto <D.29879>; else goto <D.29880>;
  <D.29879>:
  iftmp.283 = 1;
  goto <D.29881>;
  <D.29880>:
  iftmp.283 = 0;
  <D.29881>:
  D.29883 = iftmp.283 != 0;
  D.29884 = (long int) D.29883;
  D.29885 = __builtin_expect (D.29884, 0);
  if (D.29885 != 0) goto <D.29886>; else goto <D.29887>;
  <D.29886>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6469, "eclass->ref_info_handle && !eclass->wastypebuilder");
  <D.29887>:
  <D.29874>:
  class->sizes.element_size = -1;
  goto <D.29867>;
  <D.29866>:
  D.29888 = mono_class_array_element_size (eclass);
  class->sizes.element_size = D.29888;
  <D.29867>:
  <D.29863>:
  mono_class_setup_supertypes (class);
  D.29889 = eclass->generic_class;
  if (D.29889 != 0B) goto <D.29890>; else goto <D.29891>;
  <D.29890>:
  mono_class_init (eclass);
  <D.29891>:
  D.29868 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.29892 = D.29868 & 4;
  if (D.29892 == 0) goto <D.29893>; else goto <D.29894>;
  <D.29893>:
  mono_class_setup_fields (eclass);
  <D.29894>:
  D.29895 = eclass->exception_type;
  if (D.29895 != 0) goto <D.29896>; else goto <D.29897>;
  <D.29896>:
  mono_class_set_failure (class, 7, 0B);
  <D.29897>:
  D.29902 = &eclass->byval_arg;
  D.29903 = mono_type_is_reference (D.29902);
  if (D.29903 != 0) goto <D.29899>; else goto <D.29904>;
  <D.29904>:
  D.29868 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.29905 = D.29868 & 134217728;
  if (D.29905 != 0) goto <D.29899>; else goto <D.29900>;
  <D.29899>:
  iftmp.284 = 1;
  goto <D.29901>;
  <D.29900>:
  iftmp.284 = 0;
  <D.29901>:
  D.29906 = (unsigned char) iftmp.284;
  D.29907 = (<unnamed-unsigned:1>) D.29906;
  class->has_references = D.29907;
  D.29908 = (unsigned char) rank;
  class->rank = D.29908;
  D.29868 = BIT_FIELD_REF <*eclass, 64, 256>;
  D.29869 = D.29868 & 16;
  if (D.29869 != 0) goto <D.29909>; else goto <D.29910>;
  <D.29909>:
  D.29911 = eclass->element_class;
  class->cast_class = D.29911;
  goto <D.29912>;
  <D.29910>:
  class->cast_class = eclass;
  <D.29912>:
  D.29913 = class->cast_class;
  D.29914 = D.29913->byval_arg.type;
  D.29915 = (int) D.29914;
  switch (D.29915) <default: <D.29920>, case 4: <D.21499>, case 7: <D.21501>, case 9: <D.21502>, case 11: <D.21503>, case 24: <D.21504>, case 25: <D.21505>>
  <D.21499>:
  D.29916 = mono_defaults.byte_class;
  class->cast_class = D.29916;
  goto <D.21500>;
  <D.21501>:
  D.29917 = mono_defaults.int16_class;
  class->cast_class = D.29917;
  goto <D.21500>;
  <D.21502>:
  D.29918 = mono_defaults.int32_class;
  class->cast_class = D.29918;
  goto <D.21500>;
  <D.21503>:
  <D.21504>:
  <D.21505>:
  D.29919 = mono_defaults.int64_class;
  class->cast_class = D.29919;
  goto <D.21500>;
  <D.29920>:
  <D.21500>:
  class->element_class = eclass;
  if (rank > 1) goto <D.29921>; else goto <D.29924>;
  <D.29924>:
  if (bounded != 0) goto <D.29921>; else goto <D.29922>;
  <D.29921>:
  {
    struct MonoArrayType * at;

    at = mono_image_alloc0 (image, 32);
    class->byval_arg.type = 20;
    class->byval_arg.data.array = at;
    at->eklass = eclass;
    D.29925 = (unsigned char) rank;
    at->rank = D.29925;
  }
  goto <D.29923>;
  <D.29922>:
  class->byval_arg.type = 29;
  class->byval_arg.data.klass = eclass;
  <D.29923>:
  class->this_arg = class->byval_arg;
  class->this_arg.byref = 1;
  if (corlib_type != 0) goto <D.29926>; else goto <D.29927>;
  <D.29926>:
  class->inited = 1;
  <D.29927>:
  D.29928 = eclass->generic_container;
  class->generic_container = D.29928;
  if (rank == 1) goto <D.29931>; else goto <D.29929>;
  <D.29931>:
  if (bounded == 0) goto <D.29932>; else goto <D.29929>;
  <D.29932>:
  {
    struct MonoClass * prev_class;

    {
      int ret;

      D.29736 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_lock (D.29736);
      if (ret != 0) goto <D.29933>; else goto <D.29934>;
      <D.29933>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
      <D.29934>:
      D.29935 = ret != 0;
      D.29936 = (long int) D.29935;
      D.29937 = __builtin_expect (D.29936, 0);
      if (D.29937 != 0) goto <D.29938>; else goto <D.29939>;
      <D.29938>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6541, "ret == 0");
      <D.29939>:
    }
    D.29744 = image->szarray_cache;
    prev_class = monoeg_g_hash_table_lookup (D.29744, eclass);
    if (prev_class != 0B) goto <D.29940>; else goto <D.29941>;
    <D.29940>:
    class = prev_class;
    goto <D.29942>;
    <D.29941>:
    D.29744 = image->szarray_cache;
    monoeg_g_hash_table_insert_replace (D.29744, eclass, class, 0);
    <D.29942>:
    {
      int ret;

      D.29736 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_unlock (D.29736);
      if (ret != 0) goto <D.29943>; else goto <D.29944>;
      <D.29943>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.29944>:
      D.29945 = ret != 0;
      D.29946 = (long int) D.29945;
      D.29947 = __builtin_expect (D.29946, 0);
      if (D.29947 != 0) goto <D.29948>; else goto <D.29949>;
      <D.29948>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6548, "ret == 0");
      <D.29949>:
    }
  }
  goto <D.29930>;
  <D.29929>:
  list = monoeg_g_slist_append (rootlist, class);
  D.29758 = image->array_cache;
  monoeg_g_hash_table_insert_replace (D.29758, eclass, list, 0);
  <D.29930>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (class, 0);
  D.29757 = class;
  return D.29757;
}


mono_array_class_get (struct MonoClass * eclass, guint32 rank)
{
  struct MonoClass * D.29951;

  D.29951 = mono_bounded_array_class_get (eclass, rank, 0);
  return D.29951;
}


mono_class_instance_size (struct MonoClass * klass)
{
  long unsigned int D.29953;
  long unsigned int D.29954;
  int32_t D.29957;

  D.29953 = BIT_FIELD_REF <*klass, 64, 256>;
  D.29954 = D.29953 & 4;
  if (D.29954 == 0) goto <D.29955>; else goto <D.29956>;
  <D.29955>:
  mono_class_init (klass);
  <D.29956>:
  D.29957 = klass->instance_size;
  return D.29957;
}


mono_class_min_align (struct MonoClass * klass)
{
  long unsigned int D.29959;
  long unsigned int D.29960;
  int32_t D.29963;
  unsigned char D.29964;

  D.29959 = BIT_FIELD_REF <*klass, 64, 256>;
  D.29960 = D.29959 & 4;
  if (D.29960 == 0) goto <D.29961>; else goto <D.29962>;
  <D.29961>:
  mono_class_init (klass);
  <D.29962>:
  D.29964 = klass->min_align;
  D.29963 = (int32_t) D.29964;
  return D.29963;
}


mono_class_value_size (struct MonoClass * klass, guint32 * align)
{
  int D.29966;
  unsigned int D.29967;
  unsigned int D.29968;
  unsigned char D.29971;
  unsigned int D.29972;
  int32_t D.29973;
  gint32 size;

  D.29966 = mono_class_instance_size (klass);
  D.29967 = (unsigned int) D.29966;
  D.29968 = D.29967 + 4294967280;
  size = (gint32) D.29968;
  if (align != 0B) goto <D.29969>; else goto <D.29970>;
  <D.29969>:
  D.29971 = klass->min_align;
  D.29972 = (unsigned int) D.29971;
  *align = D.29972;
  <D.29970>:
  D.29973 = size;
  return D.29973;
}


mono_class_data_size (struct MonoClass * klass)
{
  long unsigned int D.29975;
  long unsigned int D.29976;
  long unsigned int D.29979;
  unsigned char D.29982;
  int32_t D.29985;

  D.29975 = BIT_FIELD_REF <*klass, 64, 256>;
  D.29976 = D.29975 & 1;
  if (D.29976 == 0) goto <D.29977>; else goto <D.29978>;
  <D.29977>:
  mono_class_init (klass);
  <D.29978>:
  D.29975 = BIT_FIELD_REF <*klass, 64, 256>;
  D.29979 = D.29975 & 137438953472;
  if (D.29979 == 0) goto <D.29980>; else goto <D.29981>;
  <D.29980>:
  mono_class_setup_fields_locking (klass);
  <D.29981>:
  D.29982 = klass->rank;
  if (D.29982 != 0) goto <D.29983>; else goto <D.29984>;
  <D.29983>:
  D.29985 = 0;
  return D.29985;
  <D.29984>:
  D.29985 = klass->sizes.class_size;
  return D.29985;
}


mono_class_get_field (struct MonoClass * class, guint32 field_token)
{
  int field_token.285;
  unsigned int D.29988;
  _Bool D.29989;
  long int D.29990;
  long int D.29991;
  struct MonoClassField * D.29994;
  int D.29995;
  int idx;

  field_token.285 = (int) field_token;
  idx = field_token.285 & 16777215;
  D.29988 = field_token & 4278190080;
  D.29989 = D.29988 != 67108864;
  D.29990 = (long int) D.29989;
  D.29991 = __builtin_expect (D.29990, 0);
  if (D.29991 != 0) goto <D.29992>; else goto <D.29993>;
  <D.29992>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6707, "mono_metadata_token_code (field_token) == MONO_TOKEN_FIELD_DEF");
  <D.29993>:
  D.29995 = idx + -1;
  D.29994 = mono_class_get_field_idx (class, D.29995);
  return D.29994;
}


mono_class_get_field_idx (struct MonoClass * class, int idx)
{
  unsigned char D.29997;
  struct MonoClassField * D.30000;
  struct MonoImage * D.30001;
  long unsigned int D.30002;
  long unsigned int D.30003;
  struct MonoTableInfo * D.30006;
  unsigned int D.30007;
  struct MonoClassField * D.30008;
  long unsigned int D.30009;
  long unsigned int D.30010;
  struct MonoClassField * D.30011;
  const char * D.30012;
  unsigned int i.286;
  unsigned int D.30016;
  unsigned int idx.287;
  unsigned int D.30020;
  unsigned int D.30023;
  unsigned int D.30026;
  long unsigned int D.30027;
  long unsigned int D.30028;

  mono_class_setup_fields_locking (class);
  D.29997 = class->exception_type;
  if (D.29997 != 0) goto <D.29998>; else goto <D.29999>;
  <D.29998>:
  D.30000 = 0B;
  return D.30000;
  <D.29999>:
  goto <D.21538>;
  <D.21537>:
  D.30001 = class->image;
  D.30002 = BIT_FIELD_REF <*D.30001, 64, 192>;
  D.30003 = D.30002 & 137438953472;
  if (D.30003 != 0) goto <D.30004>; else goto <D.30005>;
  <D.30004>:
  {
    const char * name;
    int i;

    D.30001 = class->image;
    D.30001 = class->image;
    D.30006 = &D.30001->tables[4];
    D.30007 = mono_metadata_decode_row_col (D.30006, idx, 1);
    name = mono_metadata_string_heap (D.30001, D.30007);
    i = 0;
    goto <D.21535>;
    <D.21534>:
    D.30008 = class->fields;
    D.30009 = (long unsigned int) i;
    D.30010 = D.30009 * 32;
    D.30011 = D.30008 + D.30010;
    D.30012 = mono_field_get_name (D.30011);
    if (D.30012 == name) goto <D.30013>; else goto <D.30014>;
    <D.30013>:
    D.30008 = class->fields;
    D.30009 = (long unsigned int) i;
    D.30010 = D.30009 * 32;
    D.30000 = D.30008 + D.30010;
    return D.30000;
    <D.30014>:
    i = i + 1;
    <D.21535>:
    i.286 = (unsigned int) i;
    D.30016 = class->field.count;
    if (i.286 < D.30016) goto <D.21534>; else goto <D.21536>;
    <D.21536>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6680);
  }
  <D.30005>:
  D.30016 = class->field.count;
  if (D.30016 != 0) goto <D.30017>; else goto <D.30018>;
  <D.30017>:
  idx.287 = (unsigned int) idx;
  D.30020 = class->field.first;
  if (idx.287 >= D.30020) goto <D.30021>; else goto <D.30022>;
  <D.30021>:
  idx.287 = (unsigned int) idx;
  D.30020 = class->field.first;
  D.30016 = class->field.count;
  D.30023 = D.30020 + D.30016;
  if (idx.287 < D.30023) goto <D.30024>; else goto <D.30025>;
  <D.30024>:
  D.30008 = class->fields;
  idx.287 = (unsigned int) idx;
  D.30020 = class->field.first;
  D.30026 = idx.287 - D.30020;
  D.30027 = (long unsigned int) D.30026;
  D.30028 = D.30027 * 32;
  D.30000 = D.30008 + D.30028;
  return D.30000;
  <D.30025>:
  <D.30022>:
  <D.30018>:
  class = class->parent;
  <D.21538>:
  if (class != 0B) goto <D.21537>; else goto <D.21539>;
  <D.21539>:
  D.30000 = 0B;
  return D.30000;
}


mono_class_get_field_from_name (struct MonoClass * klass, const char * name)
{
  struct MonoClassField * D.30030;

  D.30030 = mono_class_get_field_from_name_full (klass, name, 0B);
  return D.30030;
}


mono_class_get_field_from_name_full (struct MonoClass * klass, const char * name, struct MonoType * type)
{
  unsigned char D.30032;
  struct MonoClassField * D.30035;
  struct MonoClassField * D.30036;
  long unsigned int D.30037;
  long unsigned int D.30038;
  int D.21564;
  const char * D.30039;
  struct MonoClassField * D.30044;
  int D.30045;
  unsigned int i.288;
  unsigned int D.30049;
  int i;

  mono_class_setup_fields_locking (klass);
  D.30032 = klass->exception_type;
  if (D.30032 != 0) goto <D.30033>; else goto <D.30034>;
  <D.30033>:
  D.30035 = 0B;
  return D.30035;
  <D.30034>:
  goto <D.21571>;
  <D.21570>:
  i = 0;
  goto <D.21568>;
  <D.21567>:
  {
    struct MonoClassField * field;

    D.30036 = klass->fields;
    D.30037 = (long unsigned int) i;
    D.30038 = D.30037 * 32;
    field = D.30036 + D.30038;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.30039 = mono_field_get_name (field);
      D.21564 = __builtin_strcmp (name, D.30039);
    }
    if (D.21564 != 0) goto <D.30040>; else goto <D.30041>;
    <D.30040>:
    // predicted unlikely by continue predictor.
    goto <D.21565>;
    <D.30041>:
    if (type != 0B) goto <D.30042>; else goto <D.30043>;
    <D.30042>:
    {
      struct MonoType * field_type;

      D.30044 = mono_metadata_get_corresponding_field_from_generic_type_definition (field);
      field_type = D.30044->type;
      D.30045 = mono_metadata_type_equal_full (type, field_type, 1);
      if (D.30045 == 0) goto <D.30046>; else goto <D.30047>;
      <D.30046>:
      // predicted unlikely by continue predictor.
      goto <D.21565>;
      <D.30047>:
    }
    <D.30043>:
    D.30035 = field;
    return D.30035;
  }
  <D.21565>:
  i = i + 1;
  <D.21568>:
  i.288 = (unsigned int) i;
  D.30049 = klass->field.count;
  if (i.288 < D.30049) goto <D.21567>; else goto <D.21569>;
  <D.21569>:
  klass = klass->parent;
  <D.21571>:
  if (klass != 0B) goto <D.21570>; else goto <D.21572>;
  <D.21572>:
  D.30035 = 0B;
  return D.30035;
}


mono_class_get_field_token (struct MonoClassField * field)
{
  struct MonoClassField * D.30051;
  uint32_t D.30054;
  long unsigned int D.30055;
  long unsigned int D.30056;
  struct MonoClassField * D.30057;
  unsigned int D.30060;
  unsigned int i.289;
  unsigned int D.30062;
  unsigned int D.30063;
  struct MonoImage * D.30064;
  long unsigned int D.30065;
  long unsigned int D.30066;
  unsigned int idx.290;
  unsigned int D.30070;
  int D.30071;
  unsigned int D.30072;
  struct MonoClass * klass;
  int i;

  klass = field->parent;
  mono_class_setup_fields_locking (klass);
  goto <D.21583>;
  <D.21582>:
  D.30051 = klass->fields;
  if (D.30051 == 0B) goto <D.30052>; else goto <D.30053>;
  <D.30052>:
  D.30054 = 0;
  return D.30054;
  <D.30053>:
  i = 0;
  goto <D.21580>;
  <D.21579>:
  D.30051 = klass->fields;
  D.30055 = (long unsigned int) i;
  D.30056 = D.30055 * 32;
  D.30057 = D.30051 + D.30056;
  if (D.30057 == field) goto <D.30058>; else goto <D.30059>;
  <D.30058>:
  {
    int idx;

    D.30060 = klass->field.first;
    i.289 = (unsigned int) i;
    D.30062 = D.30060 + i.289;
    D.30063 = D.30062 + 1;
    idx = (int) D.30063;
    D.30064 = klass->image;
    D.30065 = BIT_FIELD_REF <*D.30064, 64, 192>;
    D.30066 = D.30065 & 137438953472;
    if (D.30066 != 0) goto <D.30067>; else goto <D.30068>;
    <D.30067>:
    D.30064 = klass->image;
    idx.290 = (unsigned int) idx;
    D.30070 = mono_metadata_translate_token_index (D.30064, 4, idx.290);
    idx = (int) D.30070;
    <D.30068>:
    D.30071 = idx | 67108864;
    D.30054 = (uint32_t) D.30071;
    return D.30054;
  }
  <D.30059>:
  i = i + 1;
  <D.21580>:
  i.289 = (unsigned int) i;
  D.30072 = klass->field.count;
  if (i.289 < D.30072) goto <D.21579>; else goto <D.21581>;
  <D.21581>:
  klass = klass->parent;
  <D.21583>:
  if (klass != 0B) goto <D.21582>; else goto <D.21584>;
  <D.21584>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6800);
  D.30054 = 0;
  return D.30054;
}


mono_class_get_field_default_value (struct MonoClassField * field, MonoTypeEnum * def_type)
{
  struct MonoType * D.30074;
  short unsigned int D.30075;
  signed short D.30076;
  _Bool D.30077;
  long int D.30078;
  long int D.30079;
  struct MonoClassExt * D.30084;
  struct MonoFieldDefaultValue * D.30086;
  unsigned int D.30089;
  unsigned int D.30090;
  int D.30091;
  void * D.30092;
  long unsigned int D.30093;
  long unsigned int D.30094;
  struct MonoFieldDefaultValue * D.30095;
  const char * D.30096;
  struct MonoClass * D.30099;
  struct MonoImage * D.30100;
  unsigned int D.30101;
  const char * D.30104;
  int D.30105;
  int D.30106;
  _Bool D.30107;
  long int D.30108;
  long int D.30109;
  struct MonoTableInfo * D.30112;
  unsigned int D.30113;
  int D.30114;
  unsigned int D.30115;
  unsigned int D.30116;
  const char * D.30117;
  <unnamed type> D.30118;
  guint32 cindex;
  guint32 constant_cols[4];
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.30074 = field->type;
      D.30075 = D.30074->attrs;
      D.30076 = (signed short) D.30075;
      D.30077 = D.30076 >= 0;
      D.30078 = (long int) D.30077;
      D.30079 = __builtin_expect (D.30078, 0);
      if (D.30079 != 0) goto <D.30080>; else goto <D.30081>;
      <D.30080>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6827, "field->type->attrs & FIELD_ATTRIBUTE_HAS_DEFAULT");
      <D.30081>:
      D.30084 = klass->ext;
      if (D.30084 == 0B) goto <D.30082>; else goto <D.30085>;
      <D.30085>:
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      if (D.30086 == 0B) goto <D.30082>; else goto <D.30083>;
      <D.30082>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      if (D.30086 == 0B) goto <D.30087>; else goto <D.30088>;
      <D.30087>:
      D.30084 = klass->ext;
      D.30089 = klass->field.count;
      D.30090 = D.30089 * 16;
      D.30091 = (int) D.30090;
      D.30092 = mono_class_alloc0 (klass, D.30091);
      D.30084->field_def_values = D.30092;
      <D.30088>:
      mono_loader_unlock ();
      <D.30083>:
      field_index = mono_field_get_index (field);
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      D.30093 = (long unsigned int) field_index;
      D.30094 = D.30093 * 16;
      D.30095 = D.30086 + D.30094;
      D.30096 = D.30095->data;
      if (D.30096 == 0B) goto <D.30097>; else goto <D.30098>;
      <D.30097>:
      D.30099 = field->parent;
      D.30100 = D.30099->image;
      D.30101 = mono_class_get_field_token (field);
      cindex = mono_metadata_get_constant_index (D.30100, D.30101, 0);
      if (cindex == 0) goto <D.30102>; else goto <D.30103>;
      <D.30102>:
      D.30104 = 0B;
      return D.30104;
      <D.30103>:
      D.30074 = field->type;
      D.30075 = D.30074->attrs;
      D.30105 = (int) D.30075;
      D.30106 = D.30105 & 256;
      D.30107 = D.30106 != 0;
      D.30108 = (long int) D.30107;
      D.30109 = __builtin_expect (D.30108, 0);
      if (D.30109 != 0) goto <D.30110>; else goto <D.30111>;
      <D.30110>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6844, "!(field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA)");
      <D.30111>:
      D.30099 = field->parent;
      D.30100 = D.30099->image;
      D.30112 = &D.30100->tables[11];
      D.30113 = cindex + 4294967295;
      D.30114 = (int) D.30113;
      mono_metadata_decode_row (D.30112, D.30114, &constant_cols, 4);
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      D.30093 = (long unsigned int) field_index;
      D.30094 = D.30093 * 16;
      D.30095 = D.30086 + D.30094;
      D.30115 = constant_cols[0];
      D.30095->def_type = D.30115;
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      D.30093 = (long unsigned int) field_index;
      D.30094 = D.30093 * 16;
      D.30095 = D.30086 + D.30094;
      D.30099 = field->parent;
      D.30100 = D.30099->image;
      D.30116 = constant_cols[3];
      D.30117 = mono_metadata_blob_heap (D.30100, D.30116);
      D.30095->data = D.30117;
      <D.30098>:
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      D.30093 = (long unsigned int) field_index;
      D.30094 = D.30093 * 16;
      D.30095 = D.30086 + D.30094;
      D.30118 = D.30095->def_type;
      *def_type = D.30118;
      D.30084 = klass->ext;
      D.30086 = D.30084->field_def_values;
      D.30093 = (long unsigned int) field_index;
      D.30094 = D.30093 * 16;
      D.30095 = D.30086 + D.30094;
      D.30104 = D.30095->data;
      return D.30104;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_field_get_index (struct MonoClassField * field)
{
  long int field.291;
  struct MonoClass * D.30122;
  struct MonoClassField * D.30123;
  long int D.30124;
  long int D.30125;
  long int D.30126;
  int iftmp.292;
  unsigned int index.293;
  unsigned int D.30133;
  _Bool D.30134;
  long int D.30135;
  long int D.30136;
  int D.30139;
  int index;

  field.291 = (long int) field;
  D.30122 = field->parent;
  D.30123 = D.30122->fields;
  D.30124 = (long int) D.30123;
  D.30125 = field.291 - D.30124;
  D.30126 = D.30125 /[ex] 32;
  index = (int) D.30126;
  if (index < 0) goto <D.30128>; else goto <D.30131>;
  <D.30131>:
  index.293 = (unsigned int) index;
  D.30122 = field->parent;
  D.30133 = D.30122->field.count;
  if (index.293 >= D.30133) goto <D.30128>; else goto <D.30129>;
  <D.30128>:
  iftmp.292 = 1;
  goto <D.30130>;
  <D.30129>:
  iftmp.292 = 0;
  <D.30130>:
  D.30134 = iftmp.292 != 0;
  D.30135 = (long int) D.30134;
  D.30136 = __builtin_expect (D.30135, 0);
  if (D.30136 != 0) goto <D.30137>; else goto <D.30138>;
  <D.30137>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6809, "index >= 0 && index < field->parent->field.count");
  <D.30138>:
  D.30139 = index;
  return D.30139;
}


mono_class_get_property_default_value (struct MonoProperty * property, MonoTypeEnum * def_type)
{
  unsigned int D.30141;
  unsigned int D.30142;
  _Bool D.30143;
  long int D.30144;
  long int D.30145;
  struct MonoImage * D.30148;
  long unsigned int D.30149;
  long unsigned int D.30150;
  struct MonoClassExt * D.30153;
  struct MonoFieldDefaultValue * D.30154;
  long unsigned int D.30157;
  long unsigned int D.30158;
  struct MonoFieldDefaultValue * D.30159;
  const char * D.30160;
  <unnamed type> D.30163;
  const char * D.30164;
  unsigned int D.30165;
  struct MonoTableInfo * D.30168;
  unsigned int D.30169;
  int D.30170;
  unsigned int D.30171;
  unsigned int D.30172;
  guint32 cindex;
  guint32 constant_cols[4];
  struct MonoClass * klass;

  try
    {
      klass = property->parent;
      D.30141 = property->attrs;
      D.30142 = D.30141 & 4096;
      D.30143 = D.30142 == 0;
      D.30144 = (long int) D.30143;
      D.30145 = __builtin_expect (D.30144, 0);
      if (D.30145 != 0) goto <D.30146>; else goto <D.30147>;
      <D.30146>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6877, "property->attrs & PROPERTY_ATTRIBUTE_HAS_DEFAULT");
      <D.30147>:
      D.30148 = klass->image;
      D.30149 = BIT_FIELD_REF <*D.30148, 64, 192>;
      D.30150 = D.30149 & 34359738368;
      if (D.30150 != 0) goto <D.30151>; else goto <D.30152>;
      <D.30151>:
      {
        int prop_index;

        prop_index = mono_property_get_index (property);
        D.30153 = klass->ext;
        D.30154 = D.30153->prop_def_values;
        if (D.30154 != 0B) goto <D.30155>; else goto <D.30156>;
        <D.30155>:
        D.30153 = klass->ext;
        D.30154 = D.30153->prop_def_values;
        D.30157 = (long unsigned int) prop_index;
        D.30158 = D.30157 * 16;
        D.30159 = D.30154 + D.30158;
        D.30160 = D.30159->data;
        if (D.30160 != 0B) goto <D.30161>; else goto <D.30162>;
        <D.30161>:
        D.30153 = klass->ext;
        D.30154 = D.30153->prop_def_values;
        D.30157 = (long unsigned int) prop_index;
        D.30158 = D.30157 * 16;
        D.30159 = D.30154 + D.30158;
        D.30163 = D.30159->def_type;
        *def_type = D.30163;
        D.30153 = klass->ext;
        D.30154 = D.30153->prop_def_values;
        D.30157 = (long unsigned int) prop_index;
        D.30158 = D.30157 * 16;
        D.30159 = D.30154 + D.30158;
        D.30164 = D.30159->data;
        return D.30164;
        <D.30162>:
        <D.30156>:
        D.30164 = 0B;
        return D.30164;
      }
      <D.30152>:
      D.30148 = klass->image;
      D.30165 = mono_class_get_property_token (property);
      cindex = mono_metadata_get_constant_index (D.30148, D.30165, 0);
      if (cindex == 0) goto <D.30166>; else goto <D.30167>;
      <D.30166>:
      D.30164 = 0B;
      return D.30164;
      <D.30167>:
      D.30148 = klass->image;
      D.30168 = &D.30148->tables[11];
      D.30169 = cindex + 4294967295;
      D.30170 = (int) D.30169;
      mono_metadata_decode_row (D.30168, D.30170, &constant_cols, 4);
      D.30171 = constant_cols[0];
      *def_type = D.30171;
      D.30148 = klass->image;
      D.30172 = constant_cols[3];
      D.30164 = mono_metadata_blob_heap (D.30148, D.30172);
      return D.30164;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_property_get_index (struct MonoProperty * prop)
{
  long int prop.294;
  struct MonoClass * D.30176;
  struct MonoClassExt * D.30177;
  struct MonoProperty * D.30178;
  long int D.30179;
  long int D.30180;
  long int D.30181;
  int iftmp.295;
  unsigned int index.296;
  unsigned int D.30188;
  _Bool D.30189;
  long int D.30190;
  long int D.30191;
  int D.30194;
  int index;

  prop.294 = (long int) prop;
  D.30176 = prop->parent;
  D.30177 = D.30176->ext;
  D.30178 = D.30177->properties;
  D.30179 = (long int) D.30178;
  D.30180 = prop.294 - D.30179;
  D.30181 = D.30180 /[ex] 40;
  index = (int) D.30181;
  if (index < 0) goto <D.30183>; else goto <D.30186>;
  <D.30186>:
  index.296 = (unsigned int) index;
  D.30176 = prop->parent;
  D.30177 = D.30176->ext;
  D.30188 = D.30177->property.count;
  if (index.296 >= D.30188) goto <D.30183>; else goto <D.30184>;
  <D.30183>:
  iftmp.295 = 1;
  goto <D.30185>;
  <D.30184>:
  iftmp.295 = 0;
  <D.30185>:
  D.30189 = iftmp.295 != 0;
  D.30190 = (long int) D.30189;
  D.30191 = __builtin_expect (D.30190, 0);
  if (D.30191 != 0) goto <D.30192>; else goto <D.30193>;
  <D.30192>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6860, "index >= 0 && index < prop->parent->ext->property.count");
  <D.30193>:
  D.30194 = index;
  return D.30194;
}


mono_class_get_event_token (struct MonoEvent * event)
{
  struct MonoClassExt * D.30196;
  struct MonoEvent * D.30199;
  long unsigned int D.30200;
  long unsigned int D.30201;
  struct MonoEvent * D.30202;
  uint32_t D.30205;
  unsigned int D.30206;
  unsigned int i.297;
  unsigned int D.30208;
  unsigned int D.30209;
  unsigned int D.30210;
  struct MonoClass * klass;
  int i;

  klass = event->parent;
  goto <D.21618>;
  <D.21617>:
  D.30196 = klass->ext;
  if (D.30196 != 0B) goto <D.30197>; else goto <D.30198>;
  <D.30197>:
  i = 0;
  goto <D.21615>;
  <D.21614>:
  D.30196 = klass->ext;
  D.30199 = D.30196->events;
  D.30200 = (long unsigned int) i;
  D.30201 = D.30200 * 56;
  D.30202 = D.30199 + D.30201;
  if (D.30202 == event) goto <D.30203>; else goto <D.30204>;
  <D.30203>:
  D.30196 = klass->ext;
  D.30206 = D.30196->event.first;
  i.297 = (unsigned int) i;
  D.30208 = D.30206 + i.297;
  D.30209 = D.30208 + 1;
  D.30205 = D.30209 | 335544320;
  return D.30205;
  <D.30204>:
  i = i + 1;
  <D.21615>:
  i.297 = (unsigned int) i;
  D.30196 = klass->ext;
  D.30210 = D.30196->event.count;
  if (i.297 < D.30210) goto <D.21614>; else goto <D.21616>;
  <D.21616>:
  <D.30198>:
  klass = klass->parent;
  <D.21618>:
  if (klass != 0B) goto <D.21617>; else goto <D.21619>;
  <D.21619>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6917);
  D.30205 = 0;
  return D.30205;
}


mono_class_get_property_from_name (struct MonoClass * klass, const char * name)
{
  int D.21634;
  const char * D.30212;
  struct MonoProperty * D.30215;

  goto <D.21639>;
  <D.21638>:
  {
    struct MonoProperty * p;
    void * iter;

    try
      {
        iter = 0B;
        goto <D.21636>;
        <D.21635>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.30212 = p->name;
          D.21634 = __builtin_strcmp (name, D.30212);
        }
        if (D.21634 == 0) goto <D.30213>; else goto <D.30214>;
        <D.30213>:
        D.30215 = p;
        return D.30215;
        <D.30214>:
        <D.21636>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.21635>; else goto <D.21637>;
        <D.21637>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.21639>:
  if (klass != 0B) goto <D.21638>; else goto <D.21640>;
  <D.21640>:
  D.30215 = 0B;
  return D.30215;
}


mono_class_get_property_token (struct MonoProperty * prop)
{
  struct MonoClassExt * D.30219;
  struct MonoProperty * D.30220;
  long unsigned int D.30221;
  long unsigned int D.30222;
  struct MonoProperty * D.30223;
  uint32_t D.30226;
  unsigned int D.30227;
  unsigned int i.298;
  unsigned int D.30229;
  unsigned int D.30230;
  struct MonoClass * klass;

  klass = prop->parent;
  goto <D.21652>;
  <D.21651>:
  {
    struct MonoProperty * p;
    int i;
    void * iter;

    try
      {
        i = 0;
        iter = 0B;
        goto <D.21649>;
        <D.21648>:
        D.30219 = klass->ext;
        D.30220 = D.30219->properties;
        D.30221 = (long unsigned int) i;
        D.30222 = D.30221 * 40;
        D.30223 = D.30220 + D.30222;
        if (D.30223 == prop) goto <D.30224>; else goto <D.30225>;
        <D.30224>:
        D.30219 = klass->ext;
        D.30227 = D.30219->property.first;
        i.298 = (unsigned int) i;
        D.30229 = D.30227 + i.298;
        D.30230 = D.30229 + 1;
        D.30226 = D.30230 | 385875968;
        return D.30226;
        <D.30225>:
        i = i + 1;
        <D.21649>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.21648>; else goto <D.21650>;
        <D.21650>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.21652>:
  if (klass != 0B) goto <D.21651>; else goto <D.21653>;
  <D.21653>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6953);
  D.30226 = 0;
  return D.30226;
}


mono_class_name_from_token (struct MonoImage * image, guint32 type_token)
{
  long unsigned int D.30234;
  long unsigned int D.30235;
  char * D.30238;
  unsigned int D.30239;
  <unnamed-unsigned:24> D.30240;
  unsigned int D.30241;
  unsigned int D.30244;
  int D.30245;
  unsigned int D.30246;
  unsigned int D.30247;
  char D.30248;
  <unnamed-unsigned:24> D.30251;
  unsigned int D.30252;
  unsigned int D.30255;
  int D.30256;
  const char * D.30259;
  int D.30260;
  unsigned int D.30261;
  unsigned int D.30262;
  const char * name;
  const char * nspace;

  D.30234 = BIT_FIELD_REF <*image, 64, 192>;
  D.30235 = D.30234 & 34359738368;
  if (D.30235 != 0) goto <D.30236>; else goto <D.30237>;
  <D.30236>:
  D.30238 = monoeg_g_strdup_printf ("DynamicType 0x%08x", type_token);
  return D.30238;
  <D.30237>:
  D.30239 = type_token & 4278190080;
  switch (D.30239) <default: <D.21671>, case 16777216: <D.21664>, case 33554432: <D.21660>, case 452984832: <D.21670>>
  <D.21660>:
  {
    guint32 cols[6];
    struct MonoTableInfo * tt;
    guint tidx;

    try
      {
        tt = &image->tables[2];
        tidx = type_token & 16777215;
        D.30240 = tt->rows;
        D.30241 = (unsigned int) D.30240;
        if (D.30241 < tidx) goto <D.30242>; else goto <D.30243>;
        <D.30242>:
        D.30238 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.30238;
        <D.30243>:
        D.30244 = tidx + 4294967295;
        D.30245 = (int) D.30244;
        mono_metadata_decode_row (tt, D.30245, &cols, 6);
        D.30246 = cols[1];
        name = mono_metadata_string_heap (image, D.30246);
        D.30247 = cols[2];
        nspace = mono_metadata_string_heap (image, D.30247);
        D.30248 = *nspace;
        if (D.30248 == 0) goto <D.30249>; else goto <D.30250>;
        <D.30249>:
        D.30238 = monoeg_g_strdup_printf ("%s", name);
        return D.30238;
        <D.30250>:
        D.30238 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.30238;
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.21664>:
  {
    struct MonoError error;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint tidx;

    try
      {
        t = &image->tables[1];
        tidx = type_token & 16777215;
        D.30251 = t->rows;
        D.30252 = (unsigned int) D.30251;
        if (D.30252 < tidx) goto <D.30253>; else goto <D.30254>;
        <D.30253>:
        D.30238 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.30238;
        <D.30254>:
        D.30255 = tidx + 4294967295;
        D.30256 = mono_verifier_verify_typeref_row (image, D.30255, &error);
        if (D.30256 == 0) goto <D.30257>; else goto <D.30258>;
        <D.30257>:
        {
          char * msg;

          D.30259 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.30259);
          mono_error_cleanup (&error);
          D.30238 = msg;
          return D.30238;
        }
        <D.30258>:
        D.30255 = tidx + 4294967295;
        D.30260 = (int) D.30255;
        mono_metadata_decode_row (t, D.30260, &cols, 3);
        D.30261 = cols[1];
        name = mono_metadata_string_heap (image, D.30261);
        D.30262 = cols[2];
        nspace = mono_metadata_string_heap (image, D.30262);
        D.30248 = *nspace;
        if (D.30248 == 0) goto <D.30263>; else goto <D.30264>;
        <D.30263>:
        D.30238 = monoeg_g_strdup_printf ("%s", name);
        return D.30238;
        <D.30264>:
        D.30238 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.30238;
      }
    finally
      {
        error = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.21670>:
  D.30238 = monoeg_g_strdup_printf ("Typespec 0x%08x", type_token);
  return D.30238;
  <D.21671>:
  D.30238 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
  return D.30238;
}


mono_class_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  long unsigned int D.30268;
  long unsigned int D.30269;
  unsigned int D.30272;
  unsigned int table.299;
  unsigned int D.30274;
  gchar * D.30279;
  struct MonoClass * D.30280;
  unsigned int D.30281;
  int D.30282;
  int D.30285;
  struct MonoError error;
  struct MonoClass * class;

  try
    {
      class = 0B;
      D.30268 = BIT_FIELD_REF <*image, 64, 192>;
      D.30269 = D.30268 & 34359738368;
      if (D.30269 != 0) goto <D.30270>; else goto <D.30271>;
      <D.30270>:
      {
        int table;

        D.30272 = type_token >> 24;
        table = (int) D.30272;
        table.299 = (unsigned int) table;
        D.30274 = table.299 + 4294967295;
        if (D.30274 > 1) goto <D.30275>; else goto <D.30276>;
        <D.30275>:
        if (table != 27) goto <D.30277>; else goto <D.30278>;
        <D.30277>:
        D.30279 = monoeg_strdup ("Bad type token.");
        mono_loader_set_error_bad_image (D.30279);
        D.30280 = 0B;
        return D.30280;
        <D.30278>:
        <D.30276>:
        D.30280 = mono_lookup_dynamic_token (image, type_token, context);
        return D.30280;
      }
      <D.30271>:
      D.30281 = type_token & 4278190080;
      switch (D.30281) <default: <D.21704>, case 16777216: <D.21702>, case 33554432: <D.21700>, case 452984832: <D.21703>>
      <D.21700>:
      class = mono_class_create_from_typedef (image, type_token, &error);
      D.30282 = mono_error_ok (&error);
      if (D.30282 == 0) goto <D.30283>; else goto <D.30284>;
      <D.30283>:
      mono_loader_set_error_from_mono_error (&error);
      mono_error_cleanup (&error);
      D.30280 = 0B;
      return D.30280;
      <D.30284>:
      goto <D.21701>;
      <D.21702>:
      class = mono_class_from_typeref (image, type_token);
      goto <D.21701>;
      <D.21703>:
      class = mono_class_create_from_typespec (image, type_token, context, &error);
      D.30285 = mono_error_ok (&error);
      if (D.30285 == 0) goto <D.30286>; else goto <D.30287>;
      <D.30286>:
      mono_error_cleanup (&error);
      <D.30287>:
      goto <D.21701>;
      <D.21704>:
      D.30281 = type_token & 4278190080;
      monoeg_g_log (0B, 16, "unknown token type %x", D.30281);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7118);
      <D.21701>:
      if (class == 0B) goto <D.30288>; else goto <D.30289>;
      <D.30288>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        mono_loader_set_error_type_load (name, assembly);
        monoeg_g_free (name);
        monoeg_g_free (assembly);
      }
      <D.30289>:
      D.30280 = class;
      return D.30280;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_create_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.30292;
  struct MonoClass * D.30295;
  int inflated.300;
  struct MonoClass * ret;
  gboolean inflated;
  struct MonoType * t;

  try
    {
      inflated = 0;
      t = mono_type_retrieve_from_typespec (image, type_spec, context, &inflated, error);
      D.30292 = mono_error_ok (error);
      if (D.30292 == 0) goto <D.30293>; else goto <D.30294>;
      <D.30293>:
      D.30295 = 0B;
      return D.30295;
      <D.30294>:
      ret = mono_class_from_mono_type (t);
      inflated.300 = inflated;
      if (inflated.300 != 0) goto <D.30297>; else goto <D.30298>;
      <D.30297>:
      mono_metadata_free_type (t);
      <D.30298>:
      D.30295 = ret;
      return D.30295;
    }
  finally
    {
      inflated = {CLOBBER};
    }
}


mono_type_retrieve_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, gboolean * did_inflate, struct MonoError * error)
{
  struct MonoType * D.30303;
  struct MonoGenericInst * D.30308;
  struct MonoGenericInst * D.30310;
  int D.30311;
  struct MonoType * t;

  t = mono_type_create_from_typespec (image, type_spec);
  mono_error_init (error);
  *did_inflate = 0;
  if (t == 0B) goto <D.30301>; else goto <D.30302>;
  <D.30301>:
  {
    char * name;
    char * assembly;

    name = mono_class_name_from_token (image, type_spec);
    assembly = mono_assembly_name_from_token (image, type_spec);
    mono_error_set_type_load_name (error, name, assembly, "Could not resolve typespec token %08x", type_spec);
    D.30303 = 0B;
    return D.30303;
  }
  <D.30302>:
  if (context != 0B) goto <D.30306>; else goto <D.30307>;
  <D.30306>:
  D.30308 = context->class_inst;
  if (D.30308 != 0B) goto <D.30304>; else goto <D.30309>;
  <D.30309>:
  D.30310 = context->method_inst;
  if (D.30310 != 0B) goto <D.30304>; else goto <D.30305>;
  <D.30304>:
  {
    struct MonoType * inflated;

    inflated = inflate_generic_type (0B, t, context, error);
    D.30311 = mono_error_ok (error);
    if (D.30311 == 0) goto <D.30312>; else goto <D.30313>;
    <D.30312>:
    D.30303 = 0B;
    return D.30303;
    <D.30313>:
    if (inflated != 0B) goto <D.30314>; else goto <D.30315>;
    <D.30314>:
    t = inflated;
    *did_inflate = 1;
    <D.30315>:
  }
  <D.30305>:
  <D.30307>:
  D.30303 = t;
  return D.30303;
}


mono_assembly_name_from_token (struct MonoImage * image, guint32 type_token)
{
  long unsigned int D.30317;
  long unsigned int D.30318;
  char * D.30321;
  char * D.30322;
  unsigned int D.30323;
  struct MonoAssembly * D.30324;
  struct MonoAssemblyName * D.30327;
  const char * D.30328;
  const char * iftmp.301;
  <unnamed-unsigned:24> D.30335;
  unsigned int D.30336;
  unsigned int D.30339;
  int D.30340;
  const char * D.30343;
  int D.30344;
  unsigned int D.30345;
  unsigned int D.30346;

  D.30317 = BIT_FIELD_REF <*image, 64, 192>;
  D.30318 = D.30317 & 34359738368;
  if (D.30318 != 0) goto <D.30319>; else goto <D.30320>;
  <D.30319>:
  D.30322 = image->name;
  D.30321 = monoeg_g_strdup_printf ("DynamicAssembly %s", D.30322);
  return D.30321;
  <D.30320>:
  D.30323 = type_token & 4278190080;
  switch (D.30323) <default: <D.21691>, case 16777216: <D.21677>, case 33554432: <D.21676>, case 452984832: <D.21690>>
  <D.21676>:
  D.30324 = image->assembly;
  if (D.30324 != 0B) goto <D.30325>; else goto <D.30326>;
  <D.30325>:
  D.30324 = image->assembly;
  D.30327 = &D.30324->aname;
  D.30321 = mono_stringify_assembly_name (D.30327);
  return D.30321;
  <D.30326>:
  D.30328 = image->assembly_name;
  if (D.30328 != 0B) goto <D.30329>; else goto <D.30330>;
  <D.30329>:
  D.30328 = image->assembly_name;
  D.30321 = monoeg_strdup (D.30328);
  return D.30321;
  <D.30330>:
  D.30322 = image->name;
  if (D.30322 != 0B) goto <D.30332>; else goto <D.30333>;
  <D.30332>:
  iftmp.301 = image->name;
  goto <D.30334>;
  <D.30333>:
  iftmp.301 = "[Could not resolve assembly name";
  <D.30334>:
  D.30321 = monoeg_g_strdup_printf ("%s", iftmp.301);
  return D.30321;
  <D.21677>:
  {
    struct MonoError error;
    struct MonoAssemblyName aname;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint32 idx;

    try
      {
        t = &image->tables[1];
        idx = type_token & 16777215;
        D.30335 = t->rows;
        D.30336 = (unsigned int) D.30335;
        if (D.30336 < idx) goto <D.30337>; else goto <D.30338>;
        <D.30337>:
        D.30321 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.30321;
        <D.30338>:
        D.30339 = idx + 4294967295;
        D.30340 = mono_verifier_verify_typeref_row (image, D.30339, &error);
        if (D.30340 == 0) goto <D.30341>; else goto <D.30342>;
        <D.30341>:
        {
          char * msg;

          D.30343 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.30343);
          mono_error_cleanup (&error);
          D.30321 = msg;
          return D.30321;
        }
        <D.30342>:
        D.30339 = idx + 4294967295;
        D.30344 = (int) D.30339;
        mono_metadata_decode_row (t, D.30344, &cols, 3);
        D.30345 = cols[0];
        idx = D.30345 >> 2;
        D.30345 = cols[0];
        D.30346 = D.30345 & 3;
        switch (D.30346) <default: <D.21688>, case 0: <D.21684>, case 1: <D.21685>, case 2: <D.21687>, case 3: <D.21686>>
        <D.21684>:
        D.30321 = monoeg_strdup ("");
        return D.30321;
        <D.21685>:
        D.30321 = monoeg_strdup ("");
        return D.30321;
        <D.21686>:
        D.30321 = monoeg_strdup ("");
        return D.30321;
        <D.21687>:
        D.30339 = idx + 4294967295;
        D.30344 = (int) D.30339;
        mono_assembly_get_assemblyref (image, D.30344, &aname);
        D.30321 = mono_stringify_assembly_name (&aname);
        return D.30321;
        <D.21688>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7058);
        goto <D.21689>;
      }
    finally
      {
        error = {CLOBBER};
        aname = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.21690>:
  D.30321 = monoeg_strdup ("");
  return D.30321;
  <D.21691>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7066);
  <D.21689>:
  D.30321 = 0B;
  return D.30321;
}


mono_type_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  long unsigned int D.30350;
  long unsigned int D.30351;
  struct MonoType * D.30354;
  void * D.30355;
  unsigned int D.30356;
  struct MonoType * iftmp.302;
  int D.30363;
  const char * D.30366;
  int inflated.303;
  struct MonoClass * D.30370;
  unsigned char D.30371;
  unsigned char D.30372;
  struct MonoError error;
  struct MonoType * type;
  gboolean inflated;

  try
    {
      type = 0B;
      inflated = 0;
      D.30350 = BIT_FIELD_REF <*image, 64, 192>;
      D.30351 = D.30350 & 34359738368;
      if (D.30351 != 0) goto <D.30352>; else goto <D.30353>;
      <D.30352>:
      D.30355 = mono_lookup_dynamic_token (image, type_token, context);
      D.30354 = mono_class_get_type (D.30355);
      return D.30354;
      <D.30353>:
      D.30356 = type_token & 4278190080;
      if (D.30356 != 452984832) goto <D.30357>; else goto <D.30358>;
      <D.30357>:
      {
        struct MonoClass * class;

        class = mono_class_get_full (image, type_token, context);
        if (class != 0B) goto <D.30360>; else goto <D.30361>;
        <D.30360>:
        iftmp.302 = mono_class_get_type (class);
        goto <D.30362>;
        <D.30361>:
        iftmp.302 = 0B;
        <D.30362>:
        D.30354 = iftmp.302;
        return D.30354;
      }
      <D.30358>:
      type = mono_type_retrieve_from_typespec (image, type_token, context, &inflated, &error);
      D.30363 = mono_error_ok (&error);
      if (D.30363 == 0) goto <D.30364>; else goto <D.30365>;
      <D.30364>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        D.30366 = mono_error_get_message (&error);
        monoeg_g_log (0B, 16, "Error loading type %s from %s due to %s", name, assembly, D.30366);
        mono_error_cleanup (&error);
        mono_loader_set_error_type_load (name, assembly);
        D.30354 = 0B;
        return D.30354;
      }
      <D.30365>:
      inflated.303 = inflated;
      if (inflated.303 != 0) goto <D.30368>; else goto <D.30369>;
      <D.30368>:
      {
        struct MonoType * tmp;

        tmp = type;
        D.30370 = mono_class_from_mono_type (type);
        type = mono_class_get_type (D.30370);
        D.30371 = type->type;
        D.30372 = tmp->type;
        if (D.30371 != D.30372) goto <D.30373>; else goto <D.30374>;
        <D.30373>:
        type = tmp;
        goto <D.30375>;
        <D.30374>:
        mono_metadata_free_type (tmp);
        <D.30375>:
      }
      <D.30369>:
      D.30354 = type;
      return D.30354;
    }
  finally
    {
      error = {CLOBBER};
      inflated = {CLOBBER};
    }
}


mono_class_get (struct MonoImage * image, guint32 type_token)
{
  struct MonoClass * D.30378;

  D.30378 = mono_class_get_full (image, type_token, 0B);
  return D.30378;
}


mono_image_init_name_cache (struct MonoImage * image)
{
  struct GHashTable * D.30380;
  struct GHashTable * D.30383;
  long unsigned int D.30384;
  long unsigned int D.30385;
  unsigned int D.30388;
  int D.30389;
  unsigned int D.30390;
  unsigned int D.30391;
  unsigned int D.30394;
  unsigned int D.30395;
  long unsigned int D.30396;
  const void * D.30397;
  void * D.30400;
  long unsigned int D.30401;
  void * D.30402;
  <unnamed-unsigned:24> D.30403;
  unsigned int D.30404;
  unsigned int D.30405;
  unsigned int D.30406;
  int D.30409;
  int D.30410;
  long unsigned int D.30411;
  void * D.30412;
  <unnamed-unsigned:24> D.30413;
  int D.30414;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * name;
  const char * nspace;
  guint32 i;
  guint32 visib;
  guint32 nspace_index;
  struct GHashTable * name_cache2;
  struct GHashTable * nspace_table;

  try
    {
      t = &image->tables[2];
      mono_image_lock (image);
      D.30380 = image->name_cache;
      if (D.30380 != 0B) goto <D.30381>; else goto <D.30382>;
      <D.30381>:
      mono_image_unlock (image);
      return;
      <D.30382>:
      D.30383 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      image->name_cache = D.30383;
      D.30384 = BIT_FIELD_REF <*image, 64, 192>;
      D.30385 = D.30384 & 34359738368;
      if (D.30385 != 0) goto <D.30386>; else goto <D.30387>;
      <D.30386>:
      mono_image_unlock (image);
      return;
      <D.30387>:
      name_cache2 = monoeg_g_hash_table_new (0B, 0B);
      i = 1;
      goto <D.21737>;
      <D.21736>:
      D.30388 = i + 4294967295;
      D.30389 = (int) D.30388;
      mono_metadata_decode_row (t, D.30389, &cols, 6);
      D.30390 = cols[0];
      visib = D.30390 & 7;
      D.30391 = visib + 4294967294;
      if (D.30391 <= 5) goto <D.30392>; else goto <D.30393>;
      <D.30392>:
      // predicted unlikely by continue predictor.
      goto <D.21735>;
      <D.30393>:
      D.30394 = cols[1];
      name = mono_metadata_string_heap (image, D.30394);
      D.30395 = cols[2];
      nspace = mono_metadata_string_heap (image, D.30395);
      nspace_index = cols[2];
      D.30396 = (long unsigned int) nspace_index;
      D.30397 = (const void *) D.30396;
      nspace_table = monoeg_g_hash_table_lookup (name_cache2, D.30397);
      if (nspace_table == 0B) goto <D.30398>; else goto <D.30399>;
      <D.30398>:
      nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      D.30380 = image->name_cache;
      monoeg_g_hash_table_insert_replace (D.30380, nspace, nspace_table, 0);
      D.30396 = (long unsigned int) nspace_index;
      D.30400 = (void *) D.30396;
      monoeg_g_hash_table_insert_replace (name_cache2, D.30400, nspace_table, 0);
      <D.30399>:
      D.30401 = (long unsigned int) i;
      D.30402 = (void *) D.30401;
      monoeg_g_hash_table_insert_replace (nspace_table, name, D.30402, 0);
      <D.21735>:
      i = i + 1;
      <D.21737>:
      D.30403 = t->rows;
      D.30404 = (unsigned int) D.30403;
      if (D.30404 >= i) goto <D.21736>; else goto <D.21738>;
      <D.21738>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        int i;

        try
          {
            t = &image->tables[39];
            i = 0;
            goto <D.21743>;
            <D.21742>:
            mono_metadata_decode_row (t, i, &cols, 5);
            D.30405 = cols[2];
            name = mono_metadata_string_heap (image, D.30405);
            D.30406 = cols[3];
            nspace = mono_metadata_string_heap (image, D.30406);
            nspace_index = cols[3];
            D.30396 = (long unsigned int) nspace_index;
            D.30397 = (const void *) D.30396;
            nspace_table = monoeg_g_hash_table_lookup (name_cache2, D.30397);
            if (nspace_table == 0B) goto <D.30407>; else goto <D.30408>;
            <D.30407>:
            nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
            D.30380 = image->name_cache;
            monoeg_g_hash_table_insert_replace (D.30380, nspace, nspace_table, 0);
            D.30396 = (long unsigned int) nspace_index;
            D.30400 = (void *) D.30396;
            monoeg_g_hash_table_insert_replace (name_cache2, D.30400, nspace_table, 0);
            <D.30408>:
            D.30409 = i + 1;
            D.30410 = D.30409 | 654311424;
            D.30411 = (long unsigned int) D.30410;
            D.30412 = (void *) D.30411;
            monoeg_g_hash_table_insert_replace (nspace_table, name, D.30412, 0);
            i = i + 1;
            <D.21743>:
            D.30413 = t->rows;
            D.30414 = (int) D.30413;
            if (D.30414 > i) goto <D.21742>; else goto <D.21744>;
            <D.21744>:
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      monoeg_g_hash_table_destroy (name_cache2);
      mono_image_unlock (image);
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_image_add_to_name_cache (struct MonoImage * image, const char * nspace, const char * name, guint32 index)
{
  struct GHashTable * D.30418;
  void * D.30423;
  long int D.30424;
  char * D.30427;
  long unsigned int D.30428;
  void * D.30429;
  struct GHashTable * nspace_table;
  struct GHashTable * name_cache;
  guint32 old_index;

  mono_image_lock (image);
  D.30418 = image->name_cache;
  if (D.30418 == 0B) goto <D.30419>; else goto <D.30420>;
  <D.30419>:
  mono_image_init_name_cache (image);
  <D.30420>:
  name_cache = image->name_cache;
  nspace_table = monoeg_g_hash_table_lookup (name_cache, nspace);
  if (nspace_table == 0B) goto <D.30421>; else goto <D.30422>;
  <D.30421>:
  nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  monoeg_g_hash_table_insert_replace (name_cache, nspace, nspace_table, 0);
  <D.30422>:
  D.30423 = monoeg_g_hash_table_lookup (nspace_table, name);
  D.30424 = (long int) D.30423;
  old_index = (guint32) D.30424;
  if (old_index != 0) goto <D.30425>; else goto <D.30426>;
  <D.30425>:
  D.30427 = image->name;
  monoeg_g_log (0B, 4, "overrwritting old token %x on image %s for type %s::%s", old_index, D.30427, nspace, name);
  <D.21754>:
  goto <D.21754>;
  <D.30426>:
  D.30428 = (long unsigned int) index;
  D.30429 = (void *) D.30428;
  monoeg_g_hash_table_insert_replace (nspace_table, name, D.30429, 0);
  mono_image_unlock (image);
}


mono_class_from_name_case (struct MonoImage * image, const char * name_space, const char * name)
{
  long unsigned int D.30430;
  long unsigned int D.30431;
  struct GHashTable * D.30434;
  void * D.30437;
  long int D.30442;
  struct MonoClass * D.30445;
  unsigned int D.30446;
  unsigned int D.30447;
  int D.30448;
  unsigned int D.30449;
  unsigned int D.30450;
  unsigned int D.30453;
  unsigned int D.30454;
  int D.30455;
  int D.30458;
  unsigned int D.30461;
  <unnamed-unsigned:24> D.30462;
  unsigned int D.30463;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * n;
  const char * nspace;
  guint32 i;
  guint32 visib;

  try
    {
      t = &image->tables[2];
      D.30430 = BIT_FIELD_REF <*image, 64, 192>;
      D.30431 = D.30430 & 34359738368;
      if (D.30431 != 0) goto <D.30432>; else goto <D.30433>;
      <D.30432>:
      {
        guint32 token;
        struct FindUserData user_data;

        try
          {
            token = 0;
            mono_image_lock (image);
            D.30434 = image->name_cache;
            if (D.30434 == 0B) goto <D.30435>; else goto <D.30436>;
            <D.30435>:
            mono_image_init_name_cache (image);
            <D.30436>:
            user_data.key = name_space;
            user_data.value = 0B;
            D.30434 = image->name_cache;
            monoeg_g_hash_table_foreach (D.30434, find_nocase, &user_data);
            D.30437 = user_data.value;
            if (D.30437 != 0B) goto <D.30438>; else goto <D.30439>;
            <D.30438>:
            {
              struct GHashTable * nspace_table;

              nspace_table = user_data.value;
              user_data.key = name;
              user_data.value = 0B;
              monoeg_g_hash_table_foreach (nspace_table, find_nocase, &user_data);
              D.30437 = user_data.value;
              if (D.30437 != 0B) goto <D.30440>; else goto <D.30441>;
              <D.30440>:
              D.30437 = user_data.value;
              D.30442 = (long int) D.30437;
              token = (guint32) D.30442;
              <D.30441>:
            }
            <D.30439>:
            mono_image_unlock (image);
            if (token != 0) goto <D.30443>; else goto <D.30444>;
            <D.30443>:
            D.30446 = token | 33554432;
            D.30445 = mono_class_get (image, D.30446);
            return D.30445;
            <D.30444>:
            D.30445 = 0B;
            return D.30445;
          }
        finally
          {
            user_data = {CLOBBER};
          }
      }
      <D.30433>:
      i = 1;
      goto <D.21782>;
      <D.21781>:
      D.30447 = i + 4294967295;
      D.30448 = (int) D.30447;
      mono_metadata_decode_row (t, D.30448, &cols, 6);
      D.30449 = cols[0];
      visib = D.30449 & 7;
      D.30450 = visib + 4294967294;
      if (D.30450 <= 5) goto <D.30451>; else goto <D.30452>;
      <D.30451>:
      // predicted unlikely by continue predictor.
      goto <D.21780>;
      <D.30452>:
      D.30453 = cols[1];
      n = mono_metadata_string_heap (image, D.30453);
      D.30454 = cols[2];
      nspace = mono_metadata_string_heap (image, D.30454);
      D.30455 = monoeg_ascii_strcasecmp (n, name);
      if (D.30455 == 0) goto <D.30456>; else goto <D.30457>;
      <D.30456>:
      D.30458 = monoeg_ascii_strcasecmp (nspace, name_space);
      if (D.30458 == 0) goto <D.30459>; else goto <D.30460>;
      <D.30459>:
      D.30461 = i | 33554432;
      D.30445 = mono_class_get (image, D.30461);
      return D.30445;
      <D.30460>:
      <D.30457>:
      <D.21780>:
      i = i + 1;
      <D.21782>:
      D.30462 = t->rows;
      D.30463 = (unsigned int) D.30462;
      if (D.30463 >= i) goto <D.21781>; else goto <D.21783>;
      <D.21783>:
      D.30445 = 0B;
      return D.30445;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


find_nocase (void * key, void * value, void * user_data)
{
  void * D.30467;
  const void * D.30470;
  int D.30471;
  char * name;
  struct FindUserData * data;

  name = key;
  data = user_data;
  D.30467 = data->value;
  if (D.30467 == 0B) goto <D.30468>; else goto <D.30469>;
  <D.30468>:
  D.30470 = data->key;
  D.30471 = monoeg_ascii_strcasecmp (name, D.30470);
  if (D.30471 == 0) goto <D.30472>; else goto <D.30473>;
  <D.30472>:
  data->value = value;
  <D.30473>:
  <D.30469>:
}


mono_class_from_name (struct MonoImage * image, const char * name_space, const char * name)
{
  long int nested.304;
  long int name.305;
  long int D.30478;
  long unsigned int D.30479;
  struct MonoClass * D.30482;
  int D.30483;
  long unsigned int D.30484;
  sizetype D.30485;
  sizetype D.30486;
  gboolean (*<T1f0b>) (struct MonoImage *, const char *, const char *, struct MonoClass * *) get_class_from_name.306;
  long unsigned int D.30490;
  long unsigned int D.30491;
  struct MonoClass * class.307;
  struct MonoClass * class.308;
  struct MonoClass * iftmp.309;
  struct GHashTable * D.30506;
  void * D.30511;
  long int D.30512;
  long unsigned int D.30515;
  long unsigned int D.30516;
  struct MonoImage * * D.30519;
  long unsigned int D.30522;
  long unsigned int D.30523;
  struct MonoImage * * D.30524;
  struct MonoClass * class.310;
  unsigned int i.311;
  unsigned int D.30529;
  struct MonoClass * class.312;
  unsigned int D.30537;
  unsigned int D.30540;
  int D.30541;
  unsigned int D.30542;
  struct MonoAssembly * D.30545;
  unsigned int D.30546;
  struct MonoClass * class.313;
  unsigned int D.30554;
  int D.30555;
  struct MonoAssembly * * D.30556;
  long unsigned int D.30557;
  long unsigned int D.30558;
  struct MonoAssembly * * D.30559;
  struct MonoAssembly * D.30560;
  _Bool D.30561;
  long int D.30562;
  long int D.30563;
  struct MonoImage * D.30568;
  struct MonoClass * class.314;
  struct GHashTable * nspace_table;
  struct MonoImage * loaded_image;
  guint32 token;
  int i;
  struct MonoClass * class;
  char * nested;
  char buf[1024];

  try
    {
      token = 0;
      nested = __builtin_strchr (name, 47);
      if (nested != 0B) goto <D.30474>; else goto <D.30475>;
      <D.30474>:
      {
        int pos;
        int len;

        nested.304 = (long int) nested;
        name.305 = (long int) name;
        D.30478 = nested.304 - name.305;
        pos = (int) D.30478;
        D.30479 = strlen (name);
        len = (int) D.30479;
        if (len > 1023) goto <D.30480>; else goto <D.30481>;
        <D.30480>:
        D.30482 = 0B;
        return D.30482;
        <D.30481>:
        D.30483 = len + 1;
        D.30484 = (long unsigned int) D.30483;
        memcpy (&buf, name, D.30484);
        buf[pos] = 0;
        D.30485 = (sizetype) pos;
        D.30486 = D.30485 + 1;
        nested = &buf + D.30486;
        name = &buf;
      }
      <D.30475>:
      get_class_from_name.306 = get_class_from_name;
      if (get_class_from_name.306 != 0B) goto <D.30488>; else goto <D.30489>;
      <D.30488>:
      D.30490 = BIT_FIELD_REF <*image, 64, 6592>;
      D.30491 = D.30490 & 16777215;
      if (D.30491 == 0) goto <D.30492>; else goto <D.30493>;
      <D.30492>:
      {
        gboolean res;

        get_class_from_name.306 = get_class_from_name;
        res = get_class_from_name.306 (image, name_space, name, &class);
        if (res != 0) goto <D.30494>; else goto <D.30495>;
        <D.30494>:
        class.307 = class;
        if (class.307 == 0B) goto <D.30497>; else goto <D.30498>;
        <D.30497>:
        class.308 = search_modules (image, name_space, name);
        class = class.308;
        <D.30498>:
        if (nested != 0B) goto <D.30500>; else goto <D.30501>;
        <D.30500>:
        class.307 = class;
        if (class.307 != 0B) goto <D.30503>; else goto <D.30504>;
        <D.30503>:
        class.307 = class;
        iftmp.309 = return_nested_in (class.307, nested);
        goto <D.30505>;
        <D.30504>:
        iftmp.309 = 0B;
        <D.30505>:
        D.30482 = iftmp.309;
        return D.30482;
        <D.30501>:
        D.30482 = class;
        return D.30482;
        <D.30495>:
      }
      <D.30493>:
      <D.30489>:
      mono_image_lock (image);
      D.30506 = image->name_cache;
      if (D.30506 == 0B) goto <D.30507>; else goto <D.30508>;
      <D.30507>:
      mono_image_init_name_cache (image);
      <D.30508>:
      D.30506 = image->name_cache;
      nspace_table = monoeg_g_hash_table_lookup (D.30506, name_space);
      if (nspace_table != 0B) goto <D.30509>; else goto <D.30510>;
      <D.30509>:
      D.30511 = monoeg_g_hash_table_lookup (nspace_table, name);
      D.30512 = (long int) D.30511;
      token = (guint32) D.30512;
      <D.30510>:
      mono_image_unlock (image);
      if (token == 0) goto <D.30513>; else goto <D.30514>;
      <D.30513>:
      D.30515 = BIT_FIELD_REF <*image, 64, 192>;
      D.30516 = D.30515 & 34359738368;
      if (D.30516 != 0) goto <D.30517>; else goto <D.30518>;
      <D.30517>:
      D.30519 = image->modules;
      if (D.30519 != 0B) goto <D.30520>; else goto <D.30521>;
      <D.30520>:
      i = 0;
      goto <D.21834>;
      <D.21833>:
      {
        struct MonoImage * module;

        D.30519 = image->modules;
        D.30522 = (long unsigned int) i;
        D.30523 = D.30522 * 8;
        D.30524 = D.30519 + D.30523;
        module = *D.30524;
        class.310 = mono_class_from_name (module, name_space, name);
        class = class.310;
        class.307 = class;
        if (class.307 != 0B) goto <D.30526>; else goto <D.30527>;
        <D.30526>:
        D.30482 = class;
        return D.30482;
        <D.30527>:
      }
      i = i + 1;
      <D.21834>:
      i.311 = (unsigned int) i;
      D.30529 = image->module_count;
      if (i.311 < D.30529) goto <D.21833>; else goto <D.21835>;
      <D.21835>:
      <D.30521>:
      <D.30518>:
      <D.30514>:
      if (token == 0) goto <D.30530>; else goto <D.30531>;
      <D.30530>:
      class.312 = search_modules (image, name_space, name);
      class = class.312;
      class.307 = class;
      if (class.307 != 0B) goto <D.30533>; else goto <D.30534>;
      <D.30533>:
      D.30482 = class;
      return D.30482;
      <D.30534>:
      <D.30531>:
      if (token == 0) goto <D.30535>; else goto <D.30536>;
      <D.30535>:
      D.30482 = 0B;
      return D.30482;
      <D.30536>:
      D.30537 = token >> 24;
      if (D.30537 == 39) goto <D.30538>; else goto <D.30539>;
      <D.30538>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        guint32 idx;
        guint32 impl;

        try
          {
            t = &image->tables[39];
            idx = token & 16777215;
            D.30540 = idx + 4294967295;
            D.30541 = (int) D.30540;
            mono_metadata_decode_row (t, D.30541, &cols, 5);
            impl = cols[4];
            D.30542 = impl & 3;
            if (D.30542 == 0) goto <D.30543>; else goto <D.30544>;
            <D.30543>:
            D.30545 = image->assembly;
            D.30546 = impl >> 2;
            loaded_image = mono_assembly_load_module (D.30545, D.30546);
            if (loaded_image == 0B) goto <D.30547>; else goto <D.30548>;
            <D.30547>:
            D.30482 = 0B;
            return D.30482;
            <D.30548>:
            class.313 = mono_class_from_name (loaded_image, name_space, name);
            class = class.313;
            if (nested != 0B) goto <D.30550>; else goto <D.30551>;
            <D.30550>:
            class.307 = class;
            D.30482 = return_nested_in (class.307, nested);
            return D.30482;
            <D.30551>:
            D.30482 = class;
            return D.30482;
            <D.30544>:
            D.30542 = impl & 3;
            if (D.30542 == 1) goto <D.30552>; else goto <D.30553>;
            <D.30552>:
            {
              guint32 assembly_idx;

              assembly_idx = impl >> 2;
              D.30554 = assembly_idx + 4294967295;
              D.30555 = (int) D.30554;
              mono_assembly_load_reference (image, D.30555);
              D.30556 = image->references;
              D.30554 = assembly_idx + 4294967295;
              D.30557 = (long unsigned int) D.30554;
              D.30558 = D.30557 * 8;
              D.30559 = D.30556 + D.30558;
              D.30560 = *D.30559;
              D.30561 = D.30560 == 0B;
              D.30562 = (long int) D.30561;
              D.30563 = __builtin_expect (D.30562, 0);
              if (D.30563 != 0) goto <D.30564>; else goto <D.30565>;
              <D.30564>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 7552, "image->references [assembly_idx - 1]");
              <D.30565>:
              D.30556 = image->references;
              D.30554 = assembly_idx + 4294967295;
              D.30557 = (long unsigned int) D.30554;
              D.30558 = D.30557 * 8;
              D.30559 = D.30556 + D.30558;
              D.30560 = *D.30559;
              if (D.30560 == -1B) goto <D.30566>; else goto <D.30567>;
              <D.30566>:
              D.30482 = 0B;
              return D.30482;
              <D.30567>:
              D.30556 = image->references;
              D.30554 = assembly_idx + 4294967295;
              D.30557 = (long unsigned int) D.30554;
              D.30558 = D.30557 * 8;
              D.30559 = D.30556 + D.30558;
              D.30560 = *D.30559;
              D.30568 = D.30560->image;
              D.30482 = mono_class_from_name (D.30568, name_space, name);
              return D.30482;
            }
            <D.30553>:
            monoeg_g_log (0B, 4, "not yet implemented");
            <D.21841>:
            goto <D.21841>;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.30539>:
      token = token | 33554432;
      class.314 = mono_class_get (image, token);
      class = class.314;
      if (nested != 0B) goto <D.30570>; else goto <D.30571>;
      <D.30570>:
      class.307 = class;
      D.30482 = return_nested_in (class.307, nested);
      return D.30482;
      <D.30571>:
      D.30482 = class;
      return D.30482;
    }
  finally
    {
      class = {CLOBBER};
      buf = {CLOBBER};
    }
}


search_modules (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned int D.30575;
  int D.30578;
  struct MonoClass * D.30583;
  <unnamed-unsigned:24> D.30584;
  int D.30585;
  struct MonoTableInfo * file_table;
  struct MonoImage * file_image;
  struct MonoClass * class;
  int i;

  file_table = &image->tables[38];
  i = 0;
  goto <D.21815>;
  <D.21814>:
  {
    guint32 cols[3];

    try
      {
        mono_metadata_decode_row (file_table, i, &cols, 3);
        D.30575 = cols[0];
        if (D.30575 == 1) goto <D.30576>; else goto <D.30577>;
        <D.30576>:
        // predicted unlikely by continue predictor.
        goto <D.21813>;
        <D.30577>:
        D.30578 = i + 1;
        file_image = mono_image_load_file_for_image (image, D.30578);
        if (file_image != 0B) goto <D.30579>; else goto <D.30580>;
        <D.30579>:
        class = mono_class_from_name (file_image, name_space, name);
        if (class != 0B) goto <D.30581>; else goto <D.30582>;
        <D.30581>:
        D.30583 = class;
        return D.30583;
        <D.30582>:
        <D.30580>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.21813>:
  i = i + 1;
  <D.21815>:
  D.30584 = file_table->rows;
  D.30585 = (int) D.30584;
  if (D.30585 > i) goto <D.21814>; else goto <D.21816>;
  <D.21816>:
  D.30583 = 0B;
  return D.30583;
}


return_nested_in (struct MonoClass * class, char * nested)
{
  int D.21799;
  const char * D.30592;
  struct MonoClass * D.30597;
  struct MonoClass * found;
  char * s;
  void * iter;

  try
    {
      s = __builtin_strchr (nested, 47);
      iter = 0B;
      if (s != 0B) goto <D.30590>; else goto <D.30591>;
      <D.30590>:
      *s = 0;
      s = s + 1;
      <D.30591>:
      goto <D.21801>;
      <D.21800>:
      {
        size_t __s1_len;
        size_t __s2_len;

        D.30592 = found->name;
        D.21799 = __builtin_strcmp (D.30592, nested);
      }
      if (D.21799 == 0) goto <D.30593>; else goto <D.30594>;
      <D.30593>:
      if (s != 0B) goto <D.30595>; else goto <D.30596>;
      <D.30595>:
      D.30597 = return_nested_in (found, s);
      return D.30597;
      <D.30596>:
      D.30597 = found;
      return D.30597;
      <D.30594>:
      <D.21801>:
      found = mono_class_get_nested_types (class, &iter);
      if (found != 0B) goto <D.21800>; else goto <D.21802>;
      <D.21802>:
      D.30597 = 0B;
      return D.30597;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_class_is_subclass_of (struct MonoClass * klass, struct MonoClass * klassc, gboolean check_interfaces)
{
  unsigned int D.30604;
  unsigned int D.30605;
  unsigned char D.30607;
  unsigned int D.30609;
  unsigned int D.30610;
  unsigned char D.30612;
  short unsigned int D.30615;
  short unsigned int D.30616;
  guint8 * D.30619;
  short unsigned int D.30620;
  sizetype D.30621;
  guint8 * D.30622;
  unsigned char D.30623;
  int D.30624;
  int D.30625;
  int D.30626;
  int D.30627;
  int D.30628;
  mono_bool D.30631;
  struct MonoClass * * D.30641;
  long unsigned int D.30642;
  long unsigned int D.30643;
  struct MonoClass * * D.30644;
  short unsigned int D.30647;
  int D.30648;
  int D.30655;
  struct MonoClass * D.30658;

  if (check_interfaces != 0) goto <D.30603>; else goto <D.30600>;
  <D.30603>:
  D.30604 = klassc->flags;
  D.30605 = D.30604 & 32;
  if (D.30605 != 0) goto <D.30601>; else goto <D.30606>;
  <D.30606>:
  D.30607 = klassc->byval_arg.type;
  if (D.30607 == 19) goto <D.30601>; else goto <D.30608>;
  <D.30608>:
  D.30607 = klassc->byval_arg.type;
  if (D.30607 == 30) goto <D.30601>; else goto <D.30600>;
  <D.30601>:
  D.30609 = klass->flags;
  D.30610 = D.30609 & 32;
  if (D.30610 == 0) goto <D.30611>; else goto <D.30600>;
  <D.30611>:
  D.30612 = klass->byval_arg.type;
  if (D.30612 != 19) goto <D.30613>; else goto <D.30600>;
  <D.30613>:
  D.30612 = klass->byval_arg.type;
  if (D.30612 != 30) goto <D.30614>; else goto <D.30600>;
  <D.30614>:
  D.30615 = klassc->interface_id;
  D.30616 = klass->max_interface_id;
  if (D.30615 <= D.30616) goto <D.30617>; else goto <D.30618>;
  <D.30617>:
  D.30619 = klass->interface_bitmap;
  D.30615 = klassc->interface_id;
  D.30620 = D.30615 >> 3;
  D.30621 = (sizetype) D.30620;
  D.30622 = D.30619 + D.30621;
  D.30623 = *D.30622;
  D.30624 = (int) D.30623;
  D.30615 = klassc->interface_id;
  D.30625 = (int) D.30615;
  D.30626 = D.30625 & 7;
  D.30627 = D.30624 >> D.30626;
  D.30628 = D.30627 & 1;
  if (D.30628 != 0) goto <D.30629>; else goto <D.30630>;
  <D.30629>:
  D.30631 = 1;
  return D.30631;
  <D.30630>:
  <D.30618>:
  goto <D.30602>;
  <D.30600>:
  if (check_interfaces != 0) goto <D.30636>; else goto <D.30632>;
  <D.30636>:
  D.30604 = klassc->flags;
  D.30605 = D.30604 & 32;
  if (D.30605 != 0) goto <D.30633>; else goto <D.30637>;
  <D.30637>:
  D.30607 = klassc->byval_arg.type;
  if (D.30607 == 19) goto <D.30633>; else goto <D.30638>;
  <D.30638>:
  D.30607 = klassc->byval_arg.type;
  if (D.30607 == 30) goto <D.30633>; else goto <D.30632>;
  <D.30633>:
  D.30609 = klass->flags;
  D.30610 = D.30609 & 32;
  if (D.30610 != 0) goto <D.30634>; else goto <D.30639>;
  <D.30639>:
  D.30612 = klass->byval_arg.type;
  if (D.30612 == 19) goto <D.30634>; else goto <D.30640>;
  <D.30640>:
  D.30612 = klass->byval_arg.type;
  if (D.30612 == 30) goto <D.30634>; else goto <D.30632>;
  <D.30634>:
  {
    int i;

    i = 0;
    goto <D.21850>;
    <D.21849>:
    {
      struct MonoClass * ic;

      D.30641 = klass->interfaces;
      D.30642 = (long unsigned int) i;
      D.30643 = D.30642 * 8;
      D.30644 = D.30641 + D.30643;
      ic = *D.30644;
      if (ic == klassc) goto <D.30645>; else goto <D.30646>;
      <D.30645>:
      D.30631 = 1;
      return D.30631;
      <D.30646>:
    }
    i = i + 1;
    <D.21850>:
    D.30647 = klass->interface_count;
    D.30648 = (int) D.30647;
    if (D.30648 > i) goto <D.21849>; else goto <D.21851>;
    <D.21851>:
  }
  goto <D.30635>;
  <D.30632>:
  D.30609 = klass->flags;
  D.30610 = D.30609 & 32;
  if (D.30610 == 0) goto <D.30649>; else goto <D.30650>;
  <D.30649>:
  D.30612 = klass->byval_arg.type;
  if (D.30612 != 19) goto <D.30651>; else goto <D.30652>;
  <D.30651>:
  D.30612 = klass->byval_arg.type;
  if (D.30612 != 30) goto <D.30653>; else goto <D.30654>;
  <D.30653>:
  D.30655 = mono_class_has_parent (klass, klassc);
  if (D.30655 != 0) goto <D.30656>; else goto <D.30657>;
  <D.30656>:
  D.30631 = 1;
  return D.30631;
  <D.30657>:
  <D.30654>:
  <D.30652>:
  <D.30650>:
  <D.30635>:
  <D.30602>:
  D.30658 = mono_defaults.object_class;
  if (D.30658 == klassc) goto <D.30659>; else goto <D.30660>;
  <D.30659>:
  D.30631 = 1;
  return D.30631;
  <D.30660>:
  D.30631 = 0;
  return D.30631;
}


mono_class_has_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.30662;
  _Bool D.30663;
  long int D.30664;
  long int D.30665;
  struct MonoClass * * D.30668;
  _Bool D.30669;
  long int D.30670;
  long int D.30671;
  gboolean D.30674;

  D.30662 = klass->supertypes;
  D.30663 = D.30662 == 0B;
  D.30664 = (long int) D.30663;
  D.30665 = __builtin_expect (D.30664, 0);
  if (D.30665 != 0) goto <D.30666>; else goto <D.30667>;
  <D.30666>:
  mono_class_setup_supertypes (klass);
  <D.30667>:
  D.30668 = parent->supertypes;
  D.30669 = D.30668 == 0B;
  D.30670 = (long int) D.30669;
  D.30671 = __builtin_expect (D.30670, 0);
  if (D.30671 != 0) goto <D.30672>; else goto <D.30673>;
  <D.30672>:
  mono_class_setup_supertypes (parent);
  <D.30673>:
  D.30674 = mono_class_has_parent_fast (klass, parent);
  return D.30674;
}


mono_class_has_parent_fast (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.30676;
  int iftmp.315;
  short unsigned int D.30680;
  short unsigned int D.30681;
  struct MonoClass * * D.30683;
  long unsigned int D.30684;
  long unsigned int D.30685;
  sizetype D.30686;
  struct MonoClass * * D.30687;
  struct MonoClass * D.30688;

  D.30680 = klass->idepth;
  D.30681 = parent->idepth;
  if (D.30680 >= D.30681) goto <D.30682>; else goto <D.30678>;
  <D.30682>:
  D.30683 = klass->supertypes;
  D.30681 = parent->idepth;
  D.30684 = (long unsigned int) D.30681;
  D.30685 = D.30684 * 8;
  D.30686 = D.30685 + 18446744073709551608;
  D.30687 = D.30683 + D.30686;
  D.30688 = *D.30687;
  if (D.30688 == parent) goto <D.30689>; else goto <D.30678>;
  <D.30689>:
  iftmp.315 = 1;
  goto <D.30679>;
  <D.30678>:
  iftmp.315 = 0;
  <D.30679>:
  D.30676 = iftmp.315;
  return D.30676;
}


mono_class_has_variant_generic_params (struct MonoClass * klass)
{
  struct MonoGenericClass * D.30691;
  gboolean D.30694;
  struct MonoClass * D.30695;
  struct MonoGenericParamFull * D.30696;
  long unsigned int D.30697;
  long unsigned int D.30698;
  struct MonoGenericParamFull * D.30699;
  short unsigned int D.30700;
  int D.30701;
  int D.30702;
  <unnamed-signed:31> D.30705;
  int D.30706;
  int i;
  struct MonoGenericContainer * container;

  D.30691 = klass->generic_class;
  if (D.30691 == 0B) goto <D.30692>; else goto <D.30693>;
  <D.30692>:
  D.30694 = 0;
  return D.30694;
  <D.30693>:
  D.30691 = klass->generic_class;
  D.30695 = D.30691->container_class;
  container = D.30695->generic_container;
  i = 0;
  goto <D.21861>;
  <D.21860>:
  D.30696 = container->type_params;
  D.30697 = (long unsigned int) i;
  D.30698 = D.30697 * 56;
  D.30699 = D.30696 + D.30698;
  D.30700 = D.30699->info.flags;
  D.30701 = (int) D.30700;
  D.30702 = D.30701 & 3;
  if (D.30702 != 0) goto <D.30703>; else goto <D.30704>;
  <D.30703>:
  D.30694 = 1;
  return D.30694;
  <D.30704>:
  i = i + 1;
  <D.21861>:
  D.30705 = container->type_argc;
  D.30706 = (int) D.30705;
  if (D.30706 > i) goto <D.21860>; else goto <D.21862>;
  <D.21862>:
  D.30694 = 0;
  return D.30694;
}


mono_class_is_variant_compatible (struct MonoClass * klass, struct MonoClass * oklass, gboolean check_for_reference_conv)
{
  gboolean D.30710;
  struct MonoClass * D.30713;
  struct MonoGenericClass * D.30715;
  struct MonoGenericInst * D.30716;
  struct MonoGenericClass * D.30717;
  struct MonoGenericInst * D.30718;
  long unsigned int D.30719;
  long unsigned int D.30720;
  struct MonoType * * D.30721;
  struct MonoType * D.30722;
  struct MonoType * * D.30723;
  struct MonoType * D.30724;
  long unsigned int D.30727;
  long unsigned int D.30728;
  long unsigned int D.30729;
  long unsigned int D.30730;
  long unsigned int D.30732;
  struct MonoGenericParamFull * D.30736;
  long unsigned int D.30737;
  struct MonoGenericParamFull * D.30738;
  short unsigned int D.30739;
  int D.30740;
  int D.30741;
  int D.30744;
  int D.30748;
  int D.30751;
  <unnamed-signed:31> D.30755;
  int D.30756;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  if (klass == oklass) goto <D.30708>; else goto <D.30709>;
  <D.30708>:
  D.30710 = 1;
  return D.30710;
  <D.30709>:
  D.30713 = mono_class_get_generic_type_definition (oklass);
  if (D.30713 != klass_gtd) goto <D.30711>; else goto <D.30714>;
  <D.30714>:
  if (oklass == klass_gtd) goto <D.30711>; else goto <D.30712>;
  <D.30711>:
  D.30710 = 0;
  return D.30710;
  <D.30712>:
  D.30715 = klass->generic_class;
  D.30716 = D.30715->context.class_inst;
  klass_argv = &D.30716->type_argv[0];
  D.30717 = oklass->generic_class;
  D.30718 = D.30717->context.class_inst;
  oklass_argv = &D.30718->type_argv[0];
  j = 0;
  goto <D.21883>;
  <D.21882>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    D.30719 = (long unsigned int) j;
    D.30720 = D.30719 * 8;
    D.30721 = klass_argv + D.30720;
    D.30722 = *D.30721;
    param1_class = mono_class_from_mono_type (D.30722);
    D.30719 = (long unsigned int) j;
    D.30720 = D.30719 * 8;
    D.30723 = oklass_argv + D.30720;
    D.30724 = *D.30723;
    param2_class = mono_class_from_mono_type (D.30724);
    D.30727 = BIT_FIELD_REF <*param1_class, 64, 256>;
    D.30728 = BIT_FIELD_REF <*param2_class, 64, 256>;
    D.30729 = D.30727 ^ D.30728;
    D.30730 = D.30729 & 8;
    if (D.30730 != 0) goto <D.30725>; else goto <D.30731>;
    <D.30731>:
    D.30727 = BIT_FIELD_REF <*param1_class, 64, 256>;
    D.30732 = D.30727 & 8;
    if (D.30732 != 0) goto <D.30733>; else goto <D.30726>;
    <D.30733>:
    if (param1_class != param2_class) goto <D.30725>; else goto <D.30726>;
    <D.30725>:
    D.30710 = 0;
    return D.30710;
    <D.30726>:
    if (param1_class != param2_class) goto <D.30734>; else goto <D.30735>;
    <D.30734>:
    D.30736 = container->type_params;
    D.30719 = (long unsigned int) j;
    D.30737 = D.30719 * 56;
    D.30738 = D.30736 + D.30737;
    D.30739 = D.30738->info.flags;
    D.30740 = (int) D.30739;
    D.30741 = D.30740 & 1;
    if (D.30741 != 0) goto <D.30742>; else goto <D.30743>;
    <D.30742>:
    D.30744 = mono_gparam_is_reference_conversible (param1_class, param2_class, check_for_reference_conv);
    if (D.30744 == 0) goto <D.30745>; else goto <D.30746>;
    <D.30745>:
    D.30710 = 0;
    return D.30710;
    <D.30746>:
    goto <D.30747>;
    <D.30743>:
    D.30736 = container->type_params;
    D.30719 = (long unsigned int) j;
    D.30737 = D.30719 * 56;
    D.30738 = D.30736 + D.30737;
    D.30739 = D.30738->info.flags;
    D.30740 = (int) D.30739;
    D.30748 = D.30740 & 2;
    if (D.30748 != 0) goto <D.30749>; else goto <D.30750>;
    <D.30749>:
    D.30751 = mono_gparam_is_reference_conversible (param2_class, param1_class, check_for_reference_conv);
    if (D.30751 == 0) goto <D.30752>; else goto <D.30753>;
    <D.30752>:
    D.30710 = 0;
    return D.30710;
    <D.30753>:
    goto <D.30754>;
    <D.30750>:
    D.30710 = 0;
    return D.30710;
    <D.30754>:
    <D.30747>:
    <D.30735>:
  }
  j = j + 1;
  <D.21883>:
  D.30755 = container->type_argc;
  D.30756 = (int) D.30755;
  if (D.30756 > j) goto <D.21882>; else goto <D.21884>;
  <D.21884>:
  D.30710 = 1;
  return D.30710;
}


mono_gparam_is_reference_conversible (struct MonoClass * target, struct MonoClass * candidate, gboolean check_for_reference_conv)
{
  gboolean D.30760;
  struct MonoType * D.30763;
  int D.30764;
  struct MonoType * D.30767;
  int D.30768;
  struct MonoGenericParamInfo * iftmp.316;
  struct MonoGenericContainer * D.30772;
  short unsigned int D.30779;
  int D.30780;
  int D.30781;
  int D.30782;

  if (target == candidate) goto <D.30758>; else goto <D.30759>;
  <D.30758>:
  D.30760 = 1;
  return D.30760;
  <D.30759>:
  if (check_for_reference_conv != 0) goto <D.30761>; else goto <D.30762>;
  <D.30761>:
  D.30763 = &target->byval_arg;
  D.30764 = mono_type_is_generic_argument (D.30763);
  if (D.30764 != 0) goto <D.30765>; else goto <D.30766>;
  <D.30765>:
  D.30767 = &candidate->byval_arg;
  D.30768 = mono_type_is_generic_argument (D.30767);
  if (D.30768 != 0) goto <D.30769>; else goto <D.30770>;
  <D.30769>:
  {
    struct MonoGenericParam * gparam;
    struct MonoGenericParamInfo * pinfo;

    gparam = candidate->byval_arg.data.generic_param;
    D.30772 = gparam->owner;
    if (D.30772 != 0B) goto <D.30773>; else goto <D.30774>;
    <D.30773>:
    iftmp.316 = &MEM[(struct MonoGenericParamFull *)gparam].info;
    goto <D.30775>;
    <D.30774>:
    iftmp.316 = 0B;
    <D.30775>:
    pinfo = iftmp.316;
    if (pinfo == 0B) goto <D.30776>; else goto <D.30778>;
    <D.30778>:
    D.30779 = pinfo->flags;
    D.30780 = (int) D.30779;
    D.30781 = D.30780 & 4;
    if (D.30781 == 0) goto <D.30776>; else goto <D.30777>;
    <D.30776>:
    D.30760 = 0;
    return D.30760;
    <D.30777>:
  }
  <D.30770>:
  <D.30766>:
  <D.30762>:
  D.30782 = mono_class_is_assignable_from (target, candidate);
  if (D.30782 == 0) goto <D.30783>; else goto <D.30784>;
  <D.30783>:
  D.30760 = 0;
  return D.30760;
  <D.30784>:
  D.30760 = 1;
  return D.30760;
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.30786;
  int iftmp.317;
  unsigned char D.30791;

  D.30791 = type->type;
  if (D.30791 == 19) goto <D.30788>; else goto <D.30792>;
  <D.30792>:
  D.30791 = type->type;
  if (D.30791 == 30) goto <D.30788>; else goto <D.30789>;
  <D.30788>:
  iftmp.317 = 1;
  goto <D.30790>;
  <D.30789>:
  iftmp.317 = 0;
  <D.30790>:
  D.30786 = iftmp.317;
  return D.30786;
}


mono_class_is_assignable_from (struct MonoClass * klass, struct MonoClass * oklass)
{
  long unsigned int D.30794;
  long unsigned int D.30795;
  long unsigned int D.30798;
  long unsigned int D.30799;
  unsigned char D.30804;
  unsigned char D.30806;
  mono_bool D.30807;
  struct MonoType * D.30808;
  int D.30809;
  struct MonoType * D.30812;
  int D.30813;
  unsigned int D.30818;
  unsigned int D.30819;
  unsigned char D.30821;
  unsigned char D.30825;
  struct MonoGenericContainer * D.30827;
  struct MonoGenericParamFull * D.30828;
  short unsigned int D.30829;
  long unsigned int D.30830;
  long unsigned int D.30831;
  struct MonoGenericParamFull * D.30832;
  long unsigned int D.30835;
  long unsigned int D.30836;
  struct MonoClass * * D.30837;
  struct MonoClass * D.30838;
  int D.30839;
  unsigned int D.30842;
  guint8 * D.30845;
  short unsigned int D.30850;
  short unsigned int D.30851;
  short unsigned int D.30854;
  sizetype D.30855;
  guint8 * D.30856;
  unsigned char D.30857;
  int D.30858;
  int D.30859;
  int D.30860;
  int D.30861;
  int D.30862;
  int D.30865;
  int D.30868;
  struct MonoClass * * D.30871;
  long unsigned int D.30872;
  long unsigned int D.30873;
  struct MonoClass * * D.30874;
  int D.30875;
  short unsigned int D.30878;
  int D.30879;
  long unsigned int D.30880;
  int D.30883;
  int D.30886;
  unsigned char D.30890;
  unsigned char D.30893;
  long unsigned int D.30898;
  long unsigned int D.30899;
  struct MonoClass * D.30904;
  struct MonoClass * D.30906;
  struct MonoClass * D.30908;
  struct MonoClass * D.30909;
  struct MonoClass * D.30910;
  int D.30911;
  int D.30914;

  D.30794 = BIT_FIELD_REF <*klass, 64, 256>;
  D.30795 = D.30794 & 1;
  if (D.30795 == 0) goto <D.30796>; else goto <D.30797>;
  <D.30796>:
  mono_class_init (klass);
  <D.30797>:
  D.30798 = BIT_FIELD_REF <*oklass, 64, 256>;
  D.30799 = D.30798 & 1;
  if (D.30799 == 0) goto <D.30800>; else goto <D.30801>;
  <D.30800>:
  mono_class_init (oklass);
  <D.30801>:
  D.30804 = klass->exception_type;
  if (D.30804 != 0) goto <D.30802>; else goto <D.30805>;
  <D.30805>:
  D.30806 = oklass->exception_type;
  if (D.30806 != 0) goto <D.30802>; else goto <D.30803>;
  <D.30802>:
  D.30807 = 0;
  return D.30807;
  <D.30803>:
  D.30808 = &klass->byval_arg;
  D.30809 = mono_type_is_generic_argument (D.30808);
  if (D.30809 != 0) goto <D.30810>; else goto <D.30811>;
  <D.30810>:
  D.30812 = &oklass->byval_arg;
  D.30813 = mono_type_is_generic_argument (D.30812);
  if (D.30813 == 0) goto <D.30814>; else goto <D.30815>;
  <D.30814>:
  D.30807 = 0;
  return D.30807;
  <D.30815>:
  D.30807 = mono_gparam_is_assignable_from (klass, oklass);
  return D.30807;
  <D.30811>:
  D.30818 = klass->flags;
  D.30819 = D.30818 & 32;
  if (D.30819 != 0) goto <D.30816>; else goto <D.30820>;
  <D.30820>:
  D.30821 = klass->byval_arg.type;
  if (D.30821 == 19) goto <D.30816>; else goto <D.30822>;
  <D.30822>:
  D.30821 = klass->byval_arg.type;
  if (D.30821 == 30) goto <D.30816>; else goto <D.30817>;
  <D.30816>:
  D.30825 = oklass->byval_arg.type;
  if (D.30825 == 19) goto <D.30823>; else goto <D.30826>;
  <D.30826>:
  D.30825 = oklass->byval_arg.type;
  if (D.30825 == 30) goto <D.30823>; else goto <D.30824>;
  <D.30823>:
  {
    struct MonoGenericParam * gparam;
    struct MonoClass * * constraints;
    int i;

    gparam = oklass->byval_arg.data.generic_param;
    D.30827 = gparam->owner;
    D.30828 = D.30827->type_params;
    D.30829 = gparam->num;
    D.30830 = (long unsigned int) D.30829;
    D.30831 = D.30830 * 56;
    D.30832 = D.30828 + D.30831;
    constraints = D.30832->info.constraints;
    if (constraints != 0B) goto <D.30833>; else goto <D.30834>;
    <D.30833>:
    i = 0;
    goto <D.21924>;
    <D.21923>:
    D.30835 = (long unsigned int) i;
    D.30836 = D.30835 * 8;
    D.30837 = constraints + D.30836;
    D.30838 = *D.30837;
    D.30839 = mono_class_is_assignable_from (klass, D.30838);
    if (D.30839 != 0) goto <D.30840>; else goto <D.30841>;
    <D.30840>:
    D.30807 = 1;
    return D.30807;
    <D.30841>:
    i = i + 1;
    <D.21924>:
    D.30835 = (long unsigned int) i;
    D.30836 = D.30835 * 8;
    D.30837 = constraints + D.30836;
    D.30838 = *D.30837;
    if (D.30838 != 0B) goto <D.21923>; else goto <D.21925>;
    <D.21925>:
    <D.30834>:
    D.30807 = 0;
    return D.30807;
  }
  <D.30824>:
  D.30842 = oklass->ref_info_handle;
  if (D.30842 != 0) goto <D.30843>; else goto <D.30844>;
  <D.30843>:
  D.30845 = oklass->interface_bitmap;
  if (D.30845 == 0B) goto <D.30846>; else goto <D.30847>;
  <D.30846>:
  D.30807 = mono_reflection_call_is_assignable_to (oklass, klass);
  return D.30807;
  <D.30847>:
  <D.30844>:
  D.30845 = oklass->interface_bitmap;
  if (D.30845 == 0B) goto <D.30848>; else goto <D.30849>;
  <D.30848>:
  D.30807 = 0;
  return D.30807;
  <D.30849>:
  D.30850 = klass->interface_id;
  D.30851 = oklass->max_interface_id;
  if (D.30850 <= D.30851) goto <D.30852>; else goto <D.30853>;
  <D.30852>:
  D.30845 = oklass->interface_bitmap;
  D.30850 = klass->interface_id;
  D.30854 = D.30850 >> 3;
  D.30855 = (sizetype) D.30854;
  D.30856 = D.30845 + D.30855;
  D.30857 = *D.30856;
  D.30858 = (int) D.30857;
  D.30850 = klass->interface_id;
  D.30859 = (int) D.30850;
  D.30860 = D.30859 & 7;
  D.30861 = D.30858 >> D.30860;
  D.30862 = D.30861 & 1;
  if (D.30862 != 0) goto <D.30863>; else goto <D.30864>;
  <D.30863>:
  D.30807 = 1;
  return D.30807;
  <D.30864>:
  <D.30853>:
  D.30865 = mono_class_has_variant_generic_params (klass);
  if (D.30865 != 0) goto <D.30866>; else goto <D.30867>;
  <D.30866>:
  {
    struct MonoError error;
    int i;

    try
      {
        mono_class_setup_interfaces (oklass, &error);
        D.30868 = mono_error_ok (&error);
        if (D.30868 == 0) goto <D.30869>; else goto <D.30870>;
        <D.30869>:
        mono_error_cleanup (&error);
        D.30807 = 0;
        return D.30807;
        <D.30870>:
        i = 0;
        goto <D.21930>;
        <D.21929>:
        {
          struct MonoClass * iface;

          D.30871 = oklass->interfaces_packed;
          D.30872 = (long unsigned int) i;
          D.30873 = D.30872 * 8;
          D.30874 = D.30871 + D.30873;
          iface = *D.30874;
          D.30875 = mono_class_is_variant_compatible (klass, iface, 0);
          if (D.30875 != 0) goto <D.30876>; else goto <D.30877>;
          <D.30876>:
          D.30807 = 1;
          return D.30807;
          <D.30877>:
        }
        i = i + 1;
        <D.21930>:
        D.30878 = oklass->interface_offsets_count;
        D.30879 = (int) D.30878;
        if (D.30879 > i) goto <D.21929>; else goto <D.21931>;
        <D.21931>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.30867>:
  D.30807 = 0;
  return D.30807;
  <D.30817>:
  D.30794 = BIT_FIELD_REF <*klass, 64, 256>;
  D.30880 = D.30794 & 16777216;
  if (D.30880 != 0) goto <D.30881>; else goto <D.30882>;
  <D.30881>:
  D.30883 = mono_class_has_variant_generic_params (klass);
  if (D.30883 != 0) goto <D.30884>; else goto <D.30885>;
  <D.30884>:
  D.30886 = mono_class_is_variant_compatible (klass, oklass, 0);
  if (D.30886 != 0) goto <D.30887>; else goto <D.30888>;
  <D.30887>:
  D.30807 = 1;
  return D.30807;
  <D.30888>:
  <D.30885>:
  goto <D.30889>;
  <D.30882>:
  D.30890 = klass->rank;
  if (D.30890 != 0) goto <D.30891>; else goto <D.30892>;
  <D.30891>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.30893 = oklass->rank;
    D.30890 = klass->rank;
    if (D.30893 != D.30890) goto <D.30894>; else goto <D.30895>;
    <D.30894>:
    D.30807 = 0;
    return D.30807;
    <D.30895>:
    D.30825 = oklass->byval_arg.type;
    D.30821 = klass->byval_arg.type;
    if (D.30825 != D.30821) goto <D.30896>; else goto <D.30897>;
    <D.30896>:
    D.30807 = 0;
    return D.30807;
    <D.30897>:
    eclass = klass->cast_class;
    eoclass = oklass->cast_class;
    D.30898 = BIT_FIELD_REF <*eoclass, 64, 256>;
    D.30899 = D.30898 & 8;
    if (D.30899 != 0) goto <D.30900>; else goto <D.30901>;
    <D.30900>:
    D.30904 = mono_defaults.enum_class;
    if (D.30904 == eclass) goto <D.30902>; else goto <D.30905>;
    <D.30905>:
    D.30904 = mono_defaults.enum_class;
    D.30906 = D.30904->parent;
    if (D.30906 == eclass) goto <D.30902>; else goto <D.30907>;
    <D.30907>:
    D.30908 = mono_defaults.object_class;
    if (D.30908 == eclass) goto <D.30902>; else goto <D.30903>;
    <D.30902>:
    D.30807 = 0;
    return D.30807;
    <D.30903>:
    <D.30901>:
    D.30909 = klass->cast_class;
    D.30910 = oklass->cast_class;
    D.30807 = mono_class_is_assignable_from (D.30909, D.30910);
    return D.30807;
  }
  <D.30892>:
  D.30911 = mono_class_is_nullable (klass);
  if (D.30911 != 0) goto <D.30912>; else goto <D.30913>;
  <D.30912>:
  D.30914 = mono_class_is_nullable (oklass);
  if (D.30914 != 0) goto <D.30915>; else goto <D.30916>;
  <D.30915>:
  D.30909 = klass->cast_class;
  D.30910 = oklass->cast_class;
  D.30807 = mono_class_is_assignable_from (D.30909, D.30910);
  return D.30807;
  <D.30916>:
  D.30909 = klass->cast_class;
  D.30807 = mono_class_is_assignable_from (D.30909, oklass);
  return D.30807;
  <D.30913>:
  D.30908 = mono_defaults.object_class;
  if (D.30908 == klass) goto <D.30917>; else goto <D.30918>;
  <D.30917>:
  D.30807 = 1;
  return D.30807;
  <D.30918>:
  <D.30889>:
  D.30807 = mono_class_has_parent (oklass, klass);
  return D.30807;
}


mono_gparam_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.30924;
  unsigned char D.30925;
  unsigned char D.30926;
  struct MonoGenericParamInfo * iftmp.318;
  struct MonoGenericContainer * D.30930;
  struct MonoGenericParamInfo * iftmp.319;
  struct MonoGenericContainer * D.30935;
  short unsigned int D.30939;
  int D.30940;
  short unsigned int D.30941;
  int D.30942;
  struct MonoClass * * D.30943;
  struct MonoType * D.30948;
  int D.30949;
  unsigned int D.30951;
  unsigned int D.30952;
  unsigned char D.30954;
  int D.30957;
  struct MonoClass * D.30966;
  int D.30967;
  _Bool D.30968;
  int D.30969;
  int D.30970;
  _Bool D.30971;
  int D.30972;
  int D.30973;
  int D.30978;
  int D.30983;
  int D.30986;
  int D.30987;
  struct MonoClass * * D.30990;
  struct MonoType * D.30993;
  struct MonoType * D.30994;
  int D.30995;
  int D.31000;
  struct MonoType * D.31002;
  int D.31003;
  int D.31006;
  struct MonoClass * D.31010;
  int D.31013;
  struct MonoGenericParam * gparam;
  struct MonoGenericParam * ogparam;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  if (target == candidate) goto <D.30922>; else goto <D.30923>;
  <D.30922>:
  D.30924 = 1;
  return D.30924;
  <D.30923>:
  D.30925 = target->byval_arg.type;
  D.30926 = candidate->byval_arg.type;
  if (D.30925 != D.30926) goto <D.30927>; else goto <D.30928>;
  <D.30927>:
  D.30924 = 0;
  return D.30924;
  <D.30928>:
  gparam = target->byval_arg.data.generic_param;
  ogparam = candidate->byval_arg.data.generic_param;
  D.30930 = gparam->owner;
  if (D.30930 != 0B) goto <D.30931>; else goto <D.30932>;
  <D.30931>:
  iftmp.318 = &MEM[(struct MonoGenericParamFull *)gparam].info;
  goto <D.30933>;
  <D.30932>:
  iftmp.318 = 0B;
  <D.30933>:
  tinfo = iftmp.318;
  D.30935 = ogparam->owner;
  if (D.30935 != 0B) goto <D.30936>; else goto <D.30937>;
  <D.30936>:
  iftmp.319 = &MEM[(struct MonoGenericParamFull *)ogparam].info;
  goto <D.30938>;
  <D.30937>:
  iftmp.319 = 0B;
  <D.30938>:
  cinfo = iftmp.319;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.30939 = tinfo->flags;
  D.30940 = (int) D.30939;
  tmask = D.30940 & 28;
  D.30941 = cinfo->flags;
  D.30942 = (int) D.30941;
  cmask = D.30942 & 28;
  D.30943 = cinfo->constraints;
  if (D.30943 != 0B) goto <D.30944>; else goto <D.30945>;
  <D.30944>:
  candidate_class = cinfo->constraints;
  goto <D.21900>;
  <D.21899>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.30948 = &cc->byval_arg;
    D.30949 = mono_type_is_reference (D.30948);
    if (D.30949 != 0) goto <D.30950>; else goto <D.30946>;
    <D.30950>:
    D.30951 = cc->flags;
    D.30952 = D.30951 & 32;
    if (D.30952 == 0) goto <D.30953>; else goto <D.30946>;
    <D.30953>:
    D.30954 = cc->byval_arg.type;
    if (D.30954 != 19) goto <D.30955>; else goto <D.30946>;
    <D.30955>:
    D.30954 = cc->byval_arg.type;
    if (D.30954 != 30) goto <D.30956>; else goto <D.30946>;
    <D.30956>:
    class_constraint_satisfied = 1;
    goto <D.30947>;
    <D.30946>:
    D.30948 = &cc->byval_arg;
    D.30957 = mono_type_is_reference (D.30948);
    if (D.30957 == 0) goto <D.30958>; else goto <D.30959>;
    <D.30958>:
    D.30951 = cc->flags;
    D.30952 = D.30951 & 32;
    if (D.30952 == 0) goto <D.30960>; else goto <D.30961>;
    <D.30960>:
    D.30954 = cc->byval_arg.type;
    if (D.30954 != 19) goto <D.30962>; else goto <D.30963>;
    <D.30962>:
    D.30954 = cc->byval_arg.type;
    if (D.30954 != 30) goto <D.30964>; else goto <D.30965>;
    <D.30964>:
    valuetype_constraint_satisfied = 1;
    <D.30965>:
    <D.30963>:
    <D.30961>:
    <D.30959>:
    <D.30947>:
  }
  candidate_class = candidate_class + 8;
  <D.21900>:
  D.30966 = *candidate_class;
  if (D.30966 != 0B) goto <D.21899>; else goto <D.21901>;
  <D.21901>:
  <D.30945>:
  D.30967 = cmask & 4;
  D.30968 = D.30967 != 0;
  D.30969 = (int) D.30968;
  class_constraint_satisfied = D.30969 | class_constraint_satisfied;
  D.30970 = cmask & 8;
  D.30971 = D.30970 != 0;
  D.30972 = (int) D.30971;
  valuetype_constraint_satisfied = D.30972 | valuetype_constraint_satisfied;
  D.30973 = tmask & 4;
  if (D.30973 != 0) goto <D.30974>; else goto <D.30975>;
  <D.30974>:
  if (class_constraint_satisfied == 0) goto <D.30976>; else goto <D.30977>;
  <D.30976>:
  D.30924 = 0;
  return D.30924;
  <D.30977>:
  <D.30975>:
  D.30978 = tmask & 8;
  if (D.30978 != 0) goto <D.30979>; else goto <D.30980>;
  <D.30979>:
  if (valuetype_constraint_satisfied == 0) goto <D.30981>; else goto <D.30982>;
  <D.30981>:
  D.30924 = 0;
  return D.30924;
  <D.30982>:
  <D.30980>:
  D.30983 = tmask & 16;
  if (D.30983 != 0) goto <D.30984>; else goto <D.30985>;
  <D.30984>:
  D.30986 = cmask & 16;
  D.30987 = D.30986 | valuetype_constraint_satisfied;
  if (D.30987 == 0) goto <D.30988>; else goto <D.30989>;
  <D.30988>:
  D.30924 = 0;
  return D.30924;
  <D.30989>:
  <D.30985>:
  D.30990 = tinfo->constraints;
  if (D.30990 != 0B) goto <D.30991>; else goto <D.30992>;
  <D.30991>:
  {
    struct MonoClass * * target_class;

    target_class = tinfo->constraints;
    goto <D.21910>;
    <D.21909>:
    {
      struct MonoClass * tc;

      tc = *target_class;
      D.30993 = &tc->byval_arg;
      D.30994 = &candidate->byval_arg;
      D.30995 = mono_metadata_type_equal (D.30993, D.30994);
      if (D.30995 != 0) goto <D.30996>; else goto <D.30997>;
      <D.30996>:
      // predicted unlikely by continue predictor.
      goto <D.21904>;
      <D.30997>:
      D.30943 = cinfo->constraints;
      if (D.30943 == 0B) goto <D.30998>; else goto <D.30999>;
      <D.30998>:
      D.30924 = 0;
      return D.30924;
      <D.30999>:
      candidate_class = cinfo->constraints;
      goto <D.21908>;
      <D.21907>:
      {
        struct MonoClass * cc;

        cc = *candidate_class;
        D.31000 = mono_class_is_assignable_from (tc, cc);
        if (D.31000 != 0) goto <D.21906>; else goto <D.31001>;
        <D.31001>:
        D.31002 = &cc->byval_arg;
        D.31003 = mono_type_is_generic_argument (D.31002);
        if (D.31003 != 0) goto <D.31004>; else goto <D.31005>;
        <D.31004>:
        D.31006 = mono_gparam_is_assignable_from (target, cc);
        if (D.31006 != 0) goto <D.21906>; else goto <D.31007>;
        <D.31007>:
        <D.31005>:
      }
      candidate_class = candidate_class + 8;
      <D.21908>:
      D.30966 = *candidate_class;
      if (D.30966 != 0B) goto <D.21907>; else goto <D.21906>;
      <D.21906>:
      D.30966 = *candidate_class;
      if (D.30966 == 0B) goto <D.31008>; else goto <D.31009>;
      <D.31008>:
      D.30924 = 0;
      return D.30924;
      <D.31009>:
    }
    <D.21904>:
    target_class = target_class + 8;
    <D.21910>:
    D.31010 = *target_class;
    if (D.31010 != 0B) goto <D.21909>; else goto <D.21911>;
    <D.21911>:
  }
  <D.30992>:
  D.30943 = cinfo->constraints;
  if (D.30943 != 0B) goto <D.31011>; else goto <D.31012>;
  <D.31011>:
  candidate_class = cinfo->constraints;
  goto <D.21914>;
  <D.21913>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.31013 = mono_class_is_assignable_from (target, cc);
    if (D.31013 != 0) goto <D.31014>; else goto <D.31015>;
    <D.31014>:
    D.30924 = 1;
    return D.30924;
    <D.31015>:
  }
  candidate_class = candidate_class + 8;
  <D.21914>:
  D.30966 = *candidate_class;
  if (D.30966 != 0B) goto <D.21913>; else goto <D.21915>;
  <D.21915>:
  <D.31012>:
  D.30924 = 0;
  return D.30924;
}


mono_class_is_assignable_from_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.31019;
  struct MonoClass * D.31020;
  int D.31023;
  unsigned int D.31028;
  unsigned int D.31029;
  unsigned char D.31031;
  long unsigned int D.31033;
  long unsigned int D.31034;
  int D.31037;
  unsigned char D.31040;
  unsigned char D.31043;
  unsigned char D.31046;
  long unsigned int D.31049;
  long unsigned int D.31050;
  struct MonoClass * D.31055;
  struct MonoClass * D.31057;
  struct MonoClass * D.31059;
  struct MonoClass * D.31060;

  if (candidate == target) goto <D.31017>; else goto <D.31018>;
  <D.31017>:
  D.31019 = 1;
  return D.31019;
  <D.31018>:
  D.31020 = mono_defaults.object_class;
  if (D.31020 == target) goto <D.31021>; else goto <D.31022>;
  <D.31021>:
  D.31019 = 1;
  return D.31019;
  <D.31022>:
  D.31023 = mono_class_has_parent (candidate, target);
  if (D.31023 != 0) goto <D.31024>; else goto <D.31025>;
  <D.31024>:
  D.31019 = 1;
  return D.31019;
  <D.31025>:
  D.31028 = target->flags;
  D.31029 = D.31028 & 32;
  if (D.31029 != 0) goto <D.31026>; else goto <D.31030>;
  <D.31030>:
  D.31031 = target->byval_arg.type;
  if (D.31031 == 19) goto <D.31026>; else goto <D.31032>;
  <D.31032>:
  D.31031 = target->byval_arg.type;
  if (D.31031 == 30) goto <D.31026>; else goto <D.31027>;
  <D.31026>:
  D.31019 = mono_class_implement_interface_slow (target, candidate);
  return D.31019;
  <D.31027>:
  D.31033 = BIT_FIELD_REF <*target, 64, 256>;
  D.31034 = D.31033 & 16777216;
  if (D.31034 != 0) goto <D.31035>; else goto <D.31036>;
  <D.31035>:
  D.31037 = mono_class_has_variant_generic_params (target);
  if (D.31037 != 0) goto <D.31038>; else goto <D.31039>;
  <D.31038>:
  D.31019 = mono_class_is_variant_compatible (target, candidate, 0);
  return D.31019;
  <D.31039>:
  <D.31036>:
  D.31040 = target->rank;
  if (D.31040 != 0) goto <D.31041>; else goto <D.31042>;
  <D.31041>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.31040 = target->rank;
    D.31043 = candidate->rank;
    if (D.31040 != D.31043) goto <D.31044>; else goto <D.31045>;
    <D.31044>:
    D.31019 = 0;
    return D.31019;
    <D.31045>:
    D.31031 = target->byval_arg.type;
    D.31046 = candidate->byval_arg.type;
    if (D.31031 != D.31046) goto <D.31047>; else goto <D.31048>;
    <D.31047>:
    D.31019 = 0;
    return D.31019;
    <D.31048>:
    eclass = target->cast_class;
    eoclass = candidate->cast_class;
    D.31049 = BIT_FIELD_REF <*eoclass, 64, 256>;
    D.31050 = D.31049 & 8;
    if (D.31050 != 0) goto <D.31051>; else goto <D.31052>;
    <D.31051>:
    D.31055 = mono_defaults.enum_class;
    if (D.31055 == eclass) goto <D.31053>; else goto <D.31056>;
    <D.31056>:
    D.31055 = mono_defaults.enum_class;
    D.31057 = D.31055->parent;
    if (D.31057 == eclass) goto <D.31053>; else goto <D.31058>;
    <D.31058>:
    D.31020 = mono_defaults.object_class;
    if (D.31020 == eclass) goto <D.31053>; else goto <D.31054>;
    <D.31053>:
    D.31019 = 0;
    return D.31019;
    <D.31054>:
    <D.31052>:
    D.31059 = target->cast_class;
    D.31060 = candidate->cast_class;
    D.31019 = mono_class_is_assignable_from_slow (D.31059, D.31060);
    return D.31019;
  }
  <D.31042>:
  D.31019 = 0;
  return D.31019;
}


mono_class_implement_interface_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  unsigned int D.31066;
  unsigned int D.31067;
  unsigned char D.31069;
  int D.31071;
  gboolean D.31074;
  struct MonoImage * D.31078;
  long unsigned int D.31079;
  long unsigned int D.31080;
  long unsigned int D.31082;
  long unsigned int D.31083;
  struct MonoArray * D.31087;
  long unsigned int D.31090;
  unsigned int D.31091;
  unsigned int D.31092;
  long unsigned int D.31093;
  char * D.31094;
  struct MonoType * D.31095;
  int D.31102;
  int D.31105;
  int D.31108;
  struct MonoClass * * D.31111;
  long unsigned int D.31112;
  long unsigned int D.31113;
  struct MonoClass * * D.31114;
  struct MonoClass * D.31115;
  int D.31120;
  int D.31123;
  short unsigned int D.31126;
  int D.31127;
  struct MonoError error;
  int i;
  gboolean is_variant;

  try
    {
      is_variant = mono_class_has_variant_generic_params (target);
      if (is_variant != 0) goto <D.31064>; else goto <D.31065>;
      <D.31064>:
      D.31066 = candidate->flags;
      D.31067 = D.31066 & 32;
      if (D.31067 != 0) goto <D.31062>; else goto <D.31068>;
      <D.31068>:
      D.31069 = candidate->byval_arg.type;
      if (D.31069 == 19) goto <D.31062>; else goto <D.31070>;
      <D.31070>:
      D.31069 = candidate->byval_arg.type;
      if (D.31069 == 30) goto <D.31062>; else goto <D.31063>;
      <D.31062>:
      D.31071 = mono_class_is_variant_compatible_slow (target, candidate);
      if (D.31071 != 0) goto <D.31072>; else goto <D.31073>;
      <D.31072>:
      D.31074 = 1;
      return D.31074;
      <D.31073>:
      <D.31063>:
      <D.31065>:
      <D.21966>:
      if (candidate == target) goto <D.31075>; else goto <D.31076>;
      <D.31075>:
      D.31074 = 1;
      return D.31074;
      <D.31076>:
      D.31078 = candidate->image;
      D.31079 = BIT_FIELD_REF <*D.31078, 64, 192>;
      D.31080 = D.31079 & 34359738368;
      if (D.31080 != 0) goto <D.31081>; else goto <D.31077>;
      <D.31081>:
      D.31082 = BIT_FIELD_REF <*candidate, 64, 256>;
      D.31083 = D.31082 & 128;
      if (D.31083 == 0) goto <D.31084>; else goto <D.31077>;
      <D.31084>:
      {
        struct MonoReflectionTypeBuilder * tb;
        int j;

        tb = mono_class_get_ref_info (candidate);
        if (tb != 0B) goto <D.31085>; else goto <D.31086>;
        <D.31085>:
        D.31087 = tb->interfaces;
        if (D.31087 != 0B) goto <D.31088>; else goto <D.31089>;
        <D.31088>:
        D.31087 = tb->interfaces;
        D.31090 = mono_array_length (D.31087);
        D.31091 = (unsigned int) D.31090;
        D.31092 = D.31091 + 4294967295;
        j = (int) D.31092;
        goto <D.21961>;
        <D.21960>:
        {
          struct MonoReflectionType * iface;
          struct MonoClass * iface_class;

          D.31087 = tb->interfaces;
          D.31093 = (long unsigned int) j;
          D.31094 = mono_array_addr_with_size (D.31087, 8, D.31093);
          iface = MEM[(struct MonoReflectionType * *)D.31094];
          D.31095 = iface->type;
          if (D.31095 == 0B) goto <D.31096>; else goto <D.31097>;
          <D.31096>:
          // predicted unlikely by continue predictor.
          goto <D.21959>;
          <D.31097>:
          D.31095 = iface->type;
          iface_class = mono_class_from_mono_type (D.31095);
          if (iface_class == target) goto <D.31098>; else goto <D.31099>;
          <D.31098>:
          D.31074 = 1;
          return D.31074;
          <D.31099>:
          if (is_variant != 0) goto <D.31100>; else goto <D.31101>;
          <D.31100>:
          D.31102 = mono_class_is_variant_compatible_slow (target, iface_class);
          if (D.31102 != 0) goto <D.31103>; else goto <D.31104>;
          <D.31103>:
          D.31074 = 1;
          return D.31074;
          <D.31104>:
          <D.31101>:
          D.31105 = mono_class_implement_interface_slow (target, iface_class);
          if (D.31105 != 0) goto <D.31106>; else goto <D.31107>;
          <D.31106>:
          D.31074 = 1;
          return D.31074;
          <D.31107>:
        }
        <D.21959>:
        j = j + -1;
        <D.21961>:
        if (j >= 0) goto <D.21960>; else goto <D.21962>;
        <D.21962>:
        <D.31089>:
        <D.31086>:
      }
      goto <D.21965>;
      <D.31077>:
      mono_class_setup_interfaces (candidate, &error);
      D.31108 = mono_error_ok (&error);
      if (D.31108 == 0) goto <D.31109>; else goto <D.31110>;
      <D.31109>:
      mono_error_cleanup (&error);
      D.31074 = 0;
      return D.31074;
      <D.31110>:
      i = 0;
      goto <D.21964>;
      <D.21963>:
      D.31111 = candidate->interfaces;
      D.31112 = (long unsigned int) i;
      D.31113 = D.31112 * 8;
      D.31114 = D.31111 + D.31113;
      D.31115 = *D.31114;
      if (D.31115 == target) goto <D.31116>; else goto <D.31117>;
      <D.31116>:
      D.31074 = 1;
      return D.31074;
      <D.31117>:
      if (is_variant != 0) goto <D.31118>; else goto <D.31119>;
      <D.31118>:
      D.31111 = candidate->interfaces;
      D.31112 = (long unsigned int) i;
      D.31113 = D.31112 * 8;
      D.31114 = D.31111 + D.31113;
      D.31115 = *D.31114;
      D.31120 = mono_class_is_variant_compatible_slow (target, D.31115);
      if (D.31120 != 0) goto <D.31121>; else goto <D.31122>;
      <D.31121>:
      D.31074 = 1;
      return D.31074;
      <D.31122>:
      <D.31119>:
      D.31111 = candidate->interfaces;
      D.31112 = (long unsigned int) i;
      D.31113 = D.31112 * 8;
      D.31114 = D.31111 + D.31113;
      D.31115 = *D.31114;
      D.31123 = mono_class_implement_interface_slow (target, D.31115);
      if (D.31123 != 0) goto <D.31124>; else goto <D.31125>;
      <D.31124>:
      D.31074 = 1;
      return D.31074;
      <D.31125>:
      i = i + 1;
      <D.21964>:
      D.31126 = candidate->interface_count;
      D.31127 = (int) D.31126;
      if (D.31127 > i) goto <D.21963>; else goto <D.21965>;
      <D.21965>:
      candidate = candidate->parent;
      if (candidate != 0B) goto <D.21966>; else goto <D.21967>;
      <D.21967>:
      D.31074 = 0;
      return D.31074;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_variant_compatible_slow (struct MonoClass * klass, struct MonoClass * oklass)
{
  struct MonoClass * D.31132;
  gboolean D.31134;
  struct MonoGenericClass * D.31135;
  struct MonoGenericInst * D.31136;
  struct MonoGenericClass * D.31137;
  struct MonoGenericInst * D.31138;
  long unsigned int D.31139;
  long unsigned int D.31140;
  struct MonoType * * D.31141;
  struct MonoType * D.31142;
  struct MonoType * * D.31143;
  struct MonoType * D.31144;
  long unsigned int D.31145;
  long unsigned int D.31146;
  long unsigned int D.31147;
  long unsigned int D.31148;
  struct MonoGenericParamFull * D.31153;
  long unsigned int D.31154;
  struct MonoGenericParamFull * D.31155;
  short unsigned int D.31156;
  int D.31157;
  int D.31158;
  int D.31161;
  int D.31165;
  int D.31168;
  <unnamed-signed:31> D.31172;
  int D.31173;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  D.31132 = mono_class_get_generic_type_definition (oklass);
  if (D.31132 != klass_gtd) goto <D.31130>; else goto <D.31133>;
  <D.31133>:
  if (oklass == klass_gtd) goto <D.31130>; else goto <D.31131>;
  <D.31130>:
  D.31134 = 0;
  return D.31134;
  <D.31131>:
  D.31135 = klass->generic_class;
  D.31136 = D.31135->context.class_inst;
  klass_argv = &D.31136->type_argv[0];
  D.31137 = oklass->generic_class;
  D.31138 = D.31137->context.class_inst;
  oklass_argv = &D.31138->type_argv[0];
  j = 0;
  goto <D.21946>;
  <D.21945>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    D.31139 = (long unsigned int) j;
    D.31140 = D.31139 * 8;
    D.31141 = klass_argv + D.31140;
    D.31142 = *D.31141;
    param1_class = mono_class_from_mono_type (D.31142);
    D.31139 = (long unsigned int) j;
    D.31140 = D.31139 * 8;
    D.31143 = oklass_argv + D.31140;
    D.31144 = *D.31143;
    param2_class = mono_class_from_mono_type (D.31144);
    D.31145 = BIT_FIELD_REF <*param1_class, 64, 256>;
    D.31146 = BIT_FIELD_REF <*param2_class, 64, 256>;
    D.31147 = D.31145 ^ D.31146;
    D.31148 = D.31147 & 8;
    if (D.31148 != 0) goto <D.31149>; else goto <D.31150>;
    <D.31149>:
    D.31134 = 0;
    return D.31134;
    <D.31150>:
    if (param1_class != param2_class) goto <D.31151>; else goto <D.31152>;
    <D.31151>:
    D.31153 = container->type_params;
    D.31139 = (long unsigned int) j;
    D.31154 = D.31139 * 56;
    D.31155 = D.31153 + D.31154;
    D.31156 = D.31155->info.flags;
    D.31157 = (int) D.31156;
    D.31158 = D.31157 & 1;
    if (D.31158 != 0) goto <D.31159>; else goto <D.31160>;
    <D.31159>:
    D.31161 = mono_class_is_assignable_from_slow (param1_class, param2_class);
    if (D.31161 == 0) goto <D.31162>; else goto <D.31163>;
    <D.31162>:
    D.31134 = 0;
    return D.31134;
    <D.31163>:
    goto <D.31164>;
    <D.31160>:
    D.31153 = container->type_params;
    D.31139 = (long unsigned int) j;
    D.31154 = D.31139 * 56;
    D.31155 = D.31153 + D.31154;
    D.31156 = D.31155->info.flags;
    D.31157 = (int) D.31156;
    D.31165 = D.31157 & 2;
    if (D.31165 != 0) goto <D.31166>; else goto <D.31167>;
    <D.31166>:
    D.31168 = mono_class_is_assignable_from_slow (param2_class, param1_class);
    if (D.31168 == 0) goto <D.31169>; else goto <D.31170>;
    <D.31169>:
    D.31134 = 0;
    return D.31134;
    <D.31170>:
    goto <D.31171>;
    <D.31167>:
    D.31134 = 0;
    return D.31134;
    <D.31171>:
    <D.31164>:
    <D.31152>:
  }
  j = j + 1;
  <D.21946>:
  D.31172 = container->type_argc;
  D.31173 = (int) D.31172;
  if (D.31173 > j) goto <D.21945>; else goto <D.21947>;
  <D.21947>:
  D.31134 = 1;
  return D.31134;
}


mono_class_get_cctor (struct MonoClass * klass)
{
  struct MonoImage * D.31175;
  long unsigned int D.31176;
  long unsigned int D.31177;
  struct MonoMethod * D.31180;
  long unsigned int D.31181;
  long unsigned int D.31182;
  int D.31185;
  unsigned int D.31188;
  struct MonoGenericClass * D.31189;
  struct MonoMethod * * D.31192;
  struct MonoClass * D.31195;
  struct MonoMethod * D.31196;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.31175 = klass->image;
      D.31176 = BIT_FIELD_REF <*D.31175, 64, 192>;
      D.31177 = D.31176 & 34359738368;
      if (D.31177 != 0) goto <D.31178>; else goto <D.31179>;
      <D.31178>:
      D.31180 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.31180;
      <D.31179>:
      D.31181 = BIT_FIELD_REF <*klass, 64, 256>;
      D.31182 = D.31181 & 67108864;
      if (D.31182 == 0) goto <D.31183>; else goto <D.31184>;
      <D.31183>:
      D.31180 = 0B;
      return D.31180;
      <D.31184>:
      D.31185 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.31185 != 0) goto <D.31186>; else goto <D.31187>;
      <D.31186>:
      D.31175 = klass->image;
      D.31188 = cached_info.cctor_token;
      D.31180 = mono_get_method (D.31175, D.31188, klass);
      return D.31180;
      <D.31187>:
      D.31189 = klass->generic_class;
      if (D.31189 != 0B) goto <D.31190>; else goto <D.31191>;
      <D.31190>:
      D.31192 = klass->methods;
      if (D.31192 == 0B) goto <D.31193>; else goto <D.31194>;
      <D.31193>:
      D.31189 = klass->generic_class;
      D.31195 = D.31189->container_class;
      D.31196 = mono_class_get_cctor (D.31195);
      D.31180 = mono_class_get_inflated_method (klass, D.31196);
      return D.31180;
      <D.31194>:
      <D.31191>:
      D.31180 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.31180;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_get_finalizer (struct MonoClass * klass)
{
  long unsigned int D.31199;
  long unsigned int D.31200;
  int D.31203;
  struct MonoMethod * D.31206;
  int D.31207;
  struct MonoImage * D.31210;
  unsigned int D.31211;
  struct MonoMethod * * D.31212;
  int finalize_slot.320;
  long unsigned int D.31214;
  long unsigned int D.31215;
  struct MonoMethod * * D.31216;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.31199 = BIT_FIELD_REF <*klass, 64, 256>;
      D.31200 = D.31199 & 1;
      if (D.31200 == 0) goto <D.31201>; else goto <D.31202>;
      <D.31201>:
      mono_class_init (klass);
      <D.31202>:
      D.31203 = mono_class_has_finalizer (klass);
      if (D.31203 == 0) goto <D.31204>; else goto <D.31205>;
      <D.31204>:
      D.31206 = 0B;
      return D.31206;
      <D.31205>:
      D.31207 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.31207 != 0) goto <D.31208>; else goto <D.31209>;
      <D.31208>:
      D.31210 = cached_info.finalize_image;
      D.31211 = cached_info.finalize_token;
      D.31206 = mono_get_method (D.31210, D.31211, 0B);
      return D.31206;
      <D.31209>:
      mono_class_setup_vtable (klass);
      D.31212 = klass->vtable;
      finalize_slot.320 = finalize_slot;
      D.31214 = (long unsigned int) finalize_slot.320;
      D.31215 = D.31214 * 8;
      D.31216 = D.31212 + D.31215;
      D.31206 = *D.31216;
      return D.31206;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_needs_cctor_run (struct MonoClass * klass, struct MonoMethod * caller)
{
  gboolean D.31221;
  _Bool D.31222;
  struct MonoMethod * method;

  method = mono_class_get_cctor (klass);
  if (method != 0B) goto <D.31219>; else goto <D.31220>;
  <D.31219>:
  D.31222 = method != caller;
  D.31221 = (gboolean) D.31222;
  return D.31221;
  <D.31220>:
  D.31221 = 0;
  return D.31221;
}


mono_class_array_element_size (struct MonoClass * klass)
{
  unsigned char D.31224;
  int D.31225;
  int32_t D.31226;
  struct MonoClass * D.31227;
  long unsigned int D.31228;
  long unsigned int D.31229;
  int D.31232;
  unsigned int D.31233;
  unsigned int D.31234;
  struct MonoGenericClass * D.31235;
  struct MonoClass * D.31236;
  struct MonoType * type;
  void handle_enum = <<< error >>>;

  type = &klass->byval_arg;
  handle_enum:
  D.31224 = type->type;
  D.31225 = (int) D.31224;
  switch (D.31225) <default: <D.22017>, case 1: <D.22016>, case 2: <D.21994>, case 3: <D.21997>, case 4: <D.21992>, case 5: <D.21993>, case 6: <D.21995>, case 7: <D.21996>, case 8: <D.21998>, case 9: <D.21999>, case 10: <D.22011>, case 11: <D.22012>, case 12: <D.22000>, case 13: <D.22013>, case 14: <D.22005>, case 15: <D.22003>, case 17: <D.22014>, case 18: <D.22004>, case 19: <D.22009>, case 20: <D.22008>, case 21: <D.22015>, case 24: <D.22001>, case 25: <D.22002>, case 28: <D.22006>, case 29: <D.22007>, case 30: <D.22010>>
  <D.21992>:
  <D.21993>:
  <D.21994>:
  D.31226 = 1;
  return D.31226;
  <D.21995>:
  <D.21996>:
  <D.21997>:
  D.31226 = 2;
  return D.31226;
  <D.21998>:
  <D.21999>:
  <D.22000>:
  D.31226 = 4;
  return D.31226;
  <D.22001>:
  <D.22002>:
  <D.22003>:
  <D.22004>:
  <D.22005>:
  <D.22006>:
  <D.22007>:
  <D.22008>:
  <D.22009>:
  <D.22010>:
  D.31226 = 8;
  return D.31226;
  <D.22011>:
  <D.22012>:
  <D.22013>:
  D.31226 = 8;
  return D.31226;
  <D.22014>:
  D.31227 = type->data.klass;
  D.31228 = BIT_FIELD_REF <*D.31227, 64, 256>;
  D.31229 = D.31228 & 16;
  if (D.31229 != 0) goto <D.31230>; else goto <D.31231>;
  <D.31230>:
  D.31227 = type->data.klass;
  type = mono_class_enum_basetype (D.31227);
  klass = klass->element_class;
  goto handle_enum;
  <D.31231>:
  D.31232 = mono_class_instance_size (klass);
  D.31233 = (unsigned int) D.31232;
  D.31234 = D.31233 + 4294967280;
  D.31226 = (int32_t) D.31234;
  return D.31226;
  <D.22015>:
  D.31235 = type->data.generic_class;
  D.31236 = D.31235->container_class;
  type = &D.31236->byval_arg;
  goto handle_enum;
  <D.22016>:
  D.31226 = 0;
  return D.31226;
  <D.22017>:
  D.31224 = type->type;
  D.31225 = (int) D.31224;
  monoeg_g_log (0B, 4, "unknown type 0x%02x in mono_class_array_element_size", D.31225);
  <D.22018>:
  goto <D.22018>;
  D.31226 = -1;
  return D.31226;
}


mono_array_element_size (struct MonoClass * ac)
{
  unsigned char D.31238;
  _Bool D.31239;
  long int D.31240;
  long int D.31241;
  int32_t D.31244;

  D.31238 = ac->rank;
  D.31239 = D.31238 == 0;
  D.31240 = (long int) D.31239;
  D.31241 = __builtin_expect (D.31240, 0);
  if (D.31241 != 0) goto <D.31242>; else goto <D.31243>;
  <D.31242>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8238, "ac->rank");
  <D.31243>:
  D.31244 = ac->sizes.element_size;
  return D.31244;
}


mono_ldtoken (struct MonoImage * image, guint32 token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  long unsigned int D.31246;
  long unsigned int D.31247;
  struct MonoClass * tmp_handle_class.321;
  _Bool D.31251;
  long int D.31252;
  long int D.31253;
  struct MonoClass * D.31258;
  void * D.31261;
  unsigned int D.31262;
  struct MonoClass * D.31267;
  unsigned int D.31268;
  struct MonoClass * D.31273;
  unsigned int D.31274;
  struct MonoClass * D.31279;
  struct MonoTableInfo * D.31280;
  unsigned int D.31281;
  int D.31282;
  unsigned int D.31283;
  const char * sig.322;
  const char * sig.323;
  char D.31286;

  D.31246 = BIT_FIELD_REF <*image, 64, 192>;
  D.31247 = D.31246 & 34359738368;
  if (D.31247 != 0) goto <D.31248>; else goto <D.31249>;
  <D.31248>:
  {
    struct MonoClass * tmp_handle_class;
    void * obj;

    try
      {
        obj = mono_lookup_dynamic_token_class (image, token, 1, &tmp_handle_class, context);
        tmp_handle_class.321 = tmp_handle_class;
        D.31251 = tmp_handle_class.321 == 0B;
        D.31252 = (long int) D.31251;
        D.31253 = __builtin_expect (D.31252, 0);
        if (D.31253 != 0) goto <D.31254>; else goto <D.31255>;
        <D.31254>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8250, "tmp_handle_class");
        <D.31255>:
        if (handle_class != 0B) goto <D.31256>; else goto <D.31257>;
        <D.31256>:
        tmp_handle_class.321 = tmp_handle_class;
        *handle_class = tmp_handle_class.321;
        <D.31257>:
        D.31258 = mono_defaults.typehandle_class;
        tmp_handle_class.321 = tmp_handle_class;
        if (D.31258 == tmp_handle_class.321) goto <D.31259>; else goto <D.31260>;
        <D.31259>:
        D.31261 = &MEM[(struct MonoClass *)obj].byval_arg;
        return D.31261;
        <D.31260>:
        D.31261 = obj;
        return D.31261;
      }
    finally
      {
        tmp_handle_class = {CLOBBER};
      }
  }
  <D.31249>:
  D.31262 = token & 4278190080;
  switch (D.31262) <default: <D.22046>, case 16777216: <D.22031>, case 33554432: <D.22030>, case 67108864: <D.22034>, case 100663296: <D.22037>, case 167772160: <D.22040>, case 452984832: <D.22032>, case 721420288: <D.22038>>
  <D.22030>:
  <D.22031>:
  <D.22032>:
  {
    struct MonoType * type;

    if (handle_class != 0B) goto <D.31263>; else goto <D.31264>;
    <D.31263>:
    D.31258 = mono_defaults.typehandle_class;
    *handle_class = D.31258;
    <D.31264>:
    type = mono_type_get_full (image, token, context);
    if (type == 0B) goto <D.31265>; else goto <D.31266>;
    <D.31265>:
    D.31261 = 0B;
    return D.31261;
    <D.31266>:
    D.31267 = mono_class_from_mono_type (type);
    mono_class_init (D.31267);
    D.31261 = type;
    return D.31261;
  }
  <D.22034>:
  {
    struct MonoClass * class;
    guint32 type;

    D.31268 = token & 16777215;
    type = mono_metadata_typedef_from_field (image, D.31268);
    if (type == 0) goto <D.31269>; else goto <D.31270>;
    <D.31269>:
    D.31261 = 0B;
    return D.31261;
    <D.31270>:
    if (handle_class != 0B) goto <D.31271>; else goto <D.31272>;
    <D.31271>:
    D.31273 = mono_defaults.fieldhandle_class;
    *handle_class = D.31273;
    <D.31272>:
    D.31274 = type | 33554432;
    class = mono_class_get_full (image, D.31274, context);
    if (class == 0B) goto <D.31275>; else goto <D.31276>;
    <D.31275>:
    D.31261 = 0B;
    return D.31261;
    <D.31276>:
    mono_class_init (class);
    D.31261 = mono_class_get_field (class, token);
    return D.31261;
  }
  <D.22037>:
  <D.22038>:
  {
    struct MonoMethod * meth;

    meth = mono_get_method_full (image, token, 0B, context);
    if (handle_class != 0B) goto <D.31277>; else goto <D.31278>;
    <D.31277>:
    D.31279 = mono_defaults.methodhandle_class;
    *handle_class = D.31279;
    <D.31278>:
    D.31261 = meth;
    return D.31261;
  }
  <D.22040>:
  {
    guint32 cols[3];
    const char * sig;

    try
      {
        D.31280 = &image->tables[10];
        D.31268 = token & 16777215;
        D.31281 = D.31268 + 4294967295;
        D.31282 = (int) D.31281;
        mono_metadata_decode_row (D.31280, D.31282, &cols, 3);
        D.31283 = cols[2];
        sig.322 = mono_metadata_blob_heap (image, D.31283);
        sig = sig.322;
        sig.323 = sig;
        mono_metadata_decode_blob_size (sig.323, &sig);
        sig.323 = sig;
        D.31286 = *sig.323;
        if (D.31286 == 6) goto <D.31287>; else goto <D.31288>;
        <D.31287>:
        {
          struct MonoClass * klass;
          struct MonoClassField * field;

          try
            {
              field = mono_field_from_token (image, token, &klass, context);
              if (handle_class != 0B) goto <D.31289>; else goto <D.31290>;
              <D.31289>:
              D.31273 = mono_defaults.fieldhandle_class;
              *handle_class = D.31273;
              <D.31290>:
              D.31261 = field;
              return D.31261;
            }
          finally
            {
              klass = {CLOBBER};
            }
        }
        <D.31288>:
        {
          struct MonoMethod * meth;

          meth = mono_get_method_full (image, token, 0B, context);
          if (handle_class != 0B) goto <D.31291>; else goto <D.31292>;
          <D.31291>:
          D.31279 = mono_defaults.methodhandle_class;
          *handle_class = D.31279;
          <D.31292>:
          D.31261 = meth;
          return D.31261;
        }
      }
    finally
      {
        cols = {CLOBBER};
        sig = {CLOBBER};
      }
  }
  <D.22046>:
  monoeg_g_log (0B, 16, "Unknown token 0x%08x in ldtoken", token);
  goto <D.22047>;
  <D.22047>:
  D.31261 = 0B;
  return D.31261;
}


mono_install_lookup_dynamic_token (void * (*MonoLookupDynamicToken) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) func)
{
  lookup_dynamic = func;
}


mono_lookup_dynamic_token (struct MonoImage * image, guint32 token, struct MonoGenericContext * context)
{
  void * D.31297;
  void * (*<T1eff>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.324;
  struct MonoClass * handle_class;

  try
    {
      lookup_dynamic.324 = lookup_dynamic;
      D.31297 = lookup_dynamic.324 (image, token, 1, &handle_class, context);
      return D.31297;
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


mono_lookup_dynamic_token_class (struct MonoImage * image, guint32 token, gboolean valid_token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  void * D.31301;
  void * (*<T1eff>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.325;

  lookup_dynamic.325 = lookup_dynamic;
  D.31301 = lookup_dynamic.325 (image, token, valid_token, handle_class, context);
  return D.31301;
}


mono_install_get_cached_class_info (gboolean (*MonoGetCachedClassInfo) (struct MonoClass *, struct MonoCachedClassInfo *) func)
{
  get_cached_class_info = func;
}


mono_install_get_class_from_name (gboolean (*MonoGetClassFromName) (struct MonoImage *, const char *, const char *, struct MonoClass * *) func)
{
  get_class_from_name = func;
}


mono_class_get_image (struct MonoClass * klass)
{
  struct MonoImage * D.31304;

  D.31304 = klass->image;
  return D.31304;
}


mono_class_get_element_class (struct MonoClass * klass)
{
  struct MonoClass * D.31306;

  D.31306 = klass->element_class;
  return D.31306;
}


mono_class_is_valuetype (struct MonoClass * klass)
{
  mono_bool D.31308;
  <unnamed-unsigned:1> D.31309;

  D.31309 = klass->valuetype;
  D.31308 = (mono_bool) D.31309;
  return D.31308;
}


mono_class_is_enum (struct MonoClass * klass)
{
  mono_bool D.31311;
  <unnamed-unsigned:1> D.31312;

  D.31312 = klass->enumtype;
  D.31311 = (mono_bool) D.31312;
  return D.31311;
}


mono_class_enum_basetype (struct MonoClass * klass)
{
  struct MonoClass * D.31314;
  struct MonoType * D.31317;

  D.31314 = klass->element_class;
  if (D.31314 == klass) goto <D.31315>; else goto <D.31316>;
  <D.31315>:
  D.31317 = 0B;
  return D.31317;
  <D.31316>:
  D.31314 = klass->element_class;
  D.31317 = &D.31314->byval_arg;
  return D.31317;
}


mono_class_get_parent (struct MonoClass * klass)
{
  struct MonoClass * D.31319;

  D.31319 = klass->parent;
  return D.31319;
}


mono_class_get_nesting_type (struct MonoClass * klass)
{
  struct MonoClass * D.31321;

  D.31321 = klass->nested_in;
  return D.31321;
}


mono_class_get_rank (struct MonoClass * klass)
{
  int D.31323;
  unsigned char D.31324;

  D.31324 = klass->rank;
  D.31323 = (int) D.31324;
  return D.31323;
}


mono_class_get_flags (struct MonoClass * klass)
{
  uint32_t D.31326;

  D.31326 = klass->flags;
  return D.31326;
}


mono_class_get_name (struct MonoClass * klass)
{
  const char * D.31328;

  D.31328 = klass->name;
  return D.31328;
}


mono_class_get_namespace (struct MonoClass * klass)
{
  const char * D.31330;

  D.31330 = klass->name_space;
  return D.31330;
}


mono_class_get_type (struct MonoClass * klass)
{
  struct MonoType * D.31332;

  D.31332 = &klass->byval_arg;
  return D.31332;
}


mono_class_get_type_token (struct MonoClass * klass)
{
  uint32_t D.31334;

  D.31334 = klass->type_token;
  return D.31334;
}


mono_class_get_byref_type (struct MonoClass * klass)
{
  struct MonoType * D.31336;

  D.31336 = &klass->this_arg;
  return D.31336;
}


mono_class_num_fields (struct MonoClass * klass)
{
  int D.31338;
  unsigned int D.31339;

  D.31339 = klass->field.count;
  D.31338 = (int) D.31339;
  return D.31338;
}


mono_class_num_methods (struct MonoClass * klass)
{
  int D.31341;
  unsigned int D.31342;

  D.31342 = klass->method.count;
  D.31341 = (int) D.31342;
  return D.31341;
}


mono_class_num_properties (struct MonoClass * klass)
{
  int D.31344;
  struct MonoClassExt * D.31345;
  unsigned int D.31346;

  mono_class_setup_properties (klass);
  D.31345 = klass->ext;
  D.31346 = D.31345->property.count;
  D.31344 = (int) D.31346;
  return D.31344;
}


mono_class_setup_properties (struct MonoClass * class)
{
  struct MonoImage * D.31348;
  struct MonoClassExt * D.31349;
  struct MonoProperty * D.31352;
  struct MonoGenericClass * D.31359;
  unsigned char D.31362;
  gchar * D.31365;
  struct MonoClassExt * D.31366;
  unsigned int D.31367;
  unsigned int D.31368;
  unsigned int D.31369;
  int D.31370;
  long unsigned int D.31371;
  long unsigned int D.31372;
  struct MonoProperty * D.31373;
  struct MonoProperty * D.31374;
  struct MonoMethod * D.31375;
  struct MonoGenericContext * D.31378;
  struct MonoMethod * D.31379;
  struct MonoMethod * D.31380;
  struct MonoGenericContext * D.31383;
  struct MonoMethod * D.31384;
  unsigned int D.31386;
  unsigned int D.31387;
  unsigned int D.31388;
  unsigned int D.31389;
  unsigned int last.326;
  unsigned int first.327;
  unsigned int D.31392;
  unsigned char D.31395;
  unsigned int count.328;
  unsigned int count.329;
  unsigned int D.31400;
  int D.31401;
  int i.330;
  unsigned int first.331;
  unsigned int D.31404;
  long unsigned int D.31405;
  long unsigned int D.31406;
  struct MonoProperty * D.31407;
  unsigned int D.31408;
  unsigned int D.31409;
  const char * D.31410;
  int j.332;
  long unsigned int D.31412;
  long unsigned int D.31413;
  unsigned int D.31416;
  struct MonoMethod * * D.31418;
  unsigned int D.31419;
  unsigned int D.31420;
  unsigned int D.31421;
  long unsigned int D.31422;
  long unsigned int D.31423;
  struct MonoMethod * * D.31424;
  unsigned int endm.333;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  struct MonoProperty * properties;
  guint32 last;

  try
    {
      D.31348 = class->image;
      msemt = &D.31348->tables[24];
      D.31349 = class->ext;
      if (D.31349 != 0B) goto <D.31350>; else goto <D.31351>;
      <D.31350>:
      D.31349 = class->ext;
      D.31352 = D.31349->properties;
      if (D.31352 != 0B) goto <D.31353>; else goto <D.31354>;
      <D.31353>:
      return;
      <D.31354>:
      <D.31351>:
      mono_loader_lock ();
      D.31349 = class->ext;
      if (D.31349 != 0B) goto <D.31355>; else goto <D.31356>;
      <D.31355>:
      D.31349 = class->ext;
      D.31352 = D.31349->properties;
      if (D.31352 != 0B) goto <D.31357>; else goto <D.31358>;
      <D.31357>:
      mono_loader_unlock ();
      return;
      <D.31358>:
      <D.31356>:
      mono_class_alloc_ext (class);
      D.31359 = class->generic_class;
      if (D.31359 != 0B) goto <D.31360>; else goto <D.31361>;
      <D.31360>:
      {
        struct MonoClass * gklass;

        D.31359 = class->generic_class;
        gklass = D.31359->container_class;
        mono_class_init (gklass);
        mono_class_setup_properties (gklass);
        D.31362 = gklass->exception_type;
        if (D.31362 != 0) goto <D.31363>; else goto <D.31364>;
        <D.31363>:
        D.31365 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.31365);
        mono_loader_unlock ();
        return;
        <D.31364>:
        D.31349 = class->ext;
        D.31366 = gklass->ext;
        D.31349->property = D.31366->property;
        D.31349 = class->ext;
        D.31367 = D.31349->property.count;
        D.31368 = D.31367 + 1;
        D.31369 = D.31368 * 40;
        D.31370 = (int) D.31369;
        properties = mono_class_alloc0 (class, D.31370);
        i = 0;
        goto <D.19907>;
        <D.19906>:
        {
          struct MonoProperty * prop;

          D.31371 = (long unsigned int) i;
          D.31372 = D.31371 * 40;
          prop = properties + D.31372;
          D.31366 = gklass->ext;
          D.31373 = D.31366->properties;
          D.31371 = (long unsigned int) i;
          D.31372 = D.31371 * 40;
          D.31374 = D.31373 + D.31372;
          *prop = *D.31374;
          D.31375 = prop->get;
          if (D.31375 != 0B) goto <D.31376>; else goto <D.31377>;
          <D.31376>:
          D.31375 = prop->get;
          D.31378 = mono_class_get_context (class);
          D.31379 = mono_class_inflate_generic_method_full (D.31375, class, D.31378);
          prop->get = D.31379;
          <D.31377>:
          D.31380 = prop->set;
          if (D.31380 != 0B) goto <D.31381>; else goto <D.31382>;
          <D.31381>:
          D.31380 = prop->set;
          D.31383 = mono_class_get_context (class);
          D.31384 = mono_class_inflate_generic_method_full (D.31380, class, D.31383);
          prop->set = D.31384;
          <D.31382>:
          prop->parent = class;
        }
        i = i + 1;
        <D.19907>:
        D.31349 = class->ext;
        D.31367 = D.31349->property.count;
        if (D.31367 > i) goto <D.19906>; else goto <D.19908>;
        <D.19908>:
      }
      goto <D.31385>;
      <D.31361>:
      {
        int first;
        int count;

        D.31348 = class->image;
        D.31386 = class->type_token;
        D.31387 = D.31386 & 16777215;
        D.31388 = D.31387 + 4294967295;
        D.31389 = mono_metadata_properties_from_typedef (D.31348, D.31388, &last);
        first = (int) D.31389;
        last.326 = last;
        first.327 = (unsigned int) first;
        D.31392 = last.326 - first.327;
        count = (int) D.31392;
        if (count != 0) goto <D.31393>; else goto <D.31394>;
        <D.31393>:
        mono_class_setup_methods (class);
        D.31395 = class->exception_type;
        if (D.31395 != 0) goto <D.31396>; else goto <D.31397>;
        <D.31396>:
        mono_loader_unlock ();
        return;
        <D.31397>:
        <D.31394>:
        D.31349 = class->ext;
        first.327 = (unsigned int) first;
        D.31349->property.first = first.327;
        D.31349 = class->ext;
        count.328 = (unsigned int) count;
        D.31349->property.count = count.328;
        count.329 = (unsigned int) count;
        D.31400 = count.329 * 40;
        D.31401 = (int) D.31400;
        properties = mono_class_alloc0 (class, D.31401);
        i = (guint) first;
        goto <D.19920>;
        <D.19919>:
        D.31348 = class->image;
        i.330 = (int) i;
        mono_metadata_decode_table_row (D.31348, 23, i.330, &cols, 3);
        first.331 = (unsigned int) first;
        D.31404 = i - first.331;
        D.31405 = (long unsigned int) D.31404;
        D.31406 = D.31405 * 40;
        D.31407 = properties + D.31406;
        D.31407->parent = class;
        first.331 = (unsigned int) first;
        D.31404 = i - first.331;
        D.31405 = (long unsigned int) D.31404;
        D.31406 = D.31405 * 40;
        D.31407 = properties + D.31406;
        D.31408 = cols[0];
        D.31407->attrs = D.31408;
        first.331 = (unsigned int) first;
        D.31404 = i - first.331;
        D.31405 = (long unsigned int) D.31404;
        D.31406 = D.31405 * 40;
        D.31407 = properties + D.31406;
        D.31348 = class->image;
        D.31409 = cols[1];
        D.31410 = mono_metadata_string_heap (D.31348, D.31409);
        D.31407->name = D.31410;
        D.31348 = class->image;
        startm = mono_metadata_methods_from_property (D.31348, i, &endm);
        j = startm;
        goto <D.19917>;
        <D.19916>:
        {
          struct MonoMethod * method;

          j.332 = (int) j;
          mono_metadata_decode_row (msemt, j.332, &cols, 3);
          D.31348 = class->image;
          D.31412 = BIT_FIELD_REF <*D.31348, 64, 192>;
          D.31413 = D.31412 & 137438953472;
          if (D.31413 != 0) goto <D.31414>; else goto <D.31415>;
          <D.31414>:
          D.31348 = class->image;
          D.31409 = cols[1];
          D.31416 = D.31409 | 100663296;
          method = mono_get_method (D.31348, D.31416, class);
          goto <D.31417>;
          <D.31415>:
          D.31418 = class->methods;
          D.31409 = cols[1];
          D.31419 = class->method.first;
          D.31420 = D.31409 - D.31419;
          D.31421 = D.31420 + 4294967295;
          D.31422 = (long unsigned int) D.31421;
          D.31423 = D.31422 * 8;
          D.31424 = D.31418 + D.31423;
          method = *D.31424;
          <D.31417>:
          D.31408 = cols[0];
          switch (D.31408) <default: <D.19915>, case 1: <D.19912>, case 2: <D.19914>>
          <D.19912>:
          first.331 = (unsigned int) first;
          D.31404 = i - first.331;
          D.31405 = (long unsigned int) D.31404;
          D.31406 = D.31405 * 40;
          D.31407 = properties + D.31406;
          D.31407->set = method;
          goto <D.19913>;
          <D.19914>:
          first.331 = (unsigned int) first;
          D.31404 = i - first.331;
          D.31405 = (long unsigned int) D.31404;
          D.31406 = D.31405 * 40;
          D.31407 = properties + D.31406;
          D.31407->get = method;
          goto <D.19913>;
          <D.19915>:
          goto <D.19913>;
          <D.19913>:
        }
        j = j + 1;
        <D.19917>:
        endm.333 = endm;
        if (j < endm.333) goto <D.19916>; else goto <D.19918>;
        <D.19918>:
        i = i + 1;
        <D.19920>:
        last.326 = last;
        if (i < last.326) goto <D.19919>; else goto <D.19921>;
        <D.19921>:
      }
      <D.31385>:
      mono_memory_barrier ();
      D.31349 = class->ext;
      D.31349->properties = properties;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


mono_class_num_events (struct MonoClass * klass)
{
  int D.31430;
  struct MonoClassExt * D.31431;
  unsigned int D.31432;

  mono_class_setup_events (klass);
  D.31431 = klass->ext;
  D.31432 = D.31431->event.count;
  D.31430 = (int) D.31432;
  return D.31430;
}


mono_class_setup_events (struct MonoClass * class)
{
  struct MonoImage * D.31434;
  struct MonoClassExt * D.31435;
  struct MonoEvent * D.31438;
  struct MonoGenericClass * D.31445;
  unsigned char D.31448;
  gchar * D.31451;
  struct MonoClassExt * D.31452;
  unsigned int D.31453;
  unsigned int D.31454;
  int D.31455;
  void * D.31456;
  long unsigned int D.31459;
  long unsigned int D.31460;
  struct MonoEvent * D.31461;
  const char * D.31462;
  struct MonoMethod * iftmp.334;
  struct MonoMethod * D.31464;
  struct MonoMethod * iftmp.335;
  struct MonoMethod * D.31469;
  struct MonoMethod * iftmp.336;
  struct MonoMethod * D.31474;
  struct MonoMethod * * iftmp.337;
  struct MonoMethod * * D.31479;
  unsigned int D.31483;
  unsigned int D.31484;
  unsigned int D.31485;
  unsigned int D.31486;
  unsigned int D.31487;
  unsigned int last.338;
  unsigned int first.339;
  unsigned int D.31490;
  unsigned char D.31493;
  gchar * D.31496;
  unsigned int count.340;
  unsigned int first.341;
  unsigned int D.31499;
  long unsigned int D.31500;
  long unsigned int D.31501;
  int i.342;
  unsigned int D.31503;
  unsigned int D.31504;
  const char * D.31505;
  int j.343;
  long unsigned int D.31507;
  long unsigned int D.31508;
  unsigned int D.31511;
  struct MonoMethod * * D.31513;
  unsigned int D.31514;
  unsigned int D.31515;
  unsigned int D.31516;
  long unsigned int D.31517;
  long unsigned int D.31518;
  struct MonoMethod * * D.31519;
  struct MonoMethod * * D.31520;
  void * D.31523;
  long unsigned int D.31525;
  long unsigned int D.31526;
  struct MonoMethod * * D.31527;
  struct MonoMethod * D.31528;
  int D.31529;
  long unsigned int D.31530;
  long unsigned int D.31531;
  void * D.31532;
  sizetype D.31533;
  sizetype D.31534;
  sizetype D.31535;
  struct MonoMethod * * D.31536;
  unsigned int endm.344;
  int first;
  int count;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  guint32 last;
  struct MonoEvent * events;

  try
    {
      D.31434 = class->image;
      msemt = &D.31434->tables[24];
      D.31435 = class->ext;
      if (D.31435 != 0B) goto <D.31436>; else goto <D.31437>;
      <D.31436>:
      D.31435 = class->ext;
      D.31438 = D.31435->events;
      if (D.31438 != 0B) goto <D.31439>; else goto <D.31440>;
      <D.31439>:
      return;
      <D.31440>:
      <D.31437>:
      mono_loader_lock ();
      D.31435 = class->ext;
      if (D.31435 != 0B) goto <D.31441>; else goto <D.31442>;
      <D.31441>:
      D.31435 = class->ext;
      D.31438 = D.31435->events;
      if (D.31438 != 0B) goto <D.31443>; else goto <D.31444>;
      <D.31443>:
      mono_loader_unlock ();
      return;
      <D.31444>:
      <D.31442>:
      mono_class_alloc_ext (class);
      D.31445 = class->generic_class;
      if (D.31445 != 0B) goto <D.31446>; else goto <D.31447>;
      <D.31446>:
      {
        struct MonoClass * gklass;
        struct MonoGenericContext * context;

        D.31445 = class->generic_class;
        gklass = D.31445->container_class;
        mono_class_setup_events (gklass);
        D.31448 = gklass->exception_type;
        if (D.31448 != 0) goto <D.31449>; else goto <D.31450>;
        <D.31449>:
        D.31451 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.31451);
        mono_loader_unlock ();
        return;
        <D.31450>:
        D.31435 = class->ext;
        D.31452 = gklass->ext;
        D.31435->event = D.31452->event;
        D.31435 = class->ext;
        D.31435 = class->ext;
        D.31453 = D.31435->event.count;
        D.31454 = D.31453 * 56;
        D.31455 = (int) D.31454;
        D.31456 = mono_class_alloc0 (class, D.31455);
        D.31435->events = D.31456;
        D.31435 = class->ext;
        D.31453 = D.31435->event.count;
        if (D.31453 != 0) goto <D.31457>; else goto <D.31458>;
        <D.31457>:
        context = mono_class_get_context (class);
        <D.31458>:
        i = 0;
        goto <D.19954>;
        <D.19953>:
        {
          struct MonoEvent * event;
          struct MonoEvent * gevent;

          D.31435 = class->ext;
          D.31438 = D.31435->events;
          D.31459 = (long unsigned int) i;
          D.31460 = D.31459 * 56;
          event = D.31438 + D.31460;
          D.31452 = gklass->ext;
          D.31461 = D.31452->events;
          D.31459 = (long unsigned int) i;
          D.31460 = D.31459 * 56;
          gevent = D.31461 + D.31460;
          event->parent = class;
          D.31462 = gevent->name;
          event->name = D.31462;
          D.31464 = gevent->add;
          if (D.31464 != 0B) goto <D.31465>; else goto <D.31466>;
          <D.31465>:
          D.31464 = gevent->add;
          iftmp.334 = mono_class_inflate_generic_method_full (D.31464, class, context);
          goto <D.31467>;
          <D.31466>:
          iftmp.334 = 0B;
          <D.31467>:
          event->add = iftmp.334;
          D.31469 = gevent->remove;
          if (D.31469 != 0B) goto <D.31470>; else goto <D.31471>;
          <D.31470>:
          D.31469 = gevent->remove;
          iftmp.335 = mono_class_inflate_generic_method_full (D.31469, class, context);
          goto <D.31472>;
          <D.31471>:
          iftmp.335 = 0B;
          <D.31472>:
          event->remove = iftmp.335;
          D.31474 = gevent->raise;
          if (D.31474 != 0B) goto <D.31475>; else goto <D.31476>;
          <D.31475>:
          D.31474 = gevent->raise;
          iftmp.336 = mono_class_inflate_generic_method_full (D.31474, class, context);
          goto <D.31477>;
          <D.31476>:
          iftmp.336 = 0B;
          <D.31477>:
          event->raise = iftmp.336;
          D.31479 = gevent->other;
          if (D.31479 != 0B) goto <D.31480>; else goto <D.31481>;
          <D.31480>:
          D.31479 = gevent->other;
          iftmp.337 = inflate_method_listz (D.31479, class, context);
          goto <D.31482>;
          <D.31481>:
          iftmp.337 = 0B;
          <D.31482>:
          event->other = iftmp.337;
          D.31483 = gevent->attrs;
          event->attrs = D.31483;
        }
        i = i + 1;
        <D.19954>:
        D.31435 = class->ext;
        D.31453 = D.31435->event.count;
        if (D.31453 > i) goto <D.19953>; else goto <D.19955>;
        <D.19955>:
        mono_loader_unlock ();
        return;
      }
      <D.31447>:
      D.31434 = class->image;
      D.31484 = class->type_token;
      D.31485 = D.31484 & 16777215;
      D.31486 = D.31485 + 4294967295;
      D.31487 = mono_metadata_events_from_typedef (D.31434, D.31486, &last);
      first = (int) D.31487;
      last.338 = last;
      first.339 = (unsigned int) first;
      D.31490 = last.338 - first.339;
      count = (int) D.31490;
      if (count != 0) goto <D.31491>; else goto <D.31492>;
      <D.31491>:
      mono_class_setup_methods (class);
      D.31493 = class->exception_type;
      if (D.31493 != 0) goto <D.31494>; else goto <D.31495>;
      <D.31494>:
      D.31496 = monoeg_strdup ("Generic type definition failed to load");
      mono_class_set_failure (class, 7, D.31496);
      mono_loader_unlock ();
      return;
      <D.31495>:
      <D.31492>:
      D.31435 = class->ext;
      first.339 = (unsigned int) first;
      D.31435->event.first = first.339;
      D.31435 = class->ext;
      count.340 = (unsigned int) count;
      D.31435->event.count = count.340;
      D.31435 = class->ext;
      D.31453 = D.31435->event.count;
      D.31454 = D.31453 * 56;
      D.31455 = (int) D.31454;
      events = mono_class_alloc0 (class, D.31455);
      i = (guint) first;
      goto <D.19972>;
      <D.19971>:
      {
        struct MonoEvent * event;

        first.341 = (unsigned int) first;
        D.31499 = i - first.341;
        D.31500 = (long unsigned int) D.31499;
        D.31501 = D.31500 * 56;
        event = events + D.31501;
        D.31434 = class->image;
        i.342 = (int) i;
        mono_metadata_decode_table_row (D.31434, 20, i.342, &cols, 3);
        event->parent = class;
        D.31503 = cols[0];
        event->attrs = D.31503;
        D.31434 = class->image;
        D.31504 = cols[1];
        D.31505 = mono_metadata_string_heap (D.31434, D.31504);
        event->name = D.31505;
        D.31434 = class->image;
        startm = mono_metadata_methods_from_event (D.31434, i, &endm);
        j = startm;
        goto <D.19969>;
        <D.19968>:
        {
          struct MonoMethod * method;

          j.343 = (int) j;
          mono_metadata_decode_row (msemt, j.343, &cols, 3);
          D.31434 = class->image;
          D.31507 = BIT_FIELD_REF <*D.31434, 64, 192>;
          D.31508 = D.31507 & 137438953472;
          if (D.31508 != 0) goto <D.31509>; else goto <D.31510>;
          <D.31509>:
          D.31434 = class->image;
          D.31504 = cols[1];
          D.31511 = D.31504 | 100663296;
          method = mono_get_method (D.31434, D.31511, class);
          goto <D.31512>;
          <D.31510>:
          D.31513 = class->methods;
          D.31504 = cols[1];
          D.31514 = class->method.first;
          D.31515 = D.31504 - D.31514;
          D.31516 = D.31515 + 4294967295;
          D.31517 = (long unsigned int) D.31516;
          D.31518 = D.31517 * 8;
          D.31519 = D.31513 + D.31518;
          method = *D.31519;
          <D.31512>:
          D.31503 = cols[0];
          switch (D.31503) <default: <D.19967>, case 4: <D.19962>, case 8: <D.19958>, case 16: <D.19960>, case 32: <D.19961>>
          <D.19958>:
          event->add = method;
          goto <D.19959>;
          <D.19960>:
          event->remove = method;
          goto <D.19959>;
          <D.19961>:
          event->raise = method;
          goto <D.19959>;
          <D.19962>:
          {
            int n;

            n = 0;
            D.31520 = event->other;
            if (D.31520 == 0B) goto <D.31521>; else goto <D.31522>;
            <D.31521>:
            D.31523 = monoeg_malloc0 (16);
            event->other = D.31523;
            goto <D.31524>;
            <D.31522>:
            goto <D.19965>;
            <D.19964>:
            n = n + 1;
            <D.19965>:
            D.31520 = event->other;
            D.31525 = (long unsigned int) n;
            D.31526 = D.31525 * 8;
            D.31527 = D.31520 + D.31526;
            D.31528 = *D.31527;
            if (D.31528 != 0B) goto <D.19964>; else goto <D.19966>;
            <D.19966>:
            D.31520 = event->other;
            D.31529 = n + 2;
            D.31530 = (long unsigned int) D.31529;
            D.31531 = D.31530 * 8;
            D.31532 = monoeg_realloc (D.31520, D.31531);
            event->other = D.31532;
            <D.31524>:
            D.31520 = event->other;
            D.31525 = (long unsigned int) n;
            D.31526 = D.31525 * 8;
            D.31527 = D.31520 + D.31526;
            *D.31527 = method;
            D.31520 = event->other;
            D.31533 = (sizetype) n;
            D.31534 = D.31533 + 1;
            D.31535 = D.31534 * 8;
            D.31536 = D.31520 + D.31535;
            *D.31536 = 0B;
            goto <D.19959>;
          }
          <D.19967>:
          goto <D.19959>;
          <D.19959>:
        }
        j = j + 1;
        <D.19969>:
        endm.344 = endm;
        if (j < endm.344) goto <D.19968>; else goto <D.19970>;
        <D.19970>:
      }
      i = i + 1;
      <D.19972>:
      last.338 = last;
      if (i < last.338) goto <D.19971>; else goto <D.19973>;
      <D.19973>:
      mono_memory_barrier ();
      D.31435 = class->ext;
      D.31435->events = events;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


inflate_method_listz (struct MonoMethod * * methods, struct MonoClass * class, struct MonoGenericContext * context)
{
  struct MonoMethod * D.31542;
  int D.31543;
  long unsigned int D.31544;
  long unsigned int D.31545;
  long unsigned int D.31546;
  long unsigned int D.31547;
  struct MonoMethod * * D.31548;
  struct MonoMethod * D.31549;
  struct MonoMethod * * D.31550;
  struct MonoMethod * * om;
  struct MonoMethod * * retval;
  int count;

  om = methods;
  count = 0;
  goto <D.19931>;
  <D.19930>:
  om = om + 8;
  count = count + 1;
  <D.19931>:
  D.31542 = *om;
  if (D.31542 != 0B) goto <D.19930>; else goto <D.19932>;
  <D.19932>:
  D.31543 = count + 1;
  D.31544 = (long unsigned int) D.31543;
  D.31545 = D.31544 * 8;
  retval = monoeg_malloc0 (D.31545);
  count = 0;
  om = methods;
  count = 0;
  goto <D.19934>;
  <D.19933>:
  D.31546 = (long unsigned int) count;
  D.31547 = D.31546 * 8;
  D.31548 = retval + D.31547;
  D.31542 = *om;
  D.31549 = mono_class_inflate_generic_method_full (D.31542, class, context);
  *D.31548 = D.31549;
  om = om + 8;
  count = count + 1;
  <D.19934>:
  D.31542 = *om;
  if (D.31542 != 0B) goto <D.19933>; else goto <D.19935>;
  <D.19935>:
  D.31550 = retval;
  return D.31550;
}


mono_class_get_fields (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.31554;
  void * D.31555;
  unsigned char D.31558;
  unsigned int D.31561;
  struct MonoClassField * D.31564;
  long unsigned int D.31565;
  long unsigned int D.31566;
  struct MonoClassField * D.31567;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.31552>; else goto <D.31553>;
  <D.31552>:
  D.31554 = 0B;
  return D.31554;
  <D.31553>:
  D.31555 = *iter;
  if (D.31555 == 0B) goto <D.31556>; else goto <D.31557>;
  <D.31556>:
  mono_class_setup_fields_locking (klass);
  D.31558 = klass->exception_type;
  if (D.31558 != 0) goto <D.31559>; else goto <D.31560>;
  <D.31559>:
  D.31554 = 0B;
  return D.31554;
  <D.31560>:
  D.31561 = klass->field.count;
  if (D.31561 != 0) goto <D.31562>; else goto <D.31563>;
  <D.31562>:
  D.31564 = klass->fields;
  *iter = D.31564;
  D.31554 = *iter;
  return D.31554;
  <D.31563>:
  D.31554 = 0B;
  return D.31554;
  <D.31557>:
  field = *iter;
  field = field + 32;
  D.31564 = klass->fields;
  D.31561 = klass->field.count;
  D.31565 = (long unsigned int) D.31561;
  D.31566 = D.31565 * 32;
  D.31567 = D.31564 + D.31566;
  if (D.31567 > field) goto <D.31568>; else goto <D.31569>;
  <D.31568>:
  *iter = field;
  D.31554 = *iter;
  return D.31554;
  <D.31569>:
  D.31554 = 0B;
  return D.31554;
}


mono_class_get_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.31573;
  void * D.31574;
  struct MonoMethod * * D.31577;
  unsigned int D.31580;
  long unsigned int D.31583;
  long unsigned int D.31584;
  struct MonoMethod * * D.31585;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.31571>; else goto <D.31572>;
  <D.31571>:
  D.31573 = 0B;
  return D.31573;
  <D.31572>:
  D.31574 = *iter;
  if (D.31574 == 0B) goto <D.31575>; else goto <D.31576>;
  <D.31575>:
  mono_class_setup_methods (klass);
  D.31577 = klass->methods;
  if (D.31577 == 0B) goto <D.31578>; else goto <D.31579>;
  <D.31578>:
  D.31573 = 0B;
  return D.31573;
  <D.31579>:
  D.31580 = klass->method.count;
  if (D.31580 != 0) goto <D.31581>; else goto <D.31582>;
  <D.31581>:
  D.31577 = klass->methods;
  *iter = D.31577;
  D.31577 = klass->methods;
  D.31573 = *D.31577;
  return D.31573;
  <D.31582>:
  D.31573 = 0B;
  return D.31573;
  <D.31576>:
  method = *iter;
  method = method + 8;
  D.31577 = klass->methods;
  D.31580 = klass->method.count;
  D.31583 = (long unsigned int) D.31580;
  D.31584 = D.31583 * 8;
  D.31585 = D.31577 + D.31584;
  if (D.31585 > method) goto <D.31586>; else goto <D.31587>;
  <D.31586>:
  *iter = method;
  D.31573 = *method;
  return D.31573;
  <D.31587>:
  D.31573 = 0B;
  return D.31573;
}


mono_class_get_properties (struct MonoClass * klass, void * * iter)
{
  struct MonoProperty * D.31591;
  void * D.31592;
  struct MonoClassExt * D.31595;
  unsigned int D.31596;
  struct MonoProperty * D.31599;
  long unsigned int D.31600;
  long unsigned int D.31601;
  struct MonoProperty * D.31602;
  struct MonoProperty * property;

  if (iter == 0B) goto <D.31589>; else goto <D.31590>;
  <D.31589>:
  D.31591 = 0B;
  return D.31591;
  <D.31590>:
  D.31592 = *iter;
  if (D.31592 == 0B) goto <D.31593>; else goto <D.31594>;
  <D.31593>:
  mono_class_setup_properties (klass);
  D.31595 = klass->ext;
  D.31596 = D.31595->property.count;
  if (D.31596 != 0) goto <D.31597>; else goto <D.31598>;
  <D.31597>:
  D.31595 = klass->ext;
  D.31599 = D.31595->properties;
  *iter = D.31599;
  D.31591 = *iter;
  return D.31591;
  <D.31598>:
  D.31591 = 0B;
  return D.31591;
  <D.31594>:
  property = *iter;
  property = property + 40;
  D.31595 = klass->ext;
  D.31599 = D.31595->properties;
  D.31595 = klass->ext;
  D.31596 = D.31595->property.count;
  D.31600 = (long unsigned int) D.31596;
  D.31601 = D.31600 * 40;
  D.31602 = D.31599 + D.31601;
  if (D.31602 > property) goto <D.31603>; else goto <D.31604>;
  <D.31603>:
  *iter = property;
  D.31591 = *iter;
  return D.31591;
  <D.31604>:
  D.31591 = 0B;
  return D.31591;
}


mono_class_get_events (struct MonoClass * klass, void * * iter)
{
  struct MonoEvent * D.31608;
  void * D.31609;
  struct MonoClassExt * D.31612;
  unsigned int D.31613;
  struct MonoEvent * D.31616;
  long unsigned int D.31617;
  long unsigned int D.31618;
  struct MonoEvent * D.31619;
  struct MonoEvent * event;

  if (iter == 0B) goto <D.31606>; else goto <D.31607>;
  <D.31606>:
  D.31608 = 0B;
  return D.31608;
  <D.31607>:
  D.31609 = *iter;
  if (D.31609 == 0B) goto <D.31610>; else goto <D.31611>;
  <D.31610>:
  mono_class_setup_events (klass);
  D.31612 = klass->ext;
  D.31613 = D.31612->event.count;
  if (D.31613 != 0) goto <D.31614>; else goto <D.31615>;
  <D.31614>:
  D.31612 = klass->ext;
  D.31616 = D.31612->events;
  *iter = D.31616;
  D.31608 = *iter;
  return D.31608;
  <D.31615>:
  D.31608 = 0B;
  return D.31608;
  <D.31611>:
  event = *iter;
  event = event + 56;
  D.31612 = klass->ext;
  D.31616 = D.31612->events;
  D.31612 = klass->ext;
  D.31613 = D.31612->event.count;
  D.31617 = (long unsigned int) D.31613;
  D.31618 = D.31617 * 56;
  D.31619 = D.31616 + D.31618;
  if (D.31619 > event) goto <D.31620>; else goto <D.31621>;
  <D.31620>:
  *iter = event;
  D.31608 = *iter;
  return D.31608;
  <D.31621>:
  D.31608 = 0B;
  return D.31608;
}


mono_class_get_interfaces (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.31625;
  void * D.31626;
  long unsigned int D.31629;
  long unsigned int D.31630;
  long unsigned int D.31633;
  int D.31636;
  short unsigned int D.31639;
  struct MonoClass * * D.31642;
  long unsigned int D.31643;
  long unsigned int D.31644;
  struct MonoClass * * D.31645;
  struct MonoError error;
  struct MonoClass * * iface;

  try
    {
      if (iter == 0B) goto <D.31623>; else goto <D.31624>;
      <D.31623>:
      D.31625 = 0B;
      return D.31625;
      <D.31624>:
      D.31626 = *iter;
      if (D.31626 == 0B) goto <D.31627>; else goto <D.31628>;
      <D.31627>:
      D.31629 = BIT_FIELD_REF <*klass, 64, 256>;
      D.31630 = D.31629 & 1;
      if (D.31630 == 0) goto <D.31631>; else goto <D.31632>;
      <D.31631>:
      mono_class_init (klass);
      <D.31632>:
      D.31629 = BIT_FIELD_REF <*klass, 64, 256>;
      D.31633 = D.31629 & 4294967296;
      if (D.31633 == 0) goto <D.31634>; else goto <D.31635>;
      <D.31634>:
      mono_class_setup_interfaces (klass, &error);
      D.31636 = mono_error_ok (&error);
      if (D.31636 == 0) goto <D.31637>; else goto <D.31638>;
      <D.31637>:
      mono_error_cleanup (&error);
      D.31625 = 0B;
      return D.31625;
      <D.31638>:
      <D.31635>:
      D.31639 = klass->interface_count;
      if (D.31639 != 0) goto <D.31640>; else goto <D.31641>;
      <D.31640>:
      D.31642 = klass->interfaces;
      *iter = D.31642;
      D.31642 = klass->interfaces;
      D.31625 = *D.31642;
      return D.31625;
      <D.31641>:
      D.31625 = 0B;
      return D.31625;
      <D.31628>:
      iface = *iter;
      iface = iface + 8;
      D.31642 = klass->interfaces;
      D.31639 = klass->interface_count;
      D.31643 = (long unsigned int) D.31639;
      D.31644 = D.31643 * 8;
      D.31645 = D.31642 + D.31644;
      if (D.31645 > iface) goto <D.31646>; else goto <D.31647>;
      <D.31646>:
      *iter = iface;
      D.31625 = *iface;
      return D.31625;
      <D.31647>:
      D.31625 = 0B;
      return D.31625;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_get_nested_types (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.31652;
  long unsigned int D.31653;
  long unsigned int D.31654;
  unsigned int D.31657;
  struct MonoImage * D.31662;
  unsigned int D.31663;
  struct MonoTableInfo * D.31664;
  int D.31665;
  unsigned int D.31666;
  unsigned int D.31667;
  int D.31668;
  int D.31671;
  unsigned int D.31672;
  unsigned int D.31673;
  struct MonoClassExt * D.31674;
  struct GList * D.31675;
  struct GList * D.31676;
  unsigned int D.31677;
  void * D.31678;
  struct MonoError error;
  struct GList * item;
  int i;

  try
    {
      if (iter == 0B) goto <D.31650>; else goto <D.31651>;
      <D.31650>:
      D.31652 = 0B;
      return D.31652;
      <D.31651>:
      D.31653 = BIT_FIELD_REF <*klass, 64, 256>;
      D.31654 = D.31653 & 2147483648;
      if (D.31654 == 0) goto <D.31655>; else goto <D.31656>;
      <D.31655>:
      D.31657 = klass->type_token;
      if (D.31657 == 0) goto <D.31658>; else goto <D.31659>;
      <D.31658>:
      klass->nested_classes_inited = 1;
      <D.31659>:
      mono_loader_lock ();
      D.31653 = BIT_FIELD_REF <*klass, 64, 256>;
      D.31654 = D.31653 & 2147483648;
      if (D.31654 == 0) goto <D.31660>; else goto <D.31661>;
      <D.31660>:
      D.31662 = klass->image;
      D.31657 = klass->type_token;
      D.31663 = mono_metadata_nesting_typedef (D.31662, D.31657, 1);
      i = (int) D.31663;
      goto <D.22180>;
      <D.22181>:
      {
        struct MonoClass * nclass;
        guint32 cols[2];

        try
          {
            D.31662 = klass->image;
            D.31664 = &D.31662->tables[41];
            D.31665 = i + -1;
            mono_metadata_decode_row (D.31664, D.31665, &cols, 2);
            D.31662 = klass->image;
            D.31666 = cols[0];
            D.31667 = D.31666 | 33554432;
            nclass = mono_class_create_from_typedef (D.31662, D.31667, &error);
            D.31668 = mono_error_ok (&error);
            if (D.31668 == 0) goto <D.31669>; else goto <D.31670>;
            <D.31669>:
            mono_error_cleanup (&error);
            D.31662 = klass->image;
            D.31657 = klass->type_token;
            D.31671 = i + 1;
            D.31672 = (unsigned int) D.31671;
            D.31673 = mono_metadata_nesting_typedef (D.31662, D.31657, D.31672);
            i = (int) D.31673;
            // predicted unlikely by continue predictor.
            goto <D.22180>;
            <D.31670>:
            mono_class_alloc_ext (klass);
            D.31674 = klass->ext;
            D.31662 = klass->image;
            D.31674 = klass->ext;
            D.31675 = D.31674->nested_classes;
            D.31676 = g_list_prepend_image (D.31662, D.31675, nclass);
            D.31674->nested_classes = D.31676;
            D.31662 = klass->image;
            D.31657 = klass->type_token;
            D.31671 = i + 1;
            D.31672 = (unsigned int) D.31671;
            D.31677 = mono_metadata_nesting_typedef (D.31662, D.31657, D.31672);
            i = (int) D.31677;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.22180>:
      if (i != 0) goto <D.22181>; else goto <D.22182>;
      <D.22182>:
      <D.31661>:
      mono_memory_barrier ();
      klass->nested_classes_inited = 1;
      mono_loader_unlock ();
      <D.31656>:
      D.31678 = *iter;
      if (D.31678 == 0B) goto <D.31679>; else goto <D.31680>;
      <D.31679>:
      D.31674 = klass->ext;
      if (D.31674 != 0B) goto <D.31682>; else goto <D.31681>;
      <D.31682>:
      D.31674 = klass->ext;
      D.31675 = D.31674->nested_classes;
      if (D.31675 != 0B) goto <D.31683>; else goto <D.31681>;
      <D.31683>:
      D.31674 = klass->ext;
      D.31675 = D.31674->nested_classes;
      *iter = D.31675;
      D.31674 = klass->ext;
      D.31675 = D.31674->nested_classes;
      D.31652 = D.31675->data;
      return D.31652;
      <D.31681>:
      D.31652 = 0B;
      return D.31652;
      <D.31680>:
      item = *iter;
      item = item->next;
      if (item != 0B) goto <D.31684>; else goto <D.31685>;
      <D.31684>:
      *iter = item;
      D.31652 = item->data;
      return D.31652;
      <D.31685>:
      D.31652 = 0B;
      return D.31652;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_delegate (struct MonoClass * klass)
{
  mono_bool D.31690;
  <unnamed-unsigned:1> D.31691;

  D.31691 = klass->delegate;
  D.31690 = (mono_bool) D.31691;
  return D.31690;
}


mono_class_implements_interface (struct MonoClass * klass, struct MonoClass * iface)
{
  mono_bool D.31693;

  D.31693 = mono_class_is_assignable_from (iface, klass);
  return D.31693;
}


mono_field_get_name (struct MonoClassField * field)
{
  const char * D.31695;

  D.31695 = field->name;
  return D.31695;
}


mono_field_get_type (struct MonoClassField * field)
{
  int D.31697;
  const char * D.31700;
  struct MonoType * D.31701;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      type = mono_field_get_type_checked (field, &error);
      D.31697 = mono_error_ok (&error);
      if (D.31697 == 0) goto <D.31698>; else goto <D.31699>;
      <D.31698>:
      D.31700 = mono_error_get_message (&error);
      mono_trace (16, 2, "Could not load field\'s type due to %s", D.31700);
      mono_error_cleanup (&error);
      <D.31699>:
      D.31701 = type;
      return D.31701;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_field_get_type_checked (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoType * D.31704;
  struct MonoType * D.31707;

  mono_error_init (error);
  D.31704 = field->type;
  if (D.31704 == 0B) goto <D.31705>; else goto <D.31706>;
  <D.31705>:
  mono_field_resolve_type (field, error);
  <D.31706>:
  D.31707 = field->type;
  return D.31707;
}


mono_field_get_parent (struct MonoClassField * field)
{
  struct MonoClass * D.31709;

  D.31709 = field->parent;
  return D.31709;
}


mono_field_get_flags (struct MonoClassField * field)
{
  struct MonoType * D.31711;
  uint32_t D.31714;
  short unsigned int D.31715;

  D.31711 = field->type;
  if (D.31711 == 0B) goto <D.31712>; else goto <D.31713>;
  <D.31712>:
  D.31714 = mono_field_resolve_flags (field);
  return D.31714;
  <D.31713>:
  D.31711 = field->type;
  D.31715 = D.31711->attrs;
  D.31714 = (uint32_t) D.31715;
  return D.31714;
}


mono_field_resolve_flags (struct MonoClassField * field)
{
  struct MonoClass * iftmp.345;
  struct MonoGenericClass * D.31718;
  long int field.346;
  struct MonoClassField * D.31723;
  long int D.31724;
  long int D.31725;
  long int D.31726;
  struct MonoClassField * D.31729;
  long unsigned int D.31730;
  long unsigned int D.31731;
  guint32 D.31732;
  unsigned int D.31733;
  unsigned int field_idx.347;
  unsigned int D.31735;
  long unsigned int D.31736;
  long unsigned int D.31737;
  _Bool D.31738;
  long int D.31739;
  long int D.31740;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.31718 = class->generic_class;
  if (D.31718 != 0B) goto <D.31719>; else goto <D.31720>;
  <D.31719>:
  iftmp.345 = mono_class_get_generic_type_definition (class);
  goto <D.31721>;
  <D.31720>:
  iftmp.345 = 0B;
  <D.31721>:
  gtd = iftmp.345;
  field.346 = (long int) field;
  D.31723 = class->fields;
  D.31724 = (long int) D.31723;
  D.31725 = field.346 - D.31724;
  D.31726 = D.31725 /[ex] 32;
  field_idx = (int) D.31726;
  if (gtd != 0B) goto <D.31727>; else goto <D.31728>;
  <D.31727>:
  {
    struct MonoClassField * gfield;

    D.31729 = gtd->fields;
    D.31730 = (long unsigned int) field_idx;
    D.31731 = D.31730 * 32;
    gfield = D.31729 + D.31731;
    D.31732 = mono_field_get_flags (gfield);
    return D.31732;
  }
  <D.31728>:
  {
    int idx;

    D.31733 = class->field.first;
    field_idx.347 = (unsigned int) field_idx;
    D.31735 = D.31733 + field_idx.347;
    idx = (int) D.31735;
    D.31736 = BIT_FIELD_REF <*image, 64, 192>;
    D.31737 = D.31736 & 34359738368;
    D.31738 = D.31737 != 0;
    D.31739 = (long int) D.31738;
    D.31740 = __builtin_expect (D.31739, 0);
    if (D.31740 != 0) goto <D.31741>; else goto <D.31742>;
    <D.31741>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10164, "!image->dynamic");
    <D.31742>:
    D.31732 = mono_metadata_decode_table_row_col (image, 4, idx, 0);
    return D.31732;
  }
}


mono_field_get_offset (struct MonoClassField * field)
{
  uint32_t D.31744;
  int D.31745;

  D.31745 = field->offset;
  D.31744 = (uint32_t) D.31745;
  return D.31744;
}


mono_field_get_data (struct MonoClassField * field)
{
  struct MonoType * D.31747;
  short unsigned int D.31748;
  signed short D.31749;
  const char * D.31752;
  int D.31753;
  int D.31754;

  D.31747 = field->type;
  D.31748 = D.31747->attrs;
  D.31749 = (signed short) D.31748;
  if (D.31749 < 0) goto <D.31750>; else goto <D.31751>;
  <D.31750>:
  {
    MonoTypeEnum def_type;

    try
      {
        D.31752 = mono_class_get_field_default_value (field, &def_type);
        return D.31752;
      }
    finally
      {
        def_type = {CLOBBER};
      }
  }
  <D.31751>:
  D.31747 = field->type;
  D.31748 = D.31747->attrs;
  D.31753 = (int) D.31748;
  D.31754 = D.31753 & 256;
  if (D.31754 != 0) goto <D.31755>; else goto <D.31756>;
  <D.31755>:
  D.31752 = mono_field_get_rva (field);
  return D.31752;
  <D.31756>:
  D.31752 = 0B;
  return D.31752;
}


mono_field_get_rva (struct MonoClassField * field)
{
  struct MonoType * D.31759;
  short unsigned int D.31760;
  int D.31761;
  int D.31762;
  _Bool D.31763;
  long int D.31764;
  long int D.31765;
  struct MonoClassExt * D.31770;
  struct MonoFieldDefaultValue * D.31772;
  unsigned int D.31775;
  unsigned int D.31776;
  int D.31777;
  void * D.31778;
  long unsigned int D.31779;
  long unsigned int D.31780;
  struct MonoFieldDefaultValue * D.31781;
  const char * D.31782;
  struct MonoImage * D.31785;
  long unsigned int D.31786;
  long unsigned int D.31787;
  struct MonoClass * D.31790;
  struct MonoImage * D.31791;
  unsigned int D.31792;
  unsigned int field_index.348;
  unsigned int D.31794;
  unsigned int rva.349;
  const char * D.31798;
  const char * D.31799;
  char * D.31800;
  const char * D.31801;
  guint32 rva;
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.31759 = field->type;
      D.31760 = D.31759->attrs;
      D.31761 = (int) D.31760;
      D.31762 = D.31761 & 256;
      D.31763 = D.31762 == 0;
      D.31764 = (long int) D.31763;
      D.31765 = __builtin_expect (D.31764, 0);
      if (D.31765 != 0) goto <D.31766>; else goto <D.31767>;
      <D.31766>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9062, "field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA");
      <D.31767>:
      D.31770 = klass->ext;
      if (D.31770 == 0B) goto <D.31768>; else goto <D.31771>;
      <D.31771>:
      D.31770 = klass->ext;
      D.31772 = D.31770->field_def_values;
      if (D.31772 == 0B) goto <D.31768>; else goto <D.31769>;
      <D.31768>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.31770 = klass->ext;
      D.31772 = D.31770->field_def_values;
      if (D.31772 == 0B) goto <D.31773>; else goto <D.31774>;
      <D.31773>:
      D.31770 = klass->ext;
      D.31775 = klass->field.count;
      D.31776 = D.31775 * 16;
      D.31777 = (int) D.31776;
      D.31778 = mono_class_alloc0 (klass, D.31777);
      D.31770->field_def_values = D.31778;
      <D.31774>:
      mono_loader_unlock ();
      <D.31769>:
      field_index = mono_field_get_index (field);
      D.31770 = klass->ext;
      D.31772 = D.31770->field_def_values;
      D.31779 = (long unsigned int) field_index;
      D.31780 = D.31779 * 16;
      D.31781 = D.31772 + D.31780;
      D.31782 = D.31781->data;
      if (D.31782 == 0B) goto <D.31783>; else goto <D.31784>;
      <D.31783>:
      D.31785 = klass->image;
      D.31786 = BIT_FIELD_REF <*D.31785, 64, 192>;
      D.31787 = D.31786 & 34359738368;
      if (D.31787 == 0) goto <D.31788>; else goto <D.31789>;
      <D.31788>:
      D.31790 = field->parent;
      D.31791 = D.31790->image;
      D.31792 = klass->field.first;
      field_index.348 = (unsigned int) field_index;
      D.31794 = D.31792 + field_index.348;
      mono_metadata_field_info (D.31791, D.31794, 0B, &rva, 0B);
      rva.349 = rva;
      if (rva.349 == 0) goto <D.31796>; else goto <D.31797>;
      <D.31796>:
      D.31798 = mono_field_get_name (field);
      D.31790 = field->parent;
      D.31799 = D.31790->name;
      monoeg_g_log (0B, 16, "field %s in %s should have RVA data, but hasn\'t", D.31798, D.31799);
      <D.31797>:
      D.31770 = klass->ext;
      D.31772 = D.31770->field_def_values;
      D.31779 = (long unsigned int) field_index;
      D.31780 = D.31779 * 16;
      D.31781 = D.31772 + D.31780;
      D.31790 = field->parent;
      D.31791 = D.31790->image;
      rva.349 = rva;
      D.31800 = mono_image_rva_map (D.31791, rva.349);
      D.31781->data = D.31800;
      <D.31789>:
      <D.31784>:
      D.31770 = klass->ext;
      D.31772 = D.31770->field_def_values;
      D.31779 = (long unsigned int) field_index;
      D.31780 = D.31779 * 16;
      D.31781 = D.31772 + D.31780;
      D.31801 = D.31781->data;
      return D.31801;
    }
  finally
    {
      rva = {CLOBBER};
    }
}


mono_property_get_name (struct MonoProperty * prop)
{
  const char * D.31804;

  D.31804 = prop->name;
  return D.31804;
}


mono_property_get_set_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.31806;

  D.31806 = prop->set;
  return D.31806;
}


mono_property_get_get_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.31808;

  D.31808 = prop->get;
  return D.31808;
}


mono_property_get_parent (struct MonoProperty * prop)
{
  struct MonoClass * D.31810;

  D.31810 = prop->parent;
  return D.31810;
}


mono_property_get_flags (struct MonoProperty * prop)
{
  uint32_t D.31812;

  D.31812 = prop->attrs;
  return D.31812;
}


mono_event_get_name (struct MonoEvent * event)
{
  const char * D.31814;

  D.31814 = event->name;
  return D.31814;
}


mono_event_get_add_method (struct MonoEvent * event)
{
  struct MonoMethod * D.31816;

  D.31816 = event->add;
  return D.31816;
}


mono_event_get_remove_method (struct MonoEvent * event)
{
  struct MonoMethod * D.31818;

  D.31818 = event->remove;
  return D.31818;
}


mono_event_get_raise_method (struct MonoEvent * event)
{
  struct MonoMethod * D.31820;

  D.31820 = event->raise;
  return D.31820;
}


mono_event_get_parent (struct MonoEvent * event)
{
  struct MonoClass * D.31822;

  D.31822 = event->parent;
  return D.31822;
}


mono_event_get_flags (struct MonoEvent * event)
{
  uint32_t D.31824;

  D.31824 = event->attrs;
  return D.31824;
}


mono_class_get_method_from_name (struct MonoClass * klass, const char * name, int param_count)
{
  struct MonoMethod * D.31826;

  D.31826 = mono_class_get_method_from_name_flags (klass, name, param_count, 0);
  return D.31826;
}


mono_class_get_method_from_name_flags (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoGenericClass * D.31828;
  struct MonoMethod * * D.31831;
  struct MonoClass * D.31834;
  struct MonoGenericContext * D.31837;
  struct MonoMethod * D.31838;
  unsigned int D.31843;
  struct MonoImage * D.31845;
  long unsigned int D.31846;
  long unsigned int D.31847;
  long unsigned int D.31851;
  long unsigned int D.31852;
  struct MonoMethod * * D.31853;
  const char * D.31856;
  char D.31857;
  char D.31858;
  int D.22299;
  struct MonoMethodSignature * D.31864;
  short unsigned int D.31865;
  int D.31866;
  short unsigned int D.31867;
  int D.31868;
  int D.31869;
  unsigned int i.350;
  unsigned int D.31873;
  struct MonoMethod * res;
  int i;

  res = 0B;
  mono_class_init (klass);
  D.31828 = klass->generic_class;
  if (D.31828 != 0B) goto <D.31829>; else goto <D.31830>;
  <D.31829>:
  D.31831 = klass->methods;
  if (D.31831 == 0B) goto <D.31832>; else goto <D.31833>;
  <D.31832>:
  D.31828 = klass->generic_class;
  D.31834 = D.31828->container_class;
  res = mono_class_get_method_from_name_flags (D.31834, name, param_count, flags);
  if (res != 0B) goto <D.31835>; else goto <D.31836>;
  <D.31835>:
  D.31837 = mono_class_get_context (klass);
  res = mono_class_inflate_generic_method_full (res, klass, D.31837);
  <D.31836>:
  D.31838 = res;
  return D.31838;
  <D.31833>:
  <D.31830>:
  D.31831 = klass->methods;
  if (D.31831 != 0B) goto <D.31839>; else goto <D.31842>;
  <D.31842>:
  D.31843 = klass->type_token;
  if (D.31843 == 0) goto <D.31839>; else goto <D.31844>;
  <D.31844>:
  D.31845 = klass->image;
  D.31846 = BIT_FIELD_REF <*D.31845, 64, 192>;
  D.31847 = D.31846 & 34359738368;
  if (D.31847 != 0) goto <D.31839>; else goto <D.31848>;
  <D.31848>:
  D.31828 = klass->generic_class;
  if (D.31828 != 0B) goto <D.31839>; else goto <D.31840>;
  <D.31839>:
  mono_class_setup_methods (klass);
  D.31831 = klass->methods;
  if (D.31831 == 0B) goto <D.31849>; else goto <D.31850>;
  <D.31849>:
  D.31838 = 0B;
  return D.31838;
  <D.31850>:
  i = 0;
  goto <D.22302>;
  <D.22301>:
  {
    struct MonoMethod * method;

    D.31831 = klass->methods;
    D.31851 = (long unsigned int) i;
    D.31852 = D.31851 * 8;
    D.31853 = D.31831 + D.31852;
    method = *D.31853;
    D.31856 = method->name;
    D.31857 = *D.31856;
    D.31858 = *name;
    if (D.31857 == D.31858) goto <D.31859>; else goto <D.31860>;
    <D.31859>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.31856 = method->name;
      D.22299 = __builtin_strcmp (name, D.31856);
    }
    if (D.22299 == 0) goto <D.31861>; else goto <D.31862>;
    <D.31861>:
    if (param_count == -1) goto <D.31854>; else goto <D.31863>;
    <D.31863>:
    D.31864 = mono_method_signature (method);
    D.31865 = D.31864->param_count;
    D.31866 = (int) D.31865;
    if (D.31866 == param_count) goto <D.31854>; else goto <D.31855>;
    <D.31854>:
    D.31867 = method->flags;
    D.31868 = (int) D.31867;
    D.31869 = D.31868 & flags;
    if (D.31869 == flags) goto <D.31870>; else goto <D.31871>;
    <D.31870>:
    res = method;
    goto <D.22300>;
    <D.31871>:
    <D.31855>:
    <D.31862>:
    <D.31860>:
  }
  i = i + 1;
  <D.22302>:
  i.350 = (unsigned int) i;
  D.31873 = klass->method.count;
  if (i.350 < D.31873) goto <D.22301>; else goto <D.22300>;
  <D.22300>:
  goto <D.31841>;
  <D.31840>:
  res = find_method_in_metadata (klass, name, param_count, flags);
  <D.31841>:
  D.31838 = res;
  return D.31838;
}


mono_class_set_failure (struct MonoClass * klass, guint32 ex_type, void * ex_data)
{
  unsigned char D.31875;
  gboolean D.31878;
  unsigned char D.31879;
  struct MonoImage * D.31882;

  D.31875 = klass->exception_type;
  if (D.31875 != 0) goto <D.31876>; else goto <D.31877>;
  <D.31876>:
  D.31878 = 0;
  return D.31878;
  <D.31877>:
  mono_loader_lock ();
  D.31879 = (unsigned char) ex_type;
  klass->exception_type = D.31879;
  if (ex_data != 0B) goto <D.31880>; else goto <D.31881>;
  <D.31880>:
  D.31882 = klass->image;
  mono_image_property_insert (D.31882, klass, 0, ex_data);
  <D.31881>:
  mono_loader_unlock ();
  D.31878 = 1;
  return D.31878;
}


mono_class_get_exception_data (struct MonoClass * klass)
{
  void * D.31884;
  struct MonoImage * D.31885;

  D.31885 = klass->image;
  D.31884 = mono_image_property_lookup (D.31885, klass, 0);
  return D.31884;
}


mono_classes_init ()
{
  mono_counters_register ("Inflated methods size", 2048, &inflated_methods_size);
  mono_counters_register ("Inflated classes", 2048, &inflated_classes);
  mono_counters_register ("Inflated classes size", 2048, &inflated_classes_size);
  mono_counters_register ("MonoClass size", 1024, &classes_size);
  mono_counters_register ("MonoClassExt size", 1024, &class_ext_size);
}


mono_classes_cleanup ()
{
  struct MonoBitSet * global_interface_bitset.351;

  global_interface_bitset.351 = global_interface_bitset;
  if (global_interface_bitset.351 != 0B) goto <D.31888>; else goto <D.31889>;
  <D.31888>:
  global_interface_bitset.351 = global_interface_bitset;
  mono_bitset_free (global_interface_bitset.351);
  <D.31889>:
  global_interface_bitset = 0B;
}


mono_class_get_exception_for_failure (struct MonoClass * klass)
{
  unsigned char D.31890;
  int D.31891;
  guint32 iftmp.352;
  struct MonoImage * D.31896;
  struct MonoAssembly * D.31897;
  struct MonoReflectionAssembly * D.31898;
  struct MonoType * D.31899;
  struct MonoReflectionType * D.31900;
  void * iftmp.353;
  struct MonoMethod * D.31905;
  struct MonoException * D.31906;
  char * iftmp.354;
  struct MonoAssembly * D.31908;
  struct MonoAssemblyName * D.31911;
  struct MonoDomain * D.31913;
  long unsigned int D.31914;
  sizetype D.31915;
  long unsigned int D.31916;
  sizetype D.31917;
  long unsigned int D.31918;
  sizetype D.31919;
  struct MonoDomain * D.31920;
  struct MonoString * D.31921;
  void * exception_data;

  exception_data = mono_class_get_exception_data (klass);
  D.31890 = klass->exception_type;
  D.31891 = (int) D.31890;
  switch (D.31891) <default: <D.22345>, case 2: <D.22321>, case 5: <D.22333>, case 6: <D.22336>, case 7: <D.22328>, case 8: <D.22339>, case 12: <D.22344>>
  <D.22321>:
  {
    struct MonoDomain * domain;
    struct MonoSecurityManager * secman;
    struct MonoMethod * method;
    guint32 error;
    struct MonoObject * exc;
    void * args[4];

    try
      {
        domain = mono_domain_get ();
        secman = mono_security_manager_get_methods ();
        method = exception_data;
        if (method != 0B) goto <D.31893>; else goto <D.31894>;
        <D.31893>:
        iftmp.352 = 2;
        goto <D.31895>;
        <D.31894>:
        iftmp.352 = 1;
        <D.31895>:
        error = iftmp.352;
        exc = 0B;
        args[0] = &error;
        D.31896 = klass->image;
        D.31897 = mono_image_get_assembly (D.31896);
        D.31898 = mono_assembly_get_object (domain, D.31897);
        args[1] = D.31898;
        D.31899 = &klass->byval_arg;
        D.31900 = mono_type_get_object (domain, D.31899);
        args[2] = D.31900;
        if (method != 0B) goto <D.31902>; else goto <D.31903>;
        <D.31902>:
        iftmp.353 = mono_method_get_object (domain, method, 0B);
        goto <D.31904>;
        <D.31903>:
        iftmp.353 = 0B;
        <D.31904>:
        args[3] = iftmp.353;
        D.31905 = secman->inheritsecurityexception;
        mono_runtime_invoke (D.31905, 0B, &args, &exc);
        D.31906 = exc;
        return D.31906;
      }
    finally
      {
        error = {CLOBBER};
        exc = {CLOBBER};
        args = {CLOBBER};
      }
  }
  <D.22328>:
  {
    struct MonoString * name;
    struct MonoException * ex;
    char * str;
    char * astr;

    str = mono_type_get_full_name (klass);
    D.31896 = klass->image;
    D.31908 = D.31896->assembly;
    if (D.31908 != 0B) goto <D.31909>; else goto <D.31910>;
    <D.31909>:
    D.31896 = klass->image;
    D.31908 = D.31896->assembly;
    D.31911 = &D.31908->aname;
    iftmp.354 = mono_stringify_assembly_name (D.31911);
    goto <D.31912>;
    <D.31910>:
    iftmp.354 = 0B;
    <D.31912>:
    astr = iftmp.354;
    D.31913 = mono_domain_get ();
    name = mono_string_new (D.31913, str);
    monoeg_g_free (str);
    ex = mono_get_exception_type_load (name, astr);
    monoeg_g_free (astr);
    D.31906 = ex;
    return D.31906;
  }
  <D.22333>:
  {
    char * class_name;
    char * assembly_name;

    class_name = exception_data;
    D.31914 = strlen (class_name);
    D.31915 = D.31914 + 1;
    assembly_name = class_name + D.31915;
    D.31906 = mono_get_exception_missing_method (class_name, assembly_name);
    return D.31906;
  }
  <D.22336>:
  {
    char * class_name;
    char * member_name;

    class_name = exception_data;
    D.31916 = strlen (class_name);
    D.31917 = D.31916 + 1;
    member_name = class_name + D.31917;
    D.31906 = mono_get_exception_missing_field (class_name, member_name);
    return D.31906;
  }
  <D.22339>:
  {
    char * msg_format;
    char * assembly_name;
    char * msg;
    struct MonoException * ex;

    msg_format = exception_data;
    D.31918 = strlen (msg_format);
    D.31919 = D.31918 + 1;
    assembly_name = msg_format + D.31919;
    msg = monoeg_g_strdup_printf (msg_format, assembly_name);
    D.31920 = mono_domain_get ();
    D.31921 = mono_string_new (D.31920, assembly_name);
    ex = mono_get_exception_file_not_found2 (msg, D.31921);
    monoeg_g_free (msg);
    D.31906 = ex;
    return D.31906;
  }
  <D.22344>:
  D.31906 = mono_get_exception_bad_image_format (exception_data);
  return D.31906;
  <D.22345>:
  {
    struct MonoLoaderError * error;
    struct MonoException * ex;

    error = mono_loader_get_last_error ();
    if (error != 0B) goto <D.31922>; else goto <D.31923>;
    <D.31922>:
    ex = mono_loader_error_prepare_exception (error);
    D.31906 = ex;
    return D.31906;
    <D.31923>:
    D.31906 = 0B;
    return D.31906;
  }
}


mono_class_get_generic_type_definition (struct MonoClass * klass)
{
  struct MonoClass * D.31926;
  struct MonoClass * iftmp.355;
  struct MonoGenericClass * D.31928;

  D.31928 = klass->generic_class;
  if (D.31928 != 0B) goto <D.31929>; else goto <D.31930>;
  <D.31929>:
  D.31928 = klass->generic_class;
  iftmp.355 = D.31928->container_class;
  goto <D.31931>;
  <D.31930>:
  iftmp.355 = klass;
  <D.31931>:
  D.31926 = iftmp.355;
  return D.31926;
}


mono_class_has_parent_and_ignore_generics (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.31933;
  long unsigned int D.31934;
  long unsigned int D.31935;
  struct MonoClass * * D.31936;
  struct MonoClass * D.31937;
  struct MonoClass * D.31938;
  gboolean D.31941;
  short unsigned int D.31942;
  int D.31943;
  int i;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  i = 0;
  goto <D.22363>;
  <D.22362>:
  D.31933 = klass->supertypes;
  D.31934 = (long unsigned int) i;
  D.31935 = D.31934 * 8;
  D.31936 = D.31933 + D.31935;
  D.31937 = *D.31936;
  D.31938 = mono_class_get_generic_type_definition (D.31937);
  if (D.31938 == parent) goto <D.31939>; else goto <D.31940>;
  <D.31939>:
  D.31941 = 1;
  return D.31941;
  <D.31940>:
  i = i + 1;
  <D.22363>:
  D.31942 = klass->idepth;
  D.31943 = (int) D.31942;
  if (D.31943 > i) goto <D.22362>; else goto <D.22364>;
  <D.22364>:
  D.31941 = 0;
  return D.31941;
}


mono_method_can_access_field (struct MonoMethod * method, struct MonoClassField * field)
{
  struct MonoClass * D.31945;
  struct MonoClass * D.31946;
  struct MonoType * D.31947;
  short unsigned int D.31948;
  int D.31949;
  int D.31950;
  struct MonoType * D.31953;
  short unsigned int D.31954;
  int D.31955;
  int D.31956;
  mono_bool D.31959;
  int can;

  D.31945 = method->klass;
  D.31946 = field->parent;
  D.31947 = mono_field_get_type (field);
  D.31948 = D.31947->attrs;
  D.31949 = (int) D.31948;
  D.31950 = D.31949 & 7;
  can = can_access_member (D.31945, D.31946, 0B, D.31950);
  if (can == 0) goto <D.31951>; else goto <D.31952>;
  <D.31951>:
  {
    struct MonoClass * nested;

    D.31945 = method->klass;
    nested = D.31945->nested_in;
    goto <D.22446>;
    <D.22445>:
    D.31946 = field->parent;
    D.31953 = mono_field_get_type (field);
    D.31954 = D.31953->attrs;
    D.31955 = (int) D.31954;
    D.31956 = D.31955 & 7;
    can = can_access_member (nested, D.31946, 0B, D.31956);
    if (can != 0) goto <D.31957>; else goto <D.31958>;
    <D.31957>:
    D.31959 = 1;
    return D.31959;
    <D.31958>:
    nested = nested->nested_in;
    <D.22446>:
    if (nested != 0B) goto <D.22445>; else goto <D.22447>;
    <D.22447>:
  }
  <D.31952>:
  D.31959 = can;
  return D.31959;
}


can_access_member (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass, int access_level)
{
  struct MonoImage * D.31961;
  struct MonoAssembly * D.31962;
  unsigned char D.31965;
  gboolean D.31968;
  struct MonoGenericClass * D.31972;
  struct MonoClass * D.31974;
  struct MonoGenericContainer * D.31975;
  int D.31981;
  struct MonoImage * D.31984;
  _Bool D.31985;
  _Bool D.31986;
  int D.31987;
  struct MonoAssembly * D.31990;
  int D.31991;
  int D.31994;
  int D.31997;
  struct MonoClass * member_generic_def;

  D.31961 = access_klass->image;
  D.31962 = D.31961->assembly;
  if (D.31962 != 0B) goto <D.31963>; else goto <D.31964>;
  <D.31963>:
  D.31961 = access_klass->image;
  D.31962 = D.31961->assembly;
  D.31965 = D.31962->corlib_internal;
  if (D.31965 != 0) goto <D.31966>; else goto <D.31967>;
  <D.31966>:
  D.31968 = 1;
  return D.31968;
  <D.31967>:
  <D.31964>:
  D.31972 = access_klass->generic_class;
  if (D.31972 != 0B) goto <D.31973>; else goto <D.31969>;
  <D.31973>:
  D.31972 = access_klass->generic_class;
  D.31974 = D.31972->container_class;
  if (D.31974 != 0B) goto <D.31970>; else goto <D.31969>;
  <D.31969>:
  D.31975 = access_klass->generic_container;
  if (D.31975 != 0B) goto <D.31970>; else goto <D.31971>;
  <D.31970>:
  member_generic_def = get_generic_definition_class (member_klass);
  if (member_generic_def != 0B) goto <D.31976>; else goto <D.31977>;
  <D.31976>:
  {
    struct MonoClass * access_container;

    D.31975 = access_klass->generic_container;
    if (D.31975 != 0B) goto <D.31978>; else goto <D.31979>;
    <D.31978>:
    access_container = access_klass;
    goto <D.31980>;
    <D.31979>:
    D.31972 = access_klass->generic_class;
    access_container = D.31972->container_class;
    <D.31980>:
    D.31981 = can_access_member (access_container, member_generic_def, context_klass, access_level);
    if (D.31981 != 0) goto <D.31982>; else goto <D.31983>;
    <D.31982>:
    D.31968 = 1;
    return D.31968;
    <D.31983>:
  }
  <D.31977>:
  <D.31971>:
  switch (access_level) <default: <D.32000>, case 0: <D.22432>, case 1: <D.22433>, case 2: <D.22434>, case 3: <D.22435>, case 4: <D.22436>, case 5: <D.22437>, case 6: <D.22438>>
  <D.22432>:
  D.31961 = access_klass->image;
  D.31984 = member_klass->image;
  D.31985 = D.31961 == D.31984;
  D.31968 = (gboolean) D.31985;
  return D.31968;
  <D.22433>:
  D.31986 = access_klass == member_klass;
  D.31968 = (gboolean) D.31986;
  return D.31968;
  <D.22434>:
  D.31987 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31987 != 0) goto <D.31988>; else goto <D.31989>;
  <D.31988>:
  D.31961 = access_klass->image;
  D.31962 = D.31961->assembly;
  D.31984 = member_klass->image;
  D.31990 = D.31984->assembly;
  D.31991 = can_access_internals (D.31962, D.31990);
  if (D.31991 != 0) goto <D.31992>; else goto <D.31993>;
  <D.31992>:
  D.31968 = 1;
  return D.31968;
  <D.31993>:
  <D.31989>:
  D.31968 = 0;
  return D.31968;
  <D.22435>:
  D.31961 = access_klass->image;
  D.31962 = D.31961->assembly;
  D.31984 = member_klass->image;
  D.31990 = D.31984->assembly;
  D.31968 = can_access_internals (D.31962, D.31990);
  return D.31968;
  <D.22436>:
  D.31994 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31994 != 0) goto <D.31995>; else goto <D.31996>;
  <D.31995>:
  D.31968 = 1;
  return D.31968;
  <D.31996>:
  D.31968 = 0;
  return D.31968;
  <D.22437>:
  D.31997 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31997 != 0) goto <D.31998>; else goto <D.31999>;
  <D.31998>:
  D.31968 = 1;
  return D.31968;
  <D.31999>:
  D.31961 = access_klass->image;
  D.31962 = D.31961->assembly;
  D.31984 = member_klass->image;
  D.31990 = D.31984->assembly;
  D.31968 = can_access_internals (D.31962, D.31990);
  return D.31968;
  <D.22438>:
  D.31968 = 1;
  return D.31968;
  <D.32000>:
  D.31968 = 0;
  return D.31968;
}


get_generic_definition_class (struct MonoClass * klass)
{
  struct MonoGenericClass * D.32002;
  struct MonoClass * D.32005;
  struct MonoClass * D.32008;

  goto <D.22393>;
  <D.22392>:
  D.32002 = klass->generic_class;
  if (D.32002 != 0B) goto <D.32003>; else goto <D.32004>;
  <D.32003>:
  D.32002 = klass->generic_class;
  D.32005 = D.32002->container_class;
  if (D.32005 != 0B) goto <D.32006>; else goto <D.32007>;
  <D.32006>:
  D.32002 = klass->generic_class;
  D.32008 = D.32002->container_class;
  return D.32008;
  <D.32007>:
  <D.32004>:
  klass = klass->parent;
  <D.22393>:
  if (klass != 0B) goto <D.22392>; else goto <D.22394>;
  <D.22394>:
  D.32008 = 0B;
  return D.32008;
}


is_valid_family_access (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass)
{
  int D.32010;
  gboolean D.32013;
  int D.32018;

  D.32010 = mono_class_has_parent_and_ignore_generics (access_klass, member_klass);
  if (D.32010 == 0) goto <D.32011>; else goto <D.32012>;
  <D.32011>:
  D.32013 = 0;
  return D.32013;
  <D.32012>:
  if (context_klass == 0B) goto <D.32014>; else goto <D.32015>;
  <D.32014>:
  D.32013 = 1;
  return D.32013;
  <D.32015>:
  if (access_klass != member_klass) goto <D.32016>; else goto <D.32017>;
  <D.32016>:
  D.32018 = mono_class_has_parent_and_ignore_generics (context_klass, access_klass);
  if (D.32018 == 0) goto <D.32019>; else goto <D.32020>;
  <D.32019>:
  D.32013 = 0;
  return D.32013;
  <D.32020>:
  <D.32017>:
  D.32013 = 1;
  return D.32013;
}


can_access_internals (struct MonoAssembly * accessing, struct MonoAssembly * accessed)
{
  gboolean D.32024;
  <unnamed type> D.32028;
  struct MonoImage * D.32031;
  struct MonoImage * D.32032;
  int D.32033;
  const char * D.32036;
  int D.22385;
  const char * D.32039;
  unsigned char D.32042;
  unsigned char D.32045;
  mono_byte[17] * D.32048;
  mono_byte[17] * D.32049;
  int D.32050;
  struct GSList * tmp;

  if (accessing == accessed) goto <D.32022>; else goto <D.32023>;
  <D.32022>:
  D.32024 = 1;
  return D.32024;
  <D.32023>:
  if (accessed == 0B) goto <D.32025>; else goto <D.32027>;
  <D.32027>:
  if (accessing == 0B) goto <D.32025>; else goto <D.32026>;
  <D.32025>:
  D.32024 = 0;
  return D.32024;
  <D.32026>:
  D.32028 = mono_security_get_mode ();
  if (D.32028 == 1) goto <D.32029>; else goto <D.32030>;
  <D.32029>:
  D.32031 = accessing->image;
  D.32032 = accessed->image;
  D.32033 = mono_security_core_clr_can_access_internals (D.32031, D.32032);
  if (D.32033 == 0) goto <D.32034>; else goto <D.32035>;
  <D.32034>:
  D.32024 = 0;
  return D.32024;
  <D.32035>:
  <D.32030>:
  mono_assembly_load_friends (accessed);
  tmp = accessed->friend_assembly_names;
  goto <D.22387>;
  <D.22386>:
  {
    struct MonoAssemblyName * friend;

    friend = tmp->data;
    D.32036 = friend->name;
    if (D.32036 == 0B) goto <D.32037>; else goto <D.32038>;
    <D.32037>:
    // predicted unlikely by continue predictor.
    goto <D.22376>;
    <D.32038>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.32039 = accessing->aname.name;
      D.32036 = friend->name;
      D.22385 = __builtin_strcmp (D.32039, D.32036);
    }
    if (D.22385 != 0) goto <D.32040>; else goto <D.32041>;
    <D.32040>:
    // predicted unlikely by continue predictor.
    goto <D.22376>;
    <D.32041>:
    D.32042 = friend->public_key_token[0];
    if (D.32042 != 0) goto <D.32043>; else goto <D.32044>;
    <D.32043>:
    D.32045 = accessing->aname.public_key_token[0];
    if (D.32045 == 0) goto <D.32046>; else goto <D.32047>;
    <D.32046>:
    // predicted unlikely by continue predictor.
    goto <D.22376>;
    <D.32047>:
    D.32048 = &friend->public_key_token;
    D.32049 = &accessing->aname.public_key_token;
    D.32050 = mono_public_tokens_are_equal (D.32048, D.32049);
    if (D.32050 == 0) goto <D.32051>; else goto <D.32052>;
    <D.32051>:
    // predicted unlikely by continue predictor.
    goto <D.22376>;
    <D.32052>:
    <D.32044>:
    D.32024 = 1;
    return D.32024;
  }
  <D.22376>:
  tmp = tmp->next;
  <D.22387>:
  if (tmp != 0B) goto <D.22386>; else goto <D.22388>;
  <D.22388>:
  D.32024 = 0;
  return D.32024;
}


mono_method_can_access_method (struct MonoMethod * method, struct MonoMethod * called)
{
  struct MonoClass * D.32054;
  struct MonoClass * D.32055;
  short unsigned int D.32056;
  int D.32057;
  int D.32058;
  mono_bool D.32063;
  unsigned int D.32064;
  unsigned int D.32065;
  int can;

  D.32054 = method->klass;
  D.32055 = called->klass;
  D.32056 = called->flags;
  D.32057 = (int) D.32056;
  D.32058 = D.32057 & 7;
  can = can_access_member (D.32054, D.32055, 0B, D.32058);
  if (can == 0) goto <D.32059>; else goto <D.32060>;
  <D.32059>:
  {
    struct MonoClass * nested;

    D.32054 = method->klass;
    nested = D.32054->nested_in;
    goto <D.22455>;
    <D.22454>:
    D.32055 = called->klass;
    D.32056 = called->flags;
    D.32057 = (int) D.32056;
    D.32058 = D.32057 & 7;
    can = can_access_member (nested, D.32055, 0B, D.32058);
    if (can != 0) goto <D.32061>; else goto <D.32062>;
    <D.32061>:
    D.32063 = 1;
    return D.32063;
    <D.32062>:
    nested = nested->nested_in;
    <D.22455>:
    if (nested != 0B) goto <D.22454>; else goto <D.22456>;
    <D.22456>:
  }
  <D.32060>:
  D.32056 = called->flags;
  D.32064 = (unsigned int) D.32056;
  D.32065 = D.32064 & 96;
  if (D.32065 == 96) goto <D.32066>; else goto <D.32067>;
  <D.32066>:
  D.32063 = 1;
  return D.32063;
  <D.32067>:
  D.32063 = can;
  return D.32063;
}


mono_method_can_access_method_full (struct MonoMethod * method, struct MonoMethod * called, struct MonoClass * context_klass)
{
  short unsigned int D.32069;
  int D.32070;
  int D.32071;
  gboolean D.32077;
  long unsigned int D.32083;
  long unsigned int D.32084;
  struct MonoGenericInst * D.32087;
  int D.32090;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = called->klass;
  D.32069 = called->flags;
  D.32070 = (int) D.32069;
  D.32071 = D.32070 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.32071);
  if (can == 0) goto <D.32072>; else goto <D.32073>;
  <D.32072>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.22468>;
    <D.22467>:
    D.32069 = called->flags;
    D.32070 = (int) D.32069;
    D.32071 = D.32070 & 7;
    can = can_access_member (nested, member_class, context_klass, D.32071);
    if (can != 0) goto <D.22466>; else goto <D.32074>;
    <D.32074>:
    nested = nested->nested_in;
    <D.22468>:
    if (nested != 0B) goto <D.22467>; else goto <D.22466>;
    <D.22466>:
  }
  <D.32073>:
  if (can == 0) goto <D.32075>; else goto <D.32076>;
  <D.32075>:
  D.32077 = 0;
  return D.32077;
  <D.32076>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.32078>; else goto <D.32079>;
  <D.32078>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.22472>;
    <D.22471>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.22470>; else goto <D.32080>;
    <D.32080>:
    nested = nested->nested_in;
    <D.22472>:
    if (nested != 0B) goto <D.22471>; else goto <D.22470>;
    <D.22470>:
  }
  <D.32079>:
  if (can == 0) goto <D.32081>; else goto <D.32082>;
  <D.32081>:
  D.32077 = 0;
  return D.32077;
  <D.32082>:
  D.32083 = BIT_FIELD_REF <*called, 64, 256>;
  D.32084 = D.32083 & 4096;
  if (D.32084 != 0) goto <D.32085>; else goto <D.32086>;
  <D.32085>:
  {
    struct MonoMethodInflated * infl;

    infl = called;
    D.32087 = infl->context.method_inst;
    if (D.32087 != 0B) goto <D.32088>; else goto <D.32089>;
    <D.32088>:
    D.32087 = infl->context.method_inst;
    D.32090 = can_access_instantiation (access_class, D.32087);
    if (D.32090 == 0) goto <D.32091>; else goto <D.32092>;
    <D.32091>:
    D.32077 = 0;
    return D.32077;
    <D.32092>:
    <D.32089>:
  }
  <D.32086>:
  D.32077 = 1;
  return D.32077;
}


can_access_type (struct MonoClass * access_klass, struct MonoClass * member_klass)
{
  struct MonoImage * D.32094;
  struct MonoAssembly * D.32095;
  unsigned char D.32098;
  gboolean D.32101;
  struct MonoClass * D.32102;
  long unsigned int D.32105;
  long unsigned int D.32106;
  struct MonoClass * D.32109;
  long unsigned int D.32112;
  long unsigned int D.32113;
  unsigned int D.32116;
  int D.32117;
  unsigned char D.32120;
  struct MonoGenericClass * D.32122;
  struct MonoGenericInst * D.32125;
  int D.32126;
  int D.32131;
  struct MonoClass * D.32133;
  int D.32135;
  struct MonoClass * D.32136;
  int D.32139;
  unsigned int access_level.356;
  unsigned int D.32143;
  struct MonoImage * D.32148;
  struct MonoAssembly * D.32149;
  int iftmp.357;
  struct MonoImage * D.32153;
  struct MonoAssembly * D.32154;
  int D.32155;
  int D.32157;
  int iftmp.358;
  int D.32163;
  int D.32165;
  int access_level;

  D.32094 = access_klass->image;
  D.32095 = D.32094->assembly;
  if (D.32095 != 0B) goto <D.32096>; else goto <D.32097>;
  <D.32096>:
  D.32094 = access_klass->image;
  D.32095 = D.32094->assembly;
  D.32098 = D.32095->corlib_internal;
  if (D.32098 != 0) goto <D.32099>; else goto <D.32100>;
  <D.32099>:
  D.32101 = 1;
  return D.32101;
  <D.32100>:
  <D.32097>:
  D.32102 = access_klass->element_class;
  if (D.32102 != 0B) goto <D.32103>; else goto <D.32104>;
  <D.32103>:
  D.32105 = BIT_FIELD_REF <*access_klass, 64, 256>;
  D.32106 = D.32105 & 16;
  if (D.32106 == 0) goto <D.32107>; else goto <D.32108>;
  <D.32107>:
  access_klass = access_klass->element_class;
  <D.32108>:
  <D.32104>:
  D.32109 = member_klass->element_class;
  if (D.32109 != 0B) goto <D.32110>; else goto <D.32111>;
  <D.32110>:
  D.32112 = BIT_FIELD_REF <*member_klass, 64, 256>;
  D.32113 = D.32112 & 16;
  if (D.32113 == 0) goto <D.32114>; else goto <D.32115>;
  <D.32114>:
  member_klass = member_klass->element_class;
  <D.32115>:
  <D.32111>:
  D.32116 = member_klass->flags;
  D.32117 = (int) D.32116;
  access_level = D.32117 & 7;
  D.32120 = member_klass->byval_arg.type;
  if (D.32120 == 19) goto <D.32118>; else goto <D.32121>;
  <D.32121>:
  D.32120 = member_klass->byval_arg.type;
  if (D.32120 == 30) goto <D.32118>; else goto <D.32119>;
  <D.32118>:
  D.32101 = 1;
  return D.32101;
  <D.32119>:
  D.32122 = member_klass->generic_class;
  if (D.32122 != 0B) goto <D.32123>; else goto <D.32124>;
  <D.32123>:
  D.32122 = member_klass->generic_class;
  D.32125 = D.32122->context.class_inst;
  D.32126 = can_access_instantiation (access_klass, D.32125);
  if (D.32126 == 0) goto <D.32127>; else goto <D.32128>;
  <D.32127>:
  D.32101 = 0;
  return D.32101;
  <D.32128>:
  <D.32124>:
  D.32131 = is_nesting_type (access_klass, member_klass);
  if (D.32131 != 0) goto <D.32129>; else goto <D.32132>;
  <D.32132>:
  D.32133 = access_klass->nested_in;
  if (D.32133 != 0B) goto <D.32134>; else goto <D.32130>;
  <D.32134>:
  D.32133 = access_klass->nested_in;
  D.32135 = is_nesting_type (D.32133, member_klass);
  if (D.32135 != 0) goto <D.32129>; else goto <D.32130>;
  <D.32129>:
  D.32101 = 1;
  return D.32101;
  <D.32130>:
  D.32136 = member_klass->nested_in;
  if (D.32136 != 0B) goto <D.32137>; else goto <D.32138>;
  <D.32137>:
  D.32136 = member_klass->nested_in;
  D.32139 = can_access_type (access_klass, D.32136);
  if (D.32139 == 0) goto <D.32140>; else goto <D.32141>;
  <D.32140>:
  D.32101 = 0;
  return D.32101;
  <D.32141>:
  <D.32138>:
  access_level.356 = (unsigned int) access_level;
  D.32143 = access_level.356 + 4294967293;
  if (D.32143 <= 4) goto <D.32144>; else goto <D.32145>;
  <D.32144>:
  D.32136 = member_klass->nested_in;
  if (D.32136 == 0B) goto <D.32146>; else goto <D.32147>;
  <D.32146>:
  D.32101 = 0;
  return D.32101;
  <D.32147>:
  <D.32145>:
  switch (access_level) <default: <D.32166>, case 0: <D.22416>, case 1: <D.22417>, case 2: <D.22418>, case 3: <D.22419>, case 4: <D.22420>, case 5: <D.22421>, case 6: <D.22422>, case 7: <D.22423>>
  <D.22416>:
  D.32094 = access_klass->image;
  D.32095 = D.32094->assembly;
  D.32148 = member_klass->image;
  D.32149 = D.32148->assembly;
  D.32101 = can_access_internals (D.32095, D.32149);
  return D.32101;
  <D.22417>:
  D.32101 = 1;
  return D.32101;
  <D.22418>:
  D.32101 = 1;
  return D.32101;
  <D.22419>:
  D.32101 = is_nesting_type (member_klass, access_klass);
  return D.32101;
  <D.22420>:
  D.32136 = member_klass->nested_in;
  D.32101 = mono_class_has_parent_and_ignore_generics (access_klass, D.32136);
  return D.32101;
  <D.22421>:
  D.32094 = access_klass->image;
  D.32095 = D.32094->assembly;
  D.32148 = member_klass->image;
  D.32149 = D.32148->assembly;
  D.32101 = can_access_internals (D.32095, D.32149);
  return D.32101;
  <D.22422>:
  D.32094 = access_klass->image;
  D.32095 = D.32094->assembly;
  D.32136 = member_klass->nested_in;
  D.32153 = D.32136->image;
  D.32154 = D.32153->assembly;
  D.32155 = can_access_internals (D.32095, D.32154);
  if (D.32155 != 0) goto <D.32156>; else goto <D.32151>;
  <D.32156>:
  D.32136 = member_klass->nested_in;
  D.32157 = mono_class_has_parent_and_ignore_generics (access_klass, D.32136);
  if (D.32157 != 0) goto <D.32158>; else goto <D.32151>;
  <D.32158>:
  iftmp.357 = 1;
  goto <D.32152>;
  <D.32151>:
  iftmp.357 = 0;
  <D.32152>:
  D.32101 = iftmp.357;
  return D.32101;
  <D.22423>:
  D.32094 = access_klass->image;
  D.32095 = D.32094->assembly;
  D.32136 = member_klass->nested_in;
  D.32153 = D.32136->image;
  D.32154 = D.32153->assembly;
  D.32163 = can_access_internals (D.32095, D.32154);
  if (D.32163 != 0) goto <D.32160>; else goto <D.32164>;
  <D.32164>:
  D.32136 = member_klass->nested_in;
  D.32165 = mono_class_has_parent_and_ignore_generics (access_klass, D.32136);
  if (D.32165 != 0) goto <D.32160>; else goto <D.32161>;
  <D.32160>:
  iftmp.358 = 1;
  goto <D.32162>;
  <D.32161>:
  iftmp.358 = 0;
  <D.32162>:
  D.32101 = iftmp.358;
  return D.32101;
  <D.32166>:
  D.32101 = 0;
  return D.32101;
}


is_nesting_type (struct MonoClass * outer_klass, struct MonoClass * inner_klass)
{
  gboolean D.32170;

  outer_klass = mono_class_get_generic_type_definition (outer_klass);
  inner_klass = mono_class_get_generic_type_definition (inner_klass);
  <D.22352>:
  if (outer_klass == inner_klass) goto <D.32168>; else goto <D.32169>;
  <D.32168>:
  D.32170 = 1;
  return D.32170;
  <D.32169>:
  inner_klass = inner_klass->nested_in;
  if (inner_klass != 0B) goto <D.22352>; else goto <D.22353>;
  <D.22353>:
  D.32170 = 0;
  return D.32170;
}


can_access_instantiation (struct MonoClass * access_klass, struct MonoGenericInst * ginst)
{
  unsigned char D.32172;
  int D.32173;
  struct MonoClass * D.32174;
  int D.32175;
  gboolean D.32178;
  struct MonoArrayType * D.32179;
  struct MonoClass * D.32180;
  int D.32181;
  struct MonoType * D.32184;
  struct MonoClass * D.32185;
  int D.32186;
  struct MonoClass * D.32189;
  int D.32190;
  <unnamed-unsigned:22> D.32194;
  int D.32195;
  int i;

  i = 0;
  goto <D.22409>;
  <D.22408>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.32172 = type->type;
    D.32173 = (int) D.32172;
    switch (D.32173) <default: <D.32193>, case 15: <D.22404>, case 17: <D.22406>, case 18: <D.22405>, case 20: <D.22403>, case 21: <D.22407>, case 29: <D.22401>>
    <D.22401>:
    D.32174 = type->data.klass;
    D.32175 = can_access_type (access_klass, D.32174);
    if (D.32175 == 0) goto <D.32176>; else goto <D.32177>;
    <D.32176>:
    D.32178 = 0;
    return D.32178;
    <D.32177>:
    goto <D.22402>;
    <D.22403>:
    D.32179 = type->data.array;
    D.32180 = D.32179->eklass;
    D.32181 = can_access_type (access_klass, D.32180);
    if (D.32181 == 0) goto <D.32182>; else goto <D.32183>;
    <D.32182>:
    D.32178 = 0;
    return D.32178;
    <D.32183>:
    goto <D.22402>;
    <D.22404>:
    D.32184 = type->data.type;
    D.32185 = mono_class_from_mono_type (D.32184);
    D.32186 = can_access_type (access_klass, D.32185);
    if (D.32186 == 0) goto <D.32187>; else goto <D.32188>;
    <D.32187>:
    D.32178 = 0;
    return D.32178;
    <D.32188>:
    goto <D.22402>;
    <D.22405>:
    <D.22406>:
    <D.22407>:
    D.32189 = mono_class_from_mono_type (type);
    D.32190 = can_access_type (access_klass, D.32189);
    if (D.32190 == 0) goto <D.32191>; else goto <D.32192>;
    <D.32191>:
    D.32178 = 0;
    return D.32178;
    <D.32192>:
    <D.32193>:
    <D.22402>:
  }
  i = i + 1;
  <D.22409>:
  D.32194 = ginst->type_argc;
  D.32195 = (int) D.32194;
  if (D.32195 > i) goto <D.22408>; else goto <D.22410>;
  <D.22410>:
  D.32178 = 1;
  return D.32178;
}


mono_method_can_access_field_full (struct MonoMethod * method, struct MonoClassField * field, struct MonoClass * context_klass)
{
  struct MonoType * D.32197;
  short unsigned int D.32198;
  int D.32199;
  int D.32200;
  gboolean D.32206;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = field->parent;
  D.32197 = field->type;
  D.32198 = D.32197->attrs;
  D.32199 = (int) D.32198;
  D.32200 = D.32199 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.32200);
  if (can == 0) goto <D.32201>; else goto <D.32202>;
  <D.32201>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.22485>;
    <D.22484>:
    D.32197 = field->type;
    D.32198 = D.32197->attrs;
    D.32199 = (int) D.32198;
    D.32200 = D.32199 & 7;
    can = can_access_member (nested, member_class, context_klass, D.32200);
    if (can != 0) goto <D.22483>; else goto <D.32203>;
    <D.32203>:
    nested = nested->nested_in;
    <D.22485>:
    if (nested != 0B) goto <D.22484>; else goto <D.22483>;
    <D.22483>:
  }
  <D.32202>:
  if (can == 0) goto <D.32204>; else goto <D.32205>;
  <D.32204>:
  D.32206 = 0;
  return D.32206;
  <D.32205>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.32207>; else goto <D.32208>;
  <D.32207>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.22489>;
    <D.22488>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.22487>; else goto <D.32209>;
    <D.32209>:
    nested = nested->nested_in;
    <D.22489>:
    if (nested != 0B) goto <D.22488>; else goto <D.22487>;
    <D.22487>:
  }
  <D.32208>:
  if (can == 0) goto <D.32210>; else goto <D.32211>;
  <D.32210>:
  D.32206 = 0;
  return D.32206;
  <D.32211>:
  D.32206 = 1;
  return D.32206;
}


mono_class_can_access_class (struct MonoClass * source_class, struct MonoClass * target_class)
{
  gboolean D.32213;

  D.32213 = can_access_type (source_class, target_class);
  return D.32213;
}


mono_type_is_valid_enum_basetype (struct MonoType * type)
{
  unsigned char D.32215;
  int D.32216;
  gboolean D.32217;

  D.32215 = type->type;
  D.32216 = (int) D.32215;
  switch (D.32216) <default: <D.32218>, case 2: <D.22499>, case 3: <D.22502>, case 4: <D.22497>, case 5: <D.22498>, case 6: <D.22500>, case 7: <D.22501>, case 8: <D.22503>, case 9: <D.22504>, case 10: <D.22505>, case 11: <D.22506>, case 24: <D.22507>, case 25: <D.22508>>
  <D.22497>:
  <D.22498>:
  <D.22499>:
  <D.22500>:
  <D.22501>:
  <D.22502>:
  <D.22503>:
  <D.22504>:
  <D.22505>:
  <D.22506>:
  <D.22507>:
  <D.22508>:
  D.32217 = 1;
  return D.32217;
  <D.32218>:
  D.32217 = 0;
  return D.32217;
}


mono_class_is_valid_enum (struct MonoClass * klass)
{
  long unsigned int D.32220;
  long unsigned int D.32221;
  _Bool D.32222;
  long int D.32223;
  long int D.32224;
  struct MonoClass * D.32229;
  int D.22523;
  int iftmp.359;
  int D.22522;
  const char[5] * D.32234;
  unsigned char D.32235;
  int D.32236;
  unsigned char D.32237;
  int D.32238;
  const unsigned char * D.32243;
  unsigned char D.32244;
  int D.32245;
  const unsigned char * D.32246;
  unsigned char D.32247;
  int D.32248;
  const unsigned char * D.32253;
  unsigned char D.32254;
  int D.32255;
  const unsigned char * D.32256;
  unsigned char D.32257;
  int D.32258;
  const unsigned char * D.32263;
  unsigned char D.32264;
  int D.32265;
  const unsigned char * D.32266;
  unsigned char D.32267;
  int D.32268;
  const char * D.32270;
  int D.22532;
  int iftmp.360;
  int D.22531;
  const char[7] * D.32275;
  unsigned char D.32276;
  int D.32277;
  unsigned char D.32278;
  int D.32279;
  const unsigned char * D.32284;
  unsigned char D.32285;
  int D.32286;
  const unsigned char * D.32287;
  unsigned char D.32288;
  int D.32289;
  const unsigned char * D.32294;
  unsigned char D.32295;
  int D.32296;
  const unsigned char * D.32297;
  unsigned char D.32298;
  int D.32299;
  const unsigned char * D.32304;
  unsigned char D.32305;
  int D.32306;
  const unsigned char * D.32307;
  unsigned char D.32308;
  int D.32309;
  const char * D.32311;
  gboolean D.32312;
  unsigned int D.32313;
  unsigned int D.32314;
  struct MonoType * D.32317;
  short unsigned int D.32318;
  int D.32319;
  int D.32320;
  int D.32325;
  unsigned int D.32330;
  struct MonoClassField * field;
  void * iter;
  gboolean found_base_field;

  try
    {
      iter = 0B;
      found_base_field = 0;
      D.32220 = BIT_FIELD_REF <*klass, 64, 256>;
      D.32221 = D.32220 & 16;
      D.32222 = D.32221 == 0;
      D.32223 = (long int) D.32222;
      D.32224 = __builtin_expect (D.32223, 0);
      if (D.32224 != 0) goto <D.32225>; else goto <D.32226>;
      <D.32225>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9963, "klass->enumtype");
      <D.32226>:
      D.32229 = klass->parent;
      if (D.32229 == 0B) goto <D.32227>; else goto <D.32230>;
      <D.32230>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.32229 = klass->parent;
          __s2 = D.32229->name;
          D.32234 = "Enum";
          D.32235 = MEM[(const unsigned char *)D.32234];
          D.32236 = (int) D.32235;
          D.32237 = *__s2;
          D.32238 = (int) D.32237;
          __result = D.32236 - D.32238;
          {
            if (__s2_len != 0) goto <D.32239>; else goto <D.32240>;
            <D.32239>:
            if (__result == 0) goto <D.32241>; else goto <D.32242>;
            <D.32241>:
            D.32243 = &MEM[(void *)"Enum" + 1B];
            D.32244 = *D.32243;
            D.32245 = (int) D.32244;
            D.32246 = __s2 + 1;
            D.32247 = *D.32246;
            D.32248 = (int) D.32247;
            __result = D.32245 - D.32248;
            if (__s2_len > 1) goto <D.32249>; else goto <D.32250>;
            <D.32249>:
            if (__result == 0) goto <D.32251>; else goto <D.32252>;
            <D.32251>:
            D.32253 = &MEM[(void *)"Enum" + 2B];
            D.32254 = *D.32253;
            D.32255 = (int) D.32254;
            D.32256 = __s2 + 2;
            D.32257 = *D.32256;
            D.32258 = (int) D.32257;
            __result = D.32255 - D.32258;
            if (__s2_len > 2) goto <D.32259>; else goto <D.32260>;
            <D.32259>:
            if (__result == 0) goto <D.32261>; else goto <D.32262>;
            <D.32261>:
            D.32263 = &MEM[(void *)"Enum" + 3B];
            D.32264 = *D.32263;
            D.32265 = (int) D.32264;
            D.32266 = __s2 + 3;
            D.32267 = *D.32266;
            D.32268 = (int) D.32267;
            __result = D.32265 - D.32268;
            <D.32262>:
            <D.32260>:
            <D.32252>:
            <D.32250>:
            <D.32242>:
            <D.32240>:
          }
          D.22522 = __result;
        }
        iftmp.359 = -D.22522;
        goto <D.32269>;
        <D.32233>:
        D.32229 = klass->parent;
        D.32270 = D.32229->name;
        iftmp.359 = __builtin_strcmp (D.32270, "Enum");
        <D.32269>:
        D.22523 = iftmp.359;
      }
      if (D.22523 != 0) goto <D.32227>; else goto <D.32271>;
      <D.32271>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.32229 = klass->parent;
          __s2 = D.32229->name_space;
          D.32275 = "System";
          D.32276 = MEM[(const unsigned char *)D.32275];
          D.32277 = (int) D.32276;
          D.32278 = *__s2;
          D.32279 = (int) D.32278;
          __result = D.32277 - D.32279;
          {
            if (__s2_len != 0) goto <D.32280>; else goto <D.32281>;
            <D.32280>:
            if (__result == 0) goto <D.32282>; else goto <D.32283>;
            <D.32282>:
            D.32284 = &MEM[(void *)"System" + 1B];
            D.32285 = *D.32284;
            D.32286 = (int) D.32285;
            D.32287 = __s2 + 1;
            D.32288 = *D.32287;
            D.32289 = (int) D.32288;
            __result = D.32286 - D.32289;
            if (__s2_len > 1) goto <D.32290>; else goto <D.32291>;
            <D.32290>:
            if (__result == 0) goto <D.32292>; else goto <D.32293>;
            <D.32292>:
            D.32294 = &MEM[(void *)"System" + 2B];
            D.32295 = *D.32294;
            D.32296 = (int) D.32295;
            D.32297 = __s2 + 2;
            D.32298 = *D.32297;
            D.32299 = (int) D.32298;
            __result = D.32296 - D.32299;
            if (__s2_len > 2) goto <D.32300>; else goto <D.32301>;
            <D.32300>:
            if (__result == 0) goto <D.32302>; else goto <D.32303>;
            <D.32302>:
            D.32304 = &MEM[(void *)"System" + 3B];
            D.32305 = *D.32304;
            D.32306 = (int) D.32305;
            D.32307 = __s2 + 3;
            D.32308 = *D.32307;
            D.32309 = (int) D.32308;
            __result = D.32306 - D.32309;
            <D.32303>:
            <D.32301>:
            <D.32293>:
            <D.32291>:
            <D.32283>:
            <D.32281>:
          }
          D.22531 = __result;
        }
        iftmp.360 = -D.22531;
        goto <D.32310>;
        <D.32274>:
        D.32229 = klass->parent;
        D.32311 = D.32229->name_space;
        iftmp.360 = __builtin_strcmp (D.32311, "System");
        <D.32310>:
        D.22532 = iftmp.360;
      }
      if (D.22532 != 0) goto <D.32227>; else goto <D.32228>;
      <D.32227>:
      D.32312 = 0;
      return D.32312;
      <D.32228>:
      D.32313 = klass->flags;
      D.32314 = D.32313 & 24;
      if (D.32314 != 0) goto <D.32315>; else goto <D.32316>;
      <D.32315>:
      D.32312 = 0;
      return D.32312;
      <D.32316>:
      goto <D.22534>;
      <D.22533>:
      D.32317 = field->type;
      D.32318 = D.32317->attrs;
      D.32319 = (int) D.32318;
      D.32320 = D.32319 & 16;
      if (D.32320 == 0) goto <D.32321>; else goto <D.32322>;
      <D.32321>:
      if (found_base_field != 0) goto <D.32323>; else goto <D.32324>;
      <D.32323>:
      D.32312 = 0;
      return D.32312;
      <D.32324>:
      found_base_field = 1;
      D.32317 = field->type;
      D.32325 = mono_type_is_valid_enum_basetype (D.32317);
      if (D.32325 == 0) goto <D.32326>; else goto <D.32327>;
      <D.32326>:
      D.32312 = 0;
      return D.32312;
      <D.32327>:
      <D.32322>:
      <D.22534>:
      field = mono_class_get_fields (klass, &iter);
      if (field != 0B) goto <D.22533>; else goto <D.22535>;
      <D.22535>:
      if (found_base_field == 0) goto <D.32328>; else goto <D.32329>;
      <D.32328>:
      D.32312 = 0;
      return D.32312;
      <D.32329>:
      D.32330 = klass->method.count;
      if (D.32330 != 0) goto <D.32331>; else goto <D.32332>;
      <D.32331>:
      D.32312 = 0;
      return D.32312;
      <D.32332>:
      D.32312 = 1;
      return D.32312;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_generic_class_is_generic_type_definition (struct MonoGenericClass * gklass)
{
  gboolean D.32335;
  struct MonoGenericInst * D.32336;
  struct MonoClass * D.32337;
  struct MonoGenericContainer * D.32338;
  struct MonoGenericInst * D.32339;
  _Bool D.32340;

  D.32336 = gklass->context.class_inst;
  D.32337 = gklass->container_class;
  D.32338 = D.32337->generic_container;
  D.32339 = D.32338->context.class_inst;
  D.32340 = D.32336 == D.32339;
  D.32335 = (gboolean) D.32340;
  return D.32335;
}


mono_class_setup_interface_id (struct MonoClass * class)
{
  unsigned int D.32344;
  unsigned int D.32345;
  unsigned char D.32347;
  short unsigned int D.32349;
  unsigned int D.32352;
  short unsigned int D.32353;

  mono_loader_lock ();
  D.32344 = class->flags;
  D.32345 = D.32344 & 32;
  if (D.32345 != 0) goto <D.32342>; else goto <D.32346>;
  <D.32346>:
  D.32347 = class->byval_arg.type;
  if (D.32347 == 19) goto <D.32342>; else goto <D.32348>;
  <D.32348>:
  D.32347 = class->byval_arg.type;
  if (D.32347 == 30) goto <D.32342>; else goto <D.32343>;
  <D.32342>:
  D.32349 = class->interface_id;
  if (D.32349 == 0) goto <D.32350>; else goto <D.32351>;
  <D.32350>:
  D.32352 = mono_get_unique_iid (class);
  D.32353 = (short unsigned int) D.32352;
  class->interface_id = D.32353;
  <D.32351>:
  <D.32343>:
  mono_loader_unlock ();
}


mono_class_alloc_ext (struct MonoClass * klass)
{
  struct MonoClassExt * D.32354;
  void * D.32357;
  unsigned int class_ext_size.361;
  unsigned int class_ext_size.362;

  D.32354 = klass->ext;
  if (D.32354 == 0B) goto <D.32355>; else goto <D.32356>;
  <D.32355>:
  D.32357 = mono_class_alloc0 (klass, 64);
  klass->ext = D.32357;
  class_ext_size.361 = class_ext_size;
  class_ext_size.362 = class_ext_size.361 + 64;
  class_ext_size = class_ext_size.362;
  <D.32356>:
}


mono_class_setup_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  long unsigned int D.32360;
  long unsigned int D.32361;
  unsigned char D.32368;
  unsigned char D.32370;
  guint16 iftmp.363;
  struct MonoClass * D.32373;
  struct MonoImage * D.32377;
  short unsigned int D.32378;
  unsigned int D.32379;
  unsigned int D.32380;
  void * D.32381;
  struct MonoClass * D.32382;
  struct MonoType * D.32383;
  struct MonoClass * * D.32384;
  struct MonoClass * D.32385;
  struct MonoClass * D.32386;
  struct MonoClass * * D.32389;
  struct MonoClass * D.32390;
  struct MonoGenericClass * D.32391;
  short unsigned int D.32394;
  unsigned int D.32395;
  unsigned int D.32396;
  int D.32397;
  void * D.32398;
  long unsigned int D.32399;
  long unsigned int D.32400;
  struct MonoClass * * D.32401;
  struct MonoClass * * D.32402;
  struct MonoClass * * D.32403;
  struct MonoClass * D.32404;
  struct MonoGenericContext * D.32405;
  struct MonoClass * D.32406;
  int D.32407;
  gchar * D.32410;
  int D.32411;
  int i;

  mono_error_init (error);
  D.32360 = BIT_FIELD_REF <*klass, 64, 256>;
  D.32361 = D.32360 & 4294967296;
  if (D.32361 != 0) goto <D.32362>; else goto <D.32363>;
  <D.32362>:
  return;
  <D.32363>:
  mono_loader_lock ();
  D.32360 = BIT_FIELD_REF <*klass, 64, 256>;
  D.32361 = D.32360 & 4294967296;
  if (D.32361 != 0) goto <D.32364>; else goto <D.32365>;
  <D.32364>:
  mono_loader_unlock ();
  return;
  <D.32365>:
  D.32368 = klass->rank;
  if (D.32368 == 1) goto <D.32369>; else goto <D.32366>;
  <D.32369>:
  D.32370 = klass->byval_arg.type;
  if (D.32370 != 20) goto <D.32371>; else goto <D.32366>;
  <D.32371>:
  {
    struct MonoType * args[1];

    try
      {
        D.32373 = mono_defaults.generic_ireadonlylist_class;
        if (D.32373 != 0B) goto <D.32374>; else goto <D.32375>;
        <D.32374>:
        iftmp.363 = 2;
        goto <D.32376>;
        <D.32375>:
        iftmp.363 = 1;
        <D.32376>:
        klass->interface_count = iftmp.363;
        D.32377 = klass->image;
        D.32378 = klass->interface_count;
        D.32379 = (unsigned int) D.32378;
        D.32380 = D.32379 * 8;
        D.32381 = mono_image_alloc0 (D.32377, D.32380);
        klass->interfaces = D.32381;
        D.32382 = klass->element_class;
        D.32383 = &D.32382->byval_arg;
        args[0] = D.32383;
        D.32384 = klass->interfaces;
        D.32385 = mono_defaults.generic_ilist_class;
        D.32386 = mono_class_bind_generic_parameters (D.32385, 1, &args, 0);
        *D.32384 = D.32386;
        D.32378 = klass->interface_count;
        if (D.32378 > 1) goto <D.32387>; else goto <D.32388>;
        <D.32387>:
        D.32384 = klass->interfaces;
        D.32389 = D.32384 + 8;
        D.32373 = mono_defaults.generic_ireadonlylist_class;
        D.32390 = mono_class_bind_generic_parameters (D.32373, 1, &args, 0);
        *D.32389 = D.32390;
        <D.32388>:
      }
    finally
      {
        args = {CLOBBER};
      }
  }
  goto <D.32367>;
  <D.32366>:
  D.32391 = klass->generic_class;
  if (D.32391 != 0B) goto <D.32392>; else goto <D.32393>;
  <D.32392>:
  {
    struct MonoClass * gklass;

    D.32391 = klass->generic_class;
    gklass = D.32391->container_class;
    D.32394 = gklass->interface_count;
    klass->interface_count = D.32394;
    D.32378 = klass->interface_count;
    D.32395 = (unsigned int) D.32378;
    D.32396 = D.32395 * 8;
    D.32397 = (int) D.32396;
    D.32398 = mono_class_alloc0 (klass, D.32397);
    klass->interfaces = D.32398;
    i = 0;
    goto <D.22553>;
    <D.22552>:
    D.32384 = klass->interfaces;
    D.32399 = (long unsigned int) i;
    D.32400 = D.32399 * 8;
    D.32401 = D.32384 + D.32400;
    D.32402 = gklass->interfaces;
    D.32399 = (long unsigned int) i;
    D.32400 = D.32399 * 8;
    D.32403 = D.32402 + D.32400;
    D.32404 = *D.32403;
    D.32391 = klass->generic_class;
    D.32405 = mono_generic_class_get_context (D.32391);
    D.32406 = mono_class_inflate_generic_class_checked (D.32404, D.32405, error);
    *D.32401 = D.32406;
    D.32407 = mono_error_ok (error);
    if (D.32407 == 0) goto <D.32408>; else goto <D.32409>;
    <D.32408>:
    D.32410 = monoeg_strdup ("Could not setup the interfaces");
    mono_class_set_failure (klass, 7, D.32410);
    klass->interfaces = 0B;
    return;
    <D.32409>:
    i = i + 1;
    <D.22553>:
    D.32378 = klass->interface_count;
    D.32411 = (int) D.32378;
    if (D.32411 > i) goto <D.22552>; else goto <D.22554>;
    <D.22554>:
  }
  <D.32393>:
  <D.32367>:
  mono_memory_barrier ();
  klass->interfaces_inited = 1;
  mono_loader_unlock ();
}


mono_class_get_fields_lazy (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.32415;
  void * D.32416;
  struct MonoClassField * D.32419;
  unsigned int D.32422;
  long unsigned int D.32425;
  long unsigned int D.32426;
  struct MonoClassField * D.32427;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.32413>; else goto <D.32414>;
  <D.32413>:
  D.32415 = 0B;
  return D.32415;
  <D.32414>:
  D.32416 = *iter;
  if (D.32416 == 0B) goto <D.32417>; else goto <D.32418>;
  <D.32417>:
  mono_class_setup_basic_field_info_locking (klass);
  D.32419 = klass->fields;
  if (D.32419 == 0B) goto <D.32420>; else goto <D.32421>;
  <D.32420>:
  D.32415 = 0B;
  return D.32415;
  <D.32421>:
  D.32422 = klass->field.count;
  if (D.32422 != 0) goto <D.32423>; else goto <D.32424>;
  <D.32423>:
  D.32419 = klass->fields;
  *iter = D.32419;
  D.32415 = *iter;
  return D.32415;
  <D.32424>:
  D.32415 = 0B;
  return D.32415;
  <D.32418>:
  field = *iter;
  field = field + 32;
  D.32419 = klass->fields;
  D.32422 = klass->field.count;
  D.32425 = (long unsigned int) D.32422;
  D.32426 = D.32425 * 32;
  D.32427 = D.32419 + D.32426;
  if (D.32427 > field) goto <D.32428>; else goto <D.32429>;
  <D.32428>:
  *iter = field;
  D.32415 = *iter;
  return D.32415;
  <D.32429>:
  D.32415 = 0B;
  return D.32415;
}


mono_class_setup_basic_field_info_locking (struct MonoClass * class)
{
  mono_loader_lock ();
  mono_class_setup_basic_field_info (class);
  mono_loader_unlock ();
}


mono_class_full_name (struct MonoClass * klass)
{
  char * D.32431;
  struct MonoType * D.32432;

  D.32432 = &klass->byval_arg;
  D.32431 = mono_type_full_name (D.32432);
  return D.32431;
}


