; LLVM IR from tleonhardt/practical_cryptography_engineering :: mbedtls (x509_crt)

; 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.mbedtls_x509_crt = type { %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, i32, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_named_data, %struct.mbedtls_asn1_named_data, %struct.mbedtls_x509_time, %struct.mbedtls_x509_time, %struct.mbedtls_pk_context, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_sequence, i32, i32, i32, i32, %struct.mbedtls_asn1_sequence, i8, %struct.mbedtls_asn1_buf, i32, i32, ptr, ptr }
%struct.mbedtls_asn1_named_data = type { %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, ptr, i8 }
%struct.mbedtls_x509_time = type { i32, i32, i32, i32, i32, i32 }
%struct.mbedtls_pk_context = type { ptr, ptr }
%struct.mbedtls_asn1_sequence = type { %struct.mbedtls_asn1_buf, ptr }
%struct.mbedtls_asn1_buf = type { i32, i64, ptr }

@.str.3 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mbedtls_x509_crt_info(ptr noundef %0, i64 noundef %1, ptr noundef %2, ptr noundef %3) #2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca [18 x i8], align 16
  %14 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i64 %1, ptr %7, align 8, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 18, ptr %13) #4
  %15 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %15, ptr %12, align 8, !tbaa !5
  %16 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %16, ptr %11, align 8, !tbaa !9
  %17 = load ptr, ptr %9, align 8, !tbaa !5
  %18 = icmp eq ptr null, %17
  br i1 %18, label %19, label %47

19:                                               ; preds = %4
  %20 = load ptr, ptr %12, align 8, !tbaa !5
  %21 = load i64, ptr %11, align 8, !tbaa !9
  %22 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %20, i64 noundef %21, ptr noundef @.str.3) #4
  store i32 %22, ptr %10, align 4, !tbaa !11
  br label %23

23:                                               ; preds = %19
  %24 = load i32, ptr %10, align 4, !tbaa !11
  %25 = icmp slt i32 %24, 0
  br i1 %25, label %31, label %26

26:                                               ; preds = %23
  %27 = load i32, ptr %10, align 4, !tbaa !11
  %28 = sext i32 %27 to i64
  %29 = load i64, ptr %11, align 8, !tbaa !9
  %30 = icmp uge i64 %28, %29
  br i1 %30, label %31, label %32

31:                                               ; preds = %26, %23
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

32:                                               ; preds = %26
  %33 = load i32, ptr %10, align 4, !tbaa !11
  %34 = sext i32 %33 to i64
  %35 = load i64, ptr %11, align 8, !tbaa !9
  %36 = sub i64 %35, %34
  store i64 %36, ptr %11, align 8, !tbaa !9
  %37 = load i32, ptr %10, align 4, !tbaa !11
  %38 = sext i32 %37 to i64
  %39 = load ptr, ptr %12, align 8, !tbaa !5
  %40 = getelementptr inbounds i8, ptr %39, i64 %38
  store ptr %40, ptr %12, align 8, !tbaa !5
  br label %41

41:                                               ; preds = %32
  br label %42

42:                                               ; preds = %41
  %43 = load i64, ptr %7, align 8, !tbaa !9
  %44 = load i64, ptr %11, align 8, !tbaa !9
  %45 = sub i64 %43, %44
  %46 = trunc i64 %45 to i32
  store i32 %46, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

47:                                               ; preds = %4
  %48 = load ptr, ptr %12, align 8, !tbaa !5
  %49 = load i64, ptr %11, align 8, !tbaa !9
  %50 = load ptr, ptr %8, align 8, !tbaa !5
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %51, i32 0, i32 2
  %53 = load i32, ptr %52, align 8, !tbaa !13
  %54 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %48, i64 noundef %49, ptr noundef @.str.4, ptr noundef %50, i32 noundef %53) #4
  store i32 %54, ptr %10, align 4, !tbaa !11
  br label %55

55:                                               ; preds = %47
  %56 = load i32, ptr %10, align 4, !tbaa !11
  %57 = icmp slt i32 %56, 0
  br i1 %57, label %63, label %58

58:                                               ; preds = %55
  %59 = load i32, ptr %10, align 4, !tbaa !11
  %60 = sext i32 %59 to i64
  %61 = load i64, ptr %11, align 8, !tbaa !9
  %62 = icmp uge i64 %60, %61
  br i1 %62, label %63, label %64

63:                                               ; preds = %58, %55
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

64:                                               ; preds = %58
  %65 = load i32, ptr %10, align 4, !tbaa !11
  %66 = sext i32 %65 to i64
  %67 = load i64, ptr %11, align 8, !tbaa !9
  %68 = sub i64 %67, %66
  store i64 %68, ptr %11, align 8, !tbaa !9
  %69 = load i32, ptr %10, align 4, !tbaa !11
  %70 = sext i32 %69 to i64
  %71 = load ptr, ptr %12, align 8, !tbaa !5
  %72 = getelementptr inbounds i8, ptr %71, i64 %70
  store ptr %72, ptr %12, align 8, !tbaa !5
  br label %73

73:                                               ; preds = %64
  br label %74

74:                                               ; preds = %73
  %75 = load ptr, ptr %12, align 8, !tbaa !5
  %76 = load i64, ptr %11, align 8, !tbaa !9
  %77 = load ptr, ptr %8, align 8, !tbaa !5
  %78 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %75, i64 noundef %76, ptr noundef @.str.5, ptr noundef %77) #4
  store i32 %78, ptr %10, align 4, !tbaa !11
  br label %79

79:                                               ; preds = %74
  %80 = load i32, ptr %10, align 4, !tbaa !11
  %81 = icmp slt i32 %80, 0
  br i1 %81, label %87, label %82

82:                                               ; preds = %79
  %83 = load i32, ptr %10, align 4, !tbaa !11
  %84 = sext i32 %83 to i64
  %85 = load i64, ptr %11, align 8, !tbaa !9
  %86 = icmp uge i64 %84, %85
  br i1 %86, label %87, label %88

87:                                               ; preds = %82, %79
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

88:                                               ; preds = %82
  %89 = load i32, ptr %10, align 4, !tbaa !11
  %90 = sext i32 %89 to i64
  %91 = load i64, ptr %11, align 8, !tbaa !9
  %92 = sub i64 %91, %90
  store i64 %92, ptr %11, align 8, !tbaa !9
  %93 = load i32, ptr %10, align 4, !tbaa !11
  %94 = sext i32 %93 to i64
  %95 = load ptr, ptr %12, align 8, !tbaa !5
  %96 = getelementptr inbounds i8, ptr %95, i64 %94
  store ptr %96, ptr %12, align 8, !tbaa !5
  br label %97

97:                                               ; preds = %88
  br label %98

98:                                               ; preds = %97
  %99 = load ptr, ptr %12, align 8, !tbaa !5
  %100 = load i64, ptr %11, align 8, !tbaa !9
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %101, i32 0, i32 3
  %103 = call i32 @mbedtls_x509_serial_gets(ptr noundef %99, i64 noundef %100, ptr noundef %102)
  store i32 %103, ptr %10, align 4, !tbaa !11
  br label %104

104:                                              ; preds = %98
  %105 = load i32, ptr %10, align 4, !tbaa !11
  %106 = icmp slt i32 %105, 0
  br i1 %106, label %112, label %107

107:                                              ; preds = %104
  %108 = load i32, ptr %10, align 4, !tbaa !11
  %109 = sext i32 %108 to i64
  %110 = load i64, ptr %11, align 8, !tbaa !9
  %111 = icmp uge i64 %109, %110
  br i1 %111, label %112, label %113

112:                                              ; preds = %107, %104
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

113:                                              ; preds = %107
  %114 = load i32, ptr %10, align 4, !tbaa !11
  %115 = sext i32 %114 to i64
  %116 = load i64, ptr %11, align 8, !tbaa !9
  %117 = sub i64 %116, %115
  store i64 %117, ptr %11, align 8, !tbaa !9
  %118 = load i32, ptr %10, align 4, !tbaa !11
  %119 = sext i32 %118 to i64
  %120 = load ptr, ptr %12, align 8, !tbaa !5
  %121 = getelementptr inbounds i8, ptr %120, i64 %119
  store ptr %121, ptr %12, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %113
  br label %123

123:                                              ; preds = %122
  %124 = load ptr, ptr %12, align 8, !tbaa !5
  %125 = load i64, ptr %11, align 8, !tbaa !9
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %124, i64 noundef %125, ptr noundef @.str.6, ptr noundef %126) #4
  store i32 %127, ptr %10, align 4, !tbaa !11
  br label %128

128:                                              ; preds = %123
  %129 = load i32, ptr %10, align 4, !tbaa !11
  %130 = icmp slt i32 %129, 0
  br i1 %130, label %136, label %131

131:                                              ; preds = %128
  %132 = load i32, ptr %10, align 4, !tbaa !11
  %133 = sext i32 %132 to i64
  %134 = load i64, ptr %11, align 8, !tbaa !9
  %135 = icmp uge i64 %133, %134
  br i1 %135, label %136, label %137

136:                                              ; preds = %131, %128
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

137:                                              ; preds = %131
  %138 = load i32, ptr %10, align 4, !tbaa !11
  %139 = sext i32 %138 to i64
  %140 = load i64, ptr %11, align 8, !tbaa !9
  %141 = sub i64 %140, %139
  store i64 %141, ptr %11, align 8, !tbaa !9
  %142 = load i32, ptr %10, align 4, !tbaa !11
  %143 = sext i32 %142 to i64
  %144 = load ptr, ptr %12, align 8, !tbaa !5
  %145 = getelementptr inbounds i8, ptr %144, i64 %143
  store ptr %145, ptr %12, align 8, !tbaa !5
  br label %146

146:                                              ; preds = %137
  br label %147

147:                                              ; preds = %146
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  %149 = load i64, ptr %11, align 8, !tbaa !9
  %150 = load ptr, ptr %9, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %150, i32 0, i32 7
  %152 = call i32 @mbedtls_x509_dn_gets(ptr noundef %148, i64 noundef %149, ptr noundef %151)
  store i32 %152, ptr %10, align 4, !tbaa !11
  br label %153

153:                                              ; preds = %147
  %154 = load i32, ptr %10, align 4, !tbaa !11
  %155 = icmp slt i32 %154, 0
  br i1 %155, label %161, label %156

156:                                              ; preds = %153
  %157 = load i32, ptr %10, align 4, !tbaa !11
  %158 = sext i32 %157 to i64
  %159 = load i64, ptr %11, align 8, !tbaa !9
  %160 = icmp uge i64 %158, %159
  br i1 %160, label %161, label %162

161:                                              ; preds = %156, %153
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

162:                                              ; preds = %156
  %163 = load i32, ptr %10, align 4, !tbaa !11
  %164 = sext i32 %163 to i64
  %165 = load i64, ptr %11, align 8, !tbaa !9
  %166 = sub i64 %165, %164
  store i64 %166, ptr %11, align 8, !tbaa !9
  %167 = load i32, ptr %10, align 4, !tbaa !11
  %168 = sext i32 %167 to i64
  %169 = load ptr, ptr %12, align 8, !tbaa !5
  %170 = getelementptr inbounds i8, ptr %169, i64 %168
  store ptr %170, ptr %12, align 8, !tbaa !5
  br label %171

171:                                              ; preds = %162
  br label %172

172:                                              ; preds = %171
  %173 = load ptr, ptr %12, align 8, !tbaa !5
  %174 = load i64, ptr %11, align 8, !tbaa !9
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %173, i64 noundef %174, ptr noundef @.str.7, ptr noundef %175) #4
  store i32 %176, ptr %10, align 4, !tbaa !11
  br label %177

177:                                              ; preds = %172
  %178 = load i32, ptr %10, align 4, !tbaa !11
  %179 = icmp slt i32 %178, 0
  br i1 %179, label %185, label %180

180:                                              ; preds = %177
  %181 = load i32, ptr %10, align 4, !tbaa !11
  %182 = sext i32 %181 to i64
  %183 = load i64, ptr %11, align 8, !tbaa !9
  %184 = icmp uge i64 %182, %183
  br i1 %184, label %185, label %186

185:                                              ; preds = %180, %177
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

186:                                              ; preds = %180
  %187 = load i32, ptr %10, align 4, !tbaa !11
  %188 = sext i32 %187 to i64
  %189 = load i64, ptr %11, align 8, !tbaa !9
  %190 = sub i64 %189, %188
  store i64 %190, ptr %11, align 8, !tbaa !9
  %191 = load i32, ptr %10, align 4, !tbaa !11
  %192 = sext i32 %191 to i64
  %193 = load ptr, ptr %12, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i64 %192
  store ptr %194, ptr %12, align 8, !tbaa !5
  br label %195

195:                                              ; preds = %186
  br label %196

196:                                              ; preds = %195
  %197 = load ptr, ptr %12, align 8, !tbaa !5
  %198 = load i64, ptr %11, align 8, !tbaa !9
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %199, i32 0, i32 8
  %201 = call i32 @mbedtls_x509_dn_gets(ptr noundef %197, i64 noundef %198, ptr noundef %200)
  store i32 %201, ptr %10, align 4, !tbaa !11
  br label %202

202:                                              ; preds = %196
  %203 = load i32, ptr %10, align 4, !tbaa !11
  %204 = icmp slt i32 %203, 0
  br i1 %204, label %210, label %205

205:                                              ; preds = %202
  %206 = load i32, ptr %10, align 4, !tbaa !11
  %207 = sext i32 %206 to i64
  %208 = load i64, ptr %11, align 8, !tbaa !9
  %209 = icmp uge i64 %207, %208
  br i1 %209, label %210, label %211

210:                                              ; preds = %205, %202
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

211:                                              ; preds = %205
  %212 = load i32, ptr %10, align 4, !tbaa !11
  %213 = sext i32 %212 to i64
  %214 = load i64, ptr %11, align 8, !tbaa !9
  %215 = sub i64 %214, %213
  store i64 %215, ptr %11, align 8, !tbaa !9
  %216 = load i32, ptr %10, align 4, !tbaa !11
  %217 = sext i32 %216 to i64
  %218 = load ptr, ptr %12, align 8, !tbaa !5
  %219 = getelementptr inbounds i8, ptr %218, i64 %217
  store ptr %219, ptr %12, align 8, !tbaa !5
  br label %220

220:                                              ; preds = %211
  br label %221

221:                                              ; preds = %220
  %222 = load ptr, ptr %12, align 8, !tbaa !5
  %223 = load i64, ptr %11, align 8, !tbaa !9
  %224 = load ptr, ptr %8, align 8, !tbaa !5
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %225, i32 0, i32 9
  %227 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %226, i32 0, i32 0
  %228 = load i32, ptr %227, align 8, !tbaa !20
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %229, i32 0, i32 9
  %231 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %230, i32 0, i32 1
  %232 = load i32, ptr %231, align 4, !tbaa !21
  %233 = load ptr, ptr %9, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %233, i32 0, i32 9
  %235 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %234, i32 0, i32 2
  %236 = load i32, ptr %235, align 8, !tbaa !22
  %237 = load ptr, ptr %9, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %237, i32 0, i32 9
  %239 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %238, i32 0, i32 3
  %240 = load i32, ptr %239, align 4, !tbaa !23
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %241, i32 0, i32 9
  %243 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %242, i32 0, i32 4
  %244 = load i32, ptr %243, align 8, !tbaa !24
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %245, i32 0, i32 9
  %247 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %246, i32 0, i32 5
  %248 = load i32, ptr %247, align 4, !tbaa !25
  %249 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %222, i64 noundef %223, ptr noundef @.str.8, ptr noundef %224, i32 noundef %228, i32 noundef %232, i32 noundef %236, i32 noundef %240, i32 noundef %244, i32 noundef %248) #4
  store i32 %249, ptr %10, align 4, !tbaa !11
  br label %250

250:                                              ; preds = %221
  %251 = load i32, ptr %10, align 4, !tbaa !11
  %252 = icmp slt i32 %251, 0
  br i1 %252, label %258, label %253

253:                                              ; preds = %250
  %254 = load i32, ptr %10, align 4, !tbaa !11
  %255 = sext i32 %254 to i64
  %256 = load i64, ptr %11, align 8, !tbaa !9
  %257 = icmp uge i64 %255, %256
  br i1 %257, label %258, label %259

258:                                              ; preds = %253, %250
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

259:                                              ; preds = %253
  %260 = load i32, ptr %10, align 4, !tbaa !11
  %261 = sext i32 %260 to i64
  %262 = load i64, ptr %11, align 8, !tbaa !9
  %263 = sub i64 %262, %261
  store i64 %263, ptr %11, align 8, !tbaa !9
  %264 = load i32, ptr %10, align 4, !tbaa !11
  %265 = sext i32 %264 to i64
  %266 = load ptr, ptr %12, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 %265
  store ptr %267, ptr %12, align 8, !tbaa !5
  br label %268

268:                                              ; preds = %259
  br label %269

269:                                              ; preds = %268
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = load i64, ptr %11, align 8, !tbaa !9
  %272 = load ptr, ptr %8, align 8, !tbaa !5
  %273 = load ptr, ptr %9, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %273, i32 0, i32 10
  %275 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %274, i32 0, i32 0
  %276 = load i32, ptr %275, align 8, !tbaa !26
  %277 = load ptr, ptr %9, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %277, i32 0, i32 10
  %279 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %278, i32 0, i32 1
  %280 = load i32, ptr %279, align 4, !tbaa !27
  %281 = load ptr, ptr %9, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %281, i32 0, i32 10
  %283 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %282, i32 0, i32 2
  %284 = load i32, ptr %283, align 8, !tbaa !28
  %285 = load ptr, ptr %9, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %285, i32 0, i32 10
  %287 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %286, i32 0, i32 3
  %288 = load i32, ptr %287, align 4, !tbaa !29
  %289 = load ptr, ptr %9, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %289, i32 0, i32 10
  %291 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %290, i32 0, i32 4
  %292 = load i32, ptr %291, align 8, !tbaa !30
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %293, i32 0, i32 10
  %295 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %294, i32 0, i32 5
  %296 = load i32, ptr %295, align 4, !tbaa !31
  %297 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %270, i64 noundef %271, ptr noundef @.str.9, ptr noundef %272, i32 noundef %276, i32 noundef %280, i32 noundef %284, i32 noundef %288, i32 noundef %292, i32 noundef %296) #4
  store i32 %297, ptr %10, align 4, !tbaa !11
  br label %298

298:                                              ; preds = %269
  %299 = load i32, ptr %10, align 4, !tbaa !11
  %300 = icmp slt i32 %299, 0
  br i1 %300, label %306, label %301

301:                                              ; preds = %298
  %302 = load i32, ptr %10, align 4, !tbaa !11
  %303 = sext i32 %302 to i64
  %304 = load i64, ptr %11, align 8, !tbaa !9
  %305 = icmp uge i64 %303, %304
  br i1 %305, label %306, label %307

306:                                              ; preds = %301, %298
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

307:                                              ; preds = %301
  %308 = load i32, ptr %10, align 4, !tbaa !11
  %309 = sext i32 %308 to i64
  %310 = load i64, ptr %11, align 8, !tbaa !9
  %311 = sub i64 %310, %309
  store i64 %311, ptr %11, align 8, !tbaa !9
  %312 = load i32, ptr %10, align 4, !tbaa !11
  %313 = sext i32 %312 to i64
  %314 = load ptr, ptr %12, align 8, !tbaa !5
  %315 = getelementptr inbounds i8, ptr %314, i64 %313
  store ptr %315, ptr %12, align 8, !tbaa !5
  br label %316

316:                                              ; preds = %307
  br label %317

317:                                              ; preds = %316
  %318 = load ptr, ptr %12, align 8, !tbaa !5
  %319 = load i64, ptr %11, align 8, !tbaa !9
  %320 = load ptr, ptr %8, align 8, !tbaa !5
  %321 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %318, i64 noundef %319, ptr noundef @.str.10, ptr noundef %320) #4
  store i32 %321, ptr %10, align 4, !tbaa !11
  br label %322

322:                                              ; preds = %317
  %323 = load i32, ptr %10, align 4, !tbaa !11
  %324 = icmp slt i32 %323, 0
  br i1 %324, label %330, label %325

325:                                              ; preds = %322
  %326 = load i32, ptr %10, align 4, !tbaa !11
  %327 = sext i32 %326 to i64
  %328 = load i64, ptr %11, align 8, !tbaa !9
  %329 = icmp uge i64 %327, %328
  br i1 %329, label %330, label %331

330:                                              ; preds = %325, %322
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

331:                                              ; preds = %325
  %332 = load i32, ptr %10, align 4, !tbaa !11
  %333 = sext i32 %332 to i64
  %334 = load i64, ptr %11, align 8, !tbaa !9
  %335 = sub i64 %334, %333
  store i64 %335, ptr %11, align 8, !tbaa !9
  %336 = load i32, ptr %10, align 4, !tbaa !11
  %337 = sext i32 %336 to i64
  %338 = load ptr, ptr %12, align 8, !tbaa !5
  %339 = getelementptr inbounds i8, ptr %338, i64 %337
  store ptr %339, ptr %12, align 8, !tbaa !5
  br label %340

340:                                              ; preds = %331
  br label %341

341:                                              ; preds = %340
  %342 = load ptr, ptr %12, align 8, !tbaa !5
  %343 = load i64, ptr %11, align 8, !tbaa !9
  %344 = load ptr, ptr %9, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %344, i32 0, i32 4
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %346, i32 0, i32 24
  %348 = load i32, ptr %347, align 4, !tbaa !32
  %349 = load ptr, ptr %9, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %349, i32 0, i32 23
  %351 = load i32, ptr %350, align 8, !tbaa !33
  %352 = load ptr, ptr %9, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %352, i32 0, i32 25
  %354 = load ptr, ptr %353, align 8, !tbaa !34
  %355 = call i32 @mbedtls_x509_sig_alg_gets(ptr noundef %342, i64 noundef %343, ptr noundef %345, i32 noundef %348, i32 noundef %351, ptr noundef %354)
  store i32 %355, ptr %10, align 4, !tbaa !11
  br label %356

356:                                              ; preds = %341
  %357 = load i32, ptr %10, align 4, !tbaa !11
  %358 = icmp slt i32 %357, 0
  br i1 %358, label %364, label %359

359:                                              ; preds = %356
  %360 = load i32, ptr %10, align 4, !tbaa !11
  %361 = sext i32 %360 to i64
  %362 = load i64, ptr %11, align 8, !tbaa !9
  %363 = icmp uge i64 %361, %362
  br i1 %363, label %364, label %365

364:                                              ; preds = %359, %356
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

365:                                              ; preds = %359
  %366 = load i32, ptr %10, align 4, !tbaa !11
  %367 = sext i32 %366 to i64
  %368 = load i64, ptr %11, align 8, !tbaa !9
  %369 = sub i64 %368, %367
  store i64 %369, ptr %11, align 8, !tbaa !9
  %370 = load i32, ptr %10, align 4, !tbaa !11
  %371 = sext i32 %370 to i64
  %372 = load ptr, ptr %12, align 8, !tbaa !5
  %373 = getelementptr inbounds i8, ptr %372, i64 %371
  store ptr %373, ptr %12, align 8, !tbaa !5
  br label %374

374:                                              ; preds = %365
  br label %375

375:                                              ; preds = %374
  %376 = getelementptr inbounds [18 x i8], ptr %13, i64 0, i64 0
  %377 = load ptr, ptr %9, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %377, i32 0, i32 11
  %379 = call ptr @mbedtls_pk_get_name(ptr noundef %378)
  %380 = call i32 @mbedtls_x509_key_size_helper(ptr noundef %376, i64 noundef 18, ptr noundef %379)
  store i32 %380, ptr %10, align 4, !tbaa !11
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %382, label %384

382:                                              ; preds = %375
  %383 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %383, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

384:                                              ; preds = %375
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = load i64, ptr %11, align 8, !tbaa !9
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = getelementptr inbounds [18 x i8], ptr %13, i64 0, i64 0
  %389 = load ptr, ptr %9, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %389, i32 0, i32 11
  %391 = call i64 @mbedtls_pk_get_bitlen(ptr noundef %390)
  %392 = trunc i64 %391 to i32
  %393 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %385, i64 noundef %386, ptr noundef @.str.11, ptr noundef %387, ptr noundef %388, i32 noundef %392) #4
  store i32 %393, ptr %10, align 4, !tbaa !11
  br label %394

394:                                              ; preds = %384
  %395 = load i32, ptr %10, align 4, !tbaa !11
  %396 = icmp slt i32 %395, 0
  br i1 %396, label %402, label %397

397:                                              ; preds = %394
  %398 = load i32, ptr %10, align 4, !tbaa !11
  %399 = sext i32 %398 to i64
  %400 = load i64, ptr %11, align 8, !tbaa !9
  %401 = icmp uge i64 %399, %400
  br i1 %401, label %402, label %403

402:                                              ; preds = %397, %394
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

403:                                              ; preds = %397
  %404 = load i32, ptr %10, align 4, !tbaa !11
  %405 = sext i32 %404 to i64
  %406 = load i64, ptr %11, align 8, !tbaa !9
  %407 = sub i64 %406, %405
  store i64 %407, ptr %11, align 8, !tbaa !9
  %408 = load i32, ptr %10, align 4, !tbaa !11
  %409 = sext i32 %408 to i64
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  %411 = getelementptr inbounds i8, ptr %410, i64 %409
  store ptr %411, ptr %12, align 8, !tbaa !5
  br label %412

412:                                              ; preds = %403
  br label %413

413:                                              ; preds = %412
  %414 = load ptr, ptr %9, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %414, i32 0, i32 16
  %416 = load i32, ptr %415, align 8, !tbaa !35
  %417 = and i32 %416, 256
  %418 = icmp ne i32 %417, 0
  br i1 %418, label %419, label %483

419:                                              ; preds = %413
  %420 = load ptr, ptr %12, align 8, !tbaa !5
  %421 = load i64, ptr %11, align 8, !tbaa !9
  %422 = load ptr, ptr %8, align 8, !tbaa !5
  %423 = load ptr, ptr %9, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %423, i32 0, i32 17
  %425 = load i32, ptr %424, align 4, !tbaa !36
  %426 = icmp ne i32 %425, 0
  %427 = zext i1 %426 to i64
  %428 = select i1 %426, ptr @.str.13, ptr @.str.14
  %429 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %420, i64 noundef %421, ptr noundef @.str.12, ptr noundef %422, ptr noundef %428) #4
  store i32 %429, ptr %10, align 4, !tbaa !11
  br label %430

430:                                              ; preds = %419
  %431 = load i32, ptr %10, align 4, !tbaa !11
  %432 = icmp slt i32 %431, 0
  br i1 %432, label %438, label %433

433:                                              ; preds = %430
  %434 = load i32, ptr %10, align 4, !tbaa !11
  %435 = sext i32 %434 to i64
  %436 = load i64, ptr %11, align 8, !tbaa !9
  %437 = icmp uge i64 %435, %436
  br i1 %437, label %438, label %439

438:                                              ; preds = %433, %430
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

439:                                              ; preds = %433
  %440 = load i32, ptr %10, align 4, !tbaa !11
  %441 = sext i32 %440 to i64
  %442 = load i64, ptr %11, align 8, !tbaa !9
  %443 = sub i64 %442, %441
  store i64 %443, ptr %11, align 8, !tbaa !9
  %444 = load i32, ptr %10, align 4, !tbaa !11
  %445 = sext i32 %444 to i64
  %446 = load ptr, ptr %12, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i64 %445
  store ptr %447, ptr %12, align 8, !tbaa !5
  br label %448

448:                                              ; preds = %439
  br label %449

449:                                              ; preds = %448
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %450, i32 0, i32 18
  %452 = load i32, ptr %451, align 8, !tbaa !37
  %453 = icmp sgt i32 %452, 0
  br i1 %453, label %454, label %482

454:                                              ; preds = %449
  %455 = load ptr, ptr %12, align 8, !tbaa !5
  %456 = load i64, ptr %11, align 8, !tbaa !9
  %457 = load ptr, ptr %9, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %457, i32 0, i32 18
  %459 = load i32, ptr %458, align 8, !tbaa !37
  %460 = sub nsw i32 %459, 1
  %461 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %455, i64 noundef %456, ptr noundef @.str.15, i32 noundef %460) #4
  store i32 %461, ptr %10, align 4, !tbaa !11
  br label %462

462:                                              ; preds = %454
  %463 = load i32, ptr %10, align 4, !tbaa !11
  %464 = icmp slt i32 %463, 0
  br i1 %464, label %470, label %465

465:                                              ; preds = %462
  %466 = load i32, ptr %10, align 4, !tbaa !11
  %467 = sext i32 %466 to i64
  %468 = load i64, ptr %11, align 8, !tbaa !9
  %469 = icmp uge i64 %467, %468
  br i1 %469, label %470, label %471

470:                                              ; preds = %465, %462
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

471:                                              ; preds = %465
  %472 = load i32, ptr %10, align 4, !tbaa !11
  %473 = sext i32 %472 to i64
  %474 = load i64, ptr %11, align 8, !tbaa !9
  %475 = sub i64 %474, %473
  store i64 %475, ptr %11, align 8, !tbaa !9
  %476 = load i32, ptr %10, align 4, !tbaa !11
  %477 = sext i32 %476 to i64
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = getelementptr inbounds i8, ptr %478, i64 %477
  store ptr %479, ptr %12, align 8, !tbaa !5
  br label %480

480:                                              ; preds = %471
  br label %481

481:                                              ; preds = %480
  br label %482

482:                                              ; preds = %481, %449
  br label %483

483:                                              ; preds = %482, %413
  %484 = load ptr, ptr %9, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %484, i32 0, i32 16
  %486 = load i32, ptr %485, align 8, !tbaa !35
  %487 = and i32 %486, 32
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %489, label %521

489:                                              ; preds = %483
  %490 = load ptr, ptr %12, align 8, !tbaa !5
  %491 = load i64, ptr %11, align 8, !tbaa !9
  %492 = load ptr, ptr %8, align 8, !tbaa !5
  %493 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %490, i64 noundef %491, ptr noundef @.str.16, ptr noundef %492) #4
  store i32 %493, ptr %10, align 4, !tbaa !11
  br label %494

494:                                              ; preds = %489
  %495 = load i32, ptr %10, align 4, !tbaa !11
  %496 = icmp slt i32 %495, 0
  br i1 %496, label %502, label %497

497:                                              ; preds = %494
  %498 = load i32, ptr %10, align 4, !tbaa !11
  %499 = sext i32 %498 to i64
  %500 = load i64, ptr %11, align 8, !tbaa !9
  %501 = icmp uge i64 %499, %500
  br i1 %501, label %502, label %503

502:                                              ; preds = %497, %494
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

503:                                              ; preds = %497
  %504 = load i32, ptr %10, align 4, !tbaa !11
  %505 = sext i32 %504 to i64
  %506 = load i64, ptr %11, align 8, !tbaa !9
  %507 = sub i64 %506, %505
  store i64 %507, ptr %11, align 8, !tbaa !9
  %508 = load i32, ptr %10, align 4, !tbaa !11
  %509 = sext i32 %508 to i64
  %510 = load ptr, ptr %12, align 8, !tbaa !5
  %511 = getelementptr inbounds i8, ptr %510, i64 %509
  store ptr %511, ptr %12, align 8, !tbaa !5
  br label %512

512:                                              ; preds = %503
  br label %513

513:                                              ; preds = %512
  %514 = load ptr, ptr %9, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %514, i32 0, i32 15
  %516 = call i32 @x509_info_subject_alt_name(ptr noundef %12, ptr noundef %11, ptr noundef %515)
  store i32 %516, ptr %10, align 4, !tbaa !11
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %520

518:                                              ; preds = %513
  %519 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %519, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

520:                                              ; preds = %513
  br label %521

521:                                              ; preds = %520, %483
  %522 = load ptr, ptr %9, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %522, i32 0, i32 16
  %524 = load i32, ptr %523, align 8, !tbaa !35
  %525 = and i32 %524, 65536
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %527, label %560

527:                                              ; preds = %521
  %528 = load ptr, ptr %12, align 8, !tbaa !5
  %529 = load i64, ptr %11, align 8, !tbaa !9
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %528, i64 noundef %529, ptr noundef @.str.17, ptr noundef %530) #4
  store i32 %531, ptr %10, align 4, !tbaa !11
  br label %532

532:                                              ; preds = %527
  %533 = load i32, ptr %10, align 4, !tbaa !11
  %534 = icmp slt i32 %533, 0
  br i1 %534, label %540, label %535

535:                                              ; preds = %532
  %536 = load i32, ptr %10, align 4, !tbaa !11
  %537 = sext i32 %536 to i64
  %538 = load i64, ptr %11, align 8, !tbaa !9
  %539 = icmp uge i64 %537, %538
  br i1 %539, label %540, label %541

540:                                              ; preds = %535, %532
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

541:                                              ; preds = %535
  %542 = load i32, ptr %10, align 4, !tbaa !11
  %543 = sext i32 %542 to i64
  %544 = load i64, ptr %11, align 8, !tbaa !9
  %545 = sub i64 %544, %543
  store i64 %545, ptr %11, align 8, !tbaa !9
  %546 = load i32, ptr %10, align 4, !tbaa !11
  %547 = sext i32 %546 to i64
  %548 = load ptr, ptr %12, align 8, !tbaa !5
  %549 = getelementptr inbounds i8, ptr %548, i64 %547
  store ptr %549, ptr %12, align 8, !tbaa !5
  br label %550

550:                                              ; preds = %541
  br label %551

551:                                              ; preds = %550
  %552 = load ptr, ptr %9, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %552, i32 0, i32 21
  %554 = load i8, ptr %553, align 8, !tbaa !38
  %555 = call i32 @x509_info_cert_type(ptr noundef %12, ptr noundef %11, i8 noundef zeroext %554)
  store i32 %555, ptr %10, align 4, !tbaa !11
  %556 = icmp ne i32 %555, 0
  br i1 %556, label %557, label %559

557:                                              ; preds = %551
  %558 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %558, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

559:                                              ; preds = %551
  br label %560

560:                                              ; preds = %559, %521
  %561 = load ptr, ptr %9, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %561, i32 0, i32 16
  %563 = load i32, ptr %562, align 8, !tbaa !35
  %564 = and i32 %563, 4
  %565 = icmp ne i32 %564, 0
  br i1 %565, label %566, label %599

566:                                              ; preds = %560
  %567 = load ptr, ptr %12, align 8, !tbaa !5
  %568 = load i64, ptr %11, align 8, !tbaa !9
  %569 = load ptr, ptr %8, align 8, !tbaa !5
  %570 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %567, i64 noundef %568, ptr noundef @.str.18, ptr noundef %569) #4
  store i32 %570, ptr %10, align 4, !tbaa !11
  br label %571

571:                                              ; preds = %566
  %572 = load i32, ptr %10, align 4, !tbaa !11
  %573 = icmp slt i32 %572, 0
  br i1 %573, label %579, label %574

574:                                              ; preds = %571
  %575 = load i32, ptr %10, align 4, !tbaa !11
  %576 = sext i32 %575 to i64
  %577 = load i64, ptr %11, align 8, !tbaa !9
  %578 = icmp uge i64 %576, %577
  br i1 %578, label %579, label %580

579:                                              ; preds = %574, %571
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

580:                                              ; preds = %574
  %581 = load i32, ptr %10, align 4, !tbaa !11
  %582 = sext i32 %581 to i64
  %583 = load i64, ptr %11, align 8, !tbaa !9
  %584 = sub i64 %583, %582
  store i64 %584, ptr %11, align 8, !tbaa !9
  %585 = load i32, ptr %10, align 4, !tbaa !11
  %586 = sext i32 %585 to i64
  %587 = load ptr, ptr %12, align 8, !tbaa !5
  %588 = getelementptr inbounds i8, ptr %587, i64 %586
  store ptr %588, ptr %12, align 8, !tbaa !5
  br label %589

589:                                              ; preds = %580
  br label %590

590:                                              ; preds = %589
  %591 = load ptr, ptr %9, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %591, i32 0, i32 19
  %593 = load i32, ptr %592, align 4, !tbaa !39
  %594 = call i32 @x509_info_key_usage(ptr noundef %12, ptr noundef %11, i32 noundef %593)
  store i32 %594, ptr %10, align 4, !tbaa !11
  %595 = icmp ne i32 %594, 0
  br i1 %595, label %596, label %598

596:                                              ; preds = %590
  %597 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %597, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

598:                                              ; preds = %590
  br label %599

599:                                              ; preds = %598, %560
  %600 = load ptr, ptr %9, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %600, i32 0, i32 16
  %602 = load i32, ptr %601, align 8, !tbaa !35
  %603 = and i32 %602, 2048
  %604 = icmp ne i32 %603, 0
  br i1 %604, label %605, label %637

605:                                              ; preds = %599
  %606 = load ptr, ptr %12, align 8, !tbaa !5
  %607 = load i64, ptr %11, align 8, !tbaa !9
  %608 = load ptr, ptr %8, align 8, !tbaa !5
  %609 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %606, i64 noundef %607, ptr noundef @.str.19, ptr noundef %608) #4
  store i32 %609, ptr %10, align 4, !tbaa !11
  br label %610

610:                                              ; preds = %605
  %611 = load i32, ptr %10, align 4, !tbaa !11
  %612 = icmp slt i32 %611, 0
  br i1 %612, label %618, label %613

613:                                              ; preds = %610
  %614 = load i32, ptr %10, align 4, !tbaa !11
  %615 = sext i32 %614 to i64
  %616 = load i64, ptr %11, align 8, !tbaa !9
  %617 = icmp uge i64 %615, %616
  br i1 %617, label %618, label %619

618:                                              ; preds = %613, %610
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

619:                                              ; preds = %613
  %620 = load i32, ptr %10, align 4, !tbaa !11
  %621 = sext i32 %620 to i64
  %622 = load i64, ptr %11, align 8, !tbaa !9
  %623 = sub i64 %622, %621
  store i64 %623, ptr %11, align 8, !tbaa !9
  %624 = load i32, ptr %10, align 4, !tbaa !11
  %625 = sext i32 %624 to i64
  %626 = load ptr, ptr %12, align 8, !tbaa !5
  %627 = getelementptr inbounds i8, ptr %626, i64 %625
  store ptr %627, ptr %12, align 8, !tbaa !5
  br label %628

628:                                              ; preds = %619
  br label %629

629:                                              ; preds = %628
  %630 = load ptr, ptr %9, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.mbedtls_x509_crt, ptr %630, i32 0, i32 20
  %632 = call i32 @x509_info_ext_key_usage(ptr noundef %12, ptr noundef %11, ptr noundef %631)
  store i32 %632, ptr %10, align 4, !tbaa !11
  %633 = icmp ne i32 %632, 0
  br i1 %633, label %634, label %636

634:                                              ; preds = %629
  %635 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %635, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

636:                                              ; preds = %629
  br label %637

637:                                              ; preds = %636, %599
  %638 = load ptr, ptr %12, align 8, !tbaa !5
  %639 = load i64, ptr %11, align 8, !tbaa !9
  %640 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %638, i64 noundef %639, ptr noundef @.str.20) #4
  store i32 %640, ptr %10, align 4, !tbaa !11
  br label %641

641:                                              ; preds = %637
  %642 = load i32, ptr %10, align 4, !tbaa !11
  %643 = icmp slt i32 %642, 0
  br i1 %643, label %649, label %644

644:                                              ; preds = %641
  %645 = load i32, ptr %10, align 4, !tbaa !11
  %646 = sext i32 %645 to i64
  %647 = load i64, ptr %11, align 8, !tbaa !9
  %648 = icmp uge i64 %646, %647
  br i1 %648, label %649, label %650

649:                                              ; preds = %644, %641
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

650:                                              ; preds = %644
  %651 = load i32, ptr %10, align 4, !tbaa !11
  %652 = sext i32 %651 to i64
  %653 = load i64, ptr %11, align 8, !tbaa !9
  %654 = sub i64 %653, %652
  store i64 %654, ptr %11, align 8, !tbaa !9
  %655 = load i32, ptr %10, align 4, !tbaa !11
  %656 = sext i32 %655 to i64
  %657 = load ptr, ptr %12, align 8, !tbaa !5
  %658 = getelementptr inbounds i8, ptr %657, i64 %656
  store ptr %658, ptr %12, align 8, !tbaa !5
  br label %659

659:                                              ; preds = %650
  br label %660

660:                                              ; preds = %659
  %661 = load i64, ptr %7, align 8, !tbaa !9
  %662 = load i64, ptr %11, align 8, !tbaa !9
  %663 = sub i64 %661, %662
  %664 = trunc i64 %663 to i32
  store i32 %664, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %665

665:                                              ; preds = %660, %649, %634, %618, %596, %579, %557, %540, %518, %502, %470, %438, %402, %382, %364, %330, %306, %258, %210, %185, %161, %136, %112, %87, %63, %42, %31
  call void @llvm.lifetime.end.p0(i64 18, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %666 = load i32, ptr %5, align 4
  ret i32 %666
}

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

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

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

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

declare ptr @mbedtls_pk_get_name(ptr noundef) #3

declare i64 @mbedtls_pk_get_bitlen(ptr noundef) #3

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

; Function Attrs: nounwind uwtable
declare hidden i32 @x509_info_cert_type(ptr noundef, ptr noundef, i8 noundef zeroext) #2

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

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

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 = { 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, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 48}
!14 = !{!"mbedtls_x509_crt", !15, i64 0, !15, i64 24, !12, i64 48, !15, i64 56, !15, i64 80, !15, i64 104, !15, i64 128, !16, i64 152, !16, i64 216, !17, i64 280, !17, i64 304, !18, i64 328, !15, i64 344, !15, i64 368, !15, i64 392, !19, i64 416, !12, i64 448, !12, i64 452, !12, i64 456, !12, i64 460, !19, i64 464, !7, i64 496, !15, i64 504, !12, i64 528, !12, i64 532, !6, i64 536, !6, i64 544}
!15 = !{!"mbedtls_asn1_buf", !12, i64 0, !10, i64 8, !6, i64 16}
!16 = !{!"mbedtls_asn1_named_data", !15, i64 0, !15, i64 24, !6, i64 48, !7, i64 56}
!17 = !{!"mbedtls_x509_time", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20}
!18 = !{!"", !6, i64 0, !6, i64 8}
!19 = !{!"mbedtls_asn1_sequence", !15, i64 0, !6, i64 24}
!20 = !{!14, !12, i64 280}
!21 = !{!14, !12, i64 284}
!22 = !{!14, !12, i64 288}
!23 = !{!14, !12, i64 292}
!24 = !{!14, !12, i64 296}
!25 = !{!14, !12, i64 300}
!26 = !{!14, !12, i64 304}
!27 = !{!14, !12, i64 308}
!28 = !{!14, !12, i64 312}
!29 = !{!14, !12, i64 316}
!30 = !{!14, !12, i64 320}
!31 = !{!14, !12, i64 324}
!32 = !{!14, !12, i64 532}
!33 = !{!14, !12, i64 528}
!34 = !{!14, !6, i64 536}
!35 = !{!14, !12, i64 448}
!36 = !{!14, !12, i64 452}
!37 = !{!14, !12, i64 456}
!38 = !{!14, !7, i64 496}
!39 = !{!14, !12, i64 460}


; 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"

@.str.3 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mbedtls_x509_crt_info(ptr noundef %0, i64 noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #2 {
  %5 = alloca i64, align 8
  %6 = alloca ptr, align 8
  %7 = alloca [18 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 18, ptr nonnull %7) #4
  %8 = icmp eq ptr %3, null
  br i1 %8, label %9, label %13

9:                                                ; preds = %4
  %10 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %0, i64 noundef %1, ptr noundef nonnull @.str.3) #4
  %11 = icmp sgt i32 %10, -1
  %12 = zext nneg i32 %10 to i64
  %.not233 = icmp ult i64 %12, %1
  %or.cond = select i1 %11, i1 %.not233, i1 false
  %spec.select = select i1 %or.cond, i32 %10, i32 -10624
  br label %243

13:                                               ; preds = %4
  %14 = getelementptr inbounds i8, ptr %3, i64 48
  %15 = load i32, ptr %14, align 8, !tbaa !5
  %16 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %0, i64 noundef %1, ptr noundef nonnull @.str.4, ptr noundef %2, i32 noundef %15) #4
  %17 = icmp slt i32 %16, 0
  br i1 %17, label %243, label %18

18:                                               ; preds = %13
  %19 = zext nneg i32 %16 to i64
  %.not = icmp ult i64 %19, %1
  br i1 %.not, label %20, label %243

20:                                               ; preds = %18
  %21 = sub i64 %1, %19
  %22 = getelementptr inbounds i8, ptr %0, i64 %19
  %23 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %22, i64 noundef %21, ptr noundef nonnull @.str.5, ptr noundef %2) #4
  %24 = icmp slt i32 %23, 0
  br i1 %24, label %243, label %25

25:                                               ; preds = %20
  %26 = zext nneg i32 %23 to i64
  %.not204 = icmp ugt i64 %21, %26
  br i1 %.not204, label %27, label %243

27:                                               ; preds = %25
  %28 = sub i64 %21, %26
  %29 = getelementptr inbounds i8, ptr %22, i64 %26
  %30 = getelementptr inbounds i8, ptr %3, i64 56
  %31 = tail call i32 @mbedtls_x509_serial_gets(ptr noundef %29, i64 noundef %28, ptr noundef nonnull %30) #4
  %32 = icmp slt i32 %31, 0
  br i1 %32, label %243, label %33

33:                                               ; preds = %27
  %34 = zext nneg i32 %31 to i64
  %.not205 = icmp ugt i64 %28, %34
  br i1 %.not205, label %35, label %243

35:                                               ; preds = %33
  %36 = sub i64 %28, %34
  %37 = getelementptr inbounds i8, ptr %29, i64 %34
  %38 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %37, i64 noundef %36, ptr noundef nonnull @.str.6, ptr noundef %2) #4
  %39 = icmp slt i32 %38, 0
  br i1 %39, label %243, label %40

40:                                               ; preds = %35
  %41 = zext nneg i32 %38 to i64
  %.not206 = icmp ugt i64 %36, %41
  br i1 %.not206, label %42, label %243

42:                                               ; preds = %40
  %43 = sub i64 %36, %41
  %44 = getelementptr inbounds i8, ptr %37, i64 %41
  %45 = getelementptr inbounds i8, ptr %3, i64 152
  %46 = tail call i32 @mbedtls_x509_dn_gets(ptr noundef %44, i64 noundef %43, ptr noundef nonnull %45) #4
  %47 = icmp slt i32 %46, 0
  br i1 %47, label %243, label %48

48:                                               ; preds = %42
  %49 = zext nneg i32 %46 to i64
  %.not207 = icmp ugt i64 %43, %49
  br i1 %.not207, label %50, label %243

50:                                               ; preds = %48
  %51 = sub i64 %43, %49
  store i64 %51, ptr %5, align 8, !tbaa !17
  %52 = getelementptr inbounds i8, ptr %44, i64 %49
  %53 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %52, i64 noundef %51, ptr noundef nonnull @.str.7, ptr noundef %2) #4
  %54 = icmp slt i32 %53, 0
  br i1 %54, label %243, label %55

55:                                               ; preds = %50
  %56 = zext nneg i32 %53 to i64
  %.not208 = icmp ugt i64 %51, %56
  br i1 %.not208, label %57, label %243

57:                                               ; preds = %55
  %58 = sub i64 %51, %56
  %59 = getelementptr inbounds i8, ptr %52, i64 %56
  %60 = getelementptr inbounds i8, ptr %3, i64 216
  %61 = tail call i32 @mbedtls_x509_dn_gets(ptr noundef %59, i64 noundef %58, ptr noundef nonnull %60) #4
  %62 = icmp slt i32 %61, 0
  br i1 %62, label %243, label %63

63:                                               ; preds = %57
  %64 = zext nneg i32 %61 to i64
  %.not209 = icmp ugt i64 %58, %64
  br i1 %.not209, label %65, label %243

65:                                               ; preds = %63
  %66 = sub i64 %58, %64
  %67 = getelementptr inbounds i8, ptr %59, i64 %64
  %68 = getelementptr inbounds i8, ptr %3, i64 280
  %69 = load i32, ptr %68, align 8, !tbaa !18
  %70 = getelementptr inbounds i8, ptr %3, i64 284
  %71 = load i32, ptr %70, align 4, !tbaa !19
  %72 = getelementptr inbounds i8, ptr %3, i64 288
  %73 = load i32, ptr %72, align 8, !tbaa !20
  %74 = getelementptr inbounds i8, ptr %3, i64 292
  %75 = load i32, ptr %74, align 4, !tbaa !21
  %76 = getelementptr inbounds i8, ptr %3, i64 296
  %77 = load i32, ptr %76, align 8, !tbaa !22
  %78 = getelementptr inbounds i8, ptr %3, i64 300
  %79 = load i32, ptr %78, align 4, !tbaa !23
  %80 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %67, i64 noundef %66, ptr noundef nonnull @.str.8, ptr noundef %2, i32 noundef %69, i32 noundef %71, i32 noundef %73, i32 noundef %75, i32 noundef %77, i32 noundef %79) #4
  %81 = icmp slt i32 %80, 0
  br i1 %81, label %243, label %82

82:                                               ; preds = %65
  %83 = zext nneg i32 %80 to i64
  %.not210 = icmp ugt i64 %66, %83
  br i1 %.not210, label %84, label %243

84:                                               ; preds = %82
  %85 = sub i64 %66, %83
  %86 = getelementptr inbounds i8, ptr %67, i64 %83
  %87 = getelementptr inbounds i8, ptr %3, i64 304
  %88 = load i32, ptr %87, align 8, !tbaa !24
  %89 = getelementptr inbounds i8, ptr %3, i64 308
  %90 = load i32, ptr %89, align 4, !tbaa !25
  %91 = getelementptr inbounds i8, ptr %3, i64 312
  %92 = load i32, ptr %91, align 8, !tbaa !26
  %93 = getelementptr inbounds i8, ptr %3, i64 316
  %94 = load i32, ptr %93, align 4, !tbaa !27
  %95 = getelementptr inbounds i8, ptr %3, i64 320
  %96 = load i32, ptr %95, align 8, !tbaa !28
  %97 = getelementptr inbounds i8, ptr %3, i64 324
  %98 = load i32, ptr %97, align 4, !tbaa !29
  %99 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %86, i64 noundef %85, ptr noundef nonnull @.str.9, ptr noundef %2, i32 noundef %88, i32 noundef %90, i32 noundef %92, i32 noundef %94, i32 noundef %96, i32 noundef %98) #4
  %100 = icmp slt i32 %99, 0
  br i1 %100, label %243, label %101

101:                                              ; preds = %84
  %102 = zext nneg i32 %99 to i64
  %.not211 = icmp ugt i64 %85, %102
  br i1 %.not211, label %103, label %243

103:                                              ; preds = %101
  %104 = sub i64 %85, %102
  %105 = getelementptr inbounds i8, ptr %86, i64 %102
  %106 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %105, i64 noundef %104, ptr noundef nonnull @.str.10, ptr noundef %2) #4
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %243, label %108

108:                                              ; preds = %103
  %109 = zext nneg i32 %106 to i64
  %.not212 = icmp ugt i64 %104, %109
  br i1 %.not212, label %110, label %243

110:                                              ; preds = %108
  %111 = sub i64 %104, %109
  %112 = getelementptr inbounds i8, ptr %105, i64 %109
  %113 = getelementptr inbounds i8, ptr %3, i64 80
  %114 = getelementptr inbounds i8, ptr %3, i64 532
  %115 = load i32, ptr %114, align 4, !tbaa !30
  %116 = getelementptr inbounds i8, ptr %3, i64 528
  %117 = load i32, ptr %116, align 8, !tbaa !31
  %118 = getelementptr inbounds i8, ptr %3, i64 536
  %119 = load ptr, ptr %118, align 8, !tbaa !32
  %120 = tail call i32 @mbedtls_x509_sig_alg_gets(ptr noundef %112, i64 noundef %111, ptr noundef nonnull %113, i32 noundef %115, i32 noundef %117, ptr noundef %119) #4
  %121 = icmp slt i32 %120, 0
  br i1 %121, label %243, label %122

122:                                              ; preds = %110
  %123 = zext nneg i32 %120 to i64
  %.not213 = icmp ugt i64 %111, %123
  br i1 %.not213, label %124, label %243

124:                                              ; preds = %122
  %125 = sub i64 %111, %123
  store i64 %125, ptr %5, align 8, !tbaa !17
  %126 = getelementptr inbounds i8, ptr %112, i64 %123
  store ptr %126, ptr %6, align 8, !tbaa !33
  %127 = getelementptr inbounds i8, ptr %3, i64 328
  %128 = tail call ptr @mbedtls_pk_get_name(ptr noundef nonnull %127) #4
  %129 = call i32 @mbedtls_x509_key_size_helper(ptr noundef nonnull %7, i64 noundef 18, ptr noundef %128) #4
  %.not214 = icmp eq i32 %129, 0
  br i1 %.not214, label %130, label %243

130:                                              ; preds = %124
  %131 = call i64 @mbedtls_pk_get_bitlen(ptr noundef nonnull %127) #4
  %132 = trunc i64 %131 to i32
  %133 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %126, i64 noundef %125, ptr noundef nonnull @.str.11, ptr noundef %2, ptr noundef nonnull %7, i32 noundef %132) #4
  %134 = icmp slt i32 %133, 0
  br i1 %134, label %243, label %135

135:                                              ; preds = %130
  %136 = zext nneg i32 %133 to i64
  %137 = load i64, ptr %5, align 8, !tbaa !17
  %.not215 = icmp ugt i64 %137, %136
  br i1 %.not215, label %138, label %243

138:                                              ; preds = %135
  %139 = sub i64 %137, %136
  store i64 %139, ptr %5, align 8, !tbaa !17
  %140 = load ptr, ptr %6, align 8, !tbaa !33
  %141 = getelementptr inbounds i8, ptr %140, i64 %136
  store ptr %141, ptr %6, align 8, !tbaa !33
  %142 = getelementptr inbounds i8, ptr %3, i64 448
  %143 = load i32, ptr %142, align 8, !tbaa !34
  %144 = and i32 %143, 256
  %.not216 = icmp eq i32 %144, 0
  br i1 %.not216, label %168, label %145

145:                                              ; preds = %138
  %146 = getelementptr inbounds i8, ptr %3, i64 452
  %147 = load i32, ptr %146, align 4, !tbaa !35
  %.not217 = icmp eq i32 %147, 0
  %148 = select i1 %.not217, ptr @.str.14, ptr @.str.13
  %149 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %141, i64 noundef %139, ptr noundef nonnull @.str.12, ptr noundef %2, ptr noundef nonnull %148) #4
  %150 = icmp slt i32 %149, 0
  br i1 %150, label %243, label %151

151:                                              ; preds = %145
  %152 = zext nneg i32 %149 to i64
  %.not218 = icmp ugt i64 %139, %152
  br i1 %.not218, label %153, label %243

153:                                              ; preds = %151
  %154 = sub i64 %139, %152
  store i64 %154, ptr %5, align 8, !tbaa !17
  %155 = getelementptr inbounds i8, ptr %141, i64 %152
  store ptr %155, ptr %6, align 8, !tbaa !33
  %156 = getelementptr inbounds i8, ptr %3, i64 456
  %157 = load i32, ptr %156, align 8, !tbaa !36
  %158 = icmp sgt i32 %157, 0
  br i1 %158, label %159, label %168

159:                                              ; preds = %153
  %160 = add nsw i32 %157, -1
  %161 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %155, i64 noundef %154, ptr noundef nonnull @.str.15, i32 noundef %160) #4
  %162 = icmp slt i32 %161, 0
  br i1 %162, label %243, label %163

163:                                              ; preds = %159
  %164 = zext nneg i32 %161 to i64
  %.not219 = icmp ugt i64 %154, %164
  br i1 %.not219, label %165, label %243

165:                                              ; preds = %163
  %166 = sub i64 %154, %164
  store i64 %166, ptr %5, align 8, !tbaa !17
  %167 = getelementptr inbounds i8, ptr %155, i64 %164
  store ptr %167, ptr %6, align 8, !tbaa !33
  br label %168

168:                                              ; preds = %153, %165, %138
  %169 = phi i64 [ %154, %153 ], [ %166, %165 ], [ %139, %138 ]
  %170 = phi ptr [ %155, %153 ], [ %167, %165 ], [ %141, %138 ]
  %171 = load i32, ptr %142, align 8, !tbaa !34
  %172 = and i32 %171, 32
  %.not220 = icmp eq i32 %172, 0
  br i1 %.not220, label %185, label %173

173:                                              ; preds = %168
  %174 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %170, i64 noundef %169, ptr noundef nonnull @.str.16, ptr noundef %2) #4
  %175 = icmp slt i32 %174, 0
  br i1 %175, label %243, label %176

176:                                              ; preds = %173
  %177 = zext nneg i32 %174 to i64
  %178 = load i64, ptr %5, align 8, !tbaa !17
  %.not221 = icmp ugt i64 %178, %177
  br i1 %.not221, label %179, label %243

179:                                              ; preds = %176
  %180 = sub i64 %178, %177
  store i64 %180, ptr %5, align 8, !tbaa !17
  %181 = load ptr, ptr %6, align 8, !tbaa !33
  %182 = getelementptr inbounds i8, ptr %181, i64 %177
  store ptr %182, ptr %6, align 8, !tbaa !33
  %183 = getelementptr inbounds i8, ptr %3, i64 416
  %184 = call i32 @x509_info_subject_alt_name(ptr noundef nonnull %6, ptr noundef nonnull %5, ptr noundef nonnull %183)
  %.not222 = icmp eq i32 %184, 0
  br i1 %.not222, label %._crit_edge, label %243

._crit_edge:                                      ; preds = %179
  %.pre = load i32, ptr %142, align 8, !tbaa !34
  %.pre240.pre243.pre247.pre = load ptr, ptr %6, align 8, !tbaa !33
  %.pre242.pre245.pre249.pre = load i64, ptr %5, align 8, !tbaa !17
  br label %185

185:                                              ; preds = %._crit_edge, %168
  %.pre242.pre245.pre249 = phi i64 [ %.pre242.pre245.pre249.pre, %._crit_edge ], [ %169, %168 ]
  %.pre240.pre243.pre247 = phi ptr [ %.pre240.pre243.pre247.pre, %._crit_edge ], [ %170, %168 ]
  %186 = phi i32 [ %.pre, %._crit_edge ], [ %171, %168 ]
  %187 = and i32 %186, 65536
  %.not223 = icmp eq i32 %187, 0
  br i1 %.not223, label %201, label %188

188:                                              ; preds = %185
  %189 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.pre240.pre243.pre247, i64 noundef %.pre242.pre245.pre249, ptr noundef nonnull @.str.17, ptr noundef %2) #4
  %190 = icmp slt i32 %189, 0
  br i1 %190, label %243, label %191

191:                                              ; preds = %188
  %192 = zext nneg i32 %189 to i64
  %193 = load i64, ptr %5, align 8, !tbaa !17
  %.not224 = icmp ugt i64 %193, %192
  br i1 %.not224, label %194, label %243

194:                                              ; preds = %191
  %195 = sub i64 %193, %192
  store i64 %195, ptr %5, align 8, !tbaa !17
  %196 = load ptr, ptr %6, align 8, !tbaa !33
  %197 = getelementptr inbounds i8, ptr %196, i64 %192
  store ptr %197, ptr %6, align 8, !tbaa !33
  %198 = getelementptr inbounds i8, ptr %3, i64 496
  %199 = load i8, ptr %198, align 8, !tbaa !37
  %200 = call i32 @x509_info_cert_type(ptr noundef nonnull %6, ptr noundef nonnull %5, i8 noundef zeroext %199)
  %.not225 = icmp eq i32 %200, 0
  br i1 %.not225, label %._crit_edge234, label %243

._crit_edge234:                                   ; preds = %194
  %.pre235 = load i32, ptr %142, align 8, !tbaa !34
  %.pre240.pre243.pre = load ptr, ptr %6, align 8, !tbaa !33
  %.pre242.pre245.pre = load i64, ptr %5, align 8, !tbaa !17
  br label %201

201:                                              ; preds = %._crit_edge234, %185
  %.pre242.pre245 = phi i64 [ %.pre242.pre245.pre, %._crit_edge234 ], [ %.pre242.pre245.pre249, %185 ]
  %.pre240.pre243 = phi ptr [ %.pre240.pre243.pre, %._crit_edge234 ], [ %.pre240.pre243.pre247, %185 ]
  %202 = phi i32 [ %.pre235, %._crit_edge234 ], [ %186, %185 ]
  %203 = and i32 %202, 4
  %.not226 = icmp eq i32 %203, 0
  br i1 %.not226, label %217, label %204

204:                                              ; preds = %201
  %205 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.pre240.pre243, i64 noundef %.pre242.pre245, ptr noundef nonnull @.str.18, ptr noundef %2) #4
  %206 = icmp slt i32 %205, 0
  br i1 %206, label %243, label %207

207:                                              ; preds = %204
  %208 = zext nneg i32 %205 to i64
  %209 = load i64, ptr %5, align 8, !tbaa !17
  %.not227 = icmp ugt i64 %209, %208
  br i1 %.not227, label %210, label %243

210:                                              ; preds = %207
  %211 = sub i64 %209, %208
  store i64 %211, ptr %5, align 8, !tbaa !17
  %212 = load ptr, ptr %6, align 8, !tbaa !33
  %213 = getelementptr inbounds i8, ptr %212, i64 %208
  store ptr %213, ptr %6, align 8, !tbaa !33
  %214 = getelementptr inbounds i8, ptr %3, i64 460
  %215 = load i32, ptr %214, align 4, !tbaa !38
  %216 = call i32 @x509_info_key_usage(ptr noundef nonnull %6, ptr noundef nonnull %5, i32 noundef %215)
  %.not228 = icmp eq i32 %216, 0
  br i1 %.not228, label %._crit_edge236, label %243

._crit_edge236:                                   ; preds = %210
  %.pre237 = load i32, ptr %142, align 8, !tbaa !34
  %.pre240.pre = load ptr, ptr %6, align 8, !tbaa !33
  %.pre242.pre = load i64, ptr %5, align 8, !tbaa !17
  br label %217

217:                                              ; preds = %._crit_edge236, %201
  %.pre242 = phi i64 [ %.pre242.pre, %._crit_edge236 ], [ %.pre242.pre245, %201 ]
  %.pre240 = phi ptr [ %.pre240.pre, %._crit_edge236 ], [ %.pre240.pre243, %201 ]
  %218 = phi i32 [ %.pre237, %._crit_edge236 ], [ %202, %201 ]
  %219 = and i32 %218, 2048
  %.not229 = icmp eq i32 %219, 0
  br i1 %.not229, label %232, label %220

220:                                              ; preds = %217
  %221 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.pre240, i64 noundef %.pre242, ptr noundef nonnull @.str.19, ptr noundef %2) #4
  %222 = icmp slt i32 %221, 0
  br i1 %222, label %243, label %223

223:                                              ; preds = %220
  %224 = zext nneg i32 %221 to i64
  %225 = load i64, ptr %5, align 8, !tbaa !17
  %.not230 = icmp ugt i64 %225, %224
  br i1 %.not230, label %226, label %243

226:                                              ; preds = %223
  %227 = sub i64 %225, %224
  store i64 %227, ptr %5, align 8, !tbaa !17
  %228 = load ptr, ptr %6, align 8, !tbaa !33
  %229 = getelementptr inbounds i8, ptr %228, i64 %224
  store ptr %229, ptr %6, align 8, !tbaa !33
  %230 = getelementptr inbounds i8, ptr %3, i64 464
  %231 = call i32 @x509_info_ext_key_usage(ptr noundef nonnull %6, ptr noundef nonnull %5, ptr noundef nonnull %230)
  %.not231 = icmp eq i32 %231, 0
  br i1 %.not231, label %._crit_edge238, label %243

._crit_edge238:                                   ; preds = %226
  %.pre239 = load ptr, ptr %6, align 8, !tbaa !33
  %.pre241 = load i64, ptr %5, align 8, !tbaa !17
  br label %232

232:                                              ; preds = %._crit_edge238, %217
  %233 = phi i64 [ %.pre241, %._crit_edge238 ], [ %.pre242, %217 ]
  %234 = phi ptr [ %.pre239, %._crit_edge238 ], [ %.pre240, %217 ]
  %235 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %234, i64 noundef %233, ptr noundef nonnull @.str.20) #4
  %236 = icmp slt i32 %235, 0
  br i1 %236, label %243, label %237

237:                                              ; preds = %232
  %238 = zext nneg i32 %235 to i64
  %239 = load i64, ptr %5, align 8, !tbaa !17
  %.not232 = icmp ugt i64 %239, %238
  br i1 %.not232, label %240, label %243

240:                                              ; preds = %237
  %.neg = sub i64 %238, %239
  %241 = add i64 %.neg, %1
  %242 = trunc i64 %241 to i32
  br label %243

243:                                              ; preds = %9, %232, %237, %226, %220, %223, %210, %204, %207, %194, %188, %191, %179, %173, %176, %159, %163, %145, %151, %130, %135, %124, %110, %122, %103, %108, %84, %101, %65, %82, %57, %63, %50, %55, %42, %48, %35, %40, %27, %33, %20, %25, %13, %18, %240
  %.0 = phi i32 [ %242, %240 ], [ -10624, %18 ], [ -10624, %13 ], [ -10624, %25 ], [ -10624, %20 ], [ -10624, %33 ], [ -10624, %27 ], [ -10624, %40 ], [ -10624, %35 ], [ -10624, %48 ], [ -10624, %42 ], [ -10624, %55 ], [ -10624, %50 ], [ -10624, %63 ], [ -10624, %57 ], [ -10624, %82 ], [ -10624, %65 ], [ -10624, %101 ], [ -10624, %84 ], [ -10624, %108 ], [ -10624, %103 ], [ -10624, %122 ], [ -10624, %110 ], [ %129, %124 ], [ -10624, %135 ], [ -10624, %130 ], [ -10624, %151 ], [ -10624, %145 ], [ -10624, %163 ], [ -10624, %159 ], [ -10624, %176 ], [ -10624, %173 ], [ %184, %179 ], [ -10624, %191 ], [ -10624, %188 ], [ %200, %194 ], [ -10624, %207 ], [ -10624, %204 ], [ %216, %210 ], [ -10624, %223 ], [ -10624, %220 ], [ %231, %226 ], [ -10624, %237 ], [ -10624, %232 ], [ %spec.select, %9 ]
  call void @llvm.lifetime.end.p0(i64 18, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  ret i32 %.0
}

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

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

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

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

declare ptr @mbedtls_pk_get_name(ptr noundef) local_unnamed_addr #3

declare i64 @mbedtls_pk_get_bitlen(ptr noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare hidden i32 @x509_info_cert_type(ptr noundef, ptr noundef, i8 noundef zeroext) local_unnamed_addr #2

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

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

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 = { 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, !8, i64 48}
!6 = !{!"mbedtls_x509_crt", !7, i64 0, !7, i64 24, !8, i64 48, !7, i64 56, !7, i64 80, !7, i64 104, !7, i64 128, !13, i64 152, !13, i64 216, !14, i64 280, !14, i64 304, !15, i64 328, !7, i64 344, !7, i64 368, !7, i64 392, !16, i64 416, !8, i64 448, !8, i64 452, !8, i64 456, !8, i64 460, !16, i64 464, !9, i64 496, !7, i64 504, !8, i64 528, !8, i64 532, !12, i64 536, !12, i64 544}
!7 = !{!"mbedtls_asn1_buf", !8, i64 0, !11, i64 8, !12, i64 16}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"long", !9, i64 0}
!12 = !{!"any pointer", !9, i64 0}
!13 = !{!"mbedtls_asn1_named_data", !7, i64 0, !7, i64 24, !12, i64 48, !9, i64 56}
!14 = !{!"mbedtls_x509_time", !8, i64 0, !8, i64 4, !8, i64 8, !8, i64 12, !8, i64 16, !8, i64 20}
!15 = !{!"", !12, i64 0, !12, i64 8}
!16 = !{!"mbedtls_asn1_sequence", !7, i64 0, !12, i64 24}
!17 = !{!11, !11, i64 0}
!18 = !{!6, !8, i64 280}
!19 = !{!6, !8, i64 284}
!20 = !{!6, !8, i64 288}
!21 = !{!6, !8, i64 292}
!22 = !{!6, !8, i64 296}
!23 = !{!6, !8, i64 300}
!24 = !{!6, !8, i64 304}
!25 = !{!6, !8, i64 308}
!26 = !{!6, !8, i64 312}
!27 = !{!6, !8, i64 316}
!28 = !{!6, !8, i64 320}
!29 = !{!6, !8, i64 324}
!30 = !{!6, !8, i64 532}
!31 = !{!6, !8, i64 528}
!32 = !{!6, !12, i64 536}
!33 = !{!12, !12, i64 0}
!34 = !{!6, !8, i64 448}
!35 = !{!6, !8, i64 452}
!36 = !{!6, !8, i64 456}
!37 = !{!6, !9, i64 496}
!38 = !{!6, !8, i64 460}


; Effective O3 passes: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass