mono_md5_init (struct MonoMD5Context * ctx)
{
  union _endian * _endian.0;
  char D.5554;

  ctx->buf[0] = 1732584193;
  ctx->buf[1] = 4023233417;
  ctx->buf[2] = 2562383102;
  ctx->buf[3] = 271733878;
  ctx->bits[0] = 0;
  ctx->bits[1] = 0;
  _endian.0 = _endian;
  D.5554 = _endian.0->b[0];
  if (D.5554 == 68) goto <D.5555>; else goto <D.5556>;
  <D.5555>:
  ctx->doByteReverse = 1;
  goto <D.5557>;
  <D.5556>:
  ctx->doByteReverse = 0;
  <D.5557>:
}


mono_md5_update (struct MonoMD5Context * ctx, const guchar * buf, guint32 len)
{
  unsigned int D.5558;
  unsigned int D.5559;
  unsigned int D.5560;
  unsigned int D.5563;
  unsigned int D.5564;
  unsigned int D.5565;
  unsigned int D.5566;
  unsigned int D.5567;
  sizetype D.5570;
  long unsigned int D.5573;
  long unsigned int D.5574;
  int D.5575;
  guchar[64] * D.5578;
  guint32[4] * D.5579;
  guint32 t;

  t = ctx->bits[0];
  D.5558 = len << 3;
  D.5559 = D.5558 + t;
  ctx->bits[0] = D.5559;
  D.5560 = ctx->bits[0];
  if (D.5560 < t) goto <D.5561>; else goto <D.5562>;
  <D.5561>:
  D.5563 = ctx->bits[1];
  D.5564 = D.5563 + 1;
  ctx->bits[1] = D.5564;
  <D.5562>:
  D.5563 = ctx->bits[1];
  D.5565 = len >> 29;
  D.5566 = D.5563 + D.5565;
  ctx->bits[1] = D.5566;
  D.5567 = t >> 3;
  t = D.5567 & 63;
  if (t != 0) goto <D.5568>; else goto <D.5569>;
  <D.5568>:
  {
    guchar * p;

    D.5570 = (sizetype) t;
    p = &ctx->in[D.5570];
    t = 64 - t;
    if (len < t) goto <D.5571>; else goto <D.5572>;
    <D.5571>:
    D.5573 = (long unsigned int) len;
    memcpy (p, buf, D.5573);
    return;
    <D.5572>:
    D.5574 = (long unsigned int) t;
    memcpy (p, buf, D.5574);
    D.5575 = ctx->doByteReverse;
    if (D.5575 != 0) goto <D.5576>; else goto <D.5577>;
    <D.5576>:
    D.5578 = &ctx->in;
    _byte_reverse (D.5578, 16);
    <D.5577>:
    D.5579 = &ctx->buf;
    D.5578 = &ctx->in;
    md5_transform (D.5579, D.5578);
    D.5570 = (sizetype) t;
    buf = buf + D.5570;
    len = len - t;
  }
  <D.5569>:
  goto <D.5519>;
  <D.5518>:
  D.5578 = &ctx->in;
  memcpy (D.5578, buf, 64);
  D.5575 = ctx->doByteReverse;
  if (D.5575 != 0) goto <D.5580>; else goto <D.5581>;
  <D.5580>:
  D.5578 = &ctx->in;
  _byte_reverse (D.5578, 16);
  <D.5581>:
  D.5579 = &ctx->buf;
  D.5578 = &ctx->in;
  md5_transform (D.5579, D.5578);
  buf = buf + 64;
  len = len + 4294967232;
  <D.5519>:
  if (len > 63) goto <D.5518>; else goto <D.5520>;
  <D.5520>:
  D.5578 = &ctx->in;
  D.5573 = (long unsigned int) len;
  memcpy (D.5578, buf, D.5573);
}


_byte_reverse (guchar * buf, guint32 longs)
{
  guchar * D.5583;
  unsigned char D.5584;
  unsigned int D.5585;
  unsigned int D.5586;
  guchar * D.5587;
  unsigned char D.5588;
  unsigned int D.5589;
  unsigned int D.5590;
  unsigned int D.5591;
  guchar * D.5592;
  unsigned char D.5593;
  unsigned int D.5594;
  unsigned int D.5595;
  unsigned char D.5596;
  unsigned int D.5597;
  unsigned int D.5598;
  guint32 t;

  <D.5506>:
  D.5583 = buf + 3;
  D.5584 = *D.5583;
  D.5585 = (unsigned int) D.5584;
  D.5586 = D.5585 << 8;
  D.5587 = buf + 2;
  D.5588 = *D.5587;
  D.5589 = (unsigned int) D.5588;
  D.5590 = D.5586 | D.5589;
  D.5591 = D.5590 << 16;
  D.5592 = buf + 1;
  D.5593 = *D.5592;
  D.5594 = (unsigned int) D.5593;
  D.5595 = D.5594 << 8;
  D.5596 = *buf;
  D.5597 = (unsigned int) D.5596;
  D.5598 = D.5595 | D.5597;
  t = D.5591 | D.5598;
  MEM[(guint32 *)buf] = t;
  buf = buf + 4;
  longs = longs + 4294967295;
  if (longs != 0) goto <D.5506>; else goto <D.5507>;
  <D.5507>:
}


md5_transform (guint32 * buf, const guint32 * in)
{
  unsigned int D.5599;
  unsigned int D.5600;
  unsigned int D.5601;
  unsigned int D.5602;
  unsigned int D.5603;
  unsigned int D.5604;
  unsigned int D.5605;
  unsigned int D.5606;
  unsigned int D.5607;
  const guint32 * D.5608;
  unsigned int D.5609;
  unsigned int D.5610;
  unsigned int D.5611;
  unsigned int D.5612;
  unsigned int D.5613;
  unsigned int D.5614;
  const guint32 * D.5615;
  unsigned int D.5616;
  unsigned int D.5617;
  unsigned int D.5618;
  unsigned int D.5619;
  unsigned int D.5620;
  unsigned int D.5621;
  const guint32 * D.5622;
  unsigned int D.5623;
  unsigned int D.5624;
  unsigned int D.5625;
  const guint32 * D.5626;
  unsigned int D.5627;
  unsigned int D.5628;
  unsigned int D.5629;
  const guint32 * D.5630;
  unsigned int D.5631;
  unsigned int D.5632;
  unsigned int D.5633;
  const guint32 * D.5634;
  unsigned int D.5635;
  unsigned int D.5636;
  unsigned int D.5637;
  const guint32 * D.5638;
  unsigned int D.5639;
  unsigned int D.5640;
  unsigned int D.5641;
  const guint32 * D.5642;
  unsigned int D.5643;
  unsigned int D.5644;
  unsigned int D.5645;
  const guint32 * D.5646;
  unsigned int D.5647;
  unsigned int D.5648;
  unsigned int D.5649;
  const guint32 * D.5650;
  unsigned int D.5651;
  unsigned int D.5652;
  unsigned int D.5653;
  const guint32 * D.5654;
  unsigned int D.5655;
  unsigned int D.5656;
  unsigned int D.5657;
  const guint32 * D.5658;
  unsigned int D.5659;
  unsigned int D.5660;
  unsigned int D.5661;
  const guint32 * D.5662;
  unsigned int D.5663;
  unsigned int D.5664;
  unsigned int D.5665;
  const guint32 * D.5666;
  unsigned int D.5667;
  unsigned int D.5668;
  unsigned int D.5669;
  const guint32 * D.5670;
  unsigned int D.5671;
  unsigned int D.5672;
  unsigned int D.5673;
  unsigned int D.5674;
  unsigned int D.5675;
  unsigned int D.5676;
  unsigned int D.5677;
  unsigned int D.5678;
  unsigned int D.5679;
  unsigned int D.5680;
  unsigned int D.5681;
  unsigned int D.5682;
  unsigned int D.5683;
  unsigned int D.5684;
  unsigned int D.5685;
  unsigned int D.5686;
  unsigned int D.5687;
  unsigned int D.5688;
  unsigned int D.5689;
  unsigned int D.5690;
  unsigned int D.5691;
  unsigned int D.5692;
  unsigned int D.5693;
  unsigned int D.5694;
  unsigned int D.5695;
  unsigned int D.5696;
  unsigned int D.5697;
  unsigned int D.5698;
  unsigned int D.5699;
  unsigned int D.5700;
  unsigned int D.5701;
  unsigned int D.5702;
  unsigned int D.5703;
  unsigned int D.5704;
  unsigned int D.5705;
  unsigned int D.5706;
  unsigned int D.5707;
  unsigned int D.5708;
  unsigned int D.5709;
  unsigned int D.5710;
  unsigned int D.5711;
  unsigned int D.5712;
  unsigned int D.5713;
  unsigned int D.5714;
  unsigned int D.5715;
  unsigned int D.5716;
  unsigned int D.5717;
  unsigned int D.5718;
  unsigned int D.5719;
  unsigned int D.5720;
  unsigned int D.5721;
  unsigned int D.5722;
  unsigned int D.5723;
  unsigned int D.5724;
  unsigned int D.5725;
  unsigned int D.5726;
  unsigned int D.5727;
  unsigned int D.5728;
  unsigned int D.5729;
  unsigned int D.5730;
  unsigned int D.5731;
  unsigned int D.5732;
  unsigned int D.5733;
  unsigned int D.5734;
  unsigned int D.5735;
  unsigned int D.5736;
  unsigned int D.5737;
  unsigned int D.5738;
  unsigned int D.5739;
  unsigned int D.5740;
  unsigned int D.5741;
  unsigned int D.5742;
  unsigned int D.5743;
  unsigned int D.5744;
  unsigned int D.5745;
  unsigned int D.5746;
  unsigned int D.5747;
  unsigned int D.5748;
  unsigned int D.5749;
  unsigned int D.5750;
  unsigned int D.5751;
  unsigned int D.5752;
  unsigned int D.5753;
  unsigned int D.5754;
  unsigned int D.5755;
  unsigned int D.5756;
  unsigned int D.5757;
  unsigned int D.5758;
  unsigned int D.5759;
  unsigned int D.5760;
  unsigned int D.5761;
  unsigned int D.5762;
  unsigned int D.5763;
  unsigned int D.5764;
  unsigned int D.5765;
  unsigned int D.5766;
  unsigned int D.5767;
  unsigned int D.5768;
  unsigned int D.5769;
  unsigned int D.5770;
  unsigned int D.5771;
  unsigned int D.5772;
  unsigned int D.5773;
  unsigned int D.5774;
  unsigned int D.5775;
  unsigned int D.5776;
  unsigned int D.5777;
  unsigned int D.5778;
  unsigned int D.5779;
  unsigned int D.5780;
  unsigned int D.5781;
  unsigned int D.5782;
  unsigned int D.5783;
  unsigned int D.5784;
  unsigned int D.5785;
  unsigned int D.5786;
  unsigned int D.5787;
  unsigned int D.5788;
  unsigned int D.5789;
  unsigned int D.5790;
  unsigned int D.5791;
  unsigned int D.5792;
  unsigned int D.5793;
  unsigned int D.5794;
  unsigned int D.5795;
  guint32 * D.5796;
  unsigned int D.5797;
  unsigned int D.5798;
  guint32 * D.5799;
  unsigned int D.5800;
  unsigned int D.5801;
  guint32 * D.5802;
  unsigned int D.5803;
  unsigned int D.5804;
  register guint32 a;
  register guint32 b;
  register guint32 c;
  register guint32 d;

  a = *buf;
  b = MEM[(guint32 *)buf + 4B];
  c = MEM[(guint32 *)buf + 8B];
  d = MEM[(guint32 *)buf + 12B];
  D.5599 = c ^ d;
  D.5600 = D.5599 & b;
  D.5601 = D.5600 ^ d;
  D.5602 = *in;
  D.5603 = D.5601 + D.5602;
  D.5604 = D.5603 + a;
  a = D.5604 + 3614090360;
  a = a r>> 25;
  a = a + b;
  D.5605 = b ^ c;
  D.5606 = D.5605 & a;
  D.5607 = D.5606 ^ c;
  D.5608 = in + 4;
  D.5609 = *D.5608;
  D.5610 = D.5607 + D.5609;
  D.5611 = D.5610 + d;
  d = D.5611 + 3905402710;
  d = d r>> 20;
  d = d + a;
  D.5612 = a ^ b;
  D.5613 = D.5612 & d;
  D.5614 = D.5613 ^ b;
  D.5615 = in + 8;
  D.5616 = *D.5615;
  D.5617 = D.5614 + D.5616;
  D.5618 = D.5617 + c;
  c = D.5618 + 606105819;
  c = c r>> 15;
  c = c + d;
  D.5619 = d ^ a;
  D.5620 = D.5619 & c;
  D.5621 = D.5620 ^ a;
  D.5622 = in + 12;
  D.5623 = *D.5622;
  D.5624 = D.5621 + D.5623;
  D.5625 = D.5624 + b;
  b = D.5625 + 3250441966;
  b = b r>> 10;
  b = b + c;
  D.5599 = c ^ d;
  D.5600 = D.5599 & b;
  D.5601 = D.5600 ^ d;
  D.5626 = in + 16;
  D.5627 = *D.5626;
  D.5628 = D.5601 + D.5627;
  D.5629 = D.5628 + a;
  a = D.5629 + 4118548399;
  a = a r>> 25;
  a = a + b;
  D.5605 = b ^ c;
  D.5606 = D.5605 & a;
  D.5607 = D.5606 ^ c;
  D.5630 = in + 20;
  D.5631 = *D.5630;
  D.5632 = D.5607 + D.5631;
  D.5633 = D.5632 + d;
  d = D.5633 + 1200080426;
  d = d r>> 20;
  d = d + a;
  D.5612 = a ^ b;
  D.5613 = D.5612 & d;
  D.5614 = D.5613 ^ b;
  D.5634 = in + 24;
  D.5635 = *D.5634;
  D.5636 = D.5614 + D.5635;
  D.5637 = D.5636 + c;
  c = D.5637 + 2821735955;
  c = c r>> 15;
  c = c + d;
  D.5619 = d ^ a;
  D.5620 = D.5619 & c;
  D.5621 = D.5620 ^ a;
  D.5638 = in + 28;
  D.5639 = *D.5638;
  D.5640 = D.5621 + D.5639;
  D.5641 = D.5640 + b;
  b = D.5641 + 4249261313;
  b = b r>> 10;
  b = b + c;
  D.5599 = c ^ d;
  D.5600 = D.5599 & b;
  D.5601 = D.5600 ^ d;
  D.5642 = in + 32;
  D.5643 = *D.5642;
  D.5644 = D.5601 + D.5643;
  D.5645 = D.5644 + a;
  a = D.5645 + 1770035416;
  a = a r>> 25;
  a = a + b;
  D.5605 = b ^ c;
  D.5606 = D.5605 & a;
  D.5607 = D.5606 ^ c;
  D.5646 = in + 36;
  D.5647 = *D.5646;
  D.5648 = D.5607 + D.5647;
  D.5649 = D.5648 + d;
  d = D.5649 + 2336552879;
  d = d r>> 20;
  d = d + a;
  D.5612 = a ^ b;
  D.5613 = D.5612 & d;
  D.5614 = D.5613 ^ b;
  D.5650 = in + 40;
  D.5651 = *D.5650;
  D.5652 = D.5614 + D.5651;
  D.5653 = D.5652 + c;
  c = D.5653 + 4294925233;
  c = c r>> 15;
  c = c + d;
  D.5619 = d ^ a;
  D.5620 = D.5619 & c;
  D.5621 = D.5620 ^ a;
  D.5654 = in + 44;
  D.5655 = *D.5654;
  D.5656 = D.5621 + D.5655;
  D.5657 = D.5656 + b;
  b = D.5657 + 2304563134;
  b = b r>> 10;
  b = b + c;
  D.5599 = c ^ d;
  D.5600 = D.5599 & b;
  D.5601 = D.5600 ^ d;
  D.5658 = in + 48;
  D.5659 = *D.5658;
  D.5660 = D.5601 + D.5659;
  D.5661 = D.5660 + a;
  a = D.5661 + 1804603682;
  a = a r>> 25;
  a = a + b;
  D.5605 = b ^ c;
  D.5606 = D.5605 & a;
  D.5607 = D.5606 ^ c;
  D.5662 = in + 52;
  D.5663 = *D.5662;
  D.5664 = D.5607 + D.5663;
  D.5665 = D.5664 + d;
  d = D.5665 + 4254626195;
  d = d r>> 20;
  d = d + a;
  D.5612 = a ^ b;
  D.5613 = D.5612 & d;
  D.5614 = D.5613 ^ b;
  D.5666 = in + 56;
  D.5667 = *D.5666;
  D.5668 = D.5614 + D.5667;
  D.5669 = D.5668 + c;
  c = D.5669 + 2792965006;
  c = c r>> 15;
  c = c + d;
  D.5619 = d ^ a;
  D.5620 = D.5619 & c;
  D.5621 = D.5620 ^ a;
  D.5670 = in + 60;
  D.5671 = *D.5670;
  D.5672 = D.5621 + D.5671;
  D.5673 = D.5672 + b;
  b = D.5673 + 1236535329;
  b = b r>> 10;
  b = b + c;
  D.5605 = b ^ c;
  D.5674 = D.5605 & d;
  D.5675 = D.5674 ^ c;
  D.5608 = in + 4;
  D.5609 = *D.5608;
  D.5676 = D.5675 + D.5609;
  D.5677 = D.5676 + a;
  a = D.5677 + 4129170786;
  a = a r>> 27;
  a = a + b;
  D.5612 = a ^ b;
  D.5678 = D.5612 & c;
  D.5679 = D.5678 ^ b;
  D.5634 = in + 24;
  D.5635 = *D.5634;
  D.5680 = D.5679 + D.5635;
  D.5681 = D.5680 + d;
  d = D.5681 + 3225465664;
  d = d r>> 23;
  d = d + a;
  D.5619 = d ^ a;
  D.5682 = D.5619 & b;
  D.5683 = D.5682 ^ a;
  D.5654 = in + 44;
  D.5655 = *D.5654;
  D.5684 = D.5683 + D.5655;
  D.5685 = D.5684 + c;
  c = D.5685 + 643717713;
  c = c r>> 18;
  c = c + d;
  D.5599 = c ^ d;
  D.5686 = D.5599 & a;
  D.5687 = D.5686 ^ d;
  D.5602 = *in;
  D.5688 = D.5687 + D.5602;
  D.5689 = D.5688 + b;
  b = D.5689 + 3921069994;
  b = b r>> 12;
  b = b + c;
  D.5605 = b ^ c;
  D.5674 = D.5605 & d;
  D.5675 = D.5674 ^ c;
  D.5630 = in + 20;
  D.5631 = *D.5630;
  D.5690 = D.5675 + D.5631;
  D.5691 = D.5690 + a;
  a = D.5691 + 3593408605;
  a = a r>> 27;
  a = a + b;
  D.5612 = a ^ b;
  D.5678 = D.5612 & c;
  D.5679 = D.5678 ^ b;
  D.5650 = in + 40;
  D.5651 = *D.5650;
  D.5692 = D.5679 + D.5651;
  D.5693 = D.5692 + d;
  d = D.5693 + 38016083;
  d = d r>> 23;
  d = d + a;
  D.5619 = d ^ a;
  D.5682 = D.5619 & b;
  D.5683 = D.5682 ^ a;
  D.5670 = in + 60;
  D.5671 = *D.5670;
  D.5694 = D.5683 + D.5671;
  D.5695 = D.5694 + c;
  c = D.5695 + 3634488961;
  c = c r>> 18;
  c = c + d;
  D.5599 = c ^ d;
  D.5686 = D.5599 & a;
  D.5687 = D.5686 ^ d;
  D.5626 = in + 16;
  D.5627 = *D.5626;
  D.5696 = D.5687 + D.5627;
  D.5697 = D.5696 + b;
  b = D.5697 + 3889429448;
  b = b r>> 12;
  b = b + c;
  D.5605 = b ^ c;
  D.5674 = D.5605 & d;
  D.5675 = D.5674 ^ c;
  D.5646 = in + 36;
  D.5647 = *D.5646;
  D.5698 = D.5675 + D.5647;
  D.5699 = D.5698 + a;
  a = D.5699 + 568446438;
  a = a r>> 27;
  a = a + b;
  D.5612 = a ^ b;
  D.5678 = D.5612 & c;
  D.5679 = D.5678 ^ b;
  D.5666 = in + 56;
  D.5667 = *D.5666;
  D.5700 = D.5679 + D.5667;
  D.5701 = D.5700 + d;
  d = D.5701 + 3275163606;
  d = d r>> 23;
  d = d + a;
  D.5619 = d ^ a;
  D.5682 = D.5619 & b;
  D.5683 = D.5682 ^ a;
  D.5622 = in + 12;
  D.5623 = *D.5622;
  D.5702 = D.5683 + D.5623;
  D.5703 = D.5702 + c;
  c = D.5703 + 4107603335;
  c = c r>> 18;
  c = c + d;
  D.5599 = c ^ d;
  D.5686 = D.5599 & a;
  D.5687 = D.5686 ^ d;
  D.5642 = in + 32;
  D.5643 = *D.5642;
  D.5704 = D.5687 + D.5643;
  D.5705 = D.5704 + b;
  b = D.5705 + 1163531501;
  b = b r>> 12;
  b = b + c;
  D.5605 = b ^ c;
  D.5674 = D.5605 & d;
  D.5675 = D.5674 ^ c;
  D.5662 = in + 52;
  D.5663 = *D.5662;
  D.5706 = D.5675 + D.5663;
  D.5707 = D.5706 + a;
  a = D.5707 + 2850285829;
  a = a r>> 27;
  a = a + b;
  D.5612 = a ^ b;
  D.5678 = D.5612 & c;
  D.5679 = D.5678 ^ b;
  D.5615 = in + 8;
  D.5616 = *D.5615;
  D.5708 = D.5679 + D.5616;
  D.5709 = D.5708 + d;
  d = D.5709 + 4243563512;
  d = d r>> 23;
  d = d + a;
  D.5619 = d ^ a;
  D.5682 = D.5619 & b;
  D.5683 = D.5682 ^ a;
  D.5638 = in + 28;
  D.5639 = *D.5638;
  D.5710 = D.5683 + D.5639;
  D.5711 = D.5710 + c;
  c = D.5711 + 1735328473;
  c = c r>> 18;
  c = c + d;
  D.5599 = c ^ d;
  D.5686 = D.5599 & a;
  D.5687 = D.5686 ^ d;
  D.5658 = in + 48;
  D.5659 = *D.5658;
  D.5712 = D.5687 + D.5659;
  D.5713 = D.5712 + b;
  b = D.5713 + 2368359562;
  b = b r>> 12;
  b = b + c;
  D.5605 = b ^ c;
  D.5714 = D.5605 ^ d;
  D.5630 = in + 20;
  D.5631 = *D.5630;
  D.5715 = D.5714 + D.5631;
  D.5716 = D.5715 + a;
  a = D.5716 + 4294588738;
  a = a r>> 28;
  a = a + b;
  D.5612 = a ^ b;
  D.5717 = D.5612 ^ c;
  D.5642 = in + 32;
  D.5643 = *D.5642;
  D.5718 = D.5717 + D.5643;
  D.5719 = D.5718 + d;
  d = D.5719 + 2272392833;
  d = d r>> 21;
  d = d + a;
  D.5619 = d ^ a;
  D.5720 = D.5619 ^ b;
  D.5654 = in + 44;
  D.5655 = *D.5654;
  D.5721 = D.5720 + D.5655;
  D.5722 = D.5721 + c;
  c = D.5722 + 1839030562;
  c = c r>> 16;
  c = c + d;
  D.5599 = c ^ d;
  D.5723 = D.5599 ^ a;
  D.5666 = in + 56;
  D.5667 = *D.5666;
  D.5724 = D.5723 + D.5667;
  D.5725 = D.5724 + b;
  b = D.5725 + 4259657740;
  b = b r>> 9;
  b = b + c;
  D.5605 = b ^ c;
  D.5714 = D.5605 ^ d;
  D.5608 = in + 4;
  D.5609 = *D.5608;
  D.5726 = D.5714 + D.5609;
  D.5727 = D.5726 + a;
  a = D.5727 + 2763975236;
  a = a r>> 28;
  a = a + b;
  D.5612 = a ^ b;
  D.5717 = D.5612 ^ c;
  D.5626 = in + 16;
  D.5627 = *D.5626;
  D.5728 = D.5717 + D.5627;
  D.5729 = D.5728 + d;
  d = D.5729 + 1272893353;
  d = d r>> 21;
  d = d + a;
  D.5619 = d ^ a;
  D.5720 = D.5619 ^ b;
  D.5638 = in + 28;
  D.5639 = *D.5638;
  D.5730 = D.5720 + D.5639;
  D.5731 = D.5730 + c;
  c = D.5731 + 4139469664;
  c = c r>> 16;
  c = c + d;
  D.5599 = c ^ d;
  D.5723 = D.5599 ^ a;
  D.5650 = in + 40;
  D.5651 = *D.5650;
  D.5732 = D.5723 + D.5651;
  D.5733 = D.5732 + b;
  b = D.5733 + 3200236656;
  b = b r>> 9;
  b = b + c;
  D.5605 = b ^ c;
  D.5714 = D.5605 ^ d;
  D.5662 = in + 52;
  D.5663 = *D.5662;
  D.5734 = D.5714 + D.5663;
  D.5735 = D.5734 + a;
  a = D.5735 + 681279174;
  a = a r>> 28;
  a = a + b;
  D.5612 = a ^ b;
  D.5717 = D.5612 ^ c;
  D.5602 = *in;
  D.5736 = D.5717 + D.5602;
  D.5737 = D.5736 + d;
  d = D.5737 + 3936430074;
  d = d r>> 21;
  d = d + a;
  D.5619 = d ^ a;
  D.5720 = D.5619 ^ b;
  D.5622 = in + 12;
  D.5623 = *D.5622;
  D.5738 = D.5720 + D.5623;
  D.5739 = D.5738 + c;
  c = D.5739 + 3572445317;
  c = c r>> 16;
  c = c + d;
  D.5599 = c ^ d;
  D.5723 = D.5599 ^ a;
  D.5634 = in + 24;
  D.5635 = *D.5634;
  D.5740 = D.5723 + D.5635;
  D.5741 = D.5740 + b;
  b = D.5741 + 76029189;
  b = b r>> 9;
  b = b + c;
  D.5605 = b ^ c;
  D.5714 = D.5605 ^ d;
  D.5646 = in + 36;
  D.5647 = *D.5646;
  D.5742 = D.5714 + D.5647;
  D.5743 = D.5742 + a;
  a = D.5743 + 3654602809;
  a = a r>> 28;
  a = a + b;
  D.5612 = a ^ b;
  D.5717 = D.5612 ^ c;
  D.5658 = in + 48;
  D.5659 = *D.5658;
  D.5744 = D.5717 + D.5659;
  D.5745 = D.5744 + d;
  d = D.5745 + 3873151461;
  d = d r>> 21;
  d = d + a;
  D.5619 = d ^ a;
  D.5720 = D.5619 ^ b;
  D.5670 = in + 60;
  D.5671 = *D.5670;
  D.5746 = D.5720 + D.5671;
  D.5747 = D.5746 + c;
  c = D.5747 + 530742520;
  c = c r>> 16;
  c = c + d;
  D.5599 = c ^ d;
  D.5723 = D.5599 ^ a;
  D.5615 = in + 8;
  D.5616 = *D.5615;
  D.5748 = D.5723 + D.5616;
  D.5749 = D.5748 + b;
  b = D.5749 + 3299628645;
  b = b r>> 9;
  b = b + c;
  D.5750 = ~d;
  D.5751 = D.5750 | b;
  D.5752 = D.5751 ^ c;
  D.5602 = *in;
  D.5753 = D.5752 + D.5602;
  D.5754 = D.5753 + a;
  a = D.5754 + 4096336452;
  a = a r>> 26;
  a = a + b;
  D.5755 = ~c;
  D.5756 = D.5755 | a;
  D.5757 = D.5756 ^ b;
  D.5638 = in + 28;
  D.5639 = *D.5638;
  D.5758 = D.5757 + D.5639;
  D.5759 = D.5758 + d;
  d = D.5759 + 1126891415;
  d = d r>> 22;
  d = d + a;
  D.5760 = ~b;
  D.5761 = D.5760 | d;
  D.5762 = D.5761 ^ a;
  D.5666 = in + 56;
  D.5667 = *D.5666;
  D.5763 = D.5762 + D.5667;
  D.5764 = D.5763 + c;
  c = D.5764 + 2878612391;
  c = c r>> 17;
  c = c + d;
  D.5765 = ~a;
  D.5766 = D.5765 | c;
  D.5767 = D.5766 ^ d;
  D.5630 = in + 20;
  D.5631 = *D.5630;
  D.5768 = D.5767 + D.5631;
  D.5769 = D.5768 + b;
  b = D.5769 + 4237533241;
  b = b r>> 11;
  b = b + c;
  D.5750 = ~d;
  D.5751 = D.5750 | b;
  D.5752 = D.5751 ^ c;
  D.5658 = in + 48;
  D.5659 = *D.5658;
  D.5770 = D.5752 + D.5659;
  D.5771 = D.5770 + a;
  a = D.5771 + 1700485571;
  a = a r>> 26;
  a = a + b;
  D.5755 = ~c;
  D.5756 = D.5755 | a;
  D.5757 = D.5756 ^ b;
  D.5622 = in + 12;
  D.5623 = *D.5622;
  D.5772 = D.5757 + D.5623;
  D.5773 = D.5772 + d;
  d = D.5773 + 2399980690;
  d = d r>> 22;
  d = d + a;
  D.5760 = ~b;
  D.5761 = D.5760 | d;
  D.5762 = D.5761 ^ a;
  D.5650 = in + 40;
  D.5651 = *D.5650;
  D.5774 = D.5762 + D.5651;
  D.5775 = D.5774 + c;
  c = D.5775 + 4293915773;
  c = c r>> 17;
  c = c + d;
  D.5765 = ~a;
  D.5766 = D.5765 | c;
  D.5767 = D.5766 ^ d;
  D.5608 = in + 4;
  D.5609 = *D.5608;
  D.5776 = D.5767 + D.5609;
  D.5777 = D.5776 + b;
  b = D.5777 + 2240044497;
  b = b r>> 11;
  b = b + c;
  D.5750 = ~d;
  D.5751 = D.5750 | b;
  D.5752 = D.5751 ^ c;
  D.5642 = in + 32;
  D.5643 = *D.5642;
  D.5778 = D.5752 + D.5643;
  D.5779 = D.5778 + a;
  a = D.5779 + 1873313359;
  a = a r>> 26;
  a = a + b;
  D.5755 = ~c;
  D.5756 = D.5755 | a;
  D.5757 = D.5756 ^ b;
  D.5670 = in + 60;
  D.5671 = *D.5670;
  D.5780 = D.5757 + D.5671;
  D.5781 = D.5780 + d;
  d = D.5781 + 4264355552;
  d = d r>> 22;
  d = d + a;
  D.5760 = ~b;
  D.5761 = D.5760 | d;
  D.5762 = D.5761 ^ a;
  D.5634 = in + 24;
  D.5635 = *D.5634;
  D.5782 = D.5762 + D.5635;
  D.5783 = D.5782 + c;
  c = D.5783 + 2734768916;
  c = c r>> 17;
  c = c + d;
  D.5765 = ~a;
  D.5766 = D.5765 | c;
  D.5767 = D.5766 ^ d;
  D.5662 = in + 52;
  D.5663 = *D.5662;
  D.5784 = D.5767 + D.5663;
  D.5785 = D.5784 + b;
  b = D.5785 + 1309151649;
  b = b r>> 11;
  b = b + c;
  D.5750 = ~d;
  D.5751 = D.5750 | b;
  D.5752 = D.5751 ^ c;
  D.5626 = in + 16;
  D.5627 = *D.5626;
  D.5786 = D.5752 + D.5627;
  D.5787 = D.5786 + a;
  a = D.5787 + 4149444226;
  a = a r>> 26;
  a = a + b;
  D.5755 = ~c;
  D.5756 = D.5755 | a;
  D.5757 = D.5756 ^ b;
  D.5654 = in + 44;
  D.5655 = *D.5654;
  D.5788 = D.5757 + D.5655;
  D.5789 = D.5788 + d;
  d = D.5789 + 3174756917;
  d = d r>> 22;
  d = d + a;
  D.5760 = ~b;
  D.5761 = D.5760 | d;
  D.5762 = D.5761 ^ a;
  D.5615 = in + 8;
  D.5616 = *D.5615;
  D.5790 = D.5762 + D.5616;
  D.5791 = D.5790 + c;
  c = D.5791 + 718787259;
  c = c r>> 17;
  c = c + d;
  D.5765 = ~a;
  D.5766 = D.5765 | c;
  D.5767 = D.5766 ^ d;
  D.5646 = in + 36;
  D.5647 = *D.5646;
  D.5792 = D.5767 + D.5647;
  D.5793 = D.5792 + b;
  b = D.5793 + 3951481745;
  b = b r>> 11;
  b = b + c;
  D.5794 = *buf;
  D.5795 = D.5794 + a;
  *buf = D.5795;
  D.5796 = buf + 4;
  D.5796 = buf + 4;
  D.5797 = *D.5796;
  D.5798 = D.5797 + b;
  *D.5796 = D.5798;
  D.5799 = buf + 8;
  D.5799 = buf + 8;
  D.5800 = *D.5799;
  D.5801 = D.5800 + c;
  *D.5799 = D.5801;
  D.5802 = buf + 12;
  D.5802 = buf + 12;
  D.5803 = *D.5802;
  D.5804 = D.5803 + d;
  *D.5802 = D.5804;
}


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

  D.5806 = __builtin_object_size (__dest, 0);
  D.5805 = __builtin___memcpy_chk (__dest, __src, __len, D.5806);
  return D.5805;
}


mono_md5_final (struct MonoMD5Context * ctx, guchar * digest)
{
  unsigned int D.5808;
  unsigned int D.5809;
  sizetype D.5810;
  guchar * p.1;
  long unsigned int D.5814;
  int D.5815;
  guchar[64] * D.5818;
  guint32[4] * D.5819;
  unsigned int D.5821;
  long unsigned int D.5822;
  guchar * D.5825;
  guchar * D.5826;
  unsigned int D.5827;
  guint32 count;
  guchar * p;

  D.5808 = ctx->bits[0];
  D.5809 = D.5808 >> 3;
  count = D.5809 & 63;
  D.5810 = (sizetype) count;
  p = &ctx->in[D.5810];
  p.1 = p;
  p = p.1 + 1;
  *p.1 = 128;
  count = 63 - count;
  if (count <= 7) goto <D.5812>; else goto <D.5813>;
  <D.5812>:
  D.5814 = (long unsigned int) count;
  memset (p, 0, D.5814);
  D.5815 = ctx->doByteReverse;
  if (D.5815 != 0) goto <D.5816>; else goto <D.5817>;
  <D.5816>:
  D.5818 = &ctx->in;
  _byte_reverse (D.5818, 16);
  <D.5817>:
  D.5819 = &ctx->buf;
  D.5818 = &ctx->in;
  md5_transform (D.5819, D.5818);
  D.5818 = &ctx->in;
  memset (D.5818, 0, 56);
  goto <D.5820>;
  <D.5813>:
  D.5821 = count + 4294967288;
  D.5822 = (long unsigned int) D.5821;
  memset (p, 0, D.5822);
  <D.5820>:
  D.5815 = ctx->doByteReverse;
  if (D.5815 != 0) goto <D.5823>; else goto <D.5824>;
  <D.5823>:
  D.5818 = &ctx->in;
  _byte_reverse (D.5818, 14);
  <D.5824>:
  D.5825 = &ctx->in[56];
  D.5808 = ctx->bits[0];
  MEM[(guint32 *)D.5825] = D.5808;
  D.5826 = &ctx->in[60];
  D.5827 = ctx->bits[1];
  MEM[(guint32 *)D.5826] = D.5827;
  D.5819 = &ctx->buf;
  D.5818 = &ctx->in;
  md5_transform (D.5819, D.5818);
  D.5815 = ctx->doByteReverse;
  if (D.5815 != 0) goto <D.5828>; else goto <D.5829>;
  <D.5828>:
  D.5819 = &ctx->buf;
  _byte_reverse (D.5819, 4);
  <D.5829>:
  D.5819 = &ctx->buf;
  memcpy (digest, D.5819, 16);
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.5832;
  int D.5837;
  void * D.5839;
  long unsigned int D.5840;

  D.5832 = __builtin_constant_p (__len);
  if (D.5832 != 0) goto <D.5833>; else goto <D.5834>;
  <D.5833>:
  if (__len == 0) goto <D.5835>; else goto <D.5836>;
  <D.5835>:
  D.5837 = __builtin_constant_p (__ch);
  if (D.5837 == 0) goto <D.5830>; else goto <D.5838>;
  <D.5838>:
  if (__ch != 0) goto <D.5830>; else goto <D.5831>;
  <D.5830>:
  __warn_memset_zero_len ();
  D.5839 = __dest;
  return D.5839;
  <D.5831>:
  <D.5836>:
  <D.5834>:
  D.5840 = __builtin_object_size (__dest, 0);
  D.5839 = __builtin___memset_chk (__dest, __ch, __len, D.5840);
  return D.5839;
}


mono_md5_get_digest (const guchar * buffer, gint buffer_size, guchar * digest)
{
  unsigned int buffer_size.2;
  struct MonoMD5Context ctx;

  try
    {
      mono_md5_init (&ctx);
      buffer_size.2 = (unsigned int) buffer_size;
      mono_md5_update (&ctx, buffer, buffer_size.2);
      mono_md5_final (&ctx, digest);
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


mono_md5_get_digest_from_file (const gchar * filename, guchar * digest)
{
  unsigned int nb_bytes_read.3;
  long unsigned int D.5846;
  int D.5847;
  struct MonoMD5Context ctx;
  guchar tmp_buf[1024];
  gint nb_bytes_read;
  struct FILE * fp;

  try
    {
      mono_md5_init (&ctx);
      fp = fopen (filename, "r");
      if (fp == 0B) goto <D.5843>; else goto <D.5844>;
      <D.5843>:
      return;
      <D.5844>:
      goto <D.5550>;
      <D.5549>:
      nb_bytes_read.3 = (unsigned int) nb_bytes_read;
      mono_md5_update (&ctx, &tmp_buf, nb_bytes_read.3);
      <D.5550>:
      D.5846 = fread (&tmp_buf, 1, 1024, fp);
      nb_bytes_read = (gint) D.5846;
      if (nb_bytes_read > 0) goto <D.5549>; else goto <D.5551>;
      <D.5551>:
      D.5847 = ferror (fp);
      if (D.5847 != 0) goto <D.5848>; else goto <D.5849>;
      <D.5848>:
      fclose (fp);
      return;
      <D.5849>:
      fclose (fp);
      mono_md5_final (&ctx, digest);
    }
  finally
    {
      ctx = {CLOBBER};
      tmp_buf = {CLOBBER};
    }
}


fread (void * restrict __ptr, size_t __size, size_t __n, struct FILE * restrict __stream)
{
  long unsigned int D.5853;
  int D.5858;
  int D.5860;
  long unsigned int D.5862;
  size_t D.5863;
  long unsigned int D.5864;
  long unsigned int D.5865;
  long unsigned int D.5866;
  long unsigned int D.5869;

  D.5853 = __builtin_object_size (__ptr, 0);
  if (D.5853 != 18446744073709551615) goto <D.5854>; else goto <D.5855>;
  <D.5854>:
  D.5858 = __builtin_constant_p (__size);
  if (D.5858 == 0) goto <D.5856>; else goto <D.5859>;
  <D.5859>:
  D.5860 = __builtin_constant_p (__n);
  if (D.5860 == 0) goto <D.5856>; else goto <D.5861>;
  <D.5861>:
  D.5862 = __size | __n;
  if (D.5862 > 4294967295) goto <D.5856>; else goto <D.5857>;
  <D.5856>:
  D.5864 = __builtin_object_size (__ptr, 0);
  D.5863 = __fread_chk (__ptr, D.5864, __size, __n, __stream);
  return D.5863;
  <D.5857>:
  D.5865 = __size * __n;
  D.5866 = __builtin_object_size (__ptr, 0);
  if (D.5865 > D.5866) goto <D.5867>; else goto <D.5868>;
  <D.5867>:
  D.5869 = __builtin_object_size (__ptr, 0);
  D.5863 = __fread_chk_warn (__ptr, D.5869, __size, __n, __stream);
  return D.5863;
  <D.5868>:
  <D.5855>:
  D.5863 = __fread_alias (__ptr, __size, __n, __stream);
  return D.5863;
}


