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

```asm
<gsm_init>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0xa0(%rbp),%rax
  mov    $0xc1f,%edx
  lea    D294(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0xa0(%rbp),%rax
  mov    $0xbb8,%ecx
  lea    D183(%rip),%rdx
  lea    D253(%rip),%rsi
  mov    %rax,%rdi
  call   <sendATComm@plt>
  cmp    $0x1,%eax
  jne    L33
  nop
L32:
  mov    $0x3e8,%ecx
  lea    D274(%rip),%rax
  mov    %rax,%rdx
  lea    D130(%rip),%rax
  mov    %rax,%rsi
  lea    D135(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  test   %eax,%eax
  je     L32
  mov    $0x3e8,%ecx
  lea    D183(%rip),%rax
  mov    %rax,%rdx
  lea    D253(%rip),%rax
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  cmp    $0x1,%eax
  jne    L33
  nop
L111:
  mov    $0x1f4,%ecx
  lea    D204(%rip),%rax
  mov    %rax,%rdx
  lea    D211(%rip),%rax
  mov    %rax,%rsi
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  test   %eax,%eax
  je     L111
  mov    $0x5,%edi
  call   <sleep@plt>
  lea    -0xa0(%rbp),%rax
  lea    D128(%rip),%rdx
  lea    D355(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0xa0(%rbp),%rax
  mov    $0x7530,%ecx
  lea    D183(%rip),%rdx
  lea    D253(%rip),%rsi
  mov    %rax,%rdi
  call   <sendATComm@plt>
  cmp    $0x1,%eax
  jne    L33
  nop
L59:
  mov    $0x1f4,%ecx
  lea    D204(%rip),%rax
  mov    %rax,%rdx
  lea    D304(%rip),%rax
  mov    %rax,%rsi
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  test   %eax,%eax
  je     L59
  mov    $0x5,%edi
  call   <sleep@plt>
  mov    $0x7530,%ecx
  lea    D183(%rip),%rax
  mov    %rax,%rdx
  lea    D253(%rip),%rax
  mov    %rax,%rsi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  cmp    $0x1,%eax
  jne    L33
  nop
L118:
  mov    $0x1f4,%ecx
  lea    D204(%rip),%rax
  mov    %rax,%rdx
  lea    D304(%rip),%rax
  mov    %rax,%rsi
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  test   %eax,%eax
  je     L118
  mov    $0x5,%edi
  call   <sleep@plt>
  mov    $0x2710,%ecx
  lea    D183(%rip),%rax
  mov    %rax,%rdx
  lea    D67(%rip),%rax
  mov    %rax,%rsi
  lea    D227(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  cmp    $0x1,%eax
  jne    L33
  nop
L124:
  mov    $0x1f4,%ecx
  lea    D204(%rip),%rax
  mov    %rax,%rdx
  lea    D304(%rip),%rax
  mov    %rax,%rsi
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  call   <sendATComm@plt>
  test   %eax,%eax
  je     L124
  mov    $0x5,%edi
  call   <sleep@plt>
  lea    -0xa0(%rbp),%rax
  mov    $0x7df,%ecx
  lea    D236(%rip),%rdx
  lea    D272(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0xa0(%rbp),%rax
  mov    $0x7530,%ecx
  lea    D1(%rip),%rdx
  lea    D350(%rip),%rsi
  mov    %rax,%rdi
  call   <sendATComm@plt>
  cmp    $0x1,%eax
  jne    L33
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%eax
  jmp    L116
L33:
  mov    $0x0,%eax
L116:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L6
  call   <__stack_chk_fail@plt>
L6:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D294
type: string
name: retrieve_data
arguments: tag: D183
type: string
name: retrieve_data
arguments: tag: D253
type: string
name: retrieve_data
arguments: tag: D274
type: string
name: retrieve_data
arguments: tag: D130
type: string
name: retrieve_data
arguments: tag: D135
type: string
name: retrieve_data
arguments: tag: D30
type: string
name: retrieve_data
arguments: tag: D204
type: string
name: retrieve_data
arguments: tag: D211
type: string
name: retrieve_data
arguments: tag: D258
type: string
name: retrieve_data
arguments: tag: D128
type: string
name: retrieve_data
arguments: tag: D355
type: string
name: retrieve_data
arguments: tag: D304
type: string
name: retrieve_data
arguments: tag: D37
type: string
name: retrieve_data
arguments: tag: D67
type: string
name: retrieve_data
arguments: tag: D227
type: string
name: retrieve_data
arguments: tag: D236
type: string
name: retrieve_data
arguments: tag: D272
type: string
name: retrieve_data
arguments: tag: D1
type: string
name: retrieve_data
arguments: tag: D350
type: string
name: retrieve_data
arguments: tag: D23
type: string

tool: D294: AT+CPIN=%d

tool: D183: ERROR

tool: D253: OK

tool: D274: +CREG: 0,5

tool: D130: +CREG: 0,1

tool: D135: AT+CREG?

tool: D30: AT+CIPMUX=0

tool: 

tool: D211: INITIAL

tool: D258: AT+CIPSTATUS

tool: D128: internet

tool: D355: AT+CSTT="%s","",""

tool: D304: START

tool: D37: AT+CIICR

tool: D67: .

tool: D227: AT+CIFSR

tool: D236: myserver.hu

tool: D272: AT+CIPSTART="TCP","%s","%d"

tool: D1: CONNECT FAIL

tool: D350: CONNECT OK

tool: D23: Connected


assistant: ```c
int gsm_init() {
  char temp[150];
  sprintf(temp, "AT+CPIN=%d", 3103);
  if (sendATComm(temp, "OK", "ERROR", 3000) == 1) {
    while (sendATComm("AT+CREG?", "+CREG: 0,1", "+CREG: 0,5", 1000) == 0)
      ;
    if (sendATComm("AT+CIPMUX=0", "OK", "ERROR", 1000) == 1) {
      while (sendATComm("AT+CIPSTATUS", "INITIAL", "", 500) == 0)
        ;
      sleep(5);
      sprintf(temp, "AT+CSTT=\"%s\",\"\",\"\"", "internet");
      if (sendATComm(temp, "OK", "ERROR", 30000) == 1) {
        while (sendATComm("AT+CIPSTATUS", "START", "", 500) == 0)
          ;
        sleep(5);
        if (sendATComm("AT+CIICR", "OK", "ERROR", 30000) == 1) {
          while (sendATComm("AT+CIPSTATUS", "START", "", 500) == 0)
            ;
          sleep(5);
          if (sendATComm("AT+CIFSR", ".", "ERROR", 10000) == 1) {
            while (sendATComm("AT+CIPSTATUS", "START", "", 500) == 0)
              ;
            sleep(5);
            sprintf(temp, "AT+CIPSTART=\"TCP\",\"%s\",\"%d\"", "myserver.hu", 2015);
            if (sendATComm(temp, "CONNECT OK", "CONNECT FAIL", 30000) == 1) {
              printf("Connected\n");
              return 1;
            }
          }
        }
      }
    }
  }
  return 0;
}
```