// File: /workspace/github_c_makefile_star2_O2/loversmile[P]sugarcrm/sugar_stdsoap2.c
// Function: soap_base642s
SOAP_FMAC1
const char*
SOAP_FMAC2
soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n)
{ register int i, j, c;
  register unsigned long m;
  register const char *p;
  if (!s || !*s)
  { if (n)
      *n = 0;
    if (soap->error)
      return NULL;
    return SOAP_NON_NULL;
  }
  if (!t)
  { l = (strlen(s) + 3) / 4 * 3;
    t = (char*)soap_malloc(soap, l);
  }
  if (!t)
    return NULL;
  p = t;
  if (n)
    *n = 0;
  for (;;)
  { for (i = 0; i < SOAP_BLKLEN; i++)
    { m = 0;
      j = 0;
      while (j < 4)
      { c = *s++;
        if (c == '=' || !c)
        { i *= 3;
          switch (j)
          { case 2:
              *t++ = (char)((m >> 4) & 0xFF);
              i++;
              break;
            case 3:
              *t++ = (char)((m >> 10) & 0xFF);
              *t++ = (char)((m >> 2) & 0xFF);
              i += 2;
          }
          if (n)
            *n += i;
          return p;
        }
        c -= '+';
        if (c >= 0 && c <= 79)
        { int b = soap_base64i[c];
          if (b >= 64)
          { soap->error = SOAP_TYPE;
            return NULL;  
          }
          m = (m << 6) + b;
          j++;
        }
        else if (!soap_blank(c + '+'))
        { soap->error = SOAP_TYPE;
          return NULL;  
        }
      }
      *t++ = (char)((m >> 16) & 0xFF);
      *t++ = (char)((m >> 8) & 0xFF);
      *t++ = (char)(m & 0xFF);
      if (l < 3)
      { if (n)
          *n += i;
        return p;
      }
      l -= 3;
    }
    if (n)
      *n += 3 * SOAP_BLKLEN;
  }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %rbx
movq %rdi, %r14
testq %rsi, %rsi
je 0x44fda
movq %rsi, %r15
cmpb $0x0, (%rsi)
je 0x44fda
movq %rcx, %r12
movq %rdx, %rax
testq %rdx, %rdx
jne 0x44f19
movq %r15, %rdi
callq 0x3110
addq $0x3, %rax
shrq $0x2, %rax
leaq (%rax,%rax,2), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x35f17
testq %rax, %rax
je 0x45025
xorl %ecx, %ecx
movq %rax, %rdi
testq %rbx, %rbx
je 0x44f25
movl %ecx, (%rbx)
leaq 0x81e4(%rip), %rcx      # 0x4d110
movq %r12, %r8
addq $-0x300, %r12           # imm = 0xFD00
xorl %esi, %esi
cmpl $0x100, %esi            # imm = 0x100
je 0x44fc5
xorl %r9d, %r9d
xorl %edx, %edx
cmpl $0x3, %r9d
ja 0x44fa0
movzbl (%r15), %r10d
cmpl $0x3d, %r10d
je 0x44ff9
testl %r10d, %r10d
je 0x44ff9
leal -0x2b(%r10), %r11d
cmpb $0x4f, %r11b
jbe 0x44f7e
incq %r15
cmpb $0x21, %r10b
jb 0x44f49
jmp 0x4501a
movzbl %r11b, %r10d
movsbq (%r10,%rcx), %r10
cmpq $0x3f, %r10
jg 0x4501a
incq %r15
shlq $0x6, %rdx
addq %r10, %rdx
incl %r9d
jmp 0x44f49
movl %edx, %r9d
shrl $0x10, %r9d
movb %r9b, (%rdi)
movb %dh, 0x1(%rdi)
movb %dl, 0x2(%rdi)
subq $0x3, %r8
jb 0x4504b
addq $0x3, %rdi
incl %esi
jmp 0x44f38
testq %rbx, %rbx
je 0x44f2c
movl $0x300, %ecx            # imm = 0x300
addl (%rbx), %ecx
jmp 0x44f23
testq %rbx, %rbx
je 0x44fe2
andl $0x0, (%rbx)
xorl %eax, %eax
cmpl $0x0, 0x19214(%r14)
leaq 0x816e(%rip), %rcx      # 0x4d161
cmoveq %rcx, %rax
jmp 0x4503f
leal (%rsi,%rsi,2), %esi
cmpl $0x2, %r9d
je 0x45029
cmpl $0x3, %r9d
jne 0x45038
movl %edx, %ecx
shrl $0xa, %ecx
movb %cl, (%rdi)
incq %rdi
pushq $0x2
popq %r8
pushq $0x2
jmp 0x4502f
movl $0x4, 0x19214(%r14)
xorl %eax, %eax
jmp 0x4503f
pushq $0x1
popq %r8
pushq $0x4
popq %rcx
shrq %cl, %rdx
movb %dl, (%rdi)
addl %r8d, %esi
testq %rbx, %rbx
je 0x4503f
addl %esi, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
testq %rbx, %rbx
je 0x4503f
addl %esi, (%rbx)
jmp 0x4503f