mono_console_init ()
{
  unsigned int fd.0;
  int fd;

  fd = open ("/dev/null", 2);
  goto <D.18744>;
  <D.18743>:
  fd = open ("/dev/null", 2);
  <D.18744>:
  fd.0 = (unsigned int) fd;
  if (fd.0 <= 2) goto <D.18743>; else goto <D.18745>;
  <D.18745>:
  close (fd);
}


open (const char * __path, int __oflag)
{
  int D.18865;
  int D.18868;
  int D.18873;
  int D.18875;
  int D.18876;
  int D.18879;
  int D.18880;

  D.18865 = __builtin_va_arg_pack_len ();
  if (D.18865 > 1) goto <D.18866>; else goto <D.18867>;
  <D.18866>:
  __open_too_many_args ();
  <D.18867>:
  D.18868 = __builtin_constant_p (__oflag);
  if (D.18868 != 0) goto <D.18869>; else goto <D.18870>;
  <D.18869>:
  D.18873 = __oflag & 64;
  if (D.18873 != 0) goto <D.18871>; else goto <D.18874>;
  <D.18874>:
  D.18875 = __oflag & 4259840;
  if (D.18875 == 4259840) goto <D.18871>; else goto <D.18872>;
  <D.18871>:
  D.18876 = __builtin_va_arg_pack_len ();
  if (D.18876 <= 0) goto <D.18877>; else goto <D.18878>;
  <D.18877>:
  __open_missing_mode ();
  D.18879 = __open_2 (__path, __oflag);
  return D.18879;
  <D.18878>:
  <D.18872>:
  D.18879 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.18879;
  <D.18870>:
  D.18880 = __builtin_va_arg_pack_len ();
  if (D.18880 <= 0) goto <D.18881>; else goto <D.18882>;
  <D.18881>:
  D.18879 = __open_2 (__path, __oflag);
  return D.18879;
  <D.18882>:
  D.18879 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.18879;
}


ves_icall_System_ConsoleDriver_Isatty (void * handle)
{
  MonoBoolean D.18884;
  long int handle.1;
  int D.18886;
  int D.18887;

  handle.1 = (long int) handle;
  D.18886 = (int) handle.1;
  D.18887 = isatty (D.18886);
  D.18884 = (MonoBoolean) D.18887;
  return D.18884;
}


ves_icall_System_ConsoleDriver_SetEcho (MonoBoolean want_echo)
{
  MonoBoolean D.18889;
  int D.18890;

  D.18890 = (int) want_echo;
  D.18889 = set_property (8, D.18890);
  return D.18889;
}


set_property (gint property, gboolean value)
{
  int D.18892;
  MonoBoolean D.18895;
  unsigned int D.18896;
  unsigned int property.2;
  unsigned int D.18898;
  _Bool D.18899;
  int D.18902;
  unsigned int D.18908;
  int D.18910;
  unsigned int D.18911;
  unsigned int D.18912;
  int D.18915;
  struct termios attr;
  gboolean callset;
  gboolean check;

  try
    {
      callset = 0;
      D.18892 = tcgetattr (0, &attr);
      if (D.18892 == -1) goto <D.18893>; else goto <D.18894>;
      <D.18893>:
      D.18895 = 0;
      return D.18895;
      <D.18894>:
      D.18896 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.18898 = D.18896 & property.2;
      D.18899 = D.18898 != 0;
      check = (gboolean) D.18899;
      D.18902 = value | check;
      if (D.18902 != 0) goto <D.18903>; else goto <D.18904>;
      <D.18903>:
      if (value == 0) goto <D.18900>; else goto <D.18905>;
      <D.18905>:
      if (check == 0) goto <D.18900>; else goto <D.18901>;
      <D.18900>:
      callset = 1;
      if (value != 0) goto <D.18906>; else goto <D.18907>;
      <D.18906>:
      D.18896 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.18908 = D.18896 | property.2;
      attr.c_lflag = D.18908;
      goto <D.18909>;
      <D.18907>:
      D.18896 = attr.c_lflag;
      D.18910 = ~property;
      D.18911 = (unsigned int) D.18910;
      D.18912 = D.18896 & D.18911;
      attr.c_lflag = D.18912;
      <D.18909>:
      <D.18901>:
      <D.18904>:
      if (callset == 0) goto <D.18913>; else goto <D.18914>;
      <D.18913>:
      D.18895 = 1;
      return D.18895;
      <D.18914>:
      D.18915 = tcsetattr (0, 0, &attr);
      if (D.18915 == -1) goto <D.18916>; else goto <D.18917>;
      <D.18916>:
      D.18895 = 0;
      return D.18895;
      <D.18917>:
      mono_attr = attr;
      D.18895 = 1;
      return D.18895;
    }
  finally
    {
      attr = {CLOBBER};
    }
}


ves_icall_System_ConsoleDriver_SetBreak (MonoBoolean want_break)
{
  MonoBoolean D.18920;
  _Bool D.18921;
  int D.18922;

  D.18921 = want_break == 0;
  D.18922 = (int) D.18921;
  D.18920 = set_property (1, D.18922);
  return D.18920;
}


ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout)
{
  long int D.18778;
  long int iftmp.3;
  int D.18925;
  long int iftmp.4;
  unsigned long __d.5;
  long int D.18934;
  long int D.18935;
  long int D.18936;
  int D.18939;
  long int D.18940;
  int D.18941;
  long int D.18942;
  int * D.18945;
  int D.18946;
  gint32 D.18951;
  struct fd_set rfds;
  struct timeval tv;
  struct timeval * tvptr;
  struct div_t divvy;
  int ret;
  int nbytes;

  try
    {
      <D.18779>:
      {
        unsigned int __i;
        struct fd_set * __arr;

        __arr = &rfds;
        __i = 0;
        goto <D.18775>;
        <D.18774>:
        __arr->fds_bits[__i] = 0;
        __i = __i + 1;
        <D.18775>:
        if (__i <= 15) goto <D.18774>; else goto <D.18776>;
        <D.18776>:
      }
      {
        long int __d;

        __d = 0;
        D.18925 = __builtin_constant_p (__d);
        if (D.18925 != 0) goto <D.18926>; else goto <D.18927>;
        <D.18926>:
        __d.5 = (unsigned long) __d;
        if (__d.5 <= 1023) goto <D.18930>; else goto <D.18931>;
        <D.18930>:
        iftmp.4 = __d / 64;
        goto <D.18932>;
        <D.18931>:
        iftmp.4 = __fdelt_warn (__d);
        <D.18932>:
        iftmp.3 = iftmp.4;
        goto <D.18933>;
        <D.18927>:
        iftmp.3 = __fdelt_chk (__d);
        <D.18933>:
        D.18778 = iftmp.3;
      }
      D.18934 = D.18778;
      D.18935 = rfds.fds_bits[D.18934];
      D.18936 = D.18935 | 1;
      rfds.fds_bits[D.18934] = D.18936;
      if (timeout >= 0) goto <D.18937>; else goto <D.18938>;
      <D.18937>:
      divvy = div (timeout, 1000);
      D.18939 = divvy.quot;
      D.18940 = (long int) D.18939;
      tv.tv_sec = D.18940;
      D.18941 = divvy.rem;
      D.18942 = (long int) D.18941;
      tv.tv_usec = D.18942;
      tvptr = &tv;
      goto <D.18943>;
      <D.18938>:
      tvptr = 0B;
      <D.18943>:
      ret = select (1, &rfds, 0B, 0B, tvptr);
      if (ret == -1) goto <D.18944>; else goto <D.18780>;
      <D.18944>:
      D.18945 = __errno_location ();
      D.18946 = *D.18945;
      if (D.18946 == 4) goto <D.18779>; else goto <D.18780>;
      <D.18780>:
      if (ret > 0) goto <D.18947>; else goto <D.18948>;
      <D.18947>:
      nbytes = 0;
      ret = ioctl (0, 1074030207, &nbytes);
      if (ret >= 0) goto <D.18949>; else goto <D.18950>;
      <D.18949>:
      ret = nbytes;
      <D.18950>:
      <D.18948>:
      D.18951 = MAX_EXPR <ret, 0>;
      return D.18951;
    }
  finally
    {
      rfds = {CLOBBER};
      tv = {CLOBBER};
      divvy = {CLOBBER};
      nbytes = {CLOBBER};
    }
}


mono_console_handle_async_ops ()
{
  int need_cancel.6;

  need_cancel.6 = need_cancel;
  if (need_cancel.6 != 0) goto <D.18955>; else goto <D.18956>;
  <D.18955>:
  need_cancel = 0;
  do_console_cancel_event ();
  <D.18956>:
}


do_console_cancel_event ()
{
  struct MonoAppDomain * D.18957;
  struct MonoImage * D.18960;
  struct MonoClassField * cancel_handler_field.7;
  struct MonoClassField * cancel_handler_field.8;
  _Bool D.18967;
  long int D.18968;
  long int D.18969;
  struct MonoDelegate * load_value.9;
  struct MonoVTable * D.18977;
  _Bool D.18978;
  long int D.18979;
  long int D.18980;
  struct MonoClass * D.18983;
  static struct MonoClassField * cancel_handler_field;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoDelegate * load_value;
  struct MonoMethod * method;
  struct MonoMethodMessage * msg;
  struct MonoMethod * im;
  struct MonoVTable * vtable;

  try
    {
      domain = mono_domain_get ();
      D.18957 = domain->domain;
      if (D.18957 == 0B) goto <D.18958>; else goto <D.18959>;
      <D.18958>:
      return;
      <D.18959>:
      D.18960 = mono_defaults.corlib;
      klass = mono_class_from_name (D.18960, "System", "Console");
      if (klass == 0B) goto <D.18961>; else goto <D.18962>;
      <D.18961>:
      return;
      <D.18962>:
      cancel_handler_field.7 = cancel_handler_field;
      if (cancel_handler_field.7 == 0B) goto <D.18964>; else goto <D.18965>;
      <D.18964>:
      cancel_handler_field.8 = mono_class_get_field_from_name (klass, "cancel_handler");
      cancel_handler_field = cancel_handler_field.8;
      cancel_handler_field.7 = cancel_handler_field;
      D.18967 = cancel_handler_field.7 == 0B;
      D.18968 = (long int) D.18967;
      D.18969 = __builtin_expect (D.18968, 0);
      if (D.18969 != 0) goto <D.18970>; else goto <D.18971>;
      <D.18970>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 246, "cancel_handler_field");
      <D.18971>:
      <D.18965>:
      vtable = mono_class_vtable_full (domain, klass, 0);
      if (vtable == 0B) goto <D.18972>; else goto <D.18973>;
      <D.18972>:
      return;
      <D.18973>:
      cancel_handler_field.7 = cancel_handler_field;
      mono_field_static_get_value (vtable, cancel_handler_field.7, &load_value);
      load_value.9 = load_value;
      if (load_value.9 == 0B) goto <D.18975>; else goto <D.18976>;
      <D.18975>:
      return;
      <D.18976>:
      load_value.9 = load_value;
      D.18977 = load_value.9->object.vtable;
      klass = D.18977->klass;
      method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
      D.18978 = method == 0B;
      D.18979 = (long int) D.18978;
      D.18980 = __builtin_expect (D.18979, 0);
      if (D.18980 != 0) goto <D.18981>; else goto <D.18982>;
      <D.18981>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 258, "method != NULL");
      <D.18982>:
      D.18983 = method->klass;
      im = mono_get_delegate_invoke (D.18983);
      msg = mono_method_call_message_new (method, 0B, im, 0B, 0B);
      load_value.9 = load_value;
      mono_thread_pool_add (load_value.9, msg, 0B, 0B);
    }
  finally
    {
      load_value = {CLOBBER};
    }
}


ves_icall_System_ConsoleDriver_TtySetup (struct MonoString * keypad, struct MonoString * teardown, struct MonoArray * * control_chars, int * * size)
{
  int D.18997;
  int cols_and_lines.10;
  struct MonoDomain * D.19000;
  struct MonoClass * D.19001;
  struct MonoArray * D.19002;
  int D.19003;
  MonoBoolean D.19006;
  unsigned int D.19007;
  unsigned int D.19008;
  unsigned int D.19009;
  unsigned int D.19010;
  int D.19011;
  struct MonoArray * D.19014;
  int setup_finished.11;
  gchar * iftmp.12;
  int atexit_called.13;
  char * teardown_str.14;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims == -1) goto <D.18987>; else goto <D.18988>;
  <D.18987>:
  {
    int cols;
    int rows;
    const char * str;

    cols = 0;
    rows = 0;
    str = monoeg_g_getenv ("COLUMNS");
    if (str != 0B) goto <D.18989>; else goto <D.18990>;
    <D.18989>:
    cols = atoi (str);
    <D.18990>:
    str = monoeg_g_getenv ("LINES");
    if (str != 0B) goto <D.18991>; else goto <D.18992>;
    <D.18991>:
    rows = atoi (str);
    <D.18992>:
    if (cols != 0) goto <D.18995>; else goto <D.18993>;
    <D.18995>:
    if (rows != 0) goto <D.18996>; else goto <D.18993>;
    <D.18996>:
    D.18997 = cols << 16;
    cols_and_lines.10 = D.18997 | rows;
    cols_and_lines = cols_and_lines.10;
    goto <D.18994>;
    <D.18993>:
    cols_and_lines = -1;
    <D.18994>:
  }
  goto <D.18999>;
  <D.18988>:
  cols_and_lines = dims;
  <D.18999>:
  *size = &cols_and_lines;
  D.19000 = mono_domain_get ();
  D.19001 = mono_defaults.byte_class;
  D.19002 = mono_array_new (D.19000, D.19001, 17);
  mono_gc_wbarrier_generic_store (control_chars, D.19002);
  D.19003 = tcgetattr (0, &initial_attr);
  if (D.19003 == -1) goto <D.19004>; else goto <D.19005>;
  <D.19004>:
  D.19006 = 0;
  return D.19006;
  <D.19005>:
  mono_attr = initial_attr;
  D.19007 = mono_attr.c_lflag;
  D.19008 = D.19007 & 4294967039;
  mono_attr.c_lflag = D.19008;
  D.19009 = mono_attr.c_iflag;
  D.19010 = D.19009 & 4294965759;
  mono_attr.c_iflag = D.19010;
  mono_attr.c_cc[5] = 1;
  mono_attr.c_cc[7] = 0;
  D.19011 = tcsetattr (0, 0, &mono_attr);
  if (D.19011 == -1) goto <D.19012>; else goto <D.19013>;
  <D.19012>:
  D.19006 = 0;
  return D.19006;
  <D.19013>:
  D.19014 = *control_chars;
  set_control_chars (D.19014, &mono_attr.c_cc);
  setup_finished.11 = setup_finished;
  if (setup_finished.11 != 0) goto <D.19016>; else goto <D.19017>;
  <D.19016>:
  D.19006 = 1;
  return D.19006;
  <D.19017>:
  if (keypad != 0B) goto <D.19019>; else goto <D.19020>;
  <D.19019>:
  iftmp.12 = mono_string_to_utf8 (keypad);
  goto <D.19021>;
  <D.19020>:
  iftmp.12 = 0B;
  <D.19021>:
  keypad_xmit_str = iftmp.12;
  console_set_signal_handlers ();
  setup_finished = 1;
  atexit_called.13 = atexit_called;
  if (atexit_called.13 == 0) goto <D.19023>; else goto <D.19024>;
  <D.19023>:
  if (teardown != 0B) goto <D.19025>; else goto <D.19026>;
  <D.19025>:
  teardown_str.14 = mono_string_to_utf8 (teardown);
  teardown_str = teardown_str.14;
  <D.19026>:
  atexit (tty_teardown);
  <D.19024>:
  D.19006 = 1;
  return D.19006;
}


tty_teardown ()
{
  int setup_finished.15;
  gchar * teardown_str.16;
  long unsigned int D.19035;
  long int D.19036;
  int unused;

  setup_finished.15 = setup_finished;
  if (setup_finished.15 == 0) goto <D.19030>; else goto <D.19031>;
  <D.19030>:
  return;
  <D.19031>:
  teardown_str.16 = teardown_str;
  if (teardown_str.16 != 0B) goto <D.19033>; else goto <D.19034>;
  <D.19033>:
  teardown_str.16 = teardown_str;
  teardown_str.16 = teardown_str;
  D.19035 = strlen (teardown_str.16);
  D.19036 = write (1, teardown_str.16, D.19035);
  unused = (int) D.19036;
  teardown_str.16 = teardown_str;
  monoeg_g_free (teardown_str.16);
  teardown_str = 0B;
  <D.19034>:
  tcflush (0, 0);
  tcsetattr (0, 0, &initial_attr);
  set_property (8, 1);
  setup_finished = 0;
}


terminal_get_dimensions ()
{
  int * D.19038;
  int D.19039;
  short unsigned int D.19042;
  int D.19043;
  int D.19044;
  short unsigned int D.19045;
  int D.19046;
  int D.19047;
  struct winsize ws;
  int ret;
  int save_errno;

  try
    {
      D.19038 = __errno_location ();
      save_errno = *D.19038;
      D.19039 = ioctl (0, 1074295912, &ws);
      if (D.19039 == 0) goto <D.19040>; else goto <D.19041>;
      <D.19040>:
      D.19042 = ws.ws_col;
      D.19043 = (int) D.19042;
      D.19044 = D.19043 << 16;
      D.19045 = ws.ws_row;
      D.19046 = (int) D.19045;
      ret = D.19044 | D.19046;
      D.19038 = __errno_location ();
      *D.19038 = save_errno;
      D.19047 = ret;
      return D.19047;
      <D.19041>:
      D.19047 = -1;
      return D.19047;
    }
  finally
    {
      ws = {CLOBBER};
    }
}


atoi (const char * __nptr)
{
  int D.19050;
  long int D.19051;

  D.19051 = strtol (__nptr, 0B, 10);
  D.19050 = (int) D.19051;
  return D.19050;
}


set_control_chars (struct MonoArray * control_chars, const guchar * cc)
{
  unsigned char D.19053;
  const guchar * D.19054;
  unsigned char D.19055;
  const guchar * D.19056;
  unsigned char D.19057;
  const guchar * D.19058;
  unsigned char D.19059;
  const guchar * D.19060;
  unsigned char D.19061;
  const guchar * D.19062;
  unsigned char D.19063;
  const guchar * D.19064;
  unsigned char D.19065;
  const guchar * D.19066;
  unsigned char D.19067;
  const guchar * D.19068;
  unsigned char D.19069;
  const guchar * D.19070;
  unsigned char D.19071;
  const guchar * D.19072;
  unsigned char D.19073;
  const guchar * D.19074;
  unsigned char D.19075;
  const guchar * D.19076;
  unsigned char D.19077;
  const guchar * D.19078;
  unsigned char D.19079;
  const guchar * D.19080;
  unsigned char D.19081;
  const guchar * D.19082;
  unsigned char D.19083;
  const guchar * D.19084;
  unsigned char D.19085;

  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 0);
    D.19053 = *cc;
    *__p = D.19053;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 1);
    D.19054 = cc + 1;
    D.19055 = *D.19054;
    *__p = D.19055;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 2);
    D.19056 = cc + 2;
    D.19057 = *D.19056;
    *__p = D.19057;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 3);
    D.19058 = cc + 3;
    D.19059 = *D.19058;
    *__p = D.19059;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 4);
    D.19060 = cc + 4;
    D.19061 = *D.19060;
    *__p = D.19061;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 5);
    D.19062 = cc + 7;
    D.19063 = *D.19062;
    *__p = D.19063;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 6);
    D.19064 = cc + 5;
    D.19065 = *D.19064;
    *__p = D.19065;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 7);
    D.19066 = cc + 9;
    D.19067 = *D.19066;
    *__p = D.19067;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 8);
    D.19068 = cc + 13;
    D.19069 = *D.19068;
    *__p = D.19069;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 9);
    D.19070 = cc + 14;
    D.19071 = *D.19070;
    *__p = D.19071;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 10);
    D.19072 = cc + 12;
    D.19073 = *D.19072;
    *__p = D.19073;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 11);
    D.19074 = cc + 6;
    D.19075 = *D.19074;
    *__p = D.19075;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 12);
    D.19076 = cc + 11;
    D.19077 = *D.19076;
    *__p = D.19077;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 13);
    D.19078 = cc + 16;
    D.19079 = *D.19078;
    *__p = D.19079;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 14);
    D.19080 = cc + 10;
    D.19081 = *D.19080;
    *__p = D.19081;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 15);
    D.19082 = cc + 15;
    D.19083 = *D.19082;
    *__p = D.19083;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 16);
    D.19084 = cc + 8;
    D.19085 = *D.19084;
    *__p = D.19085;
  }
}


console_set_signal_handlers ()
{
  struct sigaction sigcont;
  struct sigaction sigint;
  struct sigaction sigwinch;

  try
    {
      memset (&sigcont, 0, 152);
      memset (&sigint, 0, 152);
      memset (&sigwinch, 0, 152);
      sigcont.__sigaction_handler.sa_handler = sigcont_handler;
      sigcont.sa_flags = 0;
      sigemptyset (&sigcont.sa_mask);
      sigaction (18, &sigcont, &save_sigcont);
      sigint.__sigaction_handler.sa_handler = sigint_handler;
      sigint.sa_flags = 0;
      sigemptyset (&sigint.sa_mask);
      sigaction (2, &sigint, &save_sigint);
      sigwinch.__sigaction_handler.sa_handler = sigwinch_handler;
      sigwinch.sa_flags = 0;
      sigemptyset (&sigwinch.sa_mask);
      sigaction (28, &sigwinch, &save_sigwinch);
    }
  finally
    {
      sigcont = {CLOBBER};
      sigint = {CLOBBER};
      sigwinch = {CLOBBER};
    }
}


sigwinch_handler (int signo, void * the_siginfo, void * data)
{
  void (*<Tfbf>) (int, struct siginfo_t *, void *) D.19088;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims != -1) goto <D.19086>; else goto <D.19087>;
  <D.19086>:
  cols_and_lines = dims;
  <D.19087>:
  D.19088 = save_sigwinch.__sigaction_handler.sa_sigaction;
  if (D.19088 > 1B) goto <D.19089>; else goto <D.19090>;
  <D.19089>:
  D.19088 = save_sigwinch.__sigaction_handler.sa_sigaction;
  D.19088 (signo, the_siginfo, data);
  <D.19090>:
}


sigint_handler (int signo)
{
  int in_sigint.17;
  int * D.19094;
  int save_errno;

  in_sigint.17 = in_sigint;
  if (in_sigint.17 != 0) goto <D.19092>; else goto <D.19093>;
  <D.19092>:
  return;
  <D.19093>:
  in_sigint = 1;
  D.19094 = __errno_location ();
  save_errno = *D.19094;
  need_cancel = 1;
  mono_gc_finalize_notify ();
  D.19094 = __errno_location ();
  *D.19094 = save_errno;
  in_sigint = 0;
}


sigcont_handler (int signo, void * the_siginfo, void * data)
{
  gchar * keypad_xmit_str.18;
  long unsigned int D.19099;
  long int D.19100;
  void (*<Tfbf>) (int, struct siginfo_t *, void *) D.19101;
  int unused;

  tcsetattr (0, 0, &mono_attr);
  keypad_xmit_str.18 = keypad_xmit_str;
  if (keypad_xmit_str.18 != 0B) goto <D.19097>; else goto <D.19098>;
  <D.19097>:
  keypad_xmit_str.18 = keypad_xmit_str;
  keypad_xmit_str.18 = keypad_xmit_str;
  D.19099 = strlen (keypad_xmit_str.18);
  D.19100 = write (1, keypad_xmit_str.18, D.19099);
  unused = (int) D.19100;
  <D.19098>:
  D.19101 = save_sigcont.__sigaction_handler.sa_sigaction;
  if (D.19101 > 1B) goto <D.19102>; else goto <D.19103>;
  <D.19102>:
  D.19101 = save_sigcont.__sigaction_handler.sa_sigaction;
  D.19101 (signo, the_siginfo, data);
  <D.19103>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.19106;
  int D.19111;
  void * D.19113;
  long unsigned int D.19114;

  D.19106 = __builtin_constant_p (__len);
  if (D.19106 != 0) goto <D.19107>; else goto <D.19108>;
  <D.19107>:
  if (__len == 0) goto <D.19109>; else goto <D.19110>;
  <D.19109>:
  D.19111 = __builtin_constant_p (__ch);
  if (D.19111 == 0) goto <D.19104>; else goto <D.19112>;
  <D.19112>:
  if (__ch != 0) goto <D.19104>; else goto <D.19105>;
  <D.19104>:
  __warn_memset_zero_len ();
  D.19113 = __dest;
  return D.19113;
  <D.19105>:
  <D.19110>:
  <D.19108>:
  D.19114 = __builtin_object_size (__dest, 0);
  D.19113 = __builtin___memset_chk (__dest, __ch, __len, D.19114);
  return D.19113;
}


