; LLVM IR from guanzhi/GmSSL :: src (tlcp)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }
%struct.SM2_VERIFY_CTX = type { %struct.SM3_CTX, %struct.SM3_CTX, %struct.SM2_KEY, [16 x %struct.SM2_Z256_POINT] }
%struct.SM3_CTX = type { [8 x i32], i64, [64 x i8], i64 }
%struct.SM2_SIGN_CTX = type { %struct.SM3_CTX, %struct.SM3_CTX, %struct.SM2_KEY, [4 x i64], [32 x %struct.SM2_SIGN_PRE_COMP], i32, [16 x %struct.SM2_Z256_POINT] }
%struct.SM2_SIGN_PRE_COMP = type { [4 x i64], [4 x i64] }
%struct.TLS_CONNECT = type { i32, i32, [64 x i32], i64, i32, [18437 x i8], i64, [18437 x i8], [18437 x i8], ptr, i64, i32, [32 x i8], i64, [2048 x i8], i64, [2048 x i8], i64, [2048 x i8], i64, %struct.SM2_KEY, %struct.SM2_KEY, i32, [48 x i8], [96 x i8], %struct.SM3_HMAC_CTX, %struct.SM3_HMAC_CTX, %struct.SM4_KEY, %struct.SM4_KEY, [8 x i8], [8 x i8], [12 x i8], [12 x i8], %struct.BLOCK_CIPHER_KEY, %struct.BLOCK_CIPHER_KEY, i32 }
%struct.SM3_HMAC_CTX = type { %struct.SM3_CTX, [64 x i8] }
%struct.SM4_KEY = type { [32 x i32] }
%struct.BLOCK_CIPHER_KEY = type { %union.anon, ptr }
%union.anon = type { %struct.SM4_KEY }

@tlcp_ciphers = external hidden constant [1 x i32], align 4
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@__FUNCTION__.tlcp_do_connect = external hidden unnamed_addr constant [16 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @tlcp_record_get_handshake_server_key_exchange_pke(ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @tls_record_get_handshake(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @tlcp_do_connect(ptr noundef %0) #2 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca [309 x i8], align 16
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca [32 x i8], align 16
  %10 = alloca [32 x i8], align 16
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca %struct.SM2_KEY, align 8
  %19 = alloca %struct.SM2_KEY, align 8
  %20 = alloca %struct.SM2_VERIFY_CTX, align 8
  %21 = alloca %struct.SM2_SIGN_CTX, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca [48 x i8], align 16
  %25 = alloca [366 x i8], align 16
  %26 = alloca i64, align 8
  %27 = alloca %struct.SM3_CTX, align 8
  %28 = alloca %struct.SM3_CTX, align 8
  %29 = alloca [32 x i8], align 16
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca [12 x i8], align 1
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i64, align 8
  %36 = alloca [3 x i8], align 1
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i64, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i64, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i64, align 8
  %47 = alloca i32, align 4
  %48 = alloca %struct.SM3_CTX, align 8
  %49 = alloca [32 x i8], align 16
  %50 = alloca [72 x i8], align 16
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  store i32 -1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %51 = load ptr, ptr %3, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.TLS_CONNECT, ptr %51, i32 0, i32 7
  %53 = getelementptr inbounds [18437 x i8], ptr %52, i64 0, i64 0
  store ptr %53, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 309, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 128, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 128, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 1888, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 3976, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 366, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 112, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 112, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 3, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  store i32 5, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 0, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = call i32 @tls_record_set_protocol(ptr noundef %54, i32 noundef 257)
  %56 = getelementptr inbounds [309 x i8], ptr %6, i64 0, i64 0
  %57 = call i32 @tls_record_set_protocol(ptr noundef %56, i32 noundef 257)
  call void @sm3_init(ptr noundef %27)
  %58 = getelementptr inbounds [32 x i8], ptr %9, i64 0, i64 0
  %59 = call i32 @tls_random_generate(ptr noundef %58)
  %60 = load ptr, ptr %5, align 8, !tbaa !5
  %61 = getelementptr inbounds [32 x i8], ptr %9, i64 0, i64 0
  %62 = call i32 @tls_record_set_handshake_client_hello(ptr noundef %60, ptr noundef %7, i32 noundef 257, ptr noundef %61, ptr noundef null, i64 noundef 0, ptr noundef @tlcp_ciphers, i64 noundef 1, ptr noundef null, i64 noundef 0)
  %63 = icmp ne i32 %62, 1
  br i1 %63, label %64, label %70

64:                                               ; preds = %1
  br label %65

65:                                               ; preds = %64
  %66 = load ptr, ptr @stderr, align 8, !tbaa !5
  %67 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 189, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %68

68:                                               ; preds = %65
  br label %69

69:                                               ; preds = %68
  br label %993

70:                                               ; preds = %1
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = load i64, ptr %7, align 8, !tbaa !11
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.TLS_CONNECT, ptr %73, i32 0, i32 4
  %75 = load i32, ptr %74, align 8, !tbaa !13
  %76 = call i32 @tls_record_send(ptr noundef %71, i64 noundef %72, i32 noundef %75)
  %77 = icmp ne i32 %76, 1
  br i1 %77, label %78, label %84

78:                                               ; preds = %70
  br label %79

79:                                               ; preds = %78
  %80 = load ptr, ptr @stderr, align 8, !tbaa !5
  %81 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %80, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 195, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %82

82:                                               ; preds = %79
  br label %83

83:                                               ; preds = %82
  br label %993

84:                                               ; preds = %70
  %85 = load ptr, ptr %5, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 5
  %87 = load i64, ptr %7, align 8, !tbaa !11
  %88 = sub i64 %87, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %86, i64 noundef %88)
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = load ptr, ptr %3, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.TLS_CONNECT, ptr %90, i32 0, i32 4
  %92 = load i32, ptr %91, align 8, !tbaa !13
  %93 = call i32 @tls_record_recv(ptr noundef %89, ptr noundef %7, i32 noundef %92)
  %94 = icmp ne i32 %93, 1
  br i1 %94, label %95, label %103

95:                                               ; preds = %84
  br label %96

96:                                               ; preds = %95
  %97 = load ptr, ptr @stderr, align 8, !tbaa !5
  %98 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %97, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 203, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %99

99:                                               ; preds = %96
  br label %100

100:                                              ; preds = %99
  %101 = load ptr, ptr %3, align 8, !tbaa !5
  %102 = call i32 @tls_send_alert(ptr noundef %101, i32 noundef 10)
  br label %993

103:                                              ; preds = %84
  %104 = load ptr, ptr %5, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %104, i64 1
  %106 = load i8, ptr %105, align 1, !tbaa !21
  %107 = zext i8 %106 to i16
  %108 = zext i16 %107 to i32
  %109 = shl i32 %108, 8
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %110, i64 2
  %112 = load i8, ptr %111, align 1, !tbaa !21
  %113 = zext i8 %112 to i32
  %114 = or i32 %109, %113
  %115 = icmp ne i32 %114, 257
  br i1 %115, label %116, label %124

116:                                              ; preds = %103
  br label %117

117:                                              ; preds = %116
  %118 = load ptr, ptr @stderr, align 8, !tbaa !5
  %119 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %118, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 209, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %120

120:                                              ; preds = %117
  br label %121

121:                                              ; preds = %120
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = call i32 @tls_send_alert(ptr noundef %122, i32 noundef 70)
  br label %993

124:                                              ; preds = %103
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = call i32 @tls_record_get_handshake_server_hello(ptr noundef %125, ptr noundef %11, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %12, ptr noundef %16, ptr noundef %17)
  %127 = icmp ne i32 %126, 1
  br i1 %127, label %128, label %136

128:                                              ; preds = %124
  br label %129

129:                                              ; preds = %128
  %130 = load ptr, ptr @stderr, align 8, !tbaa !5
  %131 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %130, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 216, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %132

132:                                              ; preds = %129
  br label %133

133:                                              ; preds = %132
  %134 = load ptr, ptr %3, align 8, !tbaa !5
  %135 = call i32 @tls_send_alert(ptr noundef %134, i32 noundef 10)
  br label %993

136:                                              ; preds = %124
  %137 = load i32, ptr %11, align 4, !tbaa !9
  %138 = icmp ne i32 %137, 257
  br i1 %138, label %139, label %147

139:                                              ; preds = %136
  %140 = load ptr, ptr %3, align 8, !tbaa !5
  %141 = call i32 @tls_send_alert(ptr noundef %140, i32 noundef 70)
  br label %142

142:                                              ; preds = %139
  %143 = load ptr, ptr @stderr, align 8, !tbaa !5
  %144 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %143, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 222, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %145

145:                                              ; preds = %142
  br label %146

146:                                              ; preds = %145
  br label %993

147:                                              ; preds = %136
  %148 = load i32, ptr %12, align 4, !tbaa !9
  %149 = call i32 @tls_cipher_suite_in_list(i32 noundef %148, ptr noundef @tlcp_ciphers, i64 noundef 1)
  %150 = icmp ne i32 %149, 1
  br i1 %150, label %151, label %159

151:                                              ; preds = %147
  %152 = load ptr, ptr %3, align 8, !tbaa !5
  %153 = call i32 @tls_send_alert(ptr noundef %152, i32 noundef 40)
  br label %154

154:                                              ; preds = %151
  %155 = load ptr, ptr @stderr, align 8, !tbaa !5
  %156 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %155, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 227, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %157

157:                                              ; preds = %154
  br label %158

158:                                              ; preds = %157
  br label %993

159:                                              ; preds = %147
  %160 = load ptr, ptr %16, align 8, !tbaa !5
  %161 = icmp ne ptr %160, null
  br i1 %161, label %162, label %170

162:                                              ; preds = %159
  br label %163

163:                                              ; preds = %162
  %164 = load ptr, ptr @stderr, align 8, !tbaa !5
  %165 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %164, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 231, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %166

166:                                              ; preds = %163
  br label %167

167:                                              ; preds = %166
  %168 = load ptr, ptr %3, align 8, !tbaa !5
  %169 = call i32 @tls_send_alert(ptr noundef %168, i32 noundef 10)
  br label %993

170:                                              ; preds = %159
  %171 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %172 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %171, ptr align 1 %172, i64 32, i1 false)
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.TLS_CONNECT, ptr %173, i32 0, i32 12
  %175 = getelementptr inbounds [32 x i8], ptr %174, i64 0, i64 0
  %176 = load ptr, ptr %14, align 8, !tbaa !5
  %177 = load i64, ptr %15, align 8, !tbaa !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %175, ptr align 1 %176, i64 %177, i1 false)
  %178 = load i32, ptr %12, align 4, !tbaa !9
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.TLS_CONNECT, ptr %179, i32 0, i32 11
  store i32 %178, ptr %180, align 8, !tbaa !22
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %181, i64 5
  %183 = load i64, ptr %7, align 8, !tbaa !11
  %184 = sub i64 %183, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %182, i64 noundef %184)
  %185 = load ptr, ptr %5, align 8, !tbaa !5
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.TLS_CONNECT, ptr %186, i32 0, i32 4
  %188 = load i32, ptr %187, align 8, !tbaa !13
  %189 = call i32 @tls_record_recv(ptr noundef %185, ptr noundef %7, i32 noundef %188)
  %190 = icmp ne i32 %189, 1
  br i1 %190, label %204, label %191

191:                                              ; preds = %170
  %192 = load ptr, ptr %5, align 8, !tbaa !5
  %193 = getelementptr inbounds i8, ptr %192, i64 1
  %194 = load i8, ptr %193, align 1, !tbaa !21
  %195 = zext i8 %194 to i16
  %196 = zext i16 %195 to i32
  %197 = shl i32 %196, 8
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i64 2
  %200 = load i8, ptr %199, align 1, !tbaa !21
  %201 = zext i8 %200 to i32
  %202 = or i32 %197, %201
  %203 = icmp ne i32 %202, 257
  br i1 %203, label %204, label %212

204:                                              ; preds = %191, %170
  br label %205

205:                                              ; preds = %204
  %206 = load ptr, ptr @stderr, align 8, !tbaa !5
  %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %206, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 244, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %208

208:                                              ; preds = %205
  br label %209

209:                                              ; preds = %208
  %210 = load ptr, ptr %3, align 8, !tbaa !5
  %211 = call i32 @tls_send_alert(ptr noundef %210, i32 noundef 10)
  br label %993

212:                                              ; preds = %191
  %213 = load ptr, ptr %5, align 8, !tbaa !5
  %214 = load ptr, ptr %3, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.TLS_CONNECT, ptr %214, i32 0, i32 14
  %216 = getelementptr inbounds [2048 x i8], ptr %215, i64 0, i64 0
  %217 = load ptr, ptr %3, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.TLS_CONNECT, ptr %217, i32 0, i32 15
  %219 = call i32 @tls_record_get_handshake_certificate(ptr noundef %213, ptr noundef %216, ptr noundef %218)
  %220 = icmp ne i32 %219, 1
  br i1 %220, label %221, label %229

221:                                              ; preds = %212
  br label %222

222:                                              ; preds = %221
  %223 = load ptr, ptr @stderr, align 8, !tbaa !5
  %224 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %223, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 252, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %225

225:                                              ; preds = %222
  br label %226

226:                                              ; preds = %225
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  %228 = call i32 @tls_send_alert(ptr noundef %227, i32 noundef 10)
  br label %993

229:                                              ; preds = %212
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = getelementptr inbounds i8, ptr %230, i64 5
  %232 = load i64, ptr %7, align 8, !tbaa !11
  %233 = sub i64 %232, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %231, i64 noundef %233)
  %234 = load ptr, ptr %3, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.TLS_CONNECT, ptr %234, i32 0, i32 19
  %236 = load i64, ptr %235, align 8, !tbaa !23
  %237 = icmp ne i64 %236, 0
  br i1 %237, label %238, label %263

238:                                              ; preds = %229
  %239 = load ptr, ptr %3, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.TLS_CONNECT, ptr %239, i32 0, i32 14
  %241 = getelementptr inbounds [2048 x i8], ptr %240, i64 0, i64 0
  %242 = load ptr, ptr %3, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.TLS_CONNECT, ptr %242, i32 0, i32 15
  %244 = load i64, ptr %243, align 8, !tbaa !24
  %245 = load ptr, ptr %3, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.TLS_CONNECT, ptr %245, i32 0, i32 18
  %247 = getelementptr inbounds [2048 x i8], ptr %246, i64 0, i64 0
  %248 = load ptr, ptr %3, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.TLS_CONNECT, ptr %248, i32 0, i32 19
  %250 = load i64, ptr %249, align 8, !tbaa !23
  %251 = load i32, ptr %40, align 4, !tbaa !9
  %252 = call i32 @x509_certs_verify_tlcp(ptr noundef %241, i64 noundef %244, i32 noundef 0, ptr noundef %247, i64 noundef %250, i32 noundef %251, ptr noundef %42)
  %253 = icmp ne i32 %252, 1
  br i1 %253, label %254, label %262

254:                                              ; preds = %238
  br label %255

255:                                              ; preds = %254
  %256 = load ptr, ptr @stderr, align 8, !tbaa !5
  %257 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %256, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 264, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %258

258:                                              ; preds = %255
  br label %259

259:                                              ; preds = %258
  %260 = load ptr, ptr %3, align 8, !tbaa !5
  %261 = call i32 @tls_send_alert(ptr noundef %260, i32 noundef 42)
  br label %993

262:                                              ; preds = %238
  br label %263

263:                                              ; preds = %262, %229
  %264 = load ptr, ptr %5, align 8, !tbaa !5
  %265 = load ptr, ptr %3, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.TLS_CONNECT, ptr %265, i32 0, i32 4
  %267 = load i32, ptr %266, align 8, !tbaa !13
  %268 = call i32 @tls_record_recv(ptr noundef %264, ptr noundef %7, i32 noundef %267)
  %269 = icmp ne i32 %268, 1
  br i1 %269, label %283, label %270

270:                                              ; preds = %263
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 1
  %273 = load i8, ptr %272, align 1, !tbaa !21
  %274 = zext i8 %273 to i16
  %275 = zext i16 %274 to i32
  %276 = shl i32 %275, 8
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %277, i64 2
  %279 = load i8, ptr %278, align 1, !tbaa !21
  %280 = zext i8 %279 to i32
  %281 = or i32 %276, %280
  %282 = icmp ne i32 %281, 257
  br i1 %282, label %283, label %291

283:                                              ; preds = %270, %263
  br label %284

284:                                              ; preds = %283
  %285 = load ptr, ptr @stderr, align 8, !tbaa !5
  %286 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %285, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 274, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %287

287:                                              ; preds = %284
  br label %288

288:                                              ; preds = %287
  %289 = load ptr, ptr %3, align 8, !tbaa !5
  %290 = call i32 @tls_send_alert(ptr noundef %289, i32 noundef 10)
  br label %993

291:                                              ; preds = %270
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = call i32 @tlcp_record_get_handshake_server_key_exchange_pke(ptr noundef %292, ptr noundef %22, ptr noundef %23)
  %294 = icmp ne i32 %293, 1
  br i1 %294, label %295, label %303

295:                                              ; preds = %291
  br label %296

296:                                              ; preds = %295
  %297 = load ptr, ptr @stderr, align 8, !tbaa !5
  %298 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %297, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 280, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %299

299:                                              ; preds = %296
  br label %300

300:                                              ; preds = %299
  %301 = load ptr, ptr %3, align 8, !tbaa !5
  %302 = call i32 @tls_send_alert(ptr noundef %301, i32 noundef 10)
  br label %993

303:                                              ; preds = %291
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds i8, ptr %304, i64 5
  %306 = load i64, ptr %7, align 8, !tbaa !11
  %307 = sub i64 %306, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %305, i64 noundef %307)
  %308 = load ptr, ptr %3, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.TLS_CONNECT, ptr %308, i32 0, i32 14
  %310 = getelementptr inbounds [2048 x i8], ptr %309, i64 0, i64 0
  %311 = load ptr, ptr %3, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.TLS_CONNECT, ptr %311, i32 0, i32 15
  %313 = load i64, ptr %312, align 8, !tbaa !24
  %314 = call i32 @x509_certs_get_cert_by_index(ptr noundef %310, i64 noundef %313, i32 noundef 0, ptr noundef %37, ptr noundef %39)
  %315 = icmp ne i32 %314, 1
  br i1 %315, label %335, label %316

316:                                              ; preds = %303
  %317 = load ptr, ptr %37, align 8, !tbaa !5
  %318 = load i64, ptr %39, align 8, !tbaa !11
  %319 = call i32 @x509_cert_get_subject_public_key(ptr noundef %317, i64 noundef %318, ptr noundef %18)
  %320 = icmp ne i32 %319, 1
  br i1 %320, label %335, label %321

321:                                              ; preds = %316
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.TLS_CONNECT, ptr %322, i32 0, i32 14
  %324 = getelementptr inbounds [2048 x i8], ptr %323, i64 0, i64 0
  %325 = load ptr, ptr %3, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.TLS_CONNECT, ptr %325, i32 0, i32 15
  %327 = load i64, ptr %326, align 8, !tbaa !24
  %328 = call i32 @x509_certs_get_cert_by_index(ptr noundef %324, i64 noundef %327, i32 noundef 1, ptr noundef %34, ptr noundef %35)
  %329 = icmp ne i32 %328, 1
  br i1 %329, label %335, label %330

330:                                              ; preds = %321
  %331 = load ptr, ptr %34, align 8, !tbaa !5
  %332 = load i64, ptr %35, align 8, !tbaa !11
  %333 = call i32 @x509_cert_get_subject_public_key(ptr noundef %331, i64 noundef %332, ptr noundef %19)
  %334 = icmp ne i32 %333, 1
  br i1 %334, label %335, label %343

335:                                              ; preds = %330, %321, %316, %303
  br label %336

336:                                              ; preds = %335
  %337 = load ptr, ptr @stderr, align 8, !tbaa !5
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 291, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %339

339:                                              ; preds = %336
  br label %340

340:                                              ; preds = %339
  %341 = load ptr, ptr %3, align 8, !tbaa !5
  %342 = call i32 @tls_send_alert(ptr noundef %341, i32 noundef 42)
  br label %993

343:                                              ; preds = %330
  %344 = getelementptr inbounds [3 x i8], ptr %36, i64 0, i64 0
  store ptr %344, ptr %38, align 8, !tbaa !5
  store i64 0, ptr %39, align 8, !tbaa !11
  %345 = load i64, ptr %35, align 8, !tbaa !11
  %346 = trunc i64 %345 to i32
  call void @tls_uint24_to_bytes(i32 noundef %346, ptr noundef %38, ptr noundef %39)
  %347 = call i32 @sm2_verify_init(ptr noundef %20, ptr noundef %18, ptr noundef @.str.4, i64 noundef 16)
  %348 = icmp ne i32 %347, 1
  br i1 %348, label %366, label %349

349:                                              ; preds = %343
  %350 = getelementptr inbounds [32 x i8], ptr %9, i64 0, i64 0
  %351 = call i32 @sm2_verify_update(ptr noundef %20, ptr noundef %350, i64 noundef 32)
  %352 = icmp ne i32 %351, 1
  br i1 %352, label %366, label %353

353:                                              ; preds = %349
  %354 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %355 = call i32 @sm2_verify_update(ptr noundef %20, ptr noundef %354, i64 noundef 32)
  %356 = icmp ne i32 %355, 1
  br i1 %356, label %366, label %357

357:                                              ; preds = %353
  %358 = getelementptr inbounds [3 x i8], ptr %36, i64 0, i64 0
  %359 = call i32 @sm2_verify_update(ptr noundef %20, ptr noundef %358, i64 noundef 3)
  %360 = icmp ne i32 %359, 1
  br i1 %360, label %366, label %361

361:                                              ; preds = %357
  %362 = load ptr, ptr %34, align 8, !tbaa !5
  %363 = load i64, ptr %35, align 8, !tbaa !11
  %364 = call i32 @sm2_verify_update(ptr noundef %20, ptr noundef %362, i64 noundef %363)
  %365 = icmp ne i32 %364, 1
  br i1 %365, label %366, label %374

366:                                              ; preds = %361, %357, %353, %349, %343
  br label %367

367:                                              ; preds = %366
  %368 = load ptr, ptr @stderr, align 8, !tbaa !5
  %369 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %368, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 302, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %370

370:                                              ; preds = %367
  br label %371

371:                                              ; preds = %370
  %372 = load ptr, ptr %3, align 8, !tbaa !5
  %373 = call i32 @tls_send_alert(ptr noundef %372, i32 noundef 80)
  br label %993

374:                                              ; preds = %361
  %375 = load ptr, ptr %22, align 8, !tbaa !5
  %376 = load i64, ptr %23, align 8, !tbaa !11
  %377 = call i32 @sm2_verify_finish(ptr noundef %20, ptr noundef %375, i64 noundef %376)
  %378 = icmp ne i32 %377, 1
  br i1 %378, label %379, label %387

379:                                              ; preds = %374
  br label %380

380:                                              ; preds = %379
  %381 = load ptr, ptr @stderr, align 8, !tbaa !5
  %382 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %381, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 307, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %383

383:                                              ; preds = %380
  br label %384

384:                                              ; preds = %383
  %385 = load ptr, ptr %3, align 8, !tbaa !5
  %386 = call i32 @tls_send_alert(ptr noundef %385, i32 noundef 51)
  br label %993

387:                                              ; preds = %374
  %388 = load ptr, ptr %5, align 8, !tbaa !5
  %389 = load ptr, ptr %3, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.TLS_CONNECT, ptr %389, i32 0, i32 4
  %391 = load i32, ptr %390, align 8, !tbaa !13
  %392 = call i32 @tls_record_recv(ptr noundef %388, ptr noundef %7, i32 noundef %391)
  %393 = icmp ne i32 %392, 1
  br i1 %393, label %411, label %394

394:                                              ; preds = %387
  %395 = load ptr, ptr %5, align 8, !tbaa !5
  %396 = getelementptr inbounds i8, ptr %395, i64 1
  %397 = load i8, ptr %396, align 1, !tbaa !21
  %398 = zext i8 %397 to i16
  %399 = zext i16 %398 to i32
  %400 = shl i32 %399, 8
  %401 = load ptr, ptr %5, align 8, !tbaa !5
  %402 = getelementptr inbounds i8, ptr %401, i64 2
  %403 = load i8, ptr %402, align 1, !tbaa !21
  %404 = zext i8 %403 to i32
  %405 = or i32 %400, %404
  %406 = icmp ne i32 %405, 257
  br i1 %406, label %411, label %407

407:                                              ; preds = %394
  %408 = load ptr, ptr %5, align 8, !tbaa !5
  %409 = call i32 @tls_record_get_handshake(ptr noundef %408, ptr noundef %33, ptr noundef %37, ptr noundef %39)
  %410 = icmp ne i32 %409, 1
  br i1 %410, label %411, label %419

411:                                              ; preds = %407, %394, %387
  br label %412

412:                                              ; preds = %411
  %413 = load ptr, ptr @stderr, align 8, !tbaa !5
  %414 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %413, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 316, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %415

415:                                              ; preds = %412
  br label %416

416:                                              ; preds = %415
  %417 = load ptr, ptr %3, align 8, !tbaa !5
  %418 = call i32 @tls_send_alert(ptr noundef %417, i32 noundef 10)
  br label %993

419:                                              ; preds = %407
  %420 = load i32, ptr %33, align 4, !tbaa !9
  %421 = icmp eq i32 %420, 13
  br i1 %421, label %422, label %513

422:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %423 = load ptr, ptr %5, align 8, !tbaa !5
  %424 = call i32 @tls_record_get_handshake_certificate_request(ptr noundef %423, ptr noundef %43, ptr noundef %44, ptr noundef %45, ptr noundef %46)
  %425 = icmp ne i32 %424, 1
  br i1 %425, label %426, label %434

426:                                              ; preds = %422
  br label %427

427:                                              ; preds = %426
  %428 = load ptr, ptr @stderr, align 8, !tbaa !5
  %429 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %428, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 331, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %430

430:                                              ; preds = %427
  br label %431

431:                                              ; preds = %430
  %432 = load ptr, ptr %3, align 8, !tbaa !5
  %433 = call i32 @tls_send_alert(ptr noundef %432, i32 noundef 10)
  store i32 4, ptr %47, align 4
  br label %510

434:                                              ; preds = %422
  %435 = load ptr, ptr %3, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.TLS_CONNECT, ptr %435, i32 0, i32 17
  %437 = load i64, ptr %436, align 8, !tbaa !25
  %438 = icmp ne i64 %437, 0
  br i1 %438, label %447, label %439

439:                                              ; preds = %434
  br label %440

440:                                              ; preds = %439
  %441 = load ptr, ptr @stderr, align 8, !tbaa !5
  %442 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %441, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 336, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %443

443:                                              ; preds = %440
  br label %444

444:                                              ; preds = %443
  %445 = load ptr, ptr %3, align 8, !tbaa !5
  %446 = call i32 @tls_send_alert(ptr noundef %445, i32 noundef 80)
  store i32 4, ptr %47, align 4
  br label %510

447:                                              ; preds = %434
  %448 = load ptr, ptr %43, align 8, !tbaa !5
  %449 = load i64, ptr %44, align 8, !tbaa !11
  %450 = load ptr, ptr %3, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.TLS_CONNECT, ptr %450, i32 0, i32 16
  %452 = getelementptr inbounds [2048 x i8], ptr %451, i64 0, i64 0
  %453 = load ptr, ptr %3, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.TLS_CONNECT, ptr %453, i32 0, i32 17
  %455 = load i64, ptr %454, align 8, !tbaa !25
  %456 = call i32 @tls_cert_types_accepted(ptr noundef %448, i64 noundef %449, ptr noundef %452, i64 noundef %455)
  %457 = icmp ne i32 %456, 1
  br i1 %457, label %469, label %458

458:                                              ; preds = %447
  %459 = load ptr, ptr %45, align 8, !tbaa !5
  %460 = load i64, ptr %46, align 8, !tbaa !11
  %461 = load ptr, ptr %3, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.TLS_CONNECT, ptr %461, i32 0, i32 16
  %463 = getelementptr inbounds [2048 x i8], ptr %462, i64 0, i64 0
  %464 = load ptr, ptr %3, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.TLS_CONNECT, ptr %464, i32 0, i32 17
  %466 = load i64, ptr %465, align 8, !tbaa !25
  %467 = call i32 @tls_authorities_issued_certificate(ptr noundef %459, i64 noundef %460, ptr noundef %463, i64 noundef %466)
  %468 = icmp ne i32 %467, 1
  br i1 %468, label %469, label %477

469:                                              ; preds = %458, %447
  br label %470

470:                                              ; preds = %469
  %471 = load ptr, ptr @stderr, align 8, !tbaa !5
  %472 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %471, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 342, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %473

473:                                              ; preds = %470
  br label %474

474:                                              ; preds = %473
  %475 = load ptr, ptr %3, align 8, !tbaa !5
  %476 = call i32 @tls_send_alert(ptr noundef %475, i32 noundef 43)
  store i32 4, ptr %47, align 4
  br label %510

477:                                              ; preds = %458
  %478 = load ptr, ptr %5, align 8, !tbaa !5
  %479 = getelementptr inbounds i8, ptr %478, i64 5
  %480 = load i64, ptr %7, align 8, !tbaa !11
  %481 = sub i64 %480, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %479, i64 noundef %481)
  %482 = load ptr, ptr %5, align 8, !tbaa !5
  %483 = load ptr, ptr %3, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.TLS_CONNECT, ptr %483, i32 0, i32 4
  %485 = load i32, ptr %484, align 8, !tbaa !13
  %486 = call i32 @tls_record_recv(ptr noundef %482, ptr noundef %7, i32 noundef %485)
  %487 = icmp ne i32 %486, 1
  br i1 %487, label %501, label %488

488:                                              ; preds = %477
  %489 = load ptr, ptr %5, align 8, !tbaa !5
  %490 = getelementptr inbounds i8, ptr %489, i64 1
  %491 = load i8, ptr %490, align 1, !tbaa !21
  %492 = zext i8 %491 to i16
  %493 = zext i16 %492 to i32
  %494 = shl i32 %493, 8
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = getelementptr inbounds i8, ptr %495, i64 2
  %497 = load i8, ptr %496, align 1, !tbaa !21
  %498 = zext i8 %497 to i32
  %499 = or i32 %494, %498
  %500 = icmp ne i32 %499, 257
  br i1 %500, label %501, label %509

501:                                              ; preds = %488, %477
  br label %502

502:                                              ; preds = %501
  %503 = load ptr, ptr @stderr, align 8, !tbaa !5
  %504 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %503, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 351, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %505

505:                                              ; preds = %502
  br label %506

506:                                              ; preds = %505
  %507 = load ptr, ptr %3, align 8, !tbaa !5
  %508 = call i32 @tls_send_alert(ptr noundef %507, i32 noundef 10)
  store i32 4, ptr %47, align 4
  br label %510

509:                                              ; preds = %488
  store i32 0, ptr %47, align 4
  br label %510

510:                                              ; preds = %509, %506, %474, %444, %431
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  %511 = load i32, ptr %47, align 4
  switch i32 %511, label %996 [
    i32 0, label %512
    i32 4, label %993
  ]

512:                                              ; preds = %510
  br label %518

513:                                              ; preds = %419
  %514 = load ptr, ptr %3, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.TLS_CONNECT, ptr %514, i32 0, i32 17
  store i64 0, ptr %515, align 8, !tbaa !25
  %516 = load ptr, ptr %3, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.TLS_CONNECT, ptr %516, i32 0, i32 20
  call void @gmssl_secure_clear(ptr noundef %517, i64 noundef 128)
  br label %518

518:                                              ; preds = %513, %512
  %519 = load ptr, ptr %5, align 8, !tbaa !5
  %520 = call i32 @tls_record_get_handshake_server_hello_done(ptr noundef %519)
  %521 = icmp ne i32 %520, 1
  br i1 %521, label %522, label %530

522:                                              ; preds = %518
  br label %523

523:                                              ; preds = %522
  %524 = load ptr, ptr @stderr, align 8, !tbaa !5
  %525 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %524, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 364, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %526

526:                                              ; preds = %523
  br label %527

527:                                              ; preds = %526
  %528 = load ptr, ptr %3, align 8, !tbaa !5
  %529 = call i32 @tls_send_alert(ptr noundef %528, i32 noundef 10)
  br label %993

530:                                              ; preds = %518
  %531 = load ptr, ptr %5, align 8, !tbaa !5
  %532 = getelementptr inbounds i8, ptr %531, i64 5
  %533 = load i64, ptr %7, align 8, !tbaa !11
  %534 = sub i64 %533, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %532, i64 noundef %534)
  %535 = load ptr, ptr %3, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.TLS_CONNECT, ptr %535, i32 0, i32 17
  %537 = load i64, ptr %536, align 8, !tbaa !25
  %538 = icmp ne i64 %537, 0
  br i1 %538, label %539, label %576

539:                                              ; preds = %530
  %540 = load ptr, ptr %5, align 8, !tbaa !5
  %541 = load ptr, ptr %3, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.TLS_CONNECT, ptr %541, i32 0, i32 16
  %543 = getelementptr inbounds [2048 x i8], ptr %542, i64 0, i64 0
  %544 = load ptr, ptr %3, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.TLS_CONNECT, ptr %544, i32 0, i32 17
  %546 = load i64, ptr %545, align 8, !tbaa !25
  %547 = call i32 @tls_record_set_handshake_certificate(ptr noundef %540, ptr noundef %7, ptr noundef %543, i64 noundef %546)
  %548 = icmp ne i32 %547, 1
  br i1 %548, label %549, label %557

549:                                              ; preds = %539
  br label %550

550:                                              ; preds = %549
  %551 = load ptr, ptr @stderr, align 8, !tbaa !5
  %552 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %551, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 374, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %553

553:                                              ; preds = %550
  br label %554

554:                                              ; preds = %553
  %555 = load ptr, ptr %3, align 8, !tbaa !5
  %556 = call i32 @tls_send_alert(ptr noundef %555, i32 noundef 80)
  br label %993

557:                                              ; preds = %539
  %558 = load ptr, ptr %5, align 8, !tbaa !5
  %559 = load i64, ptr %7, align 8, !tbaa !11
  %560 = load ptr, ptr %3, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.TLS_CONNECT, ptr %560, i32 0, i32 4
  %562 = load i32, ptr %561, align 8, !tbaa !13
  %563 = call i32 @tls_record_send(ptr noundef %558, i64 noundef %559, i32 noundef %562)
  %564 = icmp ne i32 %563, 1
  br i1 %564, label %565, label %571

565:                                              ; preds = %557
  br label %566

566:                                              ; preds = %565
  %567 = load ptr, ptr @stderr, align 8, !tbaa !5
  %568 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %567, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 380, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %569

569:                                              ; preds = %566
  br label %570

570:                                              ; preds = %569
  br label %993

571:                                              ; preds = %557
  %572 = load ptr, ptr %5, align 8, !tbaa !5
  %573 = getelementptr inbounds i8, ptr %572, i64 5
  %574 = load i64, ptr %7, align 8, !tbaa !11
  %575 = sub i64 %574, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %573, i64 noundef %575)
  br label %576

576:                                              ; preds = %571, %530
  %577 = getelementptr inbounds [48 x i8], ptr %24, i64 0, i64 0
  %578 = call i32 @tls_pre_master_secret_generate(ptr noundef %577, i32 noundef 257)
  %579 = icmp ne i32 %578, 1
  br i1 %579, label %600, label %580

580:                                              ; preds = %576
  %581 = getelementptr inbounds [48 x i8], ptr %24, i64 0, i64 0
  %582 = getelementptr inbounds [32 x i8], ptr %9, i64 0, i64 0
  %583 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %584 = load ptr, ptr %3, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.TLS_CONNECT, ptr %584, i32 0, i32 23
  %586 = getelementptr inbounds [48 x i8], ptr %585, i64 0, i64 0
  %587 = call i32 @tls_prf(ptr noundef %581, i64 noundef 48, ptr noundef @.str.5, ptr noundef %582, i64 noundef 32, ptr noundef %583, i64 noundef 32, i64 noundef 48, ptr noundef %586)
  %588 = icmp ne i32 %587, 1
  br i1 %588, label %600, label %589

589:                                              ; preds = %580
  %590 = load ptr, ptr %3, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.TLS_CONNECT, ptr %590, i32 0, i32 23
  %592 = getelementptr inbounds [48 x i8], ptr %591, i64 0, i64 0
  %593 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %594 = getelementptr inbounds [32 x i8], ptr %9, i64 0, i64 0
  %595 = load ptr, ptr %3, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.TLS_CONNECT, ptr %595, i32 0, i32 24
  %597 = getelementptr inbounds [96 x i8], ptr %596, i64 0, i64 0
  %598 = call i32 @tls_prf(ptr noundef %592, i64 noundef 48, ptr noundef @.str.6, ptr noundef %593, i64 noundef 32, ptr noundef %594, i64 noundef 32, i64 noundef 96, ptr noundef %597)
  %599 = icmp ne i32 %598, 1
  br i1 %599, label %600, label %608

600:                                              ; preds = %589, %580, %576
  br label %601

601:                                              ; preds = %600
  %602 = load ptr, ptr @stderr, align 8, !tbaa !5
  %603 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %602, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 395, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %604

604:                                              ; preds = %601
  br label %605

605:                                              ; preds = %604
  %606 = load ptr, ptr %3, align 8, !tbaa !5
  %607 = call i32 @tls_send_alert(ptr noundef %606, i32 noundef 80)
  br label %993

608:                                              ; preds = %589
  %609 = load ptr, ptr %3, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.TLS_CONNECT, ptr %609, i32 0, i32 25
  %611 = load ptr, ptr %3, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.TLS_CONNECT, ptr %611, i32 0, i32 24
  %613 = getelementptr inbounds [96 x i8], ptr %612, i64 0, i64 0
  call void @sm3_hmac_init(ptr noundef %610, ptr noundef %613, i64 noundef 32)
  %614 = load ptr, ptr %3, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.TLS_CONNECT, ptr %614, i32 0, i32 26
  %616 = load ptr, ptr %3, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.TLS_CONNECT, ptr %616, i32 0, i32 24
  %618 = getelementptr inbounds [96 x i8], ptr %617, i64 0, i64 0
  %619 = getelementptr inbounds i8, ptr %618, i64 32
  call void @sm3_hmac_init(ptr noundef %615, ptr noundef %619, i64 noundef 32)
  %620 = load ptr, ptr %3, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.TLS_CONNECT, ptr %620, i32 0, i32 27
  %622 = load ptr, ptr %3, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.TLS_CONNECT, ptr %622, i32 0, i32 24
  %624 = getelementptr inbounds [96 x i8], ptr %623, i64 0, i64 0
  %625 = getelementptr inbounds i8, ptr %624, i64 64
  call void @sm4_set_encrypt_key(ptr noundef %621, ptr noundef %625)
  %626 = load ptr, ptr %3, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.TLS_CONNECT, ptr %626, i32 0, i32 28
  %628 = load ptr, ptr %3, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.TLS_CONNECT, ptr %628, i32 0, i32 24
  %630 = getelementptr inbounds [96 x i8], ptr %629, i64 0, i64 0
  %631 = getelementptr inbounds i8, ptr %630, i64 80
  call void @sm4_set_decrypt_key(ptr noundef %627, ptr noundef %631)
  %632 = getelementptr inbounds [48 x i8], ptr %24, i64 0, i64 0
  %633 = getelementptr inbounds [366 x i8], ptr %25, i64 0, i64 0
  %634 = call i32 @sm2_encrypt(ptr noundef %19, ptr noundef %632, i64 noundef 48, ptr noundef %633, ptr noundef %26)
  %635 = icmp ne i32 %634, 1
  br i1 %635, label %642, label %636

636:                                              ; preds = %608
  %637 = load ptr, ptr %5, align 8, !tbaa !5
  %638 = getelementptr inbounds [366 x i8], ptr %25, i64 0, i64 0
  %639 = load i64, ptr %26, align 8, !tbaa !11
  %640 = call i32 @tls_record_set_handshake_client_key_exchange_pke(ptr noundef %637, ptr noundef %7, ptr noundef %638, i64 noundef %639)
  %641 = icmp ne i32 %640, 1
  br i1 %641, label %642, label %650

642:                                              ; preds = %636, %608
  br label %643

643:                                              ; preds = %642
  %644 = load ptr, ptr @stderr, align 8, !tbaa !5
  %645 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %644, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 418, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %646

646:                                              ; preds = %643
  br label %647

647:                                              ; preds = %646
  %648 = load ptr, ptr %3, align 8, !tbaa !5
  %649 = call i32 @tls_send_alert(ptr noundef %648, i32 noundef 80)
  br label %993

650:                                              ; preds = %636
  %651 = load ptr, ptr %5, align 8, !tbaa !5
  %652 = load i64, ptr %7, align 8, !tbaa !11
  %653 = load ptr, ptr %3, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.TLS_CONNECT, ptr %653, i32 0, i32 4
  %655 = load i32, ptr %654, align 8, !tbaa !13
  %656 = call i32 @tls_record_send(ptr noundef %651, i64 noundef %652, i32 noundef %655)
  %657 = icmp ne i32 %656, 1
  br i1 %657, label %658, label %664

658:                                              ; preds = %650
  br label %659

659:                                              ; preds = %658
  %660 = load ptr, ptr @stderr, align 8, !tbaa !5
  %661 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %660, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 424, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %662

662:                                              ; preds = %659
  br label %663

663:                                              ; preds = %662
  br label %993

664:                                              ; preds = %650
  %665 = load ptr, ptr %5, align 8, !tbaa !5
  %666 = getelementptr inbounds i8, ptr %665, i64 5
  %667 = load i64, ptr %7, align 8, !tbaa !11
  %668 = sub i64 %667, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %666, i64 noundef %668)
  %669 = load ptr, ptr %3, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.TLS_CONNECT, ptr %669, i32 0, i32 17
  %671 = load i64, ptr %670, align 8, !tbaa !25
  %672 = icmp ne i64 %671, 0
  br i1 %672, label %673, label %731

673:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 112, ptr %48) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %48, ptr align 8 %27, i64 112, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 72, ptr %50) #6
  %674 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  call void @sm3_finish(ptr noundef %48, ptr noundef %674)
  %675 = load ptr, ptr %3, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.TLS_CONNECT, ptr %675, i32 0, i32 20
  %677 = call i32 @sm2_sign_init(ptr noundef %21, ptr noundef %676, ptr noundef @.str.4, i64 noundef 16)
  %678 = icmp ne i32 %677, 1
  br i1 %678, label %687, label %679

679:                                              ; preds = %673
  %680 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  %681 = call i32 @sm2_sign_update(ptr noundef %21, ptr noundef %680, i64 noundef 32)
  %682 = icmp ne i32 %681, 1
  br i1 %682, label %687, label %683

683:                                              ; preds = %679
  %684 = getelementptr inbounds [72 x i8], ptr %50, i64 0, i64 0
  %685 = call i32 @sm2_sign_finish(ptr noundef %21, ptr noundef %684, ptr noundef %23)
  %686 = icmp ne i32 %685, 1
  br i1 %686, label %687, label %695

687:                                              ; preds = %683, %679, %673
  br label %688

688:                                              ; preds = %687
  %689 = load ptr, ptr @stderr, align 8, !tbaa !5
  %690 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %689, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 441, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %691

691:                                              ; preds = %688
  br label %692

692:                                              ; preds = %691
  %693 = load ptr, ptr %3, align 8, !tbaa !5
  %694 = call i32 @tls_send_alert(ptr noundef %693, i32 noundef 80)
  store i32 4, ptr %47, align 4
  br label %728

695:                                              ; preds = %683
  %696 = load ptr, ptr %5, align 8, !tbaa !5
  %697 = getelementptr inbounds [72 x i8], ptr %50, i64 0, i64 0
  %698 = load i64, ptr %23, align 8, !tbaa !11
  %699 = call i32 @tls_record_set_handshake_certificate_verify(ptr noundef %696, ptr noundef %7, ptr noundef %697, i64 noundef %698)
  %700 = icmp ne i32 %699, 1
  br i1 %700, label %701, label %709

701:                                              ; preds = %695
  br label %702

702:                                              ; preds = %701
  %703 = load ptr, ptr @stderr, align 8, !tbaa !5
  %704 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %703, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 446, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %705

705:                                              ; preds = %702
  br label %706

706:                                              ; preds = %705
  %707 = load ptr, ptr %3, align 8, !tbaa !5
  %708 = call i32 @tls_send_alert(ptr noundef %707, i32 noundef 80)
  store i32 4, ptr %47, align 4
  br label %728

709:                                              ; preds = %695
  %710 = load ptr, ptr %5, align 8, !tbaa !5
  %711 = load i64, ptr %7, align 8, !tbaa !11
  %712 = load ptr, ptr %3, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.TLS_CONNECT, ptr %712, i32 0, i32 4
  %714 = load i32, ptr %713, align 8, !tbaa !13
  %715 = call i32 @tls_record_send(ptr noundef %710, i64 noundef %711, i32 noundef %714)
  %716 = icmp ne i32 %715, 1
  br i1 %716, label %717, label %723

717:                                              ; preds = %709
  br label %718

718:                                              ; preds = %717
  %719 = load ptr, ptr @stderr, align 8, !tbaa !5
  %720 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %719, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 452, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %721

721:                                              ; preds = %718
  br label %722

722:                                              ; preds = %721
  store i32 4, ptr %47, align 4
  br label %728

723:                                              ; preds = %709
  %724 = load ptr, ptr %5, align 8, !tbaa !5
  %725 = getelementptr inbounds i8, ptr %724, i64 5
  %726 = load i64, ptr %7, align 8, !tbaa !11
  %727 = sub i64 %726, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %725, i64 noundef %727)
  store i32 0, ptr %47, align 4
  br label %728

728:                                              ; preds = %723, %722, %706, %692
  call void @llvm.lifetime.end.p0(i64 72, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr %48) #6
  %729 = load i32, ptr %47, align 4
  switch i32 %729, label %996 [
    i32 0, label %730
    i32 4, label %993
  ]

730:                                              ; preds = %728
  br label %731

731:                                              ; preds = %730, %664
  %732 = load ptr, ptr %5, align 8, !tbaa !5
  %733 = call i32 @tls_record_set_change_cipher_spec(ptr noundef %732, ptr noundef %7)
  %734 = icmp ne i32 %733, 1
  br i1 %734, label %735, label %743

735:                                              ; preds = %731
  br label %736

736:                                              ; preds = %735
  %737 = load ptr, ptr @stderr, align 8, !tbaa !5
  %738 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %737, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 461, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %739

739:                                              ; preds = %736
  br label %740

740:                                              ; preds = %739
  %741 = load ptr, ptr %3, align 8, !tbaa !5
  %742 = call i32 @tls_send_alert(ptr noundef %741, i32 noundef 80)
  br label %993

743:                                              ; preds = %731
  %744 = load ptr, ptr %5, align 8, !tbaa !5
  %745 = load i64, ptr %7, align 8, !tbaa !11
  %746 = load ptr, ptr %3, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.TLS_CONNECT, ptr %746, i32 0, i32 4
  %748 = load i32, ptr %747, align 8, !tbaa !13
  %749 = call i32 @tls_record_send(ptr noundef %744, i64 noundef %745, i32 noundef %748)
  %750 = icmp ne i32 %749, 1
  br i1 %750, label %751, label %757

751:                                              ; preds = %743
  br label %752

752:                                              ; preds = %751
  %753 = load ptr, ptr @stderr, align 8, !tbaa !5
  %754 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %753, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 467, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %755

755:                                              ; preds = %752
  br label %756

756:                                              ; preds = %755
  br label %993

757:                                              ; preds = %743
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %28, ptr align 8 %27, i64 112, i1 false)
  %758 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 0
  call void @sm3_finish(ptr noundef %28, ptr noundef %758)
  %759 = load ptr, ptr %3, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.TLS_CONNECT, ptr %759, i32 0, i32 23
  %761 = getelementptr inbounds [48 x i8], ptr %760, i64 0, i64 0
  %762 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 0
  %763 = getelementptr inbounds [12 x i8], ptr %32, i64 0, i64 0
  %764 = call i32 @tls_prf(ptr noundef %761, i64 noundef 48, ptr noundef @.str.7, ptr noundef %762, i64 noundef 32, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef %763)
  %765 = icmp ne i32 %764, 1
  br i1 %765, label %771, label %766

766:                                              ; preds = %757
  %767 = getelementptr inbounds [309 x i8], ptr %6, i64 0, i64 0
  %768 = getelementptr inbounds [12 x i8], ptr %32, i64 0, i64 0
  %769 = call i32 @tls_record_set_handshake_finished(ptr noundef %767, ptr noundef %8, ptr noundef %768, i64 noundef 12)
  %770 = icmp ne i32 %769, 1
  br i1 %770, label %771, label %779

771:                                              ; preds = %766, %757
  br label %772

772:                                              ; preds = %771
  %773 = load ptr, ptr @stderr, align 8, !tbaa !5
  %774 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %773, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 479, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %775

775:                                              ; preds = %772
  br label %776

776:                                              ; preds = %775
  %777 = load ptr, ptr %3, align 8, !tbaa !5
  %778 = call i32 @tls_send_alert(ptr noundef %777, i32 noundef 80)
  br label %993

779:                                              ; preds = %766
  %780 = getelementptr inbounds [309 x i8], ptr %6, i64 0, i64 0
  %781 = getelementptr inbounds i8, ptr %780, i64 5
  %782 = load i64, ptr %8, align 8, !tbaa !11
  %783 = sub i64 %782, 5
  call void @sm3_update(ptr noundef %27, ptr noundef %781, i64 noundef %783)
  %784 = load ptr, ptr %3, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.TLS_CONNECT, ptr %784, i32 0, i32 25
  %786 = load ptr, ptr %3, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.TLS_CONNECT, ptr %786, i32 0, i32 27
  %788 = load ptr, ptr %3, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.TLS_CONNECT, ptr %788, i32 0, i32 29
  %790 = getelementptr inbounds [8 x i8], ptr %789, i64 0, i64 0
  %791 = getelementptr inbounds [309 x i8], ptr %6, i64 0, i64 0
  %792 = load i64, ptr %8, align 8, !tbaa !11
  %793 = load ptr, ptr %5, align 8, !tbaa !5
  %794 = call i32 @tls_record_encrypt(ptr noundef %785, ptr noundef %787, ptr noundef %790, ptr noundef %791, i64 noundef %792, ptr noundef %793, ptr noundef %7)
  %795 = icmp ne i32 %794, 1
  br i1 %795, label %796, label %804

796:                                              ; preds = %779
  br label %797

797:                                              ; preds = %796
  %798 = load ptr, ptr @stderr, align 8, !tbaa !5
  %799 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %798, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 489, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %800

800:                                              ; preds = %797
  br label %801

801:                                              ; preds = %800
  %802 = load ptr, ptr %3, align 8, !tbaa !5
  %803 = call i32 @tls_send_alert(ptr noundef %802, i32 noundef 80)
  br label %993

804:                                              ; preds = %779
  %805 = load ptr, ptr %3, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.TLS_CONNECT, ptr %805, i32 0, i32 29
  %807 = getelementptr inbounds [8 x i8], ptr %806, i64 0, i64 0
  %808 = call i32 @tls_seq_num_incr(ptr noundef %807)
  %809 = load ptr, ptr %5, align 8, !tbaa !5
  %810 = load i64, ptr %7, align 8, !tbaa !11
  %811 = load ptr, ptr %3, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.TLS_CONNECT, ptr %811, i32 0, i32 4
  %813 = load i32, ptr %812, align 8, !tbaa !13
  %814 = call i32 @tls_record_send(ptr noundef %809, i64 noundef %810, i32 noundef %813)
  %815 = icmp ne i32 %814, 1
  br i1 %815, label %816, label %822

816:                                              ; preds = %804
  br label %817

817:                                              ; preds = %816
  %818 = load ptr, ptr @stderr, align 8, !tbaa !5
  %819 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %818, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 496, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %820

820:                                              ; preds = %817
  br label %821

821:                                              ; preds = %820
  br label %993

822:                                              ; preds = %804
  %823 = load ptr, ptr %5, align 8, !tbaa !5
  %824 = load ptr, ptr %3, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.TLS_CONNECT, ptr %824, i32 0, i32 4
  %826 = load i32, ptr %825, align 8, !tbaa !13
  %827 = call i32 @tls_record_recv(ptr noundef %823, ptr noundef %7, i32 noundef %826)
  %828 = icmp ne i32 %827, 1
  br i1 %828, label %842, label %829

829:                                              ; preds = %822
  %830 = load ptr, ptr %5, align 8, !tbaa !5
  %831 = getelementptr inbounds i8, ptr %830, i64 1
  %832 = load i8, ptr %831, align 1, !tbaa !21
  %833 = zext i8 %832 to i16
  %834 = zext i16 %833 to i32
  %835 = shl i32 %834, 8
  %836 = load ptr, ptr %5, align 8, !tbaa !5
  %837 = getelementptr inbounds i8, ptr %836, i64 2
  %838 = load i8, ptr %837, align 1, !tbaa !21
  %839 = zext i8 %838 to i32
  %840 = or i32 %835, %839
  %841 = icmp ne i32 %840, 257
  br i1 %841, label %842, label %850

842:                                              ; preds = %829, %822
  br label %843

843:                                              ; preds = %842
  %844 = load ptr, ptr @stderr, align 8, !tbaa !5
  %845 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %844, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 504, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %846

846:                                              ; preds = %843
  br label %847

847:                                              ; preds = %846
  %848 = load ptr, ptr %3, align 8, !tbaa !5
  %849 = call i32 @tls_send_alert(ptr noundef %848, i32 noundef 10)
  br label %993

850:                                              ; preds = %829
  %851 = load ptr, ptr %5, align 8, !tbaa !5
  %852 = call i32 @tls_record_get_change_cipher_spec(ptr noundef %851)
  %853 = icmp ne i32 %852, 1
  br i1 %853, label %854, label %862

854:                                              ; preds = %850
  br label %855

855:                                              ; preds = %854
  %856 = load ptr, ptr @stderr, align 8, !tbaa !5
  %857 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %856, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 510, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %858

858:                                              ; preds = %855
  br label %859

859:                                              ; preds = %858
  %860 = load ptr, ptr %3, align 8, !tbaa !5
  %861 = call i32 @tls_send_alert(ptr noundef %860, i32 noundef 10)
  br label %993

862:                                              ; preds = %850
  %863 = load ptr, ptr %5, align 8, !tbaa !5
  %864 = load ptr, ptr %3, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.TLS_CONNECT, ptr %864, i32 0, i32 4
  %866 = load i32, ptr %865, align 8, !tbaa !13
  %867 = call i32 @tls_record_recv(ptr noundef %863, ptr noundef %7, i32 noundef %866)
  %868 = icmp ne i32 %867, 1
  br i1 %868, label %882, label %869

869:                                              ; preds = %862
  %870 = load ptr, ptr %5, align 8, !tbaa !5
  %871 = getelementptr inbounds i8, ptr %870, i64 1
  %872 = load i8, ptr %871, align 1, !tbaa !21
  %873 = zext i8 %872 to i16
  %874 = zext i16 %873 to i32
  %875 = shl i32 %874, 8
  %876 = load ptr, ptr %5, align 8, !tbaa !5
  %877 = getelementptr inbounds i8, ptr %876, i64 2
  %878 = load i8, ptr %877, align 1, !tbaa !21
  %879 = zext i8 %878 to i32
  %880 = or i32 %875, %879
  %881 = icmp ne i32 %880, 257
  br i1 %881, label %882, label %890

882:                                              ; preds = %869, %862
  br label %883

883:                                              ; preds = %882
  %884 = load ptr, ptr @stderr, align 8, !tbaa !5
  %885 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %884, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 519, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %886

886:                                              ; preds = %883
  br label %887

887:                                              ; preds = %886
  %888 = load ptr, ptr %3, align 8, !tbaa !5
  %889 = call i32 @tls_send_alert(ptr noundef %888, i32 noundef 10)
  br label %993

890:                                              ; preds = %869
  %891 = load i64, ptr %7, align 8, !tbaa !11
  %892 = icmp ugt i64 %891, 309
  br i1 %892, label %893, label %901

893:                                              ; preds = %890
  br label %894

894:                                              ; preds = %893
  %895 = load ptr, ptr @stderr, align 8, !tbaa !5
  %896 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %895, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 524, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %897

897:                                              ; preds = %894
  br label %898

898:                                              ; preds = %897
  %899 = load ptr, ptr %3, align 8, !tbaa !5
  %900 = call i32 @tls_send_alert(ptr noundef %899, i32 noundef 20)
  br label %993

901:                                              ; preds = %890
  %902 = load ptr, ptr %3, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.TLS_CONNECT, ptr %902, i32 0, i32 26
  %904 = load ptr, ptr %3, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.TLS_CONNECT, ptr %904, i32 0, i32 28
  %906 = load ptr, ptr %3, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.TLS_CONNECT, ptr %906, i32 0, i32 30
  %908 = getelementptr inbounds [8 x i8], ptr %907, i64 0, i64 0
  %909 = load ptr, ptr %5, align 8, !tbaa !5
  %910 = load i64, ptr %7, align 8, !tbaa !11
  %911 = getelementptr inbounds [309 x i8], ptr %6, i64 0, i64 0
  %912 = call i32 @tls_record_decrypt(ptr noundef %903, ptr noundef %905, ptr noundef %908, ptr noundef %909, i64 noundef %910, ptr noundef %911, ptr noundef %8)
  %913 = icmp ne i32 %912, 1
  br i1 %913, label %914, label %922

914:                                              ; preds = %901
  br label %915

915:                                              ; preds = %914
  %916 = load ptr, ptr @stderr, align 8, !tbaa !5
  %917 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %916, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 531, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %918

918:                                              ; preds = %915
  br label %919

919:                                              ; preds = %918
  %920 = load ptr, ptr %3, align 8, !tbaa !5
  %921 = call i32 @tls_send_alert(ptr noundef %920, i32 noundef 20)
  br label %993

922:                                              ; preds = %901
  %923 = load ptr, ptr %3, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.TLS_CONNECT, ptr %923, i32 0, i32 30
  %925 = getelementptr inbounds [8 x i8], ptr %924, i64 0, i64 0
  %926 = call i32 @tls_seq_num_incr(ptr noundef %925)
  %927 = getelementptr inbounds [309 x i8], ptr %6, i64 0, i64 0
  %928 = call i32 @tls_record_get_handshake_finished(ptr noundef %927, ptr noundef %30, ptr noundef %31)
  %929 = icmp ne i32 %928, 1
  br i1 %929, label %930, label %938

930:                                              ; preds = %922
  br label %931

931:                                              ; preds = %930
  %932 = load ptr, ptr @stderr, align 8, !tbaa !5
  %933 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %932, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 538, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %934

934:                                              ; preds = %931
  br label %935

935:                                              ; preds = %934
  %936 = load ptr, ptr %3, align 8, !tbaa !5
  %937 = call i32 @tls_send_alert(ptr noundef %936, i32 noundef 10)
  br label %993

938:                                              ; preds = %922
  %939 = load i64, ptr %31, align 8, !tbaa !11
  %940 = icmp ne i64 %939, 12
  br i1 %940, label %941, label %949

941:                                              ; preds = %938
  br label %942

942:                                              ; preds = %941
  %943 = load ptr, ptr @stderr, align 8, !tbaa !5
  %944 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %943, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 543, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %945

945:                                              ; preds = %942
  br label %946

946:                                              ; preds = %945
  %947 = load ptr, ptr %3, align 8, !tbaa !5
  %948 = call i32 @tls_send_alert(ptr noundef %947, i32 noundef 10)
  br label %993

949:                                              ; preds = %938
  %950 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 0
  call void @sm3_finish(ptr noundef %27, ptr noundef %950)
  %951 = load ptr, ptr %3, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.TLS_CONNECT, ptr %951, i32 0, i32 23
  %953 = getelementptr inbounds [48 x i8], ptr %952, i64 0, i64 0
  %954 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 0
  %955 = getelementptr inbounds [12 x i8], ptr %32, i64 0, i64 0
  %956 = call i32 @tls_prf(ptr noundef %953, i64 noundef 48, ptr noundef @.str.8, ptr noundef %954, i64 noundef 32, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef %955)
  %957 = icmp ne i32 %956, 1
  br i1 %957, label %958, label %966

958:                                              ; preds = %949
  br label %959

959:                                              ; preds = %958
  %960 = load ptr, ptr @stderr, align 8, !tbaa !5
  %961 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %960, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 550, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %962

962:                                              ; preds = %959
  br label %963

963:                                              ; preds = %962
  %964 = load ptr, ptr %3, align 8, !tbaa !5
  %965 = call i32 @tls_send_alert(ptr noundef %964, i32 noundef 80)
  br label %993

966:                                              ; preds = %949
  %967 = load ptr, ptr %30, align 8, !tbaa !5
  %968 = getelementptr inbounds [12 x i8], ptr %32, i64 0, i64 0
  %969 = call i32 @memcmp(ptr noundef %967, ptr noundef %968, i64 noundef 12) #7
  %970 = icmp ne i32 %969, 0
  br i1 %970, label %971, label %979

971:                                              ; preds = %966
  br label %972

972:                                              ; preds = %971
  %973 = load ptr, ptr @stderr, align 8, !tbaa !5
  %974 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %973, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 555, ptr noundef @__FUNCTION__.tlcp_do_connect) #6
  br label %975

975:                                              ; preds = %972
  br label %976

976:                                              ; preds = %975
  %977 = load ptr, ptr %3, align 8, !tbaa !5
  %978 = call i32 @tls_send_alert(ptr noundef %977, i32 noundef 51)
  br label %993

979:                                              ; preds = %966
  %980 = load ptr, ptr %3, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.TLS_CONNECT, ptr %980, i32 0, i32 35
  %982 = load i32, ptr %981, align 8, !tbaa !27
  %983 = icmp ne i32 %982, 0
  br i1 %983, label %987, label %984

984:                                              ; preds = %979
  %985 = load ptr, ptr @stderr, align 8, !tbaa !5
  %986 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %985, ptr noundef @.str.9) #6
  br label %987

987:                                              ; preds = %984, %979
  %988 = load ptr, ptr %3, align 8, !tbaa !5
  %989 = getelementptr inbounds %struct.TLS_CONNECT, ptr %988, i32 0, i32 0
  store i32 257, ptr %989, align 8, !tbaa !28
  %990 = load i32, ptr %12, align 4, !tbaa !9
  %991 = load ptr, ptr %3, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.TLS_CONNECT, ptr %991, i32 0, i32 11
  store i32 %990, ptr %992, align 8, !tbaa !22
  store i32 1, ptr %4, align 4, !tbaa !9
  br label %993

993:                                              ; preds = %987, %976, %963, %946, %935, %919, %898, %887, %859, %847, %821, %801, %776, %756, %740, %728, %663, %647, %605, %570, %554, %527, %510, %416, %384, %371, %340, %300, %288, %259, %226, %209, %167, %158, %146, %133, %121, %100, %83, %69
  call void @gmssl_secure_clear(ptr noundef %21, i64 noundef 3976)
  %994 = getelementptr inbounds [48 x i8], ptr %24, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %994, i64 noundef 48)
  %995 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %995, ptr %2, align 4
  store i32 1, ptr %47, align 4
  br label %996

996:                                              ; preds = %993, %728, %510
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 366, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 3976, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 1888, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 309, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  %997 = load i32, ptr %2, align 4
  ret i32 %997
}

declare i32 @tls_record_set_protocol(ptr noundef, i32 noundef) #3

declare void @sm3_init(ptr noundef) #3

declare i32 @tls_random_generate(ptr noundef) #3

declare i32 @tls_record_set_handshake_client_hello(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_record_send(ptr noundef, i64 noundef, i32 noundef) #3

declare void @sm3_update(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_record_recv(ptr noundef, ptr noundef, i32 noundef) #3

declare i32 @tls_send_alert(ptr noundef, i32 noundef) #3

declare i32 @tls_record_get_handshake_server_hello(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @tls_cipher_suite_in_list(i32 noundef, ptr noundef, i64 noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @tls_record_get_handshake_certificate(ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @x509_certs_verify_tlcp(ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) #3

declare i32 @x509_certs_get_cert_by_index(ptr noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef) #3

declare i32 @x509_cert_get_subject_public_key(ptr noundef, i64 noundef, ptr noundef) #3

declare void @tls_uint24_to_bytes(i32 noundef, ptr noundef, ptr noundef) #3

declare i32 @sm2_verify_init(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @sm2_verify_update(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @sm2_verify_finish(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_record_get_handshake_certificate_request(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @tls_cert_types_accepted(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_authorities_issued_certificate(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #3

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) #3

declare i32 @tls_record_get_handshake_server_hello_done(ptr noundef) #3

declare i32 @tls_record_set_handshake_certificate(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_pre_master_secret_generate(ptr noundef, i32 noundef) #3

declare i32 @tls_prf(ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #3

declare void @sm3_hmac_init(ptr noundef, ptr noundef, i64 noundef) #3

declare void @sm4_set_encrypt_key(ptr noundef, ptr noundef) #3

declare void @sm4_set_decrypt_key(ptr noundef, ptr noundef) #3

declare i32 @sm2_encrypt(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #3

declare i32 @tls_record_set_handshake_client_key_exchange_pke(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare void @sm3_finish(ptr noundef, ptr noundef) #3

declare i32 @sm2_sign_init(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @sm2_sign_update(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @sm2_sign_finish(ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @tls_record_set_handshake_certificate_verify(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_record_set_change_cipher_spec(ptr noundef, ptr noundef) #3

declare i32 @tls_record_set_handshake_finished(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @tls_record_encrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #3

declare i32 @tls_seq_num_incr(ptr noundef) #3

declare i32 @tls_record_get_change_cipher_spec(ptr noundef) #3

declare i32 @tls_record_decrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #3

declare i32 @tls_record_get_handshake_finished(ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !10, i64 272}
!14 = !{!"", !10, i64 0, !10, i64 4, !7, i64 8, !12, i64 264, !10, i64 272, !7, i64 276, !12, i64 18720, !7, i64 18728, !7, i64 37165, !6, i64 55608, !12, i64 55616, !10, i64 55624, !7, i64 55628, !12, i64 55664, !7, i64 55672, !12, i64 57720, !7, i64 57728, !12, i64 59776, !7, i64 59784, !12, i64 61832, !15, i64 61840, !15, i64 61968, !10, i64 62096, !7, i64 62100, !7, i64 62148, !17, i64 62248, !17, i64 62424, !19, i64 62600, !19, i64 62728, !7, i64 62856, !7, i64 62864, !7, i64 62872, !7, i64 62884, !20, i64 62896, !20, i64 63032, !10, i64 63168}
!15 = !{!"", !16, i64 0, !7, i64 96}
!16 = !{!"", !7, i64 0, !7, i64 32, !7, i64 64}
!17 = !{!"", !18, i64 0, !7, i64 112}
!18 = !{!"", !7, i64 0, !12, i64 32, !7, i64 40, !12, i64 104}
!19 = !{!"", !7, i64 0}
!20 = !{!"BLOCK_CIPHER_KEY", !7, i64 0, !6, i64 128}
!21 = !{!7, !7, i64 0}
!22 = !{!14, !10, i64 55624}
!23 = !{!14, !12, i64 61832}
!24 = !{!14, !12, i64 57720}
!25 = !{!14, !12, i64 59776}
!26 = !{i64 0, i64 32, !21, i64 32, i64 8, !11, i64 40, i64 64, !21, i64 104, i64 8, !11}
!27 = !{!14, !10, i64 63168}
!28 = !{!14, !10, i64 0}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }
%struct.SM2_VERIFY_CTX = type { %struct.SM3_CTX, %struct.SM3_CTX, %struct.SM2_KEY, [16 x %struct.SM2_Z256_POINT] }
%struct.SM3_CTX = type { [8 x i32], i64, [64 x i8], i64 }
%struct.SM2_SIGN_CTX = type { %struct.SM3_CTX, %struct.SM3_CTX, %struct.SM2_KEY, [4 x i64], [32 x %struct.SM2_SIGN_PRE_COMP], i32, [16 x %struct.SM2_Z256_POINT] }
%struct.SM2_SIGN_PRE_COMP = type { [4 x i64], [4 x i64] }

@tlcp_ciphers = external hidden constant [1 x i32], align 4
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@__FUNCTION__.tlcp_do_connect = external hidden unnamed_addr constant [16 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @tlcp_record_get_handshake_server_key_exchange_pke(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @tls_record_get_handshake(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @tlcp_do_connect(ptr noundef %0) local_unnamed_addr #2 {
  %2 = alloca [309 x i8], align 16
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca [32 x i8], align 16
  %6 = alloca [32 x i8], align 16
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca %struct.SM2_KEY, align 8
  %15 = alloca %struct.SM2_KEY, align 8
  %16 = alloca %struct.SM2_VERIFY_CTX, align 8
  %17 = alloca %struct.SM2_SIGN_CTX, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca [48 x i8], align 16
  %21 = alloca [366 x i8], align 16
  %22 = alloca i64, align 8
  %23 = alloca %struct.SM3_CTX, align 8
  %24 = alloca %struct.SM3_CTX, align 8
  %25 = alloca [32 x i8], align 16
  %26 = alloca ptr, align 8
  %27 = alloca i64, align 8
  %28 = alloca [12 x i8], align 1
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca [3 x i8], align 1
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i64, align 8
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca i64, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i64, align 8
  %41 = alloca %struct.SM3_CTX, align 8
  %42 = alloca [32 x i8], align 16
  %43 = alloca [72 x i8], align 16
  %44 = getelementptr inbounds i8, ptr %0, i64 18728
  call void @llvm.lifetime.start.p0(i64 309, ptr nonnull %2) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 1888, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 3976, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 366, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #6
  %45 = tail call i32 @tls_record_set_protocol(ptr noundef nonnull %44, i32 noundef 257) #6
  %46 = call i32 @tls_record_set_protocol(ptr noundef nonnull %2, i32 noundef 257) #6
  call void @sm3_init(ptr noundef nonnull %23) #6
  %47 = call i32 @tls_random_generate(ptr noundef nonnull %5) #6
  %48 = call i32 @tls_record_set_handshake_client_hello(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef 257, ptr noundef nonnull %5, ptr noundef null, i64 noundef 0, ptr noundef nonnull @tlcp_ciphers, i64 noundef 1, ptr noundef null, i64 noundef 0) #6
  %.not = icmp eq i32 %48, 1
  br i1 %.not, label %52, label %49

49:                                               ; preds = %1
  %50 = load ptr, ptr @stderr, align 8, !tbaa !5
  %51 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %50, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 189, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

52:                                               ; preds = %1
  %53 = load i64, ptr %3, align 8, !tbaa !9
  %54 = getelementptr inbounds i8, ptr %0, i64 272
  %55 = load i32, ptr %54, align 8, !tbaa !11
  %56 = call i32 @tls_record_send(ptr noundef nonnull %44, i64 noundef %53, i32 noundef %55) #6
  %.not161 = icmp eq i32 %56, 1
  br i1 %.not161, label %60, label %57

57:                                               ; preds = %52
  %58 = load ptr, ptr @stderr, align 8, !tbaa !5
  %59 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %58, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 195, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

60:                                               ; preds = %52
  %61 = getelementptr inbounds i8, ptr %0, i64 18733
  %62 = load i64, ptr %3, align 8, !tbaa !9
  %63 = add i64 %62, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %63) #6
  %64 = load i32, ptr %54, align 8, !tbaa !11
  %65 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %64) #6
  %.not162 = icmp eq i32 %65, 1
  br i1 %.not162, label %70, label %66

66:                                               ; preds = %60
  %67 = load ptr, ptr @stderr, align 8, !tbaa !5
  %68 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 203, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %69 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

70:                                               ; preds = %60
  %71 = getelementptr inbounds i8, ptr %0, i64 18729
  %72 = load i8, ptr %71, align 1, !tbaa !20
  %73 = zext i8 %72 to i32
  %74 = shl nuw nsw i32 %73, 8
  %75 = getelementptr inbounds i8, ptr %0, i64 18730
  %76 = load i8, ptr %75, align 1, !tbaa !20
  %77 = zext i8 %76 to i32
  %78 = or disjoint i32 %74, %77
  %.not163 = icmp eq i32 %78, 257
  br i1 %.not163, label %83, label %79

79:                                               ; preds = %70
  %80 = load ptr, ptr @stderr, align 8, !tbaa !5
  %81 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %80, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 209, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %82 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 70) #6
  br label %486

83:                                               ; preds = %70
  %84 = call i32 @tls_record_get_handshake_server_hello(ptr noundef nonnull %44, ptr noundef nonnull %7, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %8, ptr noundef nonnull %12, ptr noundef nonnull %13) #6
  %.not164 = icmp eq i32 %84, 1
  br i1 %.not164, label %89, label %85

85:                                               ; preds = %83
  %86 = load ptr, ptr @stderr, align 8, !tbaa !5
  %87 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %86, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 216, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %88 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

89:                                               ; preds = %83
  %90 = load i32, ptr %7, align 4, !tbaa !21
  %.not165 = icmp eq i32 %90, 257
  br i1 %.not165, label %95, label %91

91:                                               ; preds = %89
  %92 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 70) #6
  %93 = load ptr, ptr @stderr, align 8, !tbaa !5
  %94 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %93, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 222, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

95:                                               ; preds = %89
  %96 = load i32, ptr %8, align 4, !tbaa !21
  %97 = call i32 @tls_cipher_suite_in_list(i32 noundef %96, ptr noundef nonnull @tlcp_ciphers, i64 noundef 1) #6
  %.not166 = icmp eq i32 %97, 1
  br i1 %.not166, label %102, label %98

98:                                               ; preds = %95
  %99 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #6
  %100 = load ptr, ptr @stderr, align 8, !tbaa !5
  %101 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %100, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 227, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

102:                                              ; preds = %95
  %103 = load ptr, ptr %12, align 8, !tbaa !5
  %.not167 = icmp eq ptr %103, null
  br i1 %.not167, label %108, label %104

104:                                              ; preds = %102
  %105 = load ptr, ptr @stderr, align 8, !tbaa !5
  %106 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %105, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 231, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %107 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

108:                                              ; preds = %102
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(32) %109, i64 32, i1 false)
  %110 = getelementptr inbounds i8, ptr %0, i64 55628
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = load i64, ptr %11, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %110, ptr align 1 %111, i64 %112, i1 false)
  %113 = load i32, ptr %8, align 4, !tbaa !21
  %114 = getelementptr inbounds i8, ptr %0, i64 55624
  store i32 %113, ptr %114, align 8, !tbaa !22
  %115 = load i64, ptr %3, align 8, !tbaa !9
  %116 = add i64 %115, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %116) #6
  %117 = load i32, ptr %54, align 8, !tbaa !11
  %118 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %117) #6
  %.not168 = icmp eq i32 %118, 1
  br i1 %.not168, label %119, label %126

119:                                              ; preds = %108
  %120 = load i8, ptr %71, align 1, !tbaa !20
  %121 = zext i8 %120 to i32
  %122 = shl nuw nsw i32 %121, 8
  %123 = load i8, ptr %75, align 1, !tbaa !20
  %124 = zext i8 %123 to i32
  %125 = or disjoint i32 %122, %124
  %.not169 = icmp eq i32 %125, 257
  br i1 %.not169, label %130, label %126

126:                                              ; preds = %108, %119
  %127 = load ptr, ptr @stderr, align 8, !tbaa !5
  %128 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %127, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 244, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %129 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

130:                                              ; preds = %119
  %131 = getelementptr inbounds i8, ptr %0, i64 55672
  %132 = getelementptr inbounds i8, ptr %0, i64 57720
  %133 = call i32 @tls_record_get_handshake_certificate(ptr noundef nonnull %44, ptr noundef nonnull %131, ptr noundef nonnull %132) #6
  %.not170 = icmp eq i32 %133, 1
  br i1 %.not170, label %138, label %134

134:                                              ; preds = %130
  %135 = load ptr, ptr @stderr, align 8, !tbaa !5
  %136 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %135, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 252, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %137 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

138:                                              ; preds = %130
  %139 = load i64, ptr %3, align 8, !tbaa !9
  %140 = add i64 %139, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %140) #6
  %141 = getelementptr inbounds i8, ptr %0, i64 61832
  %142 = load i64, ptr %141, align 8, !tbaa !23
  %.not171 = icmp eq i64 %142, 0
  br i1 %.not171, label %151, label %143

143:                                              ; preds = %138
  %144 = load i64, ptr %132, align 8, !tbaa !24
  %145 = getelementptr inbounds i8, ptr %0, i64 59784
  %146 = call i32 @x509_certs_verify_tlcp(ptr noundef nonnull %131, i64 noundef %144, i32 noundef 0, ptr noundef nonnull %145, i64 noundef %142, i32 noundef 5, ptr noundef nonnull %36) #6
  %.not172 = icmp eq i32 %146, 1
  br i1 %.not172, label %151, label %147

147:                                              ; preds = %143
  %148 = load ptr, ptr @stderr, align 8, !tbaa !5
  %149 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %148, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 264, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %150 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 42) #6
  br label %486

151:                                              ; preds = %143, %138
  %152 = load i32, ptr %54, align 8, !tbaa !11
  %153 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %152) #6
  %.not173 = icmp eq i32 %153, 1
  br i1 %.not173, label %154, label %161

154:                                              ; preds = %151
  %155 = load i8, ptr %71, align 1, !tbaa !20
  %156 = zext i8 %155 to i32
  %157 = shl nuw nsw i32 %156, 8
  %158 = load i8, ptr %75, align 1, !tbaa !20
  %159 = zext i8 %158 to i32
  %160 = or disjoint i32 %157, %159
  %.not174 = icmp eq i32 %160, 257
  br i1 %.not174, label %165, label %161

161:                                              ; preds = %151, %154
  %162 = load ptr, ptr @stderr, align 8, !tbaa !5
  %163 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %162, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 274, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %164 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

165:                                              ; preds = %154
  %166 = call i32 @tlcp_record_get_handshake_server_key_exchange_pke(ptr noundef nonnull %44, ptr noundef nonnull %18, ptr noundef nonnull %19)
  %.not175 = icmp eq i32 %166, 1
  br i1 %.not175, label %171, label %167

167:                                              ; preds = %165
  %168 = load ptr, ptr @stderr, align 8, !tbaa !5
  %169 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %168, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 280, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %170 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

171:                                              ; preds = %165
  %172 = load i64, ptr %3, align 8, !tbaa !9
  %173 = add i64 %172, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %173) #6
  %174 = load i64, ptr %132, align 8, !tbaa !24
  %175 = call i32 @x509_certs_get_cert_by_index(ptr noundef nonnull %131, i64 noundef %174, i32 noundef 0, ptr noundef nonnull %33, ptr noundef nonnull %35) #6
  %.not176 = icmp eq i32 %175, 1
  br i1 %.not176, label %176, label %187

176:                                              ; preds = %171
  %177 = load ptr, ptr %33, align 8, !tbaa !5
  %178 = load i64, ptr %35, align 8, !tbaa !9
  %179 = call i32 @x509_cert_get_subject_public_key(ptr noundef %177, i64 noundef %178, ptr noundef nonnull %14) #6
  %.not177 = icmp eq i32 %179, 1
  br i1 %.not177, label %180, label %187

180:                                              ; preds = %176
  %181 = load i64, ptr %132, align 8, !tbaa !24
  %182 = call i32 @x509_certs_get_cert_by_index(ptr noundef nonnull %131, i64 noundef %181, i32 noundef 1, ptr noundef nonnull %30, ptr noundef nonnull %31) #6
  %.not178 = icmp eq i32 %182, 1
  br i1 %.not178, label %183, label %187

183:                                              ; preds = %180
  %184 = load ptr, ptr %30, align 8, !tbaa !5
  %185 = load i64, ptr %31, align 8, !tbaa !9
  %186 = call i32 @x509_cert_get_subject_public_key(ptr noundef %184, i64 noundef %185, ptr noundef nonnull %15) #6
  %.not179 = icmp eq i32 %186, 1
  br i1 %.not179, label %191, label %187

187:                                              ; preds = %171, %176, %180, %183
  %188 = load ptr, ptr @stderr, align 8, !tbaa !5
  %189 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %188, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 291, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %190 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 42) #6
  br label %486

191:                                              ; preds = %183
  store ptr %32, ptr %34, align 8, !tbaa !5
  store i64 0, ptr %35, align 8, !tbaa !9
  %192 = load i64, ptr %31, align 8, !tbaa !9
  %193 = trunc i64 %192 to i32
  call void @tls_uint24_to_bytes(i32 noundef %193, ptr noundef nonnull %34, ptr noundef nonnull %35) #6
  %194 = call i32 @sm2_verify_init(ptr noundef nonnull %16, ptr noundef nonnull %14, ptr noundef nonnull @.str.4, i64 noundef 16) #6
  %.not180 = icmp eq i32 %194, 1
  br i1 %.not180, label %195, label %205

195:                                              ; preds = %191
  %196 = call i32 @sm2_verify_update(ptr noundef nonnull %16, ptr noundef nonnull %5, i64 noundef 32) #6
  %.not181 = icmp eq i32 %196, 1
  br i1 %.not181, label %197, label %205

197:                                              ; preds = %195
  %198 = call i32 @sm2_verify_update(ptr noundef nonnull %16, ptr noundef nonnull %6, i64 noundef 32) #6
  %.not182 = icmp eq i32 %198, 1
  br i1 %.not182, label %199, label %205

199:                                              ; preds = %197
  %200 = call i32 @sm2_verify_update(ptr noundef nonnull %16, ptr noundef nonnull %32, i64 noundef 3) #6
  %.not183 = icmp eq i32 %200, 1
  br i1 %.not183, label %201, label %205

201:                                              ; preds = %199
  %202 = load ptr, ptr %30, align 8, !tbaa !5
  %203 = load i64, ptr %31, align 8, !tbaa !9
  %204 = call i32 @sm2_verify_update(ptr noundef nonnull %16, ptr noundef %202, i64 noundef %203) #6
  %.not184 = icmp eq i32 %204, 1
  br i1 %.not184, label %209, label %205

205:                                              ; preds = %191, %195, %197, %199, %201
  %206 = load ptr, ptr @stderr, align 8, !tbaa !5
  %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %206, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 302, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %208 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

209:                                              ; preds = %201
  %210 = load ptr, ptr %18, align 8, !tbaa !5
  %211 = load i64, ptr %19, align 8, !tbaa !9
  %212 = call i32 @sm2_verify_finish(ptr noundef nonnull %16, ptr noundef %210, i64 noundef %211) #6
  %.not185 = icmp eq i32 %212, 1
  br i1 %.not185, label %217, label %213

213:                                              ; preds = %209
  %214 = load ptr, ptr @stderr, align 8, !tbaa !5
  %215 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %214, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 307, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %216 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 51) #6
  br label %486

217:                                              ; preds = %209
  %218 = load i32, ptr %54, align 8, !tbaa !11
  %219 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %218) #6
  %.not186 = icmp eq i32 %219, 1
  br i1 %.not186, label %220, label %229

220:                                              ; preds = %217
  %221 = load i8, ptr %71, align 1, !tbaa !20
  %222 = zext i8 %221 to i32
  %223 = shl nuw nsw i32 %222, 8
  %224 = load i8, ptr %75, align 1, !tbaa !20
  %225 = zext i8 %224 to i32
  %226 = or disjoint i32 %223, %225
  %.not187 = icmp eq i32 %226, 257
  br i1 %.not187, label %227, label %229

227:                                              ; preds = %220
  %228 = call i32 @tls_record_get_handshake(ptr noundef nonnull %44, ptr noundef nonnull %29, ptr noundef nonnull %33, ptr noundef nonnull %35) #6
  %.not188 = icmp eq i32 %228, 1
  br i1 %.not188, label %233, label %229

229:                                              ; preds = %217, %220, %227
  %230 = load ptr, ptr @stderr, align 8, !tbaa !5
  %231 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %230, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 316, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %232 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

233:                                              ; preds = %227
  %234 = load i32, ptr %29, align 4, !tbaa !21
  %235 = icmp eq i32 %234, 13
  br i1 %235, label %236, label %267

236:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #6
  %237 = call i32 @tls_record_get_handshake_certificate_request(ptr noundef nonnull %44, ptr noundef nonnull %37, ptr noundef nonnull %38, ptr noundef nonnull %39, ptr noundef nonnull %40) #6
  %.not189 = icmp eq i32 %237, 1
  br i1 %.not189, label %238, label %.thread

238:                                              ; preds = %236
  %239 = getelementptr inbounds i8, ptr %0, i64 59776
  %240 = load i64, ptr %239, align 8, !tbaa !25
  %.not190 = icmp eq i64 %240, 0
  br i1 %.not190, label %.thread, label %241

241:                                              ; preds = %238
  %242 = load ptr, ptr %37, align 8, !tbaa !5
  %243 = load i64, ptr %38, align 8, !tbaa !9
  %244 = getelementptr inbounds i8, ptr %0, i64 57728
  %245 = call i32 @tls_cert_types_accepted(ptr noundef %242, i64 noundef %243, ptr noundef nonnull %244, i64 noundef %240) #6
  %.not191 = icmp eq i32 %245, 1
  br i1 %.not191, label %246, label %.thread

246:                                              ; preds = %241
  %247 = load ptr, ptr %39, align 8, !tbaa !5
  %248 = load i64, ptr %40, align 8, !tbaa !9
  %249 = load i64, ptr %239, align 8, !tbaa !25
  %250 = call i32 @tls_authorities_issued_certificate(ptr noundef %247, i64 noundef %248, ptr noundef nonnull %244, i64 noundef %249) #6
  %.not192 = icmp eq i32 %250, 1
  br i1 %.not192, label %251, label %.thread

251:                                              ; preds = %246
  %252 = load i64, ptr %3, align 8, !tbaa !9
  %253 = add i64 %252, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %253) #6
  %254 = load i32, ptr %54, align 8, !tbaa !11
  %255 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %254) #6
  %.not193 = icmp eq i32 %255, 1
  br i1 %.not193, label %256, label %.thread

256:                                              ; preds = %251
  %257 = load i8, ptr %71, align 1, !tbaa !20
  %258 = zext i8 %257 to i32
  %259 = shl nuw nsw i32 %258, 8
  %260 = load i8, ptr %75, align 1, !tbaa !20
  %261 = zext i8 %260 to i32
  %262 = or disjoint i32 %259, %261
  %.not194 = icmp eq i32 %262, 257
  br i1 %.not194, label %266, label %.thread

.thread:                                          ; preds = %256, %251, %246, %241, %238, %236
  %.sink239 = phi i32 [ 331, %236 ], [ 336, %238 ], [ 342, %241 ], [ 342, %246 ], [ 351, %251 ], [ 351, %256 ]
  %.sink = phi i32 [ 10, %236 ], [ 80, %238 ], [ 43, %241 ], [ 43, %246 ], [ 10, %251 ], [ 10, %256 ]
  %263 = load ptr, ptr @stderr, align 8, !tbaa !5
  %264 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %263, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef %.sink239, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %265 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef %.sink) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  br label %486

266:                                              ; preds = %256
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  br label %270

267:                                              ; preds = %233
  %268 = getelementptr inbounds i8, ptr %0, i64 59776
  store i64 0, ptr %268, align 8, !tbaa !25
  %269 = getelementptr inbounds i8, ptr %0, i64 61840
  call void @gmssl_secure_clear(ptr noundef nonnull %269, i64 noundef 128) #6
  br label %270

270:                                              ; preds = %266, %267
  %271 = call i32 @tls_record_get_handshake_server_hello_done(ptr noundef nonnull %44) #6
  %.not195 = icmp eq i32 %271, 1
  br i1 %.not195, label %276, label %272

272:                                              ; preds = %270
  %273 = load ptr, ptr @stderr, align 8, !tbaa !5
  %274 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %273, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 364, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %275 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

276:                                              ; preds = %270
  %277 = load i64, ptr %3, align 8, !tbaa !9
  %278 = add i64 %277, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %278) #6
  %279 = getelementptr inbounds i8, ptr %0, i64 59776
  %280 = load i64, ptr %279, align 8, !tbaa !25
  %.not196 = icmp eq i64 %280, 0
  br i1 %.not196, label %298, label %281

281:                                              ; preds = %276
  %282 = getelementptr inbounds i8, ptr %0, i64 57728
  %283 = call i32 @tls_record_set_handshake_certificate(ptr noundef nonnull %44, ptr noundef nonnull %3, ptr noundef nonnull %282, i64 noundef %280) #6
  %.not197 = icmp eq i32 %283, 1
  br i1 %.not197, label %288, label %284

284:                                              ; preds = %281
  %285 = load ptr, ptr @stderr, align 8, !tbaa !5
  %286 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %285, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 374, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %287 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

288:                                              ; preds = %281
  %289 = load i64, ptr %3, align 8, !tbaa !9
  %290 = load i32, ptr %54, align 8, !tbaa !11
  %291 = call i32 @tls_record_send(ptr noundef nonnull %44, i64 noundef %289, i32 noundef %290) #6
  %.not198 = icmp eq i32 %291, 1
  br i1 %.not198, label %295, label %292

292:                                              ; preds = %288
  %293 = load ptr, ptr @stderr, align 8, !tbaa !5
  %294 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %293, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 380, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

295:                                              ; preds = %288
  %296 = load i64, ptr %3, align 8, !tbaa !9
  %297 = add i64 %296, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %297) #6
  br label %298

298:                                              ; preds = %295, %276
  %299 = call i32 @tls_pre_master_secret_generate(ptr noundef nonnull %20, i32 noundef 257) #6
  %.not199 = icmp eq i32 %299, 1
  br i1 %.not199, label %300, label %306

300:                                              ; preds = %298
  %301 = getelementptr inbounds i8, ptr %0, i64 62100
  %302 = call i32 @tls_prf(ptr noundef nonnull %20, i64 noundef 48, ptr noundef nonnull @.str.5, ptr noundef nonnull %5, i64 noundef 32, ptr noundef nonnull %6, i64 noundef 32, i64 noundef 48, ptr noundef nonnull %301) #6
  %.not200 = icmp eq i32 %302, 1
  br i1 %.not200, label %303, label %306

303:                                              ; preds = %300
  %304 = getelementptr inbounds i8, ptr %0, i64 62148
  %305 = call i32 @tls_prf(ptr noundef nonnull %301, i64 noundef 48, ptr noundef nonnull @.str.6, ptr noundef nonnull %6, i64 noundef 32, ptr noundef nonnull %5, i64 noundef 32, i64 noundef 96, ptr noundef nonnull %304) #6
  %.not201 = icmp eq i32 %305, 1
  br i1 %.not201, label %310, label %306

306:                                              ; preds = %298, %300, %303
  %307 = load ptr, ptr @stderr, align 8, !tbaa !5
  %308 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %307, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 395, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %309 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

310:                                              ; preds = %303
  %311 = getelementptr inbounds i8, ptr %0, i64 62248
  call void @sm3_hmac_init(ptr noundef nonnull %311, ptr noundef nonnull %304, i64 noundef 32) #6
  %312 = getelementptr inbounds i8, ptr %0, i64 62424
  %313 = getelementptr inbounds i8, ptr %0, i64 62180
  call void @sm3_hmac_init(ptr noundef nonnull %312, ptr noundef nonnull %313, i64 noundef 32) #6
  %314 = getelementptr inbounds i8, ptr %0, i64 62600
  %315 = getelementptr inbounds i8, ptr %0, i64 62212
  call void @sm4_set_encrypt_key(ptr noundef nonnull %314, ptr noundef nonnull %315) #6
  %316 = getelementptr inbounds i8, ptr %0, i64 62728
  %317 = getelementptr inbounds i8, ptr %0, i64 62228
  call void @sm4_set_decrypt_key(ptr noundef nonnull %316, ptr noundef nonnull %317) #6
  %318 = call i32 @sm2_encrypt(ptr noundef nonnull %15, ptr noundef nonnull %20, i64 noundef 48, ptr noundef nonnull %21, ptr noundef nonnull %22) #6
  %.not202 = icmp eq i32 %318, 1
  br i1 %.not202, label %319, label %322

319:                                              ; preds = %310
  %320 = load i64, ptr %22, align 8, !tbaa !9
  %321 = call i32 @tls_record_set_handshake_client_key_exchange_pke(ptr noundef nonnull %44, ptr noundef nonnull %3, ptr noundef nonnull %21, i64 noundef %320) #6
  %.not203 = icmp eq i32 %321, 1
  br i1 %.not203, label %326, label %322

322:                                              ; preds = %310, %319
  %323 = load ptr, ptr @stderr, align 8, !tbaa !5
  %324 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %323, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 418, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %325 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

326:                                              ; preds = %319
  %327 = load i64, ptr %3, align 8, !tbaa !9
  %328 = load i32, ptr %54, align 8, !tbaa !11
  %329 = call i32 @tls_record_send(ptr noundef nonnull %44, i64 noundef %327, i32 noundef %328) #6
  %.not204 = icmp eq i32 %329, 1
  br i1 %.not204, label %333, label %330

330:                                              ; preds = %326
  %331 = load ptr, ptr @stderr, align 8, !tbaa !5
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 424, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

333:                                              ; preds = %326
  %334 = load i64, ptr %3, align 8, !tbaa !9
  %335 = add i64 %334, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %335) #6
  %336 = load i64, ptr %279, align 8, !tbaa !25
  %.not205 = icmp eq i64 %336, 0
  br i1 %.not205, label %365, label %337

337:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %41) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %41, ptr noundef nonnull align 8 dereferenceable(112) %23, i64 112, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #6
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %43) #6
  call void @sm3_finish(ptr noundef nonnull %41, ptr noundef nonnull %42) #6
  %338 = getelementptr inbounds i8, ptr %0, i64 61840
  %339 = call i32 @sm2_sign_init(ptr noundef nonnull %17, ptr noundef nonnull %338, ptr noundef nonnull @.str.4, i64 noundef 16) #6
  %.not206 = icmp eq i32 %339, 1
  br i1 %.not206, label %340, label %344

340:                                              ; preds = %337
  %341 = call i32 @sm2_sign_update(ptr noundef nonnull %17, ptr noundef nonnull %42, i64 noundef 32) #6
  %.not207 = icmp eq i32 %341, 1
  br i1 %.not207, label %342, label %344

342:                                              ; preds = %340
  %343 = call i32 @sm2_sign_finish(ptr noundef nonnull %17, ptr noundef nonnull %43, ptr noundef nonnull %19) #6
  %.not208 = icmp eq i32 %343, 1
  br i1 %.not208, label %348, label %344

344:                                              ; preds = %337, %340, %342
  %345 = load ptr, ptr @stderr, align 8, !tbaa !5
  %346 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %345, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 441, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %347 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %.thread235

348:                                              ; preds = %342
  %349 = load i64, ptr %19, align 8, !tbaa !9
  %350 = call i32 @tls_record_set_handshake_certificate_verify(ptr noundef nonnull %44, ptr noundef nonnull %3, ptr noundef nonnull %43, i64 noundef %349) #6
  %.not209 = icmp eq i32 %350, 1
  br i1 %.not209, label %355, label %351

351:                                              ; preds = %348
  %352 = load ptr, ptr @stderr, align 8, !tbaa !5
  %353 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %352, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 446, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %354 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %.thread235

355:                                              ; preds = %348
  %356 = load i64, ptr %3, align 8, !tbaa !9
  %357 = load i32, ptr %54, align 8, !tbaa !11
  %358 = call i32 @tls_record_send(ptr noundef nonnull %44, i64 noundef %356, i32 noundef %357) #6
  %.not210 = icmp eq i32 %358, 1
  br i1 %.not210, label %362, label %359

359:                                              ; preds = %355
  %360 = load ptr, ptr @stderr, align 8, !tbaa !5
  %361 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %360, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 452, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %.thread235

.thread235:                                       ; preds = %344, %351, %359
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %41) #6
  br label %486

362:                                              ; preds = %355
  %363 = load i64, ptr %3, align 8, !tbaa !9
  %364 = add i64 %363, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %61, i64 noundef %364) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %41) #6
  br label %365

365:                                              ; preds = %362, %333
  %366 = call i32 @tls_record_set_change_cipher_spec(ptr noundef nonnull %44, ptr noundef nonnull %3) #6
  %.not211 = icmp eq i32 %366, 1
  br i1 %.not211, label %371, label %367

367:                                              ; preds = %365
  %368 = load ptr, ptr @stderr, align 8, !tbaa !5
  %369 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %368, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 461, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %370 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

371:                                              ; preds = %365
  %372 = load i64, ptr %3, align 8, !tbaa !9
  %373 = load i32, ptr %54, align 8, !tbaa !11
  %374 = call i32 @tls_record_send(ptr noundef nonnull %44, i64 noundef %372, i32 noundef %373) #6
  %.not212 = icmp eq i32 %374, 1
  br i1 %.not212, label %378, label %375

375:                                              ; preds = %371
  %376 = load ptr, ptr @stderr, align 8, !tbaa !5
  %377 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %376, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 467, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

378:                                              ; preds = %371
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %24, ptr noundef nonnull align 8 dereferenceable(112) %23, i64 112, i1 false)
  call void @sm3_finish(ptr noundef nonnull %24, ptr noundef nonnull %25) #6
  %379 = call i32 @tls_prf(ptr noundef nonnull %301, i64 noundef 48, ptr noundef nonnull @.str.7, ptr noundef nonnull %25, i64 noundef 32, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef nonnull %28) #6
  %.not213 = icmp eq i32 %379, 1
  br i1 %.not213, label %380, label %382

380:                                              ; preds = %378
  %381 = call i32 @tls_record_set_handshake_finished(ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %28, i64 noundef 12) #6
  %.not214 = icmp eq i32 %381, 1
  br i1 %.not214, label %386, label %382

382:                                              ; preds = %378, %380
  %383 = load ptr, ptr @stderr, align 8, !tbaa !5
  %384 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %383, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 479, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %385 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

386:                                              ; preds = %380
  %387 = getelementptr inbounds i8, ptr %2, i64 5
  %388 = load i64, ptr %4, align 8, !tbaa !9
  %389 = add i64 %388, -5
  call void @sm3_update(ptr noundef nonnull %23, ptr noundef nonnull %387, i64 noundef %389) #6
  %390 = getelementptr inbounds i8, ptr %0, i64 62856
  %391 = load i64, ptr %4, align 8, !tbaa !9
  %392 = call i32 @tls_record_encrypt(ptr noundef nonnull %311, ptr noundef nonnull %314, ptr noundef nonnull %390, ptr noundef nonnull %2, i64 noundef %391, ptr noundef nonnull %44, ptr noundef nonnull %3) #6
  %.not215 = icmp eq i32 %392, 1
  br i1 %.not215, label %397, label %393

393:                                              ; preds = %386
  %394 = load ptr, ptr @stderr, align 8, !tbaa !5
  %395 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %394, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 489, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %396 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

397:                                              ; preds = %386
  %398 = call i32 @tls_seq_num_incr(ptr noundef nonnull %390) #6
  %399 = load i64, ptr %3, align 8, !tbaa !9
  %400 = load i32, ptr %54, align 8, !tbaa !11
  %401 = call i32 @tls_record_send(ptr noundef nonnull %44, i64 noundef %399, i32 noundef %400) #6
  %.not216 = icmp eq i32 %401, 1
  br i1 %.not216, label %405, label %402

402:                                              ; preds = %397
  %403 = load ptr, ptr @stderr, align 8, !tbaa !5
  %404 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %403, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 496, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  br label %486

405:                                              ; preds = %397
  %406 = load i32, ptr %54, align 8, !tbaa !11
  %407 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %406) #6
  %.not217 = icmp eq i32 %407, 1
  br i1 %.not217, label %408, label %415

408:                                              ; preds = %405
  %409 = load i8, ptr %71, align 1, !tbaa !20
  %410 = zext i8 %409 to i32
  %411 = shl nuw nsw i32 %410, 8
  %412 = load i8, ptr %75, align 1, !tbaa !20
  %413 = zext i8 %412 to i32
  %414 = or disjoint i32 %411, %413
  %.not218 = icmp eq i32 %414, 257
  br i1 %.not218, label %419, label %415

415:                                              ; preds = %405, %408
  %416 = load ptr, ptr @stderr, align 8, !tbaa !5
  %417 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %416, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 504, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %418 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

419:                                              ; preds = %408
  %420 = call i32 @tls_record_get_change_cipher_spec(ptr noundef nonnull %44) #6
  %.not219 = icmp eq i32 %420, 1
  br i1 %.not219, label %425, label %421

421:                                              ; preds = %419
  %422 = load ptr, ptr @stderr, align 8, !tbaa !5
  %423 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %422, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 510, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %424 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

425:                                              ; preds = %419
  %426 = load i32, ptr %54, align 8, !tbaa !11
  %427 = call i32 @tls_record_recv(ptr noundef nonnull %44, ptr noundef nonnull %3, i32 noundef %426) #6
  %.not220 = icmp eq i32 %427, 1
  br i1 %.not220, label %428, label %435

428:                                              ; preds = %425
  %429 = load i8, ptr %71, align 1, !tbaa !20
  %430 = zext i8 %429 to i32
  %431 = shl nuw nsw i32 %430, 8
  %432 = load i8, ptr %75, align 1, !tbaa !20
  %433 = zext i8 %432 to i32
  %434 = or disjoint i32 %431, %433
  %.not221 = icmp eq i32 %434, 257
  br i1 %.not221, label %439, label %435

435:                                              ; preds = %425, %428
  %436 = load ptr, ptr @stderr, align 8, !tbaa !5
  %437 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %436, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 519, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %438 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

439:                                              ; preds = %428
  %440 = load i64, ptr %3, align 8, !tbaa !9
  %441 = icmp ugt i64 %440, 309
  br i1 %441, label %442, label %446

442:                                              ; preds = %439
  %443 = load ptr, ptr @stderr, align 8, !tbaa !5
  %444 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %443, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 524, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %445 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #6
  br label %486

446:                                              ; preds = %439
  %447 = getelementptr inbounds i8, ptr %0, i64 62864
  %448 = call i32 @tls_record_decrypt(ptr noundef nonnull %312, ptr noundef nonnull %316, ptr noundef nonnull %447, ptr noundef nonnull %44, i64 noundef %440, ptr noundef nonnull %2, ptr noundef nonnull %4) #6
  %.not222 = icmp eq i32 %448, 1
  br i1 %.not222, label %453, label %449

449:                                              ; preds = %446
  %450 = load ptr, ptr @stderr, align 8, !tbaa !5
  %451 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %450, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 531, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %452 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #6
  br label %486

453:                                              ; preds = %446
  %454 = call i32 @tls_seq_num_incr(ptr noundef nonnull %447) #6
  %455 = call i32 @tls_record_get_handshake_finished(ptr noundef nonnull %2, ptr noundef nonnull %26, ptr noundef nonnull %27) #6
  %.not223 = icmp eq i32 %455, 1
  br i1 %.not223, label %460, label %456

456:                                              ; preds = %453
  %457 = load ptr, ptr @stderr, align 8, !tbaa !5
  %458 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %457, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 538, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %459 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

460:                                              ; preds = %453
  %461 = load i64, ptr %27, align 8, !tbaa !9
  %.not224 = icmp eq i64 %461, 12
  br i1 %.not224, label %466, label %462

462:                                              ; preds = %460
  %463 = load ptr, ptr @stderr, align 8, !tbaa !5
  %464 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %463, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 543, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %465 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #6
  br label %486

466:                                              ; preds = %460
  call void @sm3_finish(ptr noundef nonnull %23, ptr noundef nonnull %25) #6
  %467 = call i32 @tls_prf(ptr noundef nonnull %301, i64 noundef 48, ptr noundef nonnull @.str.8, ptr noundef nonnull %25, i64 noundef 32, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef nonnull %28) #6
  %.not225 = icmp eq i32 %467, 1
  br i1 %.not225, label %472, label %468

468:                                              ; preds = %466
  %469 = load ptr, ptr @stderr, align 8, !tbaa !5
  %470 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %469, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 550, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %471 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #6
  br label %486

472:                                              ; preds = %466
  %473 = load ptr, ptr %26, align 8, !tbaa !5
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(12) %473, ptr noundef nonnull dereferenceable(12) %28, i64 12)
  %.not226 = icmp eq i32 %bcmp, 0
  br i1 %.not226, label %478, label %474

474:                                              ; preds = %472
  %475 = load ptr, ptr @stderr, align 8, !tbaa !5
  %476 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %475, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 555, ptr noundef nonnull @__FUNCTION__.tlcp_do_connect) #7
  %477 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 51) #6
  br label %486

478:                                              ; preds = %472
  %479 = getelementptr inbounds i8, ptr %0, i64 63168
  %480 = load i32, ptr %479, align 8, !tbaa !27
  %.not227 = icmp eq i32 %480, 0
  br i1 %.not227, label %481, label %484

481:                                              ; preds = %478
  %482 = load ptr, ptr @stderr, align 8, !tbaa !5
  %483 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %482, ptr noundef nonnull @.str.9) #7
  br label %484

484:                                              ; preds = %481, %478
  store i32 257, ptr %0, align 8, !tbaa !28
  %485 = load i32, ptr %8, align 4, !tbaa !21
  store i32 %485, ptr %114, align 8, !tbaa !22
  br label %486

486:                                              ; preds = %.thread235, %.thread, %484, %474, %468, %462, %456, %449, %442, %435, %421, %415, %402, %393, %382, %375, %367, %330, %322, %306, %292, %284, %272, %229, %213, %205, %187, %167, %161, %147, %134, %126, %104, %98, %91, %85, %79, %66, %57, %49
  %.0156 = phi i32 [ -1, %49 ], [ -1, %57 ], [ -1, %66 ], [ -1, %79 ], [ -1, %85 ], [ -1, %91 ], [ -1, %98 ], [ -1, %104 ], [ -1, %126 ], [ -1, %134 ], [ -1, %147 ], [ -1, %161 ], [ -1, %167 ], [ -1, %187 ], [ -1, %205 ], [ -1, %213 ], [ -1, %229 ], [ -1, %272 ], [ -1, %284 ], [ -1, %292 ], [ -1, %306 ], [ -1, %322 ], [ -1, %330 ], [ -1, %367 ], [ -1, %375 ], [ -1, %382 ], [ -1, %393 ], [ -1, %402 ], [ -1, %415 ], [ -1, %421 ], [ -1, %435 ], [ -1, %442 ], [ -1, %449 ], [ -1, %456 ], [ -1, %462 ], [ -1, %468 ], [ -1, %474 ], [ 1, %484 ], [ -1, %.thread ], [ -1, %.thread235 ]
  call void @gmssl_secure_clear(ptr noundef nonnull %17, i64 noundef 3976) #6
  call void @gmssl_secure_clear(ptr noundef nonnull %20, i64 noundef 48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 366, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 3976, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 1888, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 309, ptr nonnull %2) #6
  ret i32 %.0156
}

declare i32 @tls_record_set_protocol(ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @sm3_init(ptr noundef) local_unnamed_addr #3

declare i32 @tls_random_generate(ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_set_handshake_client_hello(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_record_send(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #3

declare void @sm3_update(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_record_recv(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @tls_send_alert(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @tls_record_get_handshake_server_hello(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_cipher_suite_in_list(i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @tls_record_get_handshake_certificate(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @x509_certs_verify_tlcp(ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @x509_certs_get_cert_by_index(ptr noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @x509_cert_get_subject_public_key(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare void @tls_uint24_to_bytes(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @sm2_verify_init(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @sm2_verify_update(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @sm2_verify_finish(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_record_get_handshake_certificate_request(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_cert_types_accepted(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_authorities_issued_certificate(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_record_get_handshake_server_hello_done(ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_set_handshake_certificate(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_pre_master_secret_generate(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @tls_prf(ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare void @sm3_hmac_init(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @sm4_set_encrypt_key(ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @sm4_set_decrypt_key(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @sm2_encrypt(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_set_handshake_client_key_exchange_pke(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @sm3_finish(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @sm2_sign_init(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @sm2_sign_update(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @sm2_sign_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_set_handshake_certificate_verify(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_record_set_change_cipher_spec(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_set_handshake_finished(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @tls_record_encrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_seq_num_incr(ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_get_change_cipher_spec(ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_decrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @tls_record_get_handshake_finished(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nofree nounwind willreturn memory(argmem: read) }
attributes #6 = { nounwind }
attributes #7 = { cold nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !13, i64 272}
!12 = !{!"", !13, i64 0, !13, i64 4, !7, i64 8, !10, i64 264, !13, i64 272, !7, i64 276, !10, i64 18720, !7, i64 18728, !7, i64 37165, !6, i64 55608, !10, i64 55616, !13, i64 55624, !7, i64 55628, !10, i64 55664, !7, i64 55672, !10, i64 57720, !7, i64 57728, !10, i64 59776, !7, i64 59784, !10, i64 61832, !14, i64 61840, !14, i64 61968, !13, i64 62096, !7, i64 62100, !7, i64 62148, !16, i64 62248, !16, i64 62424, !18, i64 62600, !18, i64 62728, !7, i64 62856, !7, i64 62864, !7, i64 62872, !7, i64 62884, !19, i64 62896, !19, i64 63032, !13, i64 63168}
!13 = !{!"int", !7, i64 0}
!14 = !{!"", !15, i64 0, !7, i64 96}
!15 = !{!"", !7, i64 0, !7, i64 32, !7, i64 64}
!16 = !{!"", !17, i64 0, !7, i64 112}
!17 = !{!"", !7, i64 0, !10, i64 32, !7, i64 40, !10, i64 104}
!18 = !{!"", !7, i64 0}
!19 = !{!"BLOCK_CIPHER_KEY", !7, i64 0, !6, i64 128}
!20 = !{!7, !7, i64 0}
!21 = !{!13, !13, i64 0}
!22 = !{!12, !13, i64 55624}
!23 = !{!12, !10, i64 61832}
!24 = !{!12, !10, i64 57720}
!25 = !{!12, !10, i64 59776}
!26 = !{i64 0, i64 32, !20, i64 32, i64 8, !9, i64 40, i64 64, !20, i64 104, i64 8, !9}
!27 = !{!12, !13, i64 63168}
!28 = !{!12, !13, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass