ves_icall_System_Globalization_CultureInfo_construct_datetime_format (struct MonoCultureInfo * this)
{
  int D.16329;
  _Bool D.16330;
  long int D.16331;
  long int D.16332;
  unsigned char D.16335;
  struct MonoArray * * D.16336;
  const stridx_t[7] * D.16337;
  struct MonoArray * D.16338;
  struct MonoArray * * D.16339;
  const stridx_t[13] * D.16340;
  struct MonoArray * D.16341;
  struct MonoString * * D.16342;
  short unsigned int D.16343;
  sizetype D.16344;
  const char * D.16345;
  struct MonoString * D.16346;
  signed char D.16347;
  unsigned int D.16348;
  struct MonoString * * D.16349;
  short unsigned int D.16350;
  sizetype D.16351;
  const char * D.16352;
  struct MonoString * D.16353;
  struct MonoArray * * D.16354;
  const stridx_t[7] * D.16355;
  struct MonoArray * D.16356;
  struct MonoArray * * D.16357;
  const stridx_t[7] * D.16358;
  struct MonoArray * D.16359;
  signed char D.16360;
  unsigned int D.16361;
  struct MonoString * * D.16362;
  short unsigned int D.16363;
  sizetype D.16364;
  const char * D.16365;
  struct MonoString * D.16366;
  struct MonoString * * D.16367;
  short unsigned int D.16368;
  sizetype D.16369;
  const char * D.16370;
  struct MonoString * D.16371;
  struct MonoString * * D.16372;
  short unsigned int D.16373;
  sizetype D.16374;
  const char * D.16375;
  struct MonoString * D.16376;
  struct MonoArray * * D.16377;
  const stridx_t[13] * D.16378;
  struct MonoArray * D.16379;
  struct MonoString * * D.16380;
  short unsigned int D.16381;
  sizetype D.16382;
  const char * D.16383;
  struct MonoString * D.16384;
  struct MonoString * * D.16385;
  short unsigned int D.16386;
  sizetype D.16387;
  const char * D.16388;
  struct MonoString * D.16389;
  struct MonoString * * D.16390;
  short unsigned int D.16391;
  sizetype D.16392;
  const char * D.16393;
  struct MonoString * D.16394;
  struct MonoString * * D.16395;
  short unsigned int D.16396;
  sizetype D.16397;
  const char * D.16398;
  struct MonoString * D.16399;
  struct MonoString * * D.16400;
  short unsigned int D.16401;
  sizetype D.16402;
  const char * D.16403;
  struct MonoString * D.16404;
  struct MonoArray * * D.16405;
  const stridx_t[14] * D.16406;
  struct MonoArray * D.16407;
  struct MonoArray * * D.16408;
  const stridx_t[8] * D.16409;
  struct MonoArray * D.16410;
  struct MonoArray * * D.16411;
  const stridx_t[12] * D.16412;
  struct MonoArray * D.16413;
  struct MonoArray * * D.16414;
  const stridx_t[9] * D.16415;
  struct MonoArray * D.16416;
  struct MonoArray * * D.16417;
  const stridx_t[13] * D.16418;
  struct MonoArray * D.16419;
  struct MonoArray * * D.16420;
  const stridx_t[13] * D.16421;
  struct MonoArray * D.16422;
  struct MonoDomain * domain;
  struct MonoDateTimeFormatInfo * datetime;
  const struct DateTimeFormatEntry * dfe;

  D.16329 = this->datetime_index;
  D.16330 = D.16329 < 0;
  D.16331 = (long int) D.16330;
  D.16332 = __builtin_expect (D.16331, 0);
  if (D.16332 != 0) goto <D.16333>; else goto <D.16334>;
  <D.16333>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 169, "this->datetime_index >= 0");
  <D.16334>:
  datetime = this->datetime_format;
  D.16329 = this->datetime_index;
  dfe = &datetime_format_entries[D.16329];
  domain = mono_domain_get ();
  D.16335 = this->is_read_only;
  datetime->readOnly = D.16335;
  D.16336 = &datetime->AbbreviatedDayNames;
  D.16337 = &dfe->abbreviated_day_names;
  D.16338 = create_names_array_idx (D.16337, 7);
  mono_gc_wbarrier_set_field (datetime, D.16336, D.16338);
  D.16339 = &datetime->AbbreviatedMonthNames;
  D.16340 = &dfe->abbreviated_month_names;
  D.16341 = create_names_array_idx (D.16340, 13);
  mono_gc_wbarrier_set_field (datetime, D.16339, D.16341);
  D.16342 = &datetime->AMDesignator;
  D.16343 = dfe->am_designator;
  D.16344 = (sizetype) D.16343;
  D.16345 = &locale_strings + D.16344;
  D.16346 = mono_string_new (domain, D.16345);
  mono_gc_wbarrier_set_field (datetime, D.16342, D.16346);
  D.16347 = dfe->calendar_week_rule;
  D.16348 = (unsigned int) D.16347;
  datetime->CalendarWeekRule = D.16348;
  D.16349 = &datetime->DateSeparator;
  D.16350 = dfe->date_separator;
  D.16351 = (sizetype) D.16350;
  D.16352 = &locale_strings + D.16351;
  D.16353 = mono_string_new (domain, D.16352);
  mono_gc_wbarrier_set_field (datetime, D.16349, D.16353);
  D.16354 = &datetime->DayNames;
  D.16355 = &dfe->day_names;
  D.16356 = create_names_array_idx (D.16355, 7);
  mono_gc_wbarrier_set_field (datetime, D.16354, D.16356);
  D.16357 = &datetime->ShortestDayNames;
  D.16358 = &dfe->shortest_day_names;
  D.16359 = create_names_array_idx (D.16358, 7);
  mono_gc_wbarrier_set_field (datetime, D.16357, D.16359);
  D.16360 = dfe->first_day_of_week;
  D.16361 = (unsigned int) D.16360;
  datetime->FirstDayOfWeek = D.16361;
  D.16362 = &datetime->LongDatePattern;
  D.16363 = dfe->long_date_pattern;
  D.16364 = (sizetype) D.16363;
  D.16365 = &locale_strings + D.16364;
  D.16366 = mono_string_new (domain, D.16365);
  mono_gc_wbarrier_set_field (datetime, D.16362, D.16366);
  D.16367 = &datetime->LongTimePattern;
  D.16368 = dfe->long_time_pattern;
  D.16369 = (sizetype) D.16368;
  D.16370 = &locale_strings + D.16369;
  D.16371 = mono_string_new (domain, D.16370);
  mono_gc_wbarrier_set_field (datetime, D.16367, D.16371);
  D.16372 = &datetime->MonthDayPattern;
  D.16373 = dfe->month_day_pattern;
  D.16374 = (sizetype) D.16373;
  D.16375 = &locale_strings + D.16374;
  D.16376 = mono_string_new (domain, D.16375);
  mono_gc_wbarrier_set_field (datetime, D.16372, D.16376);
  D.16377 = &datetime->MonthNames;
  D.16378 = &dfe->month_names;
  D.16379 = create_names_array_idx (D.16378, 13);
  mono_gc_wbarrier_set_field (datetime, D.16377, D.16379);
  D.16380 = &datetime->PMDesignator;
  D.16381 = dfe->pm_designator;
  D.16382 = (sizetype) D.16381;
  D.16383 = &locale_strings + D.16382;
  D.16384 = mono_string_new (domain, D.16383);
  mono_gc_wbarrier_set_field (datetime, D.16380, D.16384);
  D.16385 = &datetime->ShortDatePattern;
  D.16386 = dfe->short_date_pattern;
  D.16387 = (sizetype) D.16386;
  D.16388 = &locale_strings + D.16387;
  D.16389 = mono_string_new (domain, D.16388);
  mono_gc_wbarrier_set_field (datetime, D.16385, D.16389);
  D.16390 = &datetime->ShortTimePattern;
  D.16391 = dfe->short_time_pattern;
  D.16392 = (sizetype) D.16391;
  D.16393 = &locale_strings + D.16392;
  D.16394 = mono_string_new (domain, D.16393);
  mono_gc_wbarrier_set_field (datetime, D.16390, D.16394);
  D.16395 = &datetime->TimeSeparator;
  D.16396 = dfe->time_separator;
  D.16397 = (sizetype) D.16396;
  D.16398 = &locale_strings + D.16397;
  D.16399 = mono_string_new (domain, D.16398);
  mono_gc_wbarrier_set_field (datetime, D.16395, D.16399);
  D.16400 = &datetime->YearMonthPattern;
  D.16401 = dfe->year_month_pattern;
  D.16402 = (sizetype) D.16401;
  D.16403 = &locale_strings + D.16402;
  D.16404 = mono_string_new (domain, D.16403);
  mono_gc_wbarrier_set_field (datetime, D.16400, D.16404);
  D.16405 = &datetime->ShortDatePatterns;
  D.16406 = &dfe->short_date_patterns;
  D.16407 = create_names_array_idx_dynamic (D.16406, 14);
  mono_gc_wbarrier_set_field (datetime, D.16405, D.16407);
  D.16408 = &datetime->LongDatePatterns;
  D.16409 = &dfe->long_date_patterns;
  D.16410 = create_names_array_idx_dynamic (D.16409, 8);
  mono_gc_wbarrier_set_field (datetime, D.16408, D.16410);
  D.16411 = &datetime->ShortTimePatterns;
  D.16412 = &dfe->short_time_patterns;
  D.16413 = create_names_array_idx_dynamic (D.16412, 12);
  mono_gc_wbarrier_set_field (datetime, D.16411, D.16413);
  D.16414 = &datetime->LongTimePatterns;
  D.16415 = &dfe->long_time_patterns;
  D.16416 = create_names_array_idx_dynamic (D.16415, 9);
  mono_gc_wbarrier_set_field (datetime, D.16414, D.16416);
  D.16417 = &datetime->GenitiveMonthNames;
  D.16418 = &dfe->month_genitive_names;
  D.16419 = create_names_array_idx (D.16418, 13);
  mono_gc_wbarrier_set_field (datetime, D.16417, D.16419);
  D.16420 = &datetime->GenitiveAbbreviatedMonthNames;
  D.16421 = &dfe->abbreviated_month_genitive_names;
  D.16422 = create_names_array_idx (D.16421, 13);
  mono_gc_wbarrier_set_field (datetime, D.16420, D.16422);
}


create_names_array_idx_dynamic (const guint16 * names, int ml)
{
  struct MonoArray * D.16425;
  unsigned int i.0;
  unsigned int D.16427;
  const guint16 * D.16428;
  short unsigned int D.16429;
  struct MonoDomain * D.16431;
  struct MonoClass * D.16075;
  struct MonoClass * tmp_klass.1;
  struct MonoClass * D.16435;
  struct MonoClass * tmp_klass.2;
  _Bool D.16437;
  long int D.16438;
  long int D.16439;
  struct MonoVTable * D.16442;
  unsigned int len.3;
  unsigned int i.4;
  sizetype D.16445;
  const char * D.16446;
  struct MonoString * D.16447;
  struct MonoArray * ret;
  struct MonoDomain * domain;
  int i;
  int len;

  len = 0;
  if (names == 0B) goto <D.16423>; else goto <D.16424>;
  <D.16423>:
  D.16425 = 0B;
  return D.16425;
  <D.16424>:
  domain = mono_domain_get ();
  i = 0;
  goto <D.16073>;
  <D.16072>:
  i.0 = (unsigned int) i;
  D.16427 = i.0 * 2;
  D.16428 = names + D.16427;
  D.16429 = *D.16428;
  if (D.16429 == 0) goto <D.16071>; else goto <D.16430>;
  <D.16430>:
  len = len + 1;
  i = i + 1;
  <D.16073>:
  if (i < ml) goto <D.16072>; else goto <D.16071>;
  <D.16071>:
  D.16431 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.1 = tmp_klass;
      if (tmp_klass.1 == 0B) goto <D.16433>; else goto <D.16434>;
      <D.16433>:
      D.16435 = mono_get_string_class ();
      tmp_klass.2 = mono_array_class_get (D.16435, 1);
      tmp_klass = tmp_klass.2;
      tmp_klass.1 = tmp_klass;
      D.16437 = tmp_klass.1 == 0B;
      D.16438 = (long int) D.16437;
      D.16439 = __builtin_expect (D.16438, 0);
      if (D.16439 != 0) goto <D.16440>; else goto <D.16441>;
      <D.16440>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 152, "tmp_klass");
      <D.16441>:
      <D.16434>:
    }
    D.16075 = tmp_klass;
  }
  D.16442 = mono_class_vtable (D.16431, D.16075);
  len.3 = (unsigned int) len;
  ret = mono_array_new_specific (D.16442, len.3);
  i = 0;
  goto <D.16078>;
  <D.16077>:
  {
    void * * __p;

    i.4 = (unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, i.4);
    i.0 = (unsigned int) i;
    D.16427 = i.0 * 2;
    D.16428 = names + D.16427;
    D.16429 = *D.16428;
    D.16445 = (sizetype) D.16429;
    D.16446 = &locale_strings + D.16445;
    D.16447 = mono_string_new (domain, D.16446);
    mono_gc_wbarrier_set_arrayref (ret, __p, D.16447);
  }
  i = i + 1;
  <D.16078>:
  if (i < len) goto <D.16077>; else goto <D.16079>;
  <D.16079>:
  D.16425 = ret;
  return D.16425;
}


create_names_array_idx (const guint16 * names, int ml)
{
  struct MonoArray * D.16451;
  struct MonoDomain * D.16452;
  struct MonoClass * D.16058;
  struct MonoClass * tmp_klass.5;
  struct MonoClass * D.16456;
  struct MonoClass * tmp_klass.6;
  _Bool D.16458;
  long int D.16459;
  long int D.16460;
  struct MonoVTable * D.16463;
  unsigned int ml.7;
  unsigned int i.8;
  unsigned int i.9;
  unsigned int D.16467;
  const guint16 * D.16468;
  short unsigned int D.16469;
  sizetype D.16470;
  const char * D.16471;
  struct MonoString * D.16472;
  struct MonoArray * ret;
  struct MonoDomain * domain;
  int i;

  if (names == 0B) goto <D.16449>; else goto <D.16450>;
  <D.16449>:
  D.16451 = 0B;
  return D.16451;
  <D.16450>:
  domain = mono_domain_get ();
  D.16452 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.5 = tmp_klass;
      if (tmp_klass.5 == 0B) goto <D.16454>; else goto <D.16455>;
      <D.16454>:
      D.16456 = mono_get_string_class ();
      tmp_klass.6 = mono_array_class_get (D.16456, 1);
      tmp_klass = tmp_klass.6;
      tmp_klass.5 = tmp_klass;
      D.16458 = tmp_klass.5 == 0B;
      D.16459 = (long int) D.16458;
      D.16460 = __builtin_expect (D.16459, 0);
      if (D.16460 != 0) goto <D.16461>; else goto <D.16462>;
      <D.16461>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 126, "tmp_klass");
      <D.16462>:
      <D.16455>:
    }
    D.16058 = tmp_klass;
  }
  D.16463 = mono_class_vtable (D.16452, D.16058);
  ml.7 = (unsigned int) ml;
  ret = mono_array_new_specific (D.16463, ml.7);
  i = 0;
  goto <D.16061>;
  <D.16060>:
  {
    void * * __p;

    i.8 = (unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, i.8);
    i.9 = (unsigned int) i;
    D.16467 = i.9 * 2;
    D.16468 = names + D.16467;
    D.16469 = *D.16468;
    D.16470 = (sizetype) D.16469;
    D.16471 = &locale_strings + D.16470;
    D.16472 = mono_string_new (domain, D.16471);
    mono_gc_wbarrier_set_arrayref (ret, __p, D.16472);
  }
  i = i + 1;
  <D.16061>:
  if (i < ml) goto <D.16060>; else goto <D.16062>;
  <D.16062>:
  D.16451 = ret;
  return D.16451;
}


ves_icall_System_Globalization_CultureInfo_construct_number_format (struct MonoCultureInfo * this)
{
  struct MonoNumberFormatInfo * D.16474;
  _Bool D.16475;
  long int D.16476;
  long int D.16477;
  int D.16480;
  unsigned char D.16483;
  signed char D.16484;
  int D.16485;
  struct MonoString * * D.16486;
  short unsigned int D.16487;
  sizetype D.16488;
  const char * D.16489;
  struct MonoString * D.16490;
  struct MonoString * * D.16491;
  short unsigned int D.16492;
  sizetype D.16493;
  const char * D.16494;
  struct MonoString * D.16495;
  struct MonoArray * * D.16496;
  const gint[2] * D.16497;
  struct MonoArray * D.16498;
  signed char D.16499;
  int D.16500;
  signed char D.16501;
  int D.16502;
  struct MonoString * * D.16503;
  short unsigned int D.16504;
  sizetype D.16505;
  const char * D.16506;
  struct MonoString * D.16507;
  struct MonoString * * D.16508;
  short unsigned int D.16509;
  sizetype D.16510;
  const char * D.16511;
  struct MonoString * D.16512;
  struct MonoString * * D.16513;
  short unsigned int D.16514;
  sizetype D.16515;
  const char * D.16516;
  struct MonoString * D.16517;
  struct MonoString * * D.16518;
  short unsigned int D.16519;
  sizetype D.16520;
  const char * D.16521;
  struct MonoString * D.16522;
  signed char D.16523;
  unsigned int D.16524;
  struct MonoString * * D.16525;
  short unsigned int D.16526;
  sizetype D.16527;
  const char * D.16528;
  struct MonoString * D.16529;
  struct MonoString * * D.16530;
  short unsigned int D.16531;
  sizetype D.16532;
  const char * D.16533;
  struct MonoString * D.16534;
  struct MonoArray * * D.16535;
  const gint[2] * D.16536;
  struct MonoArray * D.16537;
  signed char D.16538;
  int D.16539;
  signed char D.16540;
  int D.16541;
  struct MonoString * * D.16542;
  short unsigned int D.16543;
  sizetype D.16544;
  const char * D.16545;
  struct MonoString * D.16546;
  struct MonoString * * D.16547;
  short unsigned int D.16548;
  sizetype D.16549;
  const char * D.16550;
  struct MonoString * D.16551;
  struct MonoArray * * D.16552;
  const gint[2] * D.16553;
  struct MonoArray * D.16554;
  signed char D.16555;
  int D.16556;
  signed char D.16557;
  int D.16558;
  struct MonoString * * D.16559;
  short unsigned int D.16560;
  sizetype D.16561;
  const char * D.16562;
  struct MonoString * D.16563;
  struct MonoString * * D.16564;
  short unsigned int D.16565;
  sizetype D.16566;
  const char * D.16567;
  struct MonoString * D.16568;
  struct MonoString * * D.16569;
  short unsigned int D.16570;
  sizetype D.16571;
  const char * D.16572;
  struct MonoString * D.16573;
  struct MonoString * * D.16574;
  short unsigned int D.16575;
  sizetype D.16576;
  const char * D.16577;
  struct MonoString * D.16578;
  struct MonoDomain * domain;
  struct MonoNumberFormatInfo * number;
  const struct NumberFormatEntry * nfe;

  D.16474 = this->number_format;
  D.16475 = D.16474 == 0B;
  D.16476 = (long int) D.16475;
  D.16477 = __builtin_expect (D.16476, 0);
  if (D.16477 != 0) goto <D.16478>; else goto <D.16479>;
  <D.16478>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 217, "this->number_format != 0");
  <D.16479>:
  D.16480 = this->number_index;
  if (D.16480 < 0) goto <D.16481>; else goto <D.16482>;
  <D.16481>:
  return;
  <D.16482>:
  number = this->number_format;
  D.16480 = this->number_index;
  nfe = &number_format_entries[D.16480];
  domain = mono_domain_get ();
  D.16483 = this->is_read_only;
  number->readOnly = D.16483;
  D.16484 = nfe->currency_decimal_digits;
  D.16485 = (int) D.16484;
  number->currencyDecimalDigits = D.16485;
  D.16486 = &number->currencyDecimalSeparator;
  D.16487 = nfe->currency_decimal_separator;
  D.16488 = (sizetype) D.16487;
  D.16489 = &locale_strings + D.16488;
  D.16490 = mono_string_new (domain, D.16489);
  mono_gc_wbarrier_set_field (number, D.16486, D.16490);
  D.16491 = &number->currencyGroupSeparator;
  D.16492 = nfe->currency_group_separator;
  D.16493 = (sizetype) D.16492;
  D.16494 = &locale_strings + D.16493;
  D.16495 = mono_string_new (domain, D.16494);
  mono_gc_wbarrier_set_field (number, D.16491, D.16495);
  D.16496 = &number->currencyGroupSizes;
  D.16497 = &nfe->currency_group_sizes;
  D.16498 = create_group_sizes_array (D.16497, 2);
  mono_gc_wbarrier_set_field (number, D.16496, D.16498);
  D.16499 = nfe->currency_negative_pattern;
  D.16500 = (int) D.16499;
  number->currencyNegativePattern = D.16500;
  D.16501 = nfe->currency_positive_pattern;
  D.16502 = (int) D.16501;
  number->currencyPositivePattern = D.16502;
  D.16503 = &number->currencySymbol;
  D.16504 = nfe->currency_symbol;
  D.16505 = (sizetype) D.16504;
  D.16506 = &locale_strings + D.16505;
  D.16507 = mono_string_new (domain, D.16506);
  mono_gc_wbarrier_set_field (number, D.16503, D.16507);
  D.16508 = &number->naNSymbol;
  D.16509 = nfe->nan_symbol;
  D.16510 = (sizetype) D.16509;
  D.16511 = &locale_strings + D.16510;
  D.16512 = mono_string_new (domain, D.16511);
  mono_gc_wbarrier_set_field (number, D.16508, D.16512);
  D.16513 = &number->negativeInfinitySymbol;
  D.16514 = nfe->negative_infinity_symbol;
  D.16515 = (sizetype) D.16514;
  D.16516 = &locale_strings + D.16515;
  D.16517 = mono_string_new (domain, D.16516);
  mono_gc_wbarrier_set_field (number, D.16513, D.16517);
  D.16518 = &number->negativeSign;
  D.16519 = nfe->negative_sign;
  D.16520 = (sizetype) D.16519;
  D.16521 = &locale_strings + D.16520;
  D.16522 = mono_string_new (domain, D.16521);
  mono_gc_wbarrier_set_field (number, D.16518, D.16522);
  D.16523 = nfe->number_decimal_digits;
  D.16524 = (unsigned int) D.16523;
  number->numberDecimalDigits = D.16524;
  D.16525 = &number->numberDecimalSeparator;
  D.16526 = nfe->number_decimal_separator;
  D.16527 = (sizetype) D.16526;
  D.16528 = &locale_strings + D.16527;
  D.16529 = mono_string_new (domain, D.16528);
  mono_gc_wbarrier_set_field (number, D.16525, D.16529);
  D.16530 = &number->numberGroupSeparator;
  D.16531 = nfe->number_group_separator;
  D.16532 = (sizetype) D.16531;
  D.16533 = &locale_strings + D.16532;
  D.16534 = mono_string_new (domain, D.16533);
  mono_gc_wbarrier_set_field (number, D.16530, D.16534);
  D.16535 = &number->numberGroupSizes;
  D.16536 = &nfe->number_group_sizes;
  D.16537 = create_group_sizes_array (D.16536, 2);
  mono_gc_wbarrier_set_field (number, D.16535, D.16537);
  D.16538 = nfe->number_negative_pattern;
  D.16539 = (int) D.16538;
  number->numberNegativePattern = D.16539;
  D.16540 = nfe->percent_decimal_digits;
  D.16541 = (int) D.16540;
  number->percentDecimalDigits = D.16541;
  D.16542 = &number->percentDecimalSeparator;
  D.16543 = nfe->percent_decimal_separator;
  D.16544 = (sizetype) D.16543;
  D.16545 = &locale_strings + D.16544;
  D.16546 = mono_string_new (domain, D.16545);
  mono_gc_wbarrier_set_field (number, D.16542, D.16546);
  D.16547 = &number->percentGroupSeparator;
  D.16548 = nfe->percent_group_separator;
  D.16549 = (sizetype) D.16548;
  D.16550 = &locale_strings + D.16549;
  D.16551 = mono_string_new (domain, D.16550);
  mono_gc_wbarrier_set_field (number, D.16547, D.16551);
  D.16552 = &number->percentGroupSizes;
  D.16553 = &nfe->percent_group_sizes;
  D.16554 = create_group_sizes_array (D.16553, 2);
  mono_gc_wbarrier_set_field (number, D.16552, D.16554);
  D.16555 = nfe->percent_negative_pattern;
  D.16556 = (int) D.16555;
  number->percentNegativePattern = D.16556;
  D.16557 = nfe->percent_positive_pattern;
  D.16558 = (int) D.16557;
  number->percentPositivePattern = D.16558;
  D.16559 = &number->percentSymbol;
  D.16560 = nfe->percent_symbol;
  D.16561 = (sizetype) D.16560;
  D.16562 = &locale_strings + D.16561;
  D.16563 = mono_string_new (domain, D.16562);
  mono_gc_wbarrier_set_field (number, D.16559, D.16563);
  D.16564 = &number->perMilleSymbol;
  D.16565 = nfe->per_mille_symbol;
  D.16566 = (sizetype) D.16565;
  D.16567 = &locale_strings + D.16566;
  D.16568 = mono_string_new (domain, D.16567);
  mono_gc_wbarrier_set_field (number, D.16564, D.16568);
  D.16569 = &number->positiveInfinitySymbol;
  D.16570 = nfe->positive_infinity_symbol;
  D.16571 = (sizetype) D.16570;
  D.16572 = &locale_strings + D.16571;
  D.16573 = mono_string_new (domain, D.16572);
  mono_gc_wbarrier_set_field (number, D.16569, D.16573);
  D.16574 = &number->positiveSign;
  D.16575 = nfe->positive_sign;
  D.16576 = (sizetype) D.16575;
  D.16577 = &locale_strings + D.16576;
  D.16578 = mono_string_new (domain, D.16577);
  mono_gc_wbarrier_set_field (number, D.16574, D.16578);
}


create_group_sizes_array (const gint * gs, gint ml)
{
  unsigned int i.10;
  unsigned int D.16581;
  const gint * D.16582;
  int D.16583;
  struct MonoDomain * D.16585;
  struct MonoClass * D.16045;
  struct MonoClass * tmp_klass.11;
  struct MonoClass * D.16589;
  struct MonoClass * tmp_klass.12;
  _Bool D.16591;
  long int D.16592;
  long int D.16593;
  struct MonoVTable * D.16596;
  unsigned int len.13;
  unsigned int i.14;
  struct MonoArray * D.16599;
  struct MonoArray * ret;
  int i;
  int len;

  len = 0;
  i = 0;
  goto <D.16043>;
  <D.16042>:
  i.10 = (unsigned int) i;
  D.16581 = i.10 * 4;
  D.16582 = gs + D.16581;
  D.16583 = *D.16582;
  if (D.16583 == -1) goto <D.16041>; else goto <D.16584>;
  <D.16584>:
  len = len + 1;
  i = i + 1;
  <D.16043>:
  if (i < ml) goto <D.16042>; else goto <D.16041>;
  <D.16041>:
  D.16585 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.11 = tmp_klass;
      if (tmp_klass.11 == 0B) goto <D.16587>; else goto <D.16588>;
      <D.16587>:
      D.16589 = mono_get_int32_class ();
      tmp_klass.12 = mono_array_class_get (D.16589, 1);
      tmp_klass = tmp_klass.12;
      tmp_klass.11 = tmp_klass;
      D.16591 = tmp_klass.11 == 0B;
      D.16592 = (long int) D.16591;
      D.16593 = __builtin_expect (D.16592, 0);
      if (D.16593 != 0) goto <D.16594>; else goto <D.16595>;
      <D.16594>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 106, "tmp_klass");
      <D.16595>:
      <D.16588>:
    }
    D.16045 = tmp_klass;
  }
  D.16596 = mono_class_vtable (D.16585, D.16045);
  len.13 = (unsigned int) len;
  ret = mono_array_new_specific (D.16596, len.13);
  i = 0;
  goto <D.16048>;
  <D.16047>:
  {
    gint32 * __p;

    i.14 = (unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, i.14);
    i.10 = (unsigned int) i;
    D.16581 = i.10 * 4;
    D.16582 = gs + D.16581;
    D.16583 = *D.16582;
    *__p = D.16583;
  }
  i = i + 1;
  <D.16048>:
  if (i < len) goto <D.16047>; else goto <D.16049>;
  <D.16049>:
  D.16599 = ret;
  return D.16599;
}


ves_icall_System_Globalization_CultureInfo_get_current_locale_name ()
{
  struct MonoString * D.16603;
  gchar * locale;
  struct MonoString * ret;
  struct MonoDomain * domain;

  locale = get_current_locale_name ();
  if (locale == 0B) goto <D.16601>; else goto <D.16602>;
  <D.16601>:
  D.16603 = 0B;
  return D.16603;
  <D.16602>:
  domain = mono_domain_get ();
  ret = mono_string_new (domain, locale);
  monoeg_g_free (locale);
  D.16603 = ret;
  return D.16603;
}


get_current_locale_name ()
{
  gchar * D.16607;
  char * locale;
  char * p;
  char * ret;

  locale = get_posix_locale ();
  if (locale == 0B) goto <D.16605>; else goto <D.16606>;
  <D.16605>:
  D.16607 = 0B;
  return D.16607;
  <D.16606>:
  p = __builtin_strchr (locale, 46);
  if (p != 0B) goto <D.16608>; else goto <D.16609>;
  <D.16608>:
  *p = 0;
  <D.16609>:
  p = __builtin_strchr (locale, 64);
  if (p != 0B) goto <D.16610>; else goto <D.16611>;
  <D.16610>:
  *p = 0;
  <D.16611>:
  p = __builtin_strchr (locale, 95);
  if (p != 0B) goto <D.16612>; else goto <D.16613>;
  <D.16612>:
  *p = 45;
  <D.16613>:
  ret = monoeg_g_ascii_strdown (locale, -1);
  monoeg_g_free (locale);
  D.16607 = ret;
  return D.16607;
}


get_posix_locale ()
{
  char * D.16621;
  int D.16123;
  int iftmp.15;
  int D.16122;
  const char[2] * D.16625;
  unsigned char D.16626;
  int D.16627;
  unsigned char D.16628;
  int D.16629;
  const unsigned char * D.16634;
  unsigned char D.16635;
  int D.16636;
  const unsigned char * D.16637;
  unsigned char D.16638;
  int D.16639;
  const unsigned char * D.16644;
  unsigned char D.16645;
  int D.16646;
  const unsigned char * D.16647;
  unsigned char D.16648;
  int D.16649;
  const unsigned char * D.16654;
  unsigned char D.16655;
  int D.16656;
  const unsigned char * D.16657;
  unsigned char D.16658;
  int D.16659;
  const char * locale;

  locale = monoeg_g_getenv ("LC_ALL");
  if (locale == 0B) goto <D.16615>; else goto <D.16616>;
  <D.16615>:
  locale = monoeg_g_getenv ("LANG");
  if (locale == 0B) goto <D.16617>; else goto <D.16618>;
  <D.16617>:
  locale = setlocale (6, 0B);
  <D.16618>:
  <D.16616>:
  if (locale == 0B) goto <D.16619>; else goto <D.16620>;
  <D.16619>:
  D.16621 = 0B;
  return D.16621;
  <D.16620>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = locale;
      D.16625 = "C";
      D.16626 = MEM[(const unsigned char *)D.16625];
      D.16627 = (int) D.16626;
      D.16628 = *__s2;
      D.16629 = (int) D.16628;
      __result = D.16627 - D.16629;
      {
        if (__s2_len != 0) goto <D.16630>; else goto <D.16631>;
        <D.16630>:
        if (__result == 0) goto <D.16632>; else goto <D.16633>;
        <D.16632>:
        D.16634 = &MEM[(void *)"C" + 1B];
        D.16635 = *D.16634;
        D.16636 = (int) D.16635;
        D.16637 = __s2 + 1;
        D.16638 = *D.16637;
        D.16639 = (int) D.16638;
        __result = D.16636 - D.16639;
        if (__s2_len > 1) goto <D.16640>; else goto <D.16641>;
        <D.16640>:
        if (__result == 0) goto <D.16642>; else goto <D.16643>;
        <D.16642>:
        D.16644 = &MEM[(void *)"C" + 2B];
        D.16645 = *D.16644;
        D.16646 = (int) D.16645;
        D.16647 = __s2 + 2;
        D.16648 = *D.16647;
        D.16649 = (int) D.16648;
        __result = D.16646 - D.16649;
        if (__s2_len > 2) goto <D.16650>; else goto <D.16651>;
        <D.16650>:
        if (__result == 0) goto <D.16652>; else goto <D.16653>;
        <D.16652>:
        D.16654 = &MEM[(void *)"C" + 3B];
        D.16655 = *D.16654;
        D.16656 = (int) D.16655;
        D.16657 = __s2 + 3;
        D.16658 = *D.16657;
        D.16659 = (int) D.16658;
        __result = D.16656 - D.16659;
        <D.16653>:
        <D.16651>:
        <D.16643>:
        <D.16641>:
        <D.16633>:
        <D.16631>:
      }
      D.16122 = __result;
    }
    iftmp.15 = -D.16122;
    goto <D.16660>;
    <D.16624>:
    iftmp.15 = __builtin_strcmp (locale, "C");
    <D.16660>:
    D.16123 = iftmp.15;
  }
  if (D.16123 == 0) goto <D.16661>; else goto <D.16662>;
  <D.16661>:
  D.16621 = 0B;
  return D.16621;
  <D.16662>:
  D.16621 = monoeg_strdup (locale);
  return D.16621;
}


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

  if (str != 0B) goto <D.16664>; else goto <D.16665>;
  <D.16664>:
  D.16666 = __strdup (str);
  return D.16666;
  <D.16665>:
  D.16666 = 0B;
  return D.16666;
}


ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (struct MonoCultureInfo * this, gint lcid)
{
  MonoBoolean D.16670;
  const struct CultureInfoEntry * ci;

  ci = culture_info_entry_from_lcid (lcid);
  if (ci == 0B) goto <D.16668>; else goto <D.16669>;
  <D.16668>:
  D.16670 = 0;
  return D.16670;
  <D.16669>:
  D.16670 = construct_culture (this, ci);
  return D.16670;
}


culture_info_entry_from_lcid (int lcid)
{
  const struct CultureInfoEntry * D.16672;
  const struct CultureInfoEntry * ci;

  ci = mono_binary_search (&lcid, &culture_entries, 283, 56, culture_lcid_locator);
  D.16672 = ci;
  return D.16672;
}


culture_lcid_locator (const void * a, const void * b)
{
  int D.16674;
  int D.16675;
  short int D.16676;
  int D.16677;
  const int * lcid;
  const struct CultureInfoEntry * bb;

  lcid = a;
  bb = b;
  D.16675 = *lcid;
  D.16676 = bb->lcid;
  D.16677 = (int) D.16676;
  D.16674 = D.16675 - D.16677;
  return D.16674;
}


construct_culture (struct MonoCultureInfo * this, const struct CultureInfoEntry * ci)
{
  short int D.16679;
  int D.16680;
  struct MonoString * * D.16681;
  short unsigned int D.16682;
  sizetype D.16683;
  const char * D.16684;
  struct MonoString * D.16685;
  struct MonoString * * D.16686;
  short unsigned int D.16687;
  sizetype D.16688;
  const char * D.16689;
  struct MonoString * D.16690;
  struct MonoString * * D.16691;
  short unsigned int D.16692;
  sizetype D.16693;
  const char * D.16694;
  struct MonoString * D.16695;
  struct MonoString * * D.16696;
  short unsigned int D.16697;
  sizetype D.16698;
  const char * D.16699;
  struct MonoString * D.16700;
  struct MonoString * * D.16701;
  short unsigned int D.16702;
  sizetype D.16703;
  const char * D.16704;
  struct MonoString * D.16705;
  struct MonoString * * D.16706;
  short unsigned int D.16707;
  sizetype D.16708;
  const char * D.16709;
  struct MonoString * D.16710;
  short unsigned int D.16711;
  struct MonoString * * D.16714;
  sizetype D.16715;
  const char * D.16716;
  struct MonoString * D.16717;
  struct MonoArray * * D.16718;
  const stridx_t[4] * D.16719;
  struct MonoArray * D.16720;
  short int D.16721;
  int D.16722;
  short int D.16723;
  int D.16724;
  short int D.16725;
  int D.16726;
  short int D.16727;
  int D.16728;
  const struct TextInfoEntry * D.16729;
  MonoBoolean D.16730;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.16679 = ci->lcid;
  D.16680 = (int) D.16679;
  this->lcid = D.16680;
  D.16681 = &this->name;
  D.16682 = ci->name;
  D.16683 = (sizetype) D.16682;
  D.16684 = &locale_strings + D.16683;
  D.16685 = mono_string_new (domain, D.16684);
  mono_gc_wbarrier_set_field (this, D.16681, D.16685);
  D.16686 = &this->englishname;
  D.16687 = ci->englishname;
  D.16688 = (sizetype) D.16687;
  D.16689 = &locale_strings + D.16688;
  D.16690 = mono_string_new (domain, D.16689);
  mono_gc_wbarrier_set_field (this, D.16686, D.16690);
  D.16691 = &this->nativename;
  D.16692 = ci->nativename;
  D.16693 = (sizetype) D.16692;
  D.16694 = &locale_strings + D.16693;
  D.16695 = mono_string_new (domain, D.16694);
  mono_gc_wbarrier_set_field (this, D.16691, D.16695);
  D.16696 = &this->win3lang;
  D.16697 = ci->win3lang;
  D.16698 = (sizetype) D.16697;
  D.16699 = &locale_strings + D.16698;
  D.16700 = mono_string_new (domain, D.16699);
  mono_gc_wbarrier_set_field (this, D.16696, D.16700);
  D.16701 = &this->iso3lang;
  D.16702 = ci->iso3lang;
  D.16703 = (sizetype) D.16702;
  D.16704 = &locale_strings + D.16703;
  D.16705 = mono_string_new (domain, D.16704);
  mono_gc_wbarrier_set_field (this, D.16701, D.16705);
  D.16706 = &this->iso2lang;
  D.16707 = ci->iso2lang;
  D.16708 = (sizetype) D.16707;
  D.16709 = &locale_strings + D.16708;
  D.16710 = mono_string_new (domain, D.16709);
  mono_gc_wbarrier_set_field (this, D.16706, D.16710);
  D.16711 = ci->territory;
  if (D.16711 != 0) goto <D.16712>; else goto <D.16713>;
  <D.16712>:
  D.16714 = &this->territory;
  D.16711 = ci->territory;
  D.16715 = (sizetype) D.16711;
  D.16716 = &locale_strings + D.16715;
  D.16717 = mono_string_new (domain, D.16716);
  mono_gc_wbarrier_set_field (this, D.16714, D.16717);
  <D.16713>:
  D.16718 = &this->native_calendar_names;
  D.16719 = &ci->native_calendar_names;
  D.16720 = create_names_array_idx (D.16719, 4);
  mono_gc_wbarrier_set_field (this, D.16718, D.16720);
  D.16721 = ci->parent_lcid;
  D.16722 = (int) D.16721;
  this->parent_lcid = D.16722;
  D.16723 = ci->datetime_format_index;
  D.16724 = (int) D.16723;
  this->datetime_index = D.16724;
  D.16725 = ci->number_format_index;
  D.16726 = (int) D.16725;
  this->number_index = D.16726;
  D.16727 = ci->calendar_type;
  D.16728 = (int) D.16727;
  this->calendar_type = D.16728;
  D.16729 = &ci->text_info;
  this->text_info_data = D.16729;
  D.16730 = 1;
  return D.16730;
}


ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (struct MonoCultureInfo * this, struct MonoString * name)
{
  MonoBoolean D.16734;
  short int D.16735;
  int D.16736;
  const struct CultureInfoEntry * D.16737;
  const struct CultureInfoNameEntry * ne;
  char * n;

  n = mono_string_to_utf8 (name);
  ne = mono_binary_search (n, &culture_name_entries, 283, 4, culture_name_locator);
  if (ne == 0B) goto <D.16732>; else goto <D.16733>;
  <D.16732>:
  monoeg_g_free (n);
  D.16734 = 0;
  return D.16734;
  <D.16733>:
  monoeg_g_free (n);
  D.16735 = ne->culture_entry_index;
  D.16736 = (int) D.16735;
  D.16737 = &culture_entries[D.16736];
  D.16734 = construct_culture (this, D.16737);
  return D.16734;
}


culture_name_locator (const void * a, const void * b)
{
  int ret.16;
  short unsigned int D.16739;
  sizetype D.16740;
  const char * D.16741;
  int D.16742;
  const char * aa;
  const struct CultureInfoNameEntry * bb;
  int ret;

  aa = a;
  bb = b;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.16739 = bb->name;
    D.16740 = (sizetype) D.16739;
    D.16741 = &locale_strings + D.16740;
    ret.16 = __builtin_strcmp (aa, D.16741);
  }
  ret = ret.16;
  D.16742 = ret;
  return D.16742;
}


ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_lcid (struct MonoRegionInfo * this, gint lcid)
{
  MonoBoolean D.16746;
  const struct RegionInfoEntry * ri;

  ri = region_info_entry_from_lcid (lcid);
  if (ri == 0B) goto <D.16744>; else goto <D.16745>;
  <D.16744>:
  D.16746 = 0;
  return D.16746;
  <D.16745>:
  D.16746 = construct_region (this, ri);
  return D.16746;
}


region_info_entry_from_lcid (int lcid)
{
  const struct RegionInfoEntry * D.16750;
  short int D.16751;
  int D.16752;
  const struct RegionInfoEntry * entry;
  const struct CultureInfoEntry * ne;

  ne = mono_binary_search (&lcid, &culture_entries, 283, 56, culture_lcid_locator);
  if (ne == 0B) goto <D.16748>; else goto <D.16749>;
  <D.16748>:
  D.16750 = 0B;
  return D.16750;
  <D.16749>:
  D.16751 = ne->region_entry_index;
  D.16752 = (int) D.16751;
  entry = &region_entries[D.16752];
  D.16750 = entry;
  return D.16750;
}


construct_region (struct MonoRegionInfo * this, const struct RegionInfoEntry * ri)
{
  short int D.16754;
  int D.16755;
  struct MonoString * * D.16756;
  short unsigned int D.16757;
  sizetype D.16758;
  const char * D.16759;
  struct MonoString * D.16760;
  struct MonoString * * D.16761;
  short unsigned int D.16762;
  sizetype D.16763;
  const char * D.16764;
  struct MonoString * D.16765;
  struct MonoString * * D.16766;
  short unsigned int D.16767;
  sizetype D.16768;
  const char * D.16769;
  struct MonoString * D.16770;
  struct MonoString * * D.16771;
  short unsigned int D.16772;
  sizetype D.16773;
  const char * D.16774;
  struct MonoString * D.16775;
  struct MonoString * * D.16776;
  short unsigned int D.16777;
  sizetype D.16778;
  const char * D.16779;
  struct MonoString * D.16780;
  struct MonoString * * D.16781;
  short unsigned int D.16782;
  sizetype D.16783;
  const char * D.16784;
  struct MonoString * D.16785;
  struct MonoString * * D.16786;
  short unsigned int D.16787;
  sizetype D.16788;
  const char * D.16789;
  struct MonoString * D.16790;
  struct MonoString * * D.16791;
  short unsigned int D.16792;
  sizetype D.16793;
  const char * D.16794;
  struct MonoString * D.16795;
  struct MonoString * * D.16796;
  short unsigned int D.16797;
  sizetype D.16798;
  const char * D.16799;
  struct MonoString * D.16800;
  MonoBoolean D.16801;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.16754 = ri->geo_id;
  D.16755 = (int) D.16754;
  this->geo_id = D.16755;
  D.16756 = &this->iso2name;
  D.16757 = ri->iso2name;
  D.16758 = (sizetype) D.16757;
  D.16759 = &locale_strings + D.16758;
  D.16760 = mono_string_new (domain, D.16759);
  mono_gc_wbarrier_set_field (this, D.16756, D.16760);
  D.16761 = &this->iso3name;
  D.16762 = ri->iso3name;
  D.16763 = (sizetype) D.16762;
  D.16764 = &locale_strings + D.16763;
  D.16765 = mono_string_new (domain, D.16764);
  mono_gc_wbarrier_set_field (this, D.16761, D.16765);
  D.16766 = &this->win3name;
  D.16767 = ri->win3name;
  D.16768 = (sizetype) D.16767;
  D.16769 = &locale_strings + D.16768;
  D.16770 = mono_string_new (domain, D.16769);
  mono_gc_wbarrier_set_field (this, D.16766, D.16770);
  D.16771 = &this->english_name;
  D.16772 = ri->english_name;
  D.16773 = (sizetype) D.16772;
  D.16774 = &locale_strings + D.16773;
  D.16775 = mono_string_new (domain, D.16774);
  mono_gc_wbarrier_set_field (this, D.16771, D.16775);
  D.16776 = &this->native_name;
  D.16777 = ri->native_name;
  D.16778 = (sizetype) D.16777;
  D.16779 = &locale_strings + D.16778;
  D.16780 = mono_string_new (domain, D.16779);
  mono_gc_wbarrier_set_field (this, D.16776, D.16780);
  D.16781 = &this->currency_symbol;
  D.16782 = ri->currency_symbol;
  D.16783 = (sizetype) D.16782;
  D.16784 = &locale_strings + D.16783;
  D.16785 = mono_string_new (domain, D.16784);
  mono_gc_wbarrier_set_field (this, D.16781, D.16785);
  D.16786 = &this->iso_currency_symbol;
  D.16787 = ri->iso_currency_symbol;
  D.16788 = (sizetype) D.16787;
  D.16789 = &locale_strings + D.16788;
  D.16790 = mono_string_new (domain, D.16789);
  mono_gc_wbarrier_set_field (this, D.16786, D.16790);
  D.16791 = &this->currency_english_name;
  D.16792 = ri->currency_english_name;
  D.16793 = (sizetype) D.16792;
  D.16794 = &locale_strings + D.16793;
  D.16795 = mono_string_new (domain, D.16794);
  mono_gc_wbarrier_set_field (this, D.16791, D.16795);
  D.16796 = &this->currency_native_name;
  D.16797 = ri->currency_native_name;
  D.16798 = (sizetype) D.16797;
  D.16799 = &locale_strings + D.16798;
  D.16800 = mono_string_new (domain, D.16799);
  mono_gc_wbarrier_set_field (this, D.16796, D.16800);
  D.16801 = 1;
  return D.16801;
}


ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name (struct MonoRegionInfo * this, struct MonoString * name)
{
  MonoBoolean D.16805;
  short int D.16806;
  int D.16807;
  const struct RegionInfoEntry * D.16808;
  const struct RegionInfoNameEntry * ne;
  char * n;

  n = mono_string_to_utf8 (name);
  ne = mono_binary_search (n, &region_name_entries, 120, 4, region_name_locator);
  if (ne == 0B) goto <D.16803>; else goto <D.16804>;
  <D.16803>:
  monoeg_g_free (n);
  D.16805 = 0;
  return D.16805;
  <D.16804>:
  monoeg_g_free (n);
  D.16806 = ne->region_entry_index;
  D.16807 = (int) D.16806;
  D.16808 = &region_entries[D.16807];
  D.16805 = construct_region (this, D.16808);
  return D.16805;
}


region_name_locator (const void * a, const void * b)
{
  int ret.17;
  short unsigned int D.16810;
  sizetype D.16811;
  const char * D.16812;
  int D.16813;
  const char * aa;
  const struct RegionInfoNameEntry * bb;
  int ret;

  aa = a;
  bb = b;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.16810 = bb->name;
    D.16811 = (sizetype) D.16810;
    D.16812 = &locale_strings + D.16811;
    ret.17 = __builtin_strcmp (aa, D.16812);
  }
  ret = ret.17;
  D.16813 = ret;
  return D.16813;
}


ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean neutral, MonoBoolean specific, MonoBoolean installed)
{
  short unsigned int D.16815;
  _Bool D.16816;
  struct MonoImage * D.16822;
  unsigned int len.18;
  struct MonoArray * D.16828;
  int len.19;
  unsigned int len.20;
  int len.21;
  unsigned int len.22;
  struct MonoArray * ret;
  struct MonoClass * class;
  struct MonoCultureInfo * culture;
  struct MonoDomain * domain;
  const struct CultureInfoEntry * ci;
  gint i;
  gint len;
  gboolean is_neutral;

  domain = mono_domain_get ();
  len = 0;
  i = 0;
  goto <D.16172>;
  <D.16171>:
  ci = &culture_entries[i];
  D.16815 = ci->territory;
  D.16816 = D.16815 == 0;
  is_neutral = (gboolean) D.16816;
  if (neutral != 0) goto <D.16820>; else goto <D.16817>;
  <D.16820>:
  if (is_neutral != 0) goto <D.16818>; else goto <D.16817>;
  <D.16817>:
  if (specific != 0) goto <D.16821>; else goto <D.16819>;
  <D.16821>:
  if (is_neutral == 0) goto <D.16818>; else goto <D.16819>;
  <D.16818>:
  len = len + 1;
  <D.16819>:
  i = i + 1;
  <D.16172>:
  if (i <= 282) goto <D.16171>; else goto <D.16173>;
  <D.16173>:
  D.16822 = mono_get_corlib ();
  class = mono_class_from_name (D.16822, "System.Globalization", "CultureInfo");
  if (neutral != 0) goto <D.16823>; else goto <D.16824>;
  <D.16823>:
  len = len + 1;
  <D.16824>:
  len.18 = (unsigned int) len;
  ret = mono_array_new (domain, class, len.18);
  if (len == 0) goto <D.16826>; else goto <D.16827>;
  <D.16826>:
  D.16828 = ret;
  return D.16828;
  <D.16827>:
  len = 0;
  if (neutral != 0) goto <D.16829>; else goto <D.16830>;
  <D.16829>:
  {
    void * * __p;

    len.19 = len;
    len = len.19 + 1;
    len.20 = (unsigned int) len.19;
    __p = mono_array_addr_with_size (ret, 4, len.20);
    mono_gc_wbarrier_set_arrayref (ret, __p, 0B);
  }
  <D.16830>:
  i = 0;
  goto <D.16177>;
  <D.16176>:
  ci = &culture_entries[i];
  D.16815 = ci->territory;
  D.16816 = D.16815 == 0;
  is_neutral = (gboolean) D.16816;
  if (neutral != 0) goto <D.16836>; else goto <D.16833>;
  <D.16836>:
  if (is_neutral != 0) goto <D.16834>; else goto <D.16833>;
  <D.16833>:
  if (specific != 0) goto <D.16837>; else goto <D.16835>;
  <D.16837>:
  if (is_neutral == 0) goto <D.16834>; else goto <D.16835>;
  <D.16834>:
  culture = mono_object_new (domain, class);
  mono_runtime_object_init (culture);
  construct_culture (culture, ci);
  culture->use_user_override = 1;
  {
    void * * __p;

    len.21 = len;
    len = len.21 + 1;
    len.22 = (unsigned int) len.21;
    __p = mono_array_addr_with_size (ret, 4, len.22);
    mono_gc_wbarrier_set_arrayref (ret, __p, culture);
  }
  <D.16835>:
  i = i + 1;
  <D.16177>:
  if (i <= 282) goto <D.16176>; else goto <D.16178>;
  <D.16178>:
  D.16828 = ret;
  return D.16828;
}


ves_icall_System_Globalization_CompareInfo_construct_compareinfo (struct MonoCompareInfo * comp, struct MonoString * locale)
{

}


ves_icall_System_Globalization_CompareInfo_internal_compare (struct MonoCompareInfo * this, struct MonoString * str1, gint32 off1, gint32 len1, struct MonoString * str2, gint32 off2, gint32 len2, gint32 options)
{
  int D.16841;

  D.16841 = string_invariant_compare (str1, off1, len1, str2, off2, len2, options);
  return D.16841;
}


string_invariant_compare (struct MonoString * str1, gint32 off1, gint32 len1, struct MonoString * str2, gint32 off2, gint32 len2, gint32 options)
{
  mono_unichar2 * D.16846;
  unsigned int off1.23;
  unsigned int D.16848;
  mono_unichar2 * D.16849;
  unsigned int off2.24;
  unsigned int D.16851;
  unsigned int pos.25;
  unsigned int D.16855;
  gunichar2 * D.16856;
  short unsigned int D.16857;
  int D.16858;
  gunichar2 * D.16859;
  short unsigned int D.16860;
  int D.16861;
  gint32 D.16864;
  sizetype pos.26;
  sizetype D.16868;
  sizetype D.16869;
  gunichar2 * D.16870;
  short unsigned int D.16871;
  int D.16872;
  gunichar2 * D.16873;
  short unsigned int D.16874;
  int D.16875;
  gint32 length;
  gint32 charcmp;
  gunichar2 * ustr1;
  gunichar2 * ustr2;
  gint32 pos;

  if (len1 >= len2) goto <D.16843>; else goto <D.16844>;
  <D.16843>:
  length = len1;
  goto <D.16845>;
  <D.16844>:
  length = len2;
  <D.16845>:
  D.16846 = mono_string_chars (str1);
  off1.23 = (unsigned int) off1;
  D.16848 = off1.23 * 2;
  ustr1 = D.16846 + D.16848;
  D.16849 = mono_string_chars (str2);
  off2.24 = (unsigned int) off2;
  D.16851 = off2.24 * 2;
  ustr2 = D.16849 + D.16851;
  pos = 0;
  pos = 0;
  goto <D.16260>;
  <D.16259>:
  if (pos >= len1) goto <D.16258>; else goto <D.16852>;
  <D.16852>:
  if (pos >= len2) goto <D.16258>; else goto <D.16853>;
  <D.16853>:
  pos.25 = (unsigned int) pos;
  D.16855 = pos.25 * 2;
  D.16856 = ustr1 + D.16855;
  D.16857 = *D.16856;
  D.16858 = (int) D.16857;
  pos.25 = (unsigned int) pos;
  D.16855 = pos.25 * 2;
  D.16859 = ustr2 + D.16855;
  D.16860 = *D.16859;
  D.16861 = (int) D.16860;
  charcmp = string_invariant_compare_char (D.16858, D.16861, options);
  if (charcmp != 0) goto <D.16862>; else goto <D.16863>;
  <D.16862>:
  D.16864 = charcmp;
  return D.16864;
  <D.16863>:
  pos = pos + 1;
  <D.16260>:
  if (pos != length) goto <D.16259>; else goto <D.16258>;
  <D.16258>:
  if (pos == length) goto <D.16865>; else goto <D.16866>;
  <D.16865>:
  pos.26 = (sizetype) pos;
  D.16868 = pos.26 + 2147483647;
  D.16869 = D.16868 * 2;
  D.16870 = ustr1 + D.16869;
  D.16871 = *D.16870;
  D.16872 = (int) D.16871;
  pos.26 = (sizetype) pos;
  D.16868 = pos.26 + 2147483647;
  D.16869 = D.16868 * 2;
  D.16873 = ustr2 + D.16869;
  D.16874 = *D.16873;
  D.16875 = (int) D.16874;
  D.16864 = string_invariant_compare_char (D.16872, D.16875, options);
  return D.16864;
  <D.16866>:
  if (pos >= len1) goto <D.16876>; else goto <D.16877>;
  <D.16876>:
  if (pos >= len2) goto <D.16878>; else goto <D.16879>;
  <D.16878>:
  D.16864 = 0;
  return D.16864;
  <D.16879>:
  D.16864 = -1;
  return D.16864;
  <D.16877>:
  if (pos >= len2) goto <D.16880>; else goto <D.16881>;
  <D.16880>:
  D.16864 = 1;
  return D.16864;
  <D.16881>:
  pos.25 = (unsigned int) pos;
  D.16855 = pos.25 * 2;
  D.16856 = ustr1 + D.16855;
  D.16857 = *D.16856;
  D.16858 = (int) D.16857;
  pos.25 = (unsigned int) pos;
  D.16855 = pos.25 * 2;
  D.16859 = ustr2 + D.16855;
  D.16860 = *D.16859;
  D.16861 = (int) D.16860;
  D.16864 = string_invariant_compare_char (D.16858, D.16861, options);
  return D.16864;
}


string_invariant_compare_char (gunichar2 c1, gunichar2 c2, gint32 options)
{
  int D.16883;
  gint32 D.16886;
  int D.16887;
  int D.16888;
  int D.16889;
  unsigned int D.16892;
  unsigned int D.16893;
  gunichar iftmp.27;
  gunichar iftmp.28;
  unsigned int D.16902;
  gint32 iftmp.29;
  _Bool D.16907;
  gint32 result;

  D.16883 = options & 1073741824;
  if (D.16883 != 0) goto <D.16884>; else goto <D.16885>;
  <D.16884>:
  D.16887 = (int) c1;
  D.16888 = (int) c2;
  D.16886 = D.16887 - D.16888;
  return D.16886;
  <D.16885>:
  D.16889 = options & 1;
  if (D.16889 != 0) goto <D.16890>; else goto <D.16891>;
  <D.16890>:
  {
    GUnicodeType c1type;
    GUnicodeType c2type;

    D.16892 = (unsigned int) c1;
    c1type = monoeg_g_unichar_type (D.16892);
    D.16893 = (unsigned int) c2;
    c2type = monoeg_g_unichar_type (D.16893);
    if (c1type != 5) goto <D.16895>; else goto <D.16896>;
    <D.16895>:
    D.16892 = (unsigned int) c1;
    iftmp.27 = monoeg_g_unichar_tolower (D.16892);
    goto <D.16897>;
    <D.16896>:
    iftmp.27 = (gunichar) c1;
    <D.16897>:
    if (c2type != 5) goto <D.16899>; else goto <D.16900>;
    <D.16899>:
    D.16893 = (unsigned int) c2;
    iftmp.28 = monoeg_g_unichar_tolower (D.16893);
    goto <D.16901>;
    <D.16900>:
    iftmp.28 = (gunichar) c2;
    <D.16901>:
    D.16902 = iftmp.27 - iftmp.28;
    result = (gint32) D.16902;
  }
  goto <D.16903>;
  <D.16891>:
  D.16887 = (int) c1;
  D.16888 = (int) c2;
  result = D.16887 - D.16888;
  <D.16903>:
  if (result >= 0) goto <D.16905>; else goto <D.16906>;
  <D.16905>:
  D.16907 = result > 0;
  iftmp.29 = (gint32) D.16907;
  goto <D.16908>;
  <D.16906>:
  iftmp.29 = -1;
  <D.16908>:
  D.16886 = iftmp.29;
  return D.16886;
}


ves_icall_System_Globalization_CompareInfo_free_internal_collator (struct MonoCompareInfo * this)
{

}


ves_icall_System_Globalization_CompareInfo_assign_sortkey (struct MonoCompareInfo * this, struct MonoSortKey * key, struct MonoString * source, gint32 options)
{
  struct MonoDomain * D.16910;
  struct MonoClass * D.16911;
  unsigned int keylen.30;
  unsigned int i.31;
  mono_unichar2 * D.16914;
  unsigned int i.32;
  unsigned int D.16916;
  mono_unichar2 * D.16917;
  short unsigned int D.16918;
  unsigned char D.16919;
  struct MonoArray * * D.16920;
  struct MonoArray * arr;
  gint32 keylen;
  gint32 i;

  keylen = mono_string_length (source);
  D.16910 = mono_domain_get ();
  D.16911 = mono_get_byte_class ();
  keylen.30 = (unsigned int) keylen;
  arr = mono_array_new (D.16910, D.16911, keylen.30);
  i = 0;
  goto <D.16207>;
  <D.16206>:
  {
    guint8 * __p;

    i.31 = (unsigned int) i;
    __p = mono_array_addr_with_size (arr, 1, i.31);
    D.16914 = mono_string_chars (source);
    i.32 = (unsigned int) i;
    D.16916 = i.32 * 2;
    D.16917 = D.16914 + D.16916;
    D.16918 = *D.16917;
    D.16919 = (unsigned char) D.16918;
    *__p = D.16919;
  }
  i = i + 1;
  <D.16207>:
  if (i < keylen) goto <D.16206>; else goto <D.16208>;
  <D.16208>:
  D.16920 = &key->key;
  mono_gc_wbarrier_set_field (key, D.16920, arr);
}


ves_icall_System_Globalization_CompareInfo_internal_index (struct MonoCompareInfo * this, struct MonoString * source, gint32 sindex, gint32 count, struct MonoString * value, gint32 options, MonoBoolean first)
{
  int D.16921;
  int D.16922;

  D.16922 = (int) first;
  D.16921 = string_invariant_indexof (source, sindex, count, value, D.16922);
  return D.16921;
}


string_invariant_indexof (struct MonoString * source, gint32 sindex, gint32 count, struct MonoString * value, MonoBoolean first)
{
  gint32 D.16928;
  int D.16929;
  unsigned int D.16930;
  unsigned int D.16931;
  gunichar2 * D.16932;
  short unsigned int D.16933;
  unsigned int i.33;
  unsigned int D.16935;
  gunichar2 * D.16936;
  short unsigned int D.16937;
  int D.16938;
  int D.16939;
  unsigned int pos.34;
  unsigned int D.16941;
  const void * D.16942;
  unsigned int lencmpstr.35;
  unsigned int D.16944;
  int D.16945;
  int D.16948;
  gint32 lencmpstr;
  gunichar2 * src;
  gunichar2 * cmpstr;
  gint32 pos;
  gint32 i;

  lencmpstr = mono_string_length (value);
  src = mono_string_chars (source);
  cmpstr = mono_string_chars (value);
  if (first != 0) goto <D.16924>; else goto <D.16925>;
  <D.16924>:
  count = count - lencmpstr;
  pos = sindex;
  goto <D.16300>;
  <D.16299>:
  i = 0;
  goto <D.16297>;
  <D.16296>:
  i = i + 1;
  if (i == lencmpstr) goto <D.16926>; else goto <D.16927>;
  <D.16926>:
  D.16928 = pos;
  return D.16928;
  <D.16927>:
  <D.16297>:
  D.16929 = pos + i;
  D.16930 = (unsigned int) D.16929;
  D.16931 = D.16930 * 2;
  D.16932 = src + D.16931;
  D.16933 = *D.16932;
  i.33 = (unsigned int) i;
  D.16935 = i.33 * 2;
  D.16936 = cmpstr + D.16935;
  D.16937 = *D.16936;
  if (D.16933 == D.16937) goto <D.16296>; else goto <D.16298>;
  <D.16298>:
  pos = pos + 1;
  <D.16300>:
  D.16938 = sindex + count;
  if (D.16938 >= pos) goto <D.16299>; else goto <D.16301>;
  <D.16301>:
  D.16928 = -1;
  return D.16928;
  <D.16925>:
  D.16939 = sindex - lencmpstr;
  pos = D.16939 + 1;
  goto <D.16303>;
  <D.16302>:
  pos.34 = (unsigned int) pos;
  D.16941 = pos.34 * 2;
  D.16942 = src + D.16941;
  lencmpstr.35 = (unsigned int) lencmpstr;
  D.16944 = lencmpstr.35 * 2;
  D.16945 = memcmp (D.16942, cmpstr, D.16944);
  if (D.16945 == 0) goto <D.16946>; else goto <D.16947>;
  <D.16946>:
  D.16928 = pos;
  return D.16928;
  <D.16947>:
  pos = pos + -1;
  <D.16303>:
  D.16948 = sindex - count;
  if (D.16948 < pos) goto <D.16302>; else goto <D.16304>;
  <D.16304>:
  D.16928 = -1;
  return D.16928;
}


ves_icall_System_Globalization_CompareInfo_internal_index_char (struct MonoCompareInfo * this, struct MonoString * source, gint32 sindex, gint32 count, gunichar2 value, gint32 options, MonoBoolean first)
{
  int D.16950;
  int D.16951;
  int D.16952;

  D.16951 = (int) value;
  D.16952 = (int) first;
  D.16950 = string_invariant_indexof_char (source, sindex, count, D.16951, D.16952);
  return D.16950;
}


string_invariant_indexof_char (struct MonoString * source, gint32 sindex, gint32 count, gunichar2 value, MonoBoolean first)
{
  unsigned int pos.36;
  unsigned int D.16957;
  gunichar2 * D.16958;
  short unsigned int D.16959;
  gint32 D.16962;
  int D.16963;
  int D.16966;
  gint32 pos;
  gunichar2 * src;

  src = mono_string_chars (source);
  if (first != 0) goto <D.16954>; else goto <D.16955>;
  <D.16954>:
  pos = sindex;
  goto <D.16315>;
  <D.16314>:
  pos.36 = (unsigned int) pos;
  D.16957 = pos.36 * 2;
  D.16958 = src + D.16957;
  D.16959 = *D.16958;
  if (D.16959 == value) goto <D.16960>; else goto <D.16961>;
  <D.16960>:
  D.16962 = pos;
  return D.16962;
  <D.16961>:
  pos = pos + 1;
  <D.16315>:
  D.16963 = count + sindex;
  if (D.16963 != pos) goto <D.16314>; else goto <D.16316>;
  <D.16316>:
  D.16962 = -1;
  return D.16962;
  <D.16955>:
  pos = sindex;
  goto <D.16318>;
  <D.16317>:
  pos.36 = (unsigned int) pos;
  D.16957 = pos.36 * 2;
  D.16958 = src + D.16957;
  D.16959 = *D.16958;
  if (D.16959 == value) goto <D.16964>; else goto <D.16965>;
  <D.16964>:
  D.16962 = pos;
  return D.16962;
  <D.16965>:
  pos = pos + -1;
  <D.16318>:
  D.16966 = sindex - count;
  if (D.16966 < pos) goto <D.16317>; else goto <D.16319>;
  <D.16319>:
  D.16962 = -1;
  return D.16962;
}


ves_icall_System_Threading_Thread_current_lcid ()
{
  int D.16968;

  D.16968 = 127;
  return D.16968;
}


ves_icall_System_String_InternalReplace_Str_Comp (struct MonoString * this, struct MonoString * old, struct MonoString * new, struct MonoCompareInfo * comp)
{
  struct MonoString * D.16970;

  D.16970 = string_invariant_replace (this, old, new);
  return D.16970;
}


string_invariant_replace (struct MonoString * me, struct MonoString * oldValue, struct MonoString * newValue)
{
  unsigned int i.37;
  unsigned int D.16978;
  const void * D.16979;
  unsigned int oldstrlen.38;
  unsigned int D.16981;
  int D.16982;
  int D.16986;
  struct MonoString * D.16989;
  int D.16990;
  int D.16991;
  int D.16993;
  struct MonoDomain * D.16998;
  unsigned int destpos.39;
  unsigned int D.17002;
  gunichar2 * D.17003;
  unsigned int newstrlen.40;
  unsigned int D.17005;
  gunichar2 * D.17008;
  short unsigned int D.17009;
  struct MonoString * ret;
  gunichar2 * src;
  gunichar2 * dest;
  gunichar2 * oldstr;
  gunichar2 * newstr;
  gint32 i;
  gint32 destpos;
  gint32 occurr;
  gint32 newsize;
  gint32 oldstrlen;
  gint32 newstrlen;
  gint32 srclen;

  dest = 0B;
  newstr = 0B;
  occurr = 0;
  destpos = 0;
  oldstr = mono_string_chars (oldValue);
  oldstrlen = mono_string_length (oldValue);
  if (newValue != 0B) goto <D.16972>; else goto <D.16973>;
  <D.16972>:
  newstr = mono_string_chars (newValue);
  newstrlen = mono_string_length (newValue);
  goto <D.16974>;
  <D.16973>:
  newstrlen = 0;
  <D.16974>:
  src = mono_string_chars (me);
  srclen = mono_string_length (me);
  if (oldstrlen != newstrlen) goto <D.16975>; else goto <D.16976>;
  <D.16975>:
  i = 0;
  goto <D.16279>;
  <D.16278>:
  i.37 = (unsigned int) i;
  D.16978 = i.37 * 2;
  D.16979 = src + D.16978;
  oldstrlen.38 = (unsigned int) oldstrlen;
  D.16981 = oldstrlen.38 * 2;
  D.16982 = memcmp (D.16979, oldstr, D.16981);
  if (D.16982 == 0) goto <D.16983>; else goto <D.16984>;
  <D.16983>:
  occurr = occurr + 1;
  i = i + oldstrlen;
  goto <D.16985>;
  <D.16984>:
  i = i + 1;
  <D.16985>:
  <D.16279>:
  D.16986 = srclen - oldstrlen;
  if (D.16986 >= i) goto <D.16278>; else goto <D.16280>;
  <D.16280>:
  if (occurr == 0) goto <D.16987>; else goto <D.16988>;
  <D.16987>:
  D.16989 = me;
  return D.16989;
  <D.16988>:
  D.16990 = newstrlen - oldstrlen;
  D.16991 = D.16990 * occurr;
  newsize = D.16991 + srclen;
  goto <D.16992>;
  <D.16976>:
  newsize = srclen;
  <D.16992>:
  ret = 0B;
  i = 0;
  goto <D.16281>;
  <D.16282>:
  i.37 = (unsigned int) i;
  D.16978 = i.37 * 2;
  D.16979 = src + D.16978;
  oldstrlen.38 = (unsigned int) oldstrlen;
  D.16981 = oldstrlen.38 * 2;
  D.16993 = memcmp (D.16979, oldstr, D.16981);
  if (D.16993 == 0) goto <D.16994>; else goto <D.16995>;
  <D.16994>:
  if (ret == 0B) goto <D.16996>; else goto <D.16997>;
  <D.16996>:
  D.16998 = mono_domain_get ();
  ret = mono_string_new_size (D.16998, newsize);
  dest = mono_string_chars (ret);
  i.37 = (unsigned int) i;
  D.16978 = i.37 * 2;
  memcpy (dest, src, D.16978);
  <D.16997>:
  if (newstrlen > 0) goto <D.16999>; else goto <D.17000>;
  <D.16999>:
  destpos.39 = (unsigned int) destpos;
  D.17002 = destpos.39 * 2;
  D.17003 = dest + D.17002;
  newstrlen.40 = (unsigned int) newstrlen;
  D.17005 = newstrlen.40 * 2;
  memcpy (D.17003, newstr, D.17005);
  destpos = destpos + newstrlen;
  <D.17000>:
  i = i + oldstrlen;
  // predicted unlikely by continue predictor.
  goto <D.16281>;
  <D.16995>:
  if (ret != 0B) goto <D.17006>; else goto <D.17007>;
  <D.17006>:
  destpos.39 = (unsigned int) destpos;
  D.17002 = destpos.39 * 2;
  D.17003 = dest + D.17002;
  i.37 = (unsigned int) i;
  D.16978 = i.37 * 2;
  D.17008 = src + D.16978;
  D.17009 = *D.17008;
  *D.17003 = D.17009;
  <D.17007>:
  destpos = destpos + 1;
  i = i + 1;
  <D.16281>:
  if (i < srclen) goto <D.16282>; else goto <D.16283>;
  <D.16283>:
  if (ret == 0B) goto <D.17010>; else goto <D.17011>;
  <D.17010>:
  D.16989 = me;
  return D.16989;
  <D.17011>:
  D.16989 = ret;
  return D.16989;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.17013;
  unsigned int D.17014;

  D.17014 = __builtin_object_size (__dest, 0);
  D.17013 = __builtin___memcpy_chk (__dest, __src, __len, D.17014);
  return D.17013;
}


load_normalization_resource (guint8 * * argProps, guint8 * * argMappedChars, guint8 * * argCharMapIndex, guint8 * * argHelperIndex, guint8 * * argMapIdxToComposite, guint8 * * argCombiningClass)
{
  *argProps = &props;
  *argMappedChars = &mappedChars;
  *argCharMapIndex = &charMapIndex;
  *argHelperIndex = &helperIndex;
  *argMapIdxToComposite = &mapIdxToComposite;
  *argCombiningClass = &combiningClass;
}


