user: What is the c source code of the assembly code below:

```asm
<isqrt>:
  endbr64
  mov    %edi,%eax
  cmp    $0x3fffffff,%edi
  jle    L9
  sub    $0x40000000,%eax
  mov    $0x40000000,%edx
L141:
  sar    %edx
  jmp    L127
L9:
  cmp    $0xfffffff,%edi
  jle    L136
  sub    $0x10000000,%eax
  mov    $0x10000000,%edx
L127:
  lea    0x3ffffff(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L140
  lea    0x4000000(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  mov    %edx,%ecx
  or     $0x4000000,%ecx
L140:
  lea    0xffffff(%rcx),%esi
  mov    %ecx,%edx
  sar    %edx
  cmp    %eax,%esi
  jge    L165
  lea    0x1000000(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x1000000,%ecx
  mov    %ecx,%edx
L165:
  lea    0x3fffff(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L156
  lea    0x400000(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  mov    %edx,%ecx
  or     $0x400000,%ecx
L156:
  lea    0xfffff(%rcx),%esi
  mov    %ecx,%edx
  sar    %edx
  cmp    %eax,%esi
  jge    L10
  lea    0x100000(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x100000,%ecx
  mov    %ecx,%edx
L10:
  lea    0x3ffff(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L76
  lea    0x40000(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  or     $0x40000,%edx
  mov    %edx,%ecx
L76:
  lea    0xffff(%rcx),%esi
  mov    %ecx,%edx
  sar    %edx
  cmp    %eax,%esi
  jge    L133
  lea    0x10000(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x10000,%ecx
  mov    %ecx,%edx
L133:
  lea    0x3fff(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L56
  lea    0x4000(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  or     $0x40,%dh
  mov    %edx,%ecx
L56:
  lea    0xfff(%rcx),%esi
  mov    %ecx,%edx
  sar    %edx
  cmp    %eax,%esi
  jge    L111
  lea    0x1000(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x10,%ch
  mov    %ecx,%edx
L111:
  lea    0x3ff(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L113
  lea    0x400(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  or     $0x4,%dh
  mov    %edx,%ecx
L113:
  lea    0xff(%rcx),%esi
  mov    %ecx,%edx
  sar    %edx
  cmp    %eax,%esi
  jge    L149
  lea    0x100(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x1,%ch
  mov    %ecx,%edx
L149:
  lea    0x3f(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L54
  lea    0x40(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  or     $0x40,%edx
  mov    %edx,%ecx
L54:
  lea    0xf(%rcx),%esi
  mov    %ecx,%edx
  sar    %edx
  cmp    %eax,%esi
  jge    L125
  lea    0x10(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x10,%ecx
  mov    %ecx,%edx
L125:
  lea    0x3(%rdx),%esi
  mov    %edx,%ecx
  sar    %ecx
  cmp    %eax,%esi
  jge    L69
  lea    0x4(%rdx),%ecx
  sub    %ecx,%eax
  sar    %edx
  or     $0x4,%edx
  mov    %edx,%ecx
L69:
  mov    %ecx,%edx
  sar    %edx
  cmp    %ecx,%eax
  jle    L112
  lea    0x1(%rcx),%edx
  sub    %edx,%eax
  sar    %ecx
  or     $0x1,%ecx
  mov    %ecx,%edx
L112:
  cmp    %edx,%eax
  setg   %al
  movzbl %al,%eax
  add    %eax,%edx
  mov    %edx,%eax
  ret
L136:
  mov    $0x0,%edx
  jmp    L141
```

assistant: ```c
int isqrt(int value) {
  int root = 0;
  if ((0x40000000 >> 0) + root <= value) {
    value -= (0x40000000 >> 0) + root;
    root = (root >> 1) | (0x40000000 >> 0);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 2) + root <= value) {
    value -= (0x40000000 >> 2) + root;
    root = (root >> 1) | (0x40000000 >> 2);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 4) + root <= value) {
    value -= (0x40000000 >> 4) + root;
    root = (root >> 1) | (0x40000000 >> 4);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 6) + root <= value) {
    value -= (0x40000000 >> 6) + root;
    root = (root >> 1) | (0x40000000 >> 6);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 8) + root <= value) {
    value -= (0x40000000 >> 8) + root;
    root = (root >> 1) | (0x40000000 >> 8);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 10) + root <= value) {
    value -= (0x40000000 >> 10) + root;
    root = (root >> 1) | (0x40000000 >> 10);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 12) + root <= value) {
    value -= (0x40000000 >> 12) + root;
    root = (root >> 1) | (0x40000000 >> 12);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 14) + root <= value) {
    value -= (0x40000000 >> 14) + root;
    root = (root >> 1) | (0x40000000 >> 14);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 16) + root <= value) {
    value -= (0x40000000 >> 16) + root;
    root = (root >> 1) | (0x40000000 >> 16);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 18) + root <= value) {
    value -= (0x40000000 >> 18) + root;
    root = (root >> 1) | (0x40000000 >> 18);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 20) + root <= value) {
    value -= (0x40000000 >> 20) + root;
    root = (root >> 1) | (0x40000000 >> 20);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 22) + root <= value) {
    value -= (0x40000000 >> 22) + root;
    root = (root >> 1) | (0x40000000 >> 22);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 24) + root <= value) {
    value -= (0x40000000 >> 24) + root;
    root = (root >> 1) | (0x40000000 >> 24);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 26) + root <= value) {
    value -= (0x40000000 >> 26) + root;
    root = (root >> 1) | (0x40000000 >> 26);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 28) + root <= value) {
    value -= (0x40000000 >> 28) + root;
    root = (root >> 1) | (0x40000000 >> 28);
  } else {
    root >>= 1;
  };
  if ((0x40000000 >> 30) + root <= value) {
    value -= (0x40000000 >> 30) + root;
    root = (root >> 1) | (0x40000000 >> 30);
  } else {
    root >>= 1;
  };
  if (root < value)
    root++;
  return root;
}
```