#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ isspace(char);
int /*<<< orphan*/ pretty_format(char *, char **, char *);
int /*<<< orphan*/ safe_copy_chr(char, char *, char **, int);
int /*<<< orphan*/ safe_copy_str(char *, char *, char **, int);
int /*<<< orphan*/ safe_known_str(char *, int, char *, char **);
void pretty_print(char *dest, char *name, char *text) {
  char *cp, *p, *word;
  cp = dest;
  p = text;
  safe_copy_str((name), (dest), (&cp), (8192 - 1));
  switch (*text) {
  case '$':
  case '^':
    while (*p && (*p != ':')) {
      safe_copy_chr((*p), (dest), (&cp), (8192 - 1));
      p++;
    }
    if (*p == ':') {
      safe_copy_chr((':'), (dest), (&cp), (8192 - 1));
      do {
        p++;
      } while (isspace(*p));
    } else {
      return;
    }
  case '@':
  case '&':
    pretty_format(dest, &cp, p);
    break;
  case '#':
    word = p;
    while (*word && !isspace(*word)) {
      word++;
    }
    while (*word && isspace(*word)) {
      word++;
    }
    if (!*word || (*word == '#')) {
      safe_copy_str((p), (dest), (&cp), (8192 - 1));
      return;
    }
    pretty_format(dest, &cp, p);
    break;
  default:
    safe_copy_str((p), (dest), (&cp), (8192 - 1));
  }
  if ((cp - 1) && (*(cp - 1) != '\n')) {
    safe_known_str("\r\n", 2, (dest), (&cp));
  }
  safe_copy_chr(('-'), (dest), (&cp), (8192 - 1));
}


x86 assembly (clang, -O0):
<pretty_print>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x8(%rbp),%rsi
lea    -0x20(%rbp),%rdx
mov    $0x1fff,%ecx
call   1070 <safe_copy_str@plt>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
sub    $0x23,%eax
je     12b9 <pretty_print+0x169>
jmp    11a2 <pretty_print+0x52>
mov    -0x34(%rbp),%eax
sub    $0x24,%eax
je     11e6 <pretty_print+0x96>
jmp    11b3 <pretty_print+0x63>
mov    -0x34(%rbp),%eax
sub    $0x26,%eax
je     12a3 <pretty_print+0x153>
jmp    11c4 <pretty_print+0x74>
mov    -0x34(%rbp),%eax
sub    $0x40,%eax
je     12a3 <pretty_print+0x153>
jmp    11d5 <pretty_print+0x85>
mov    -0x34(%rbp),%eax
sub    $0x5e,%eax
jne    13ac <pretty_print+0x25c>
jmp    11e6 <pretty_print+0x96>
jmp    11eb <pretty_print+0x9b>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x35(%rbp)
je     1210 <pretty_print+0xc0>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
setne  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1220 <pretty_print+0xd0>
jmp    124c <pretty_print+0xfc>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    -0x8(%rbp),%rsi
lea    -0x20(%rbp),%rdx
mov    $0x1fff,%ecx
movsbl %al,%edi
call   1060 <safe_copy_chr@plt>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    11eb <pretty_print+0x9b>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    1299 <pretty_print+0x149>
mov    -0x8(%rbp),%rsi
mov    $0x3a,%edi
lea    -0x20(%rbp),%rdx
mov    $0x1fff,%ecx
call   1060 <safe_copy_chr@plt>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isspace@plt>
cmp    $0x0,%eax
jne    1273 <pretty_print+0x123>
jmp    129e <pretty_print+0x14e>
jmp    1415 <pretty_print+0x2c5>
jmp    12a3 <pretty_print+0x153>
mov    -0x8(%rbp),%rdi
mov    -0x28(%rbp),%rdx
lea    -0x20(%rbp),%rsi
call   1030 <pretty_format@plt>
jmp    13c2 <pretty_print+0x272>
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x36(%rbp)
je     12ed <pretty_print+0x19d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isspace@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
test   $0x1,%al
jne    12fd <pretty_print+0x1ad>
jmp    130e <pretty_print+0x1be>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    12c1 <pretty_print+0x171>
jmp    1313 <pretty_print+0x1c3>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x37(%rbp)
je     133d <pretty_print+0x1ed>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isspace@plt>
cmp    $0x0,%eax
setne  %al
mov    %al,-0x37(%rbp)
mov    -0x37(%rbp),%al
test   $0x1,%al
jne    134d <pretty_print+0x1fd>
jmp    135e <pretty_print+0x20e>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1313 <pretty_print+0x1c3>
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     137b <pretty_print+0x22b>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    1396 <pretty_print+0x246>
mov    -0x28(%rbp),%rdi
mov    -0x8(%rbp),%rsi
lea    -0x20(%rbp),%rdx
mov    $0x1fff,%ecx
call   1070 <safe_copy_str@plt>
jmp    1415 <pretty_print+0x2c5>
mov    -0x8(%rbp),%rdi
mov    -0x28(%rbp),%rdx
lea    -0x20(%rbp),%rsi
call   1030 <pretty_format@plt>
jmp    13c2 <pretty_print+0x272>
mov    -0x28(%rbp),%rdi
mov    -0x8(%rbp),%rsi
lea    -0x20(%rbp),%rdx
mov    $0x1fff,%ecx
call   1070 <safe_copy_str@plt>
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
cmp    $0x0,%rax
je     13fe <pretty_print+0x2ae>
mov    -0x20(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0xa,%eax
je     13fe <pretty_print+0x2ae>
mov    -0x8(%rbp),%rdx
lea    0xc10(%rip),%rdi
mov    $0x2,%esi
lea    -0x20(%rbp),%rcx
call   1040 <safe_known_str@plt>
mov    -0x8(%rbp),%rsi
mov    $0x2d,%edi
lea    -0x20(%rbp),%rdx
mov    $0x1fff,%ecx
call   1060 <safe_copy_chr@plt>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pretty_print>:
push   %r15
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    %rdx,%rbx
mov    %rdi,%r14
mov    %rdi,0x8(%rsp)
lea    0x8(%rsp),%rdx
mov    %rsi,%rdi
mov    %r14,%rsi
mov    $0x1fff,%ecx
call   1070 <safe_copy_str@plt>
mov    (%rbx),%al
movsbl %al,%edx
lea    -0x23(%rdx),%ecx
cmp    $0x1d,%ecx
ja     11d6 <pretty_print+0x86>
lea    0xe73(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
test   %al,%al
je     11bc <pretty_print+0x6c>
lea    0x1(%rbx),%r15
xchg   %ax,%ax
movsbl %al,%edi
call   1050 <isspace@plt>
test   %eax,%eax
jne    12a6 <pretty_print+0x156>
movzbl (%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    11a0 <pretty_print+0x50>
lea    0x8(%rsp),%rdx
mov    %rbx,%rdi
mov    %r14,%rsi
mov    $0x1fff,%ecx
call   1070 <safe_copy_str@plt>
jmp    129c <pretty_print+0x14c>
cmp    $0x5e,%edx
je     1221 <pretty_print+0xd1>
lea    0x8(%rsp),%rdx
mov    %rbx,%rdi
mov    %r14,%rsi
mov    $0x1fff,%ecx
call   1070 <safe_copy_str@plt>
jmp    1261 <pretty_print+0x111>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x3a,%al
je     1227 <pretty_print+0xd7>
movsbl %al,%edi
lea    0x8(%rsp),%rdx
mov    %r14,%rsi
mov    $0x1fff,%ecx
call   1060 <safe_copy_chr@plt>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    1200 <pretty_print+0xb0>
jmp    129c <pretty_print+0x14c>
lea    0x8(%rsp),%rdx
mov    $0x3a,%edi
mov    %r14,%rsi
mov    $0x1fff,%ecx
call   1060 <safe_copy_chr@plt>
xchg   %ax,%ax
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1050 <isspace@plt>
test   %eax,%eax
jne    1240 <pretty_print+0xf0>
lea    0x8(%rsp),%rsi
mov    %r14,%rdi
mov    %rbx,%rdx
call   1030 <pretty_format@plt>
mov    0x8(%rsp),%rax
cmpb   $0xa,-0x1(%rax)
je     1285 <pretty_print+0x135>
lea    0xe05(%rip),%rdi
lea    0x8(%rsp),%rcx
mov    $0x2,%esi
mov    %r14,%rdx
call   1040 <safe_known_str@plt>
lea    0x8(%rsp),%rdx
mov    $0x2d,%edi
mov    %r14,%rsi
mov    $0x1fff,%ecx
call   1060 <safe_copy_chr@plt>
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
mov    -0x1(%r15),%al
test   %al,%al
je     11bc <pretty_print+0x6c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl %al,%edi
call   1050 <isspace@plt>
test   %eax,%eax
je     12dd <pretty_print+0x18d>
movzbl (%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    12c0 <pretty_print+0x170>
jmp    11bc <pretty_print+0x6c>
mov    -0x1(%r15),%al
cmp    $0x23,%al
je     11bc <pretty_print+0x6c>
test   %al,%al
je     11bc <pretty_print+0x6c>
jmp    1251 <pretty_print+0x101>

LLVM IR (-O0):
@.str = [3 x i8] c"\0D\0A\00"
define void @pretty_print(i8* %0, i8* %1, i8* %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i8*
store i8* %0, i8** %4
store i8* %1, i8** %5
store i8* %2, i8** %6
%10 = load i8*, i8** %4
store i8* %10, i8** %7
%11 = load i8*, i8** %6
store i8* %11, i8** %8
%12 = load i8*, i8** %5
%13 = load i8*, i8** %4
%14 = call i32 @safe_copy_str(i8* %12, i8* %13, i8** %7, i32 8191)
%15 = load i8*, i8** %6
%16 = load i8, i8* %15
%17 = sext i8 %16 to i32
switch i32 %17, label %112 [
i32 36, label %18
i32 94, label %18
i32 64, label %57
i32 38, label %57
i32 35, label %61
]
18: ; preds = %3, %3
br label %19
19: ; preds = %31, %18
%20 = load i8*, i8** %8
%21 = load i8, i8* %20
%22 = sext i8 %21 to i32
%23 = icmp ne i32 %22, 0
br i1 %23, label %24, label %29
24: ; preds = %19
%25 = load i8*, i8** %8
%26 = load i8, i8* %25
%27 = sext i8 %26 to i32
%28 = icmp ne i32 %27, 58
br label %29
29: ; preds = %24, %19
%30 = phi i1 [ false, %19 ], [ %28, %24 ]
br i1 %30, label %31, label %38
31: ; preds = %29
%32 = load i8*, i8** %8
%33 = load i8, i8* %32
%34 = load i8*, i8** %4
%35 = call i32 @safe_copy_chr(i8 signext %33, i8* %34, i8** %7, i32 8191)
%36 = load i8*, i8** %8
%37 = getelementptr inbounds i8, i8* %36, i32 1
store i8* %37, i8** %8
br label %19
38: ; preds = %29
%39 = load i8*, i8** %8
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = icmp eq i32 %41, 58
br i1 %42, label %43, label %55
43: ; preds = %38
%44 = load i8*, i8** %4
%45 = call i32 @safe_copy_chr(i8 signext 58, i8* %44, i8** %7, i32 8191)
br label %46
46: ; preds = %49, %43
%47 = load i8*, i8** %8
%48 = getelementptr inbounds i8, i8* %47, i32 1
store i8* %48, i8** %8
br label %49
49: ; preds = %46
%50 = load i8*, i8** %8
%51 = load i8, i8* %50
%52 = call i32 @isspace(i8 signext %51)
%53 = icmp ne i32 %52, 0
br i1 %53, label %46, label %54
54: ; preds = %49
br label %56
55: ; preds = %38
br label %132
56: ; preds = %54
br label %57
57: ; preds = %3, %3, %56
%58 = load i8*, i8** %4
%59 = load i8*, i8** %8
%60 = call i32 @pretty_format(i8* %58, i8** %7, i8* %59)
br label %116
61: ; preds = %3
%62 = load i8*, i8** %8
store i8* %62, i8** %9
br label %63
63: ; preds = %76, %61
%64 = load i8*, i8** %9
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = icmp ne i32 %66, 0
br i1 %67, label %68, label %74
68: ; preds = %63
%69 = load i8*, i8** %9
%70 = load i8, i8* %69
%71 = call i32 @isspace(i8 signext %70)
%72 = icmp ne i32 %71, 0
%73 = xor i1 %72, true
br label %74
74: ; preds = %68, %63
%75 = phi i1 [ false, %63 ], [ %73, %68 ]
br i1 %75, label %76, label %79
76: ; preds = %74
%77 = load i8*, i8** %9
%78 = getelementptr inbounds i8, i8* %77, i32 1
store i8* %78, i8** %9
br label %63
79: ; preds = %74
br label %80
80: ; preds = %92, %79
%81 = load i8*, i8** %9
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = icmp ne i32 %83, 0
br i1 %84, label %85, label %90
85: ; preds = %80
%86 = load i8*, i8** %9
%87 = load i8, i8* %86
%88 = call i32 @isspace(i8 signext %87)
%89 = icmp ne i32 %88, 0
br label %90
90: ; preds = %85, %80
%91 = phi i1 [ false, %80 ], [ %89, %85 ]
br i1 %91, label %92, label %95
92: ; preds = %90
%93 = load i8*, i8** %9
%94 = getelementptr inbounds i8, i8* %93, i32 1
store i8* %94, i8** %9
br label %80
95: ; preds = %90
%96 = load i8*, i8** %9
%97 = load i8, i8* %96
%98 = icmp ne i8 %97, 0
br i1 %98, label %99, label %104
99: ; preds = %95
%100 = load i8*, i8** %9
%101 = load i8, i8* %100
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 35
br i1 %103, label %104, label %108
104: ; preds = %99, %95
%105 = load i8*, i8** %8
%106 = load i8*, i8** %4
%107 = call i32 @safe_copy_str(i8* %105, i8* %106, i8** %7, i32 8191)
br label %132
108: ; preds = %99
%109 = load i8*, i8** %4
%110 = load i8*, i8** %8
%111 = call i32 @pretty_format(i8* %109, i8** %7, i8* %110)
br label %116
112: ; preds = %3
%113 = load i8*, i8** %8
%114 = load i8*, i8** %4
%115 = call i32 @safe_copy_str(i8* %113, i8* %114, i8** %7, i32 8191)
br label %116
116: ; preds = %112, %108, %57
%117 = load i8*, i8** %7
%118 = getelementptr inbounds i8, i8* %117, i64 -1
%119 = icmp ne i8* %118, null
br i1 %119, label %120, label %129
120: ; preds = %116
%121 = load i8*, i8** %7
%122 = getelementptr inbounds i8, i8* %121, i64 -1
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = icmp ne i32 %124, 10
br i1 %125, label %126, label %129
126: ; preds = %120
%127 = load i8*, i8** %4
%128 = call i32 @safe_known_str(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 2, i8* %127, i8** %7)
br label %129
129: ; preds = %126, %120, %116
%130 = load i8*, i8** %4
%131 = call i32 @safe_copy_chr(i8 signext 45, i8* %130, i8** %7, i32 8191)
br label %132
132: ; preds = %129, %104, %55
ret void
}

LLVM IR (-O2):
@.str = [3 x i8] c"\0D\0A\00"
define void @pretty_print(i8* %0, i8* %1, i8* %2) {
%4 = alloca i8*
%5 = bitcast i8** %4 to i8*
store i8* %0, i8** %4
%6 = call i32 @safe_copy_str(i8* %1, i8* %0, i8** %4, i32 8191)
%7 = load i8, i8* %2
%8 = sext i8 %7 to i32
switch i32 %8, label %57 [
i32 36, label %9
i32 94, label %9
i32 64, label %27
i32 38, label %27
i32 35, label %10
]
9: ; preds = %3, %3
br label %12
10: ; preds = %3
%11 = icmp eq i8 %7, 0
br i1 %11, label %53, label %30
12: ; preds = %9, %15
%13 = phi i8 [ %18, %15 ], [ %7, %9 ]
%14 = phi i8* [ %17, %15 ], [ %2, %9 ]
switch i8 %13, label %15 [
i8 58, label %19
i8 0, label %68
]
15: ; preds = %12
%16 = call i32 @safe_copy_chr(i8 signext %13, i8* %0, i8** %4, i32 8191)
%17 = getelementptr inbounds i8, i8* %14, i64 1
%18 = load i8, i8* %17
br label %12
19: ; preds = %12
%20 = call i32 @safe_copy_chr(i8 signext 58, i8* %0, i8** %4, i32 8191)
br label %21
21: ; preds = %21, %19
%22 = phi i8* [ %14, %19 ], [ %23, %21 ]
%23 = getelementptr inbounds i8, i8* %22, i64 1
%24 = load i8, i8* %23
%25 = call i32 @isspace(i8 signext %24)
%26 = icmp eq i32 %25, 0
br i1 %26, label %27, label %21
27: ; preds = %21, %3, %3
%28 = phi i8* [ %2, %3 ], [ %2, %3 ], [ %23, %21 ]
%29 = call i32 @pretty_format(i8* %0, i8** %4, i8* %28)
br label %59
30: ; preds = %10, %35
%31 = phi i8* [ %36, %35 ], [ %2, %10 ]
%32 = phi i8 [ %37, %35 ], [ %7, %10 ]
%33 = call i32 @isspace(i8 signext %32)
%34 = icmp eq i32 %33, 0
br i1 %34, label %35, label %39
35: ; preds = %30
%36 = getelementptr inbounds i8, i8* %31, i64 1
%37 = load i8, i8* %36
%38 = icmp eq i8 %37, 0
br i1 %38, label %53, label %30
39: ; preds = %30
%40 = load i8, i8* %31
%41 = icmp eq i8 %40, 0
br i1 %41, label %53, label %42
42: ; preds = %39, %47
%43 = phi i8 [ %49, %47 ], [ %40, %39 ]
%44 = phi i8* [ %48, %47 ], [ %31, %39 ]
%45 = call i32 @isspace(i8 signext %43)
%46 = icmp eq i32 %45, 0
br i1 %46, label %51, label %47
47: ; preds = %42
%48 = getelementptr inbounds i8, i8* %44, i64 1
%49 = load i8, i8* %48
%50 = icmp eq i8 %49, 0
br i1 %50, label %53, label %42
51: ; preds = %42
%52 = load i8, i8* %44
switch i8 %52, label %55 [
i8 0, label %53
i8 35, label %53
]
53: ; preds = %35, %47, %10, %39, %51, %51
%54 = call i32 @safe_copy_str(i8* %2, i8* %0, i8** %4, i32 8191)
br label %68
55: ; preds = %51
%56 = call i32 @pretty_format(i8* %0, i8** %4, i8* %2)
br label %59
57: ; preds = %3
%58 = call i32 @safe_copy_str(i8* %2, i8* %0, i8** %4, i32 8191)
br label %59
59: ; preds = %27, %55, %57
%60 = load i8*, i8** %4
%61 = getelementptr inbounds i8, i8* %60, i64 -1
%62 = load i8, i8* %61
%63 = icmp eq i8 %62, 10
br i1 %63, label %66, label %64
64: ; preds = %59
%65 = call i32 @safe_known_str(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 2, i8* %0, i8** %4)
br label %66
66: ; preds = %64, %59
%67 = call i32 @safe_copy_chr(i8 signext 45, i8* %0, i8** %4, i32 8191)
br label %68
68: ; preds = %12, %66, %53
ret void
}