; LLVM IR from guanzhi/GmSSL :: tools (crlgen)

; 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] }

@stdout = external global ptr, align 8
@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@usage = external hidden global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@options = external hidden global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@stderr = external global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @crlgen_main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %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 ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %struct.SM2_KEY, align 8
  %21 = alloca [8192 x i8], align 16
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca [512 x i8], align 16
  %28 = alloca i64, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i64, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %44 = load ptr, ptr %5, align 8, !tbaa !9
  %45 = getelementptr inbounds ptr, ptr %44, i64 0
  %46 = load ptr, ptr %45, align 8, !tbaa !9
  store ptr %46, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  store i64 0, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  store ptr null, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  %47 = load ptr, ptr @stdout, align 8, !tbaa !9
  store ptr %47, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  store ptr null, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  store i64 0, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  store ptr null, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  store i64 0, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  store ptr null, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  store ptr null, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 8192, ptr %21) #9
  call void @llvm.memset.p0.i64(ptr align 16 %21, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  store i64 0, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %48 = call i64 @time(ptr noundef null) #9
  store i64 %48, ptr %25, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  store i64 -1, ptr %26, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 512, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  store i64 0, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 0, ptr %29, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  store i32 -1, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  store i32 -1, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  store ptr null, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  store ptr null, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  store ptr null, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  store ptr null, ptr %35, align 8, !tbaa !9
  %49 = load i32, ptr %4, align 4, !tbaa !5
  %50 = add nsw i32 %49, -1
  store i32 %50, ptr %4, align 4, !tbaa !5
  %51 = load ptr, ptr %5, align 8, !tbaa !9
  %52 = getelementptr inbounds ptr, ptr %51, i32 1
  store ptr %52, ptr %5, align 8, !tbaa !9
  br label %53

53:                                               ; preds = %376, %2
  %54 = load i32, ptr %4, align 4, !tbaa !5
  %55 = icmp sgt i32 %54, 0
  br i1 %55, label %56, label %381

56:                                               ; preds = %53
  %57 = load ptr, ptr %5, align 8, !tbaa !9
  %58 = load ptr, ptr %57, align 8, !tbaa !9
  %59 = call i32 @strcmp(ptr noundef %58, ptr noundef @.str) #10
  %60 = icmp ne i32 %59, 0
  br i1 %60, label %67, label %61

61:                                               ; preds = %56
  %62 = load ptr, ptr %7, align 8, !tbaa !9
  %63 = load ptr, ptr @usage, align 8, !tbaa !9
  %64 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %62, ptr noundef %63)
  %65 = load ptr, ptr @options, align 8, !tbaa !9
  %66 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %65)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %634

67:                                               ; preds = %56
  %68 = load ptr, ptr %5, align 8, !tbaa !9
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  %70 = call i32 @strcmp(ptr noundef %69, ptr noundef @.str.3) #10
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %90, label %72

72:                                               ; preds = %67
  %73 = load i32, ptr %4, align 4, !tbaa !5
  %74 = add nsw i32 %73, -1
  store i32 %74, ptr %4, align 4, !tbaa !5
  %75 = icmp slt i32 %74, 1
  br i1 %75, label %76, label %77

76:                                               ; preds = %72
  br label %355

77:                                               ; preds = %72
  %78 = load ptr, ptr %5, align 8, !tbaa !9
  %79 = getelementptr inbounds ptr, ptr %78, i32 1
  store ptr %79, ptr %5, align 8, !tbaa !9
  %80 = load ptr, ptr %79, align 8, !tbaa !9
  store ptr %80, ptr %8, align 8, !tbaa !9
  %81 = load ptr, ptr %8, align 8, !tbaa !9
  %82 = call i32 @file_read_all(ptr noundef %81, ptr noundef %9, ptr noundef %10)
  %83 = icmp ne i32 %82, 1
  br i1 %83, label %84, label %89

84:                                               ; preds = %77
  %85 = load ptr, ptr @stderr, align 8, !tbaa !9
  %86 = load ptr, ptr %7, align 8, !tbaa !9
  %87 = load ptr, ptr %8, align 8, !tbaa !9
  %88 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %85, ptr noundef @.str.4, ptr noundef %86, ptr noundef %87) #9
  br label %634

89:                                               ; preds = %77
  br label %375

90:                                               ; preds = %67
  %91 = load ptr, ptr %5, align 8, !tbaa !9
  %92 = load ptr, ptr %91, align 8, !tbaa !9
  %93 = call i32 @strcmp(ptr noundef %92, ptr noundef @.str.5) #10
  %94 = icmp ne i32 %93, 0
  br i1 %94, label %116, label %95

95:                                               ; preds = %90
  %96 = load i32, ptr %4, align 4, !tbaa !5
  %97 = add nsw i32 %96, -1
  store i32 %97, ptr %4, align 4, !tbaa !5
  %98 = icmp slt i32 %97, 1
  br i1 %98, label %99, label %100

99:                                               ; preds = %95
  br label %355

100:                                              ; preds = %95
  %101 = load ptr, ptr %5, align 8, !tbaa !9
  %102 = getelementptr inbounds ptr, ptr %101, i32 1
  store ptr %102, ptr %5, align 8, !tbaa !9
  %103 = load ptr, ptr %102, align 8, !tbaa !9
  store ptr %103, ptr %11, align 8, !tbaa !9
  %104 = load ptr, ptr %11, align 8, !tbaa !9
  %105 = call noalias ptr @fopen(ptr noundef %104, ptr noundef @.str.6)
  store ptr %105, ptr %12, align 8, !tbaa !9
  %106 = icmp ne ptr %105, null
  br i1 %106, label %115, label %107

107:                                              ; preds = %100
  %108 = load ptr, ptr @stderr, align 8, !tbaa !9
  %109 = load ptr, ptr %7, align 8, !tbaa !9
  %110 = load ptr, ptr %11, align 8, !tbaa !9
  %111 = call ptr @__errno_location() #11
  %112 = load i32, ptr %111, align 4, !tbaa !5
  %113 = call ptr @strerror(i32 noundef %112) #9
  %114 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef @.str.7, ptr noundef %109, ptr noundef %110, ptr noundef %113) #9
  br label %634

115:                                              ; preds = %100
  br label %374

116:                                              ; preds = %90
  %117 = load ptr, ptr %5, align 8, !tbaa !9
  %118 = load ptr, ptr %117, align 8, !tbaa !9
  %119 = call i32 @strcmp(ptr noundef %118, ptr noundef @.str.8) #10
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %139, label %121

121:                                              ; preds = %116
  %122 = load i32, ptr %4, align 4, !tbaa !5
  %123 = add nsw i32 %122, -1
  store i32 %123, ptr %4, align 4, !tbaa !5
  %124 = icmp slt i32 %123, 1
  br i1 %124, label %125, label %126

125:                                              ; preds = %121
  br label %355

126:                                              ; preds = %121
  %127 = load ptr, ptr %5, align 8, !tbaa !9
  %128 = getelementptr inbounds ptr, ptr %127, i32 1
  store ptr %128, ptr %5, align 8, !tbaa !9
  %129 = load ptr, ptr %128, align 8, !tbaa !9
  store ptr %129, ptr %8, align 8, !tbaa !9
  %130 = load ptr, ptr %8, align 8, !tbaa !9
  %131 = call i32 @x509_cert_new_from_file(ptr noundef %16, ptr noundef %17, ptr noundef %130)
  %132 = icmp ne i32 %131, 1
  br i1 %132, label %133, label %138

133:                                              ; preds = %126
  %134 = load ptr, ptr @stderr, align 8, !tbaa !9
  %135 = load ptr, ptr %7, align 8, !tbaa !9
  %136 = load ptr, ptr %8, align 8, !tbaa !9
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef @.str.9, ptr noundef %135, ptr noundef %136) #9
  br label %634

138:                                              ; preds = %126
  br label %373

139:                                              ; preds = %116
  %140 = load ptr, ptr %5, align 8, !tbaa !9
  %141 = load ptr, ptr %140, align 8, !tbaa !9
  %142 = call i32 @strcmp(ptr noundef %141, ptr noundef @.str.10) #10
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %165, label %144

144:                                              ; preds = %139
  %145 = load i32, ptr %4, align 4, !tbaa !5
  %146 = add nsw i32 %145, -1
  store i32 %146, ptr %4, align 4, !tbaa !5
  %147 = icmp slt i32 %146, 1
  br i1 %147, label %148, label %149

148:                                              ; preds = %144
  br label %355

149:                                              ; preds = %144
  %150 = load ptr, ptr %5, align 8, !tbaa !9
  %151 = getelementptr inbounds ptr, ptr %150, i32 1
  store ptr %151, ptr %5, align 8, !tbaa !9
  %152 = load ptr, ptr %151, align 8, !tbaa !9
  store ptr %152, ptr %8, align 8, !tbaa !9
  %153 = load ptr, ptr %8, align 8, !tbaa !9
  %154 = call noalias ptr @fopen(ptr noundef %153, ptr noundef @.str.11)
  store ptr %154, ptr %18, align 8, !tbaa !9
  %155 = icmp ne ptr %154, null
  br i1 %155, label %164, label %156

156:                                              ; preds = %149
  %157 = load ptr, ptr @stderr, align 8, !tbaa !9
  %158 = load ptr, ptr %7, align 8, !tbaa !9
  %159 = load ptr, ptr %8, align 8, !tbaa !9
  %160 = call ptr @__errno_location() #11
  %161 = load i32, ptr %160, align 4, !tbaa !5
  %162 = call ptr @strerror(i32 noundef %161) #9
  %163 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %157, ptr noundef @.str.7, ptr noundef %158, ptr noundef %159, ptr noundef %162) #9
  br label %634

164:                                              ; preds = %149
  br label %372

165:                                              ; preds = %139
  %166 = load ptr, ptr %5, align 8, !tbaa !9
  %167 = load ptr, ptr %166, align 8, !tbaa !9
  %168 = call i32 @strcmp(ptr noundef %167, ptr noundef @.str.12) #10
  %169 = icmp ne i32 %168, 0
  br i1 %169, label %179, label %170

170:                                              ; preds = %165
  %171 = load i32, ptr %4, align 4, !tbaa !5
  %172 = add nsw i32 %171, -1
  store i32 %172, ptr %4, align 4, !tbaa !5
  %173 = icmp slt i32 %172, 1
  br i1 %173, label %174, label %175

174:                                              ; preds = %170
  br label %355

175:                                              ; preds = %170
  %176 = load ptr, ptr %5, align 8, !tbaa !9
  %177 = getelementptr inbounds ptr, ptr %176, i32 1
  store ptr %177, ptr %5, align 8, !tbaa !9
  %178 = load ptr, ptr %177, align 8, !tbaa !9
  store ptr %178, ptr %19, align 8, !tbaa !9
  br label %371

179:                                              ; preds = %165
  %180 = load ptr, ptr %5, align 8, !tbaa !9
  %181 = load ptr, ptr %180, align 8, !tbaa !9
  %182 = call i32 @strcmp(ptr noundef %181, ptr noundef @.str.13) #10
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %206, label %184

184:                                              ; preds = %179
  %185 = load i32, ptr %4, align 4, !tbaa !5
  %186 = add nsw i32 %185, -1
  store i32 %186, ptr %4, align 4, !tbaa !5
  %187 = icmp slt i32 %186, 1
  br i1 %187, label %188, label %189

188:                                              ; preds = %184
  br label %355

189:                                              ; preds = %184
  %190 = load ptr, ptr %5, align 8, !tbaa !9
  %191 = getelementptr inbounds ptr, ptr %190, i32 1
  store ptr %191, ptr %5, align 8, !tbaa !9
  %192 = load ptr, ptr %191, align 8, !tbaa !9
  store ptr %192, ptr %8, align 8, !tbaa !9
  %193 = load ptr, ptr %8, align 8, !tbaa !9
  %194 = call i64 @strlen(ptr noundef %193) #10
  %195 = icmp ugt i64 %194, 8191
  br i1 %195, label %196, label %200

196:                                              ; preds = %189
  %197 = load ptr, ptr @stderr, align 8, !tbaa !9
  %198 = load ptr, ptr %7, align 8, !tbaa !9
  %199 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef @.str.14, ptr noundef %198) #9
  br label %634

200:                                              ; preds = %189
  %201 = getelementptr inbounds [8192 x i8], ptr %21, i64 0, i64 0
  %202 = load ptr, ptr %8, align 8, !tbaa !9
  %203 = call ptr @strncpy(ptr noundef %201, ptr noundef %202, i64 noundef 8192) #9
  %204 = load ptr, ptr %8, align 8, !tbaa !9
  %205 = call i64 @strlen(ptr noundef %204) #10
  store i64 %205, ptr %22, align 8, !tbaa !11
  br label %370

206:                                              ; preds = %179
  %207 = load ptr, ptr %5, align 8, !tbaa !9
  %208 = load ptr, ptr %207, align 8, !tbaa !9
  %209 = call i32 @strcmp(ptr noundef %208, ptr noundef @.str.15) #10
  %210 = icmp ne i32 %209, 0
  br i1 %210, label %239, label %211

211:                                              ; preds = %206
  %212 = load i32, ptr %4, align 4, !tbaa !5
  %213 = add nsw i32 %212, -1
  store i32 %213, ptr %4, align 4, !tbaa !5
  %214 = icmp slt i32 %213, 1
  br i1 %214, label %215, label %216

215:                                              ; preds = %211
  br label %355

216:                                              ; preds = %211
  %217 = load ptr, ptr %5, align 8, !tbaa !9
  %218 = getelementptr inbounds ptr, ptr %217, i32 1
  store ptr %218, ptr %5, align 8, !tbaa !9
  %219 = load ptr, ptr %218, align 8, !tbaa !9
  store ptr %219, ptr %8, align 8, !tbaa !9
  %220 = load ptr, ptr %8, align 8, !tbaa !9
  %221 = call i64 @strlen(ptr noundef %220) #10
  %222 = icmp ugt i64 %221, 16382
  br i1 %222, label %223, label %227

223:                                              ; preds = %216
  %224 = load ptr, ptr @stderr, align 8, !tbaa !9
  %225 = load ptr, ptr %7, align 8, !tbaa !9
  %226 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %224, ptr noundef @.str.16, ptr noundef %225) #9
  br label %634

227:                                              ; preds = %216
  %228 = load ptr, ptr %8, align 8, !tbaa !9
  %229 = load ptr, ptr %8, align 8, !tbaa !9
  %230 = call i64 @strlen(ptr noundef %229) #10
  %231 = getelementptr inbounds [8192 x i8], ptr %21, i64 0, i64 0
  %232 = call i32 @hex_to_bytes(ptr noundef %228, i64 noundef %230, ptr noundef %231, ptr noundef %22)
  %233 = icmp ne i32 %232, 1
  br i1 %233, label %234, label %238

234:                                              ; preds = %227
  %235 = load ptr, ptr @stderr, align 8, !tbaa !9
  %236 = load ptr, ptr %7, align 8, !tbaa !9
  %237 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %235, ptr noundef @.str.17, ptr noundef %236) #9
  br label %634

238:                                              ; preds = %227
  br label %369

239:                                              ; preds = %206
  %240 = load ptr, ptr %5, align 8, !tbaa !9
  %241 = load ptr, ptr %240, align 8, !tbaa !9
  %242 = call i32 @strcmp(ptr noundef %241, ptr noundef @.str.18) #10
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %262, label %244

244:                                              ; preds = %239
  %245 = load i32, ptr %4, align 4, !tbaa !5
  %246 = add nsw i32 %245, -1
  store i32 %246, ptr %4, align 4, !tbaa !5
  %247 = icmp slt i32 %246, 1
  br i1 %247, label %248, label %249

248:                                              ; preds = %244
  br label %355

249:                                              ; preds = %244
  %250 = load ptr, ptr %5, align 8, !tbaa !9
  %251 = getelementptr inbounds ptr, ptr %250, i32 1
  store ptr %251, ptr %5, align 8, !tbaa !9
  %252 = load ptr, ptr %251, align 8, !tbaa !9
  store ptr %252, ptr %8, align 8, !tbaa !9
  %253 = load ptr, ptr %8, align 8, !tbaa !9
  %254 = call i32 @asn1_time_from_str(i32 noundef 0, ptr noundef %26, ptr noundef %253)
  %255 = icmp ne i32 %254, 1
  br i1 %255, label %256, label %261

256:                                              ; preds = %249
  %257 = load ptr, ptr @stderr, align 8, !tbaa !9
  %258 = load ptr, ptr %7, align 8, !tbaa !9
  %259 = load ptr, ptr %8, align 8, !tbaa !9
  %260 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %257, ptr noundef @.str.19, ptr noundef %258, ptr noundef %259) #9
  br label %355

261:                                              ; preds = %249
  br label %368

262:                                              ; preds = %239
  %263 = load ptr, ptr %5, align 8, !tbaa !9
  %264 = load ptr, ptr %263, align 8, !tbaa !9
  %265 = call i32 @strcmp(ptr noundef %264, ptr noundef @.str.20) #10
  %266 = icmp ne i32 %265, 0
  br i1 %266, label %268, label %267

267:                                              ; preds = %262
  store i32 1, ptr %29, align 4, !tbaa !5
  br label %367

268:                                              ; preds = %262
  %269 = load ptr, ptr %5, align 8, !tbaa !9
  %270 = load ptr, ptr %269, align 8, !tbaa !9
  %271 = call i32 @strcmp(ptr noundef %270, ptr noundef @.str.21) #10
  %272 = icmp ne i32 %271, 0
  br i1 %272, label %283, label %273

273:                                              ; preds = %268
  %274 = load i32, ptr %4, align 4, !tbaa !5
  %275 = add nsw i32 %274, -1
  store i32 %275, ptr %4, align 4, !tbaa !5
  %276 = icmp slt i32 %275, 1
  br i1 %276, label %277, label %278

277:                                              ; preds = %273
  br label %355

278:                                              ; preds = %273
  %279 = load ptr, ptr %5, align 8, !tbaa !9
  %280 = getelementptr inbounds ptr, ptr %279, i32 1
  store ptr %280, ptr %5, align 8, !tbaa !9
  %281 = load ptr, ptr %280, align 8, !tbaa !9
  %282 = call i32 @atoi(ptr noundef %281) #10
  store i32 %282, ptr %30, align 4, !tbaa !5
  br label %366

283:                                              ; preds = %268
  %284 = load ptr, ptr %5, align 8, !tbaa !9
  %285 = load ptr, ptr %284, align 8, !tbaa !9
  %286 = call i32 @strcmp(ptr noundef %285, ptr noundef @.str.22) #10
  %287 = icmp ne i32 %286, 0
  br i1 %287, label %298, label %288

288:                                              ; preds = %283
  %289 = load i32, ptr %4, align 4, !tbaa !5
  %290 = add nsw i32 %289, -1
  store i32 %290, ptr %4, align 4, !tbaa !5
  %291 = icmp slt i32 %290, 1
  br i1 %291, label %292, label %293

292:                                              ; preds = %288
  br label %355

293:                                              ; preds = %288
  %294 = load ptr, ptr %5, align 8, !tbaa !9
  %295 = getelementptr inbounds ptr, ptr %294, i32 1
  store ptr %295, ptr %5, align 8, !tbaa !9
  %296 = load ptr, ptr %295, align 8, !tbaa !9
  %297 = call i32 @atoi(ptr noundef %296) #10
  store i32 %297, ptr %31, align 4, !tbaa !5
  br label %365

298:                                              ; preds = %283
  %299 = load ptr, ptr %5, align 8, !tbaa !9
  %300 = load ptr, ptr %299, align 8, !tbaa !9
  %301 = call i32 @strcmp(ptr noundef %300, ptr noundef @.str.23) #10
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %312, label %303

303:                                              ; preds = %298
  %304 = load i32, ptr %4, align 4, !tbaa !5
  %305 = add nsw i32 %304, -1
  store i32 %305, ptr %4, align 4, !tbaa !5
  %306 = icmp slt i32 %305, 1
  br i1 %306, label %307, label %308

307:                                              ; preds = %303
  br label %355

308:                                              ; preds = %303
  %309 = load ptr, ptr %5, align 8, !tbaa !9
  %310 = getelementptr inbounds ptr, ptr %309, i32 1
  store ptr %310, ptr %5, align 8, !tbaa !9
  %311 = load ptr, ptr %310, align 8, !tbaa !9
  store ptr %311, ptr %32, align 8, !tbaa !9
  br label %364

312:                                              ; preds = %298
  %313 = load ptr, ptr %5, align 8, !tbaa !9
  %314 = load ptr, ptr %313, align 8, !tbaa !9
  %315 = call i32 @strcmp(ptr noundef %314, ptr noundef @.str.24) #10
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %326, label %317

317:                                              ; preds = %312
  %318 = load i32, ptr %4, align 4, !tbaa !5
  %319 = add nsw i32 %318, -1
  store i32 %319, ptr %4, align 4, !tbaa !5
  %320 = icmp slt i32 %319, 1
  br i1 %320, label %321, label %322

321:                                              ; preds = %317
  br label %355

322:                                              ; preds = %317
  %323 = load ptr, ptr %5, align 8, !tbaa !9
  %324 = getelementptr inbounds ptr, ptr %323, i32 1
  store ptr %324, ptr %5, align 8, !tbaa !9
  %325 = load ptr, ptr %324, align 8, !tbaa !9
  store ptr %325, ptr %33, align 8, !tbaa !9
  br label %363

326:                                              ; preds = %312
  %327 = load ptr, ptr %5, align 8, !tbaa !9
  %328 = load ptr, ptr %327, align 8, !tbaa !9
  %329 = call i32 @strcmp(ptr noundef %328, ptr noundef @.str.25) #10
  %330 = icmp ne i32 %329, 0
  br i1 %330, label %335, label %331

331:                                              ; preds = %326
  %332 = load ptr, ptr %5, align 8, !tbaa !9
  %333 = getelementptr inbounds ptr, ptr %332, i32 1
  store ptr %333, ptr %5, align 8, !tbaa !9
  %334 = load ptr, ptr %333, align 8, !tbaa !9
  store ptr %334, ptr %34, align 8, !tbaa !9
  br label %362

335:                                              ; preds = %326
  %336 = load ptr, ptr %5, align 8, !tbaa !9
  %337 = load ptr, ptr %336, align 8, !tbaa !9
  %338 = call i32 @strcmp(ptr noundef %337, ptr noundef @.str.26) #10
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %349, label %340

340:                                              ; preds = %335
  %341 = load i32, ptr %4, align 4, !tbaa !5
  %342 = add nsw i32 %341, -1
  store i32 %342, ptr %4, align 4, !tbaa !5
  %343 = icmp slt i32 %342, 1
  br i1 %343, label %344, label %345

344:                                              ; preds = %340
  br label %355

345:                                              ; preds = %340
  %346 = load ptr, ptr %5, align 8, !tbaa !9
  %347 = getelementptr inbounds ptr, ptr %346, i32 1
  store ptr %347, ptr %5, align 8, !tbaa !9
  %348 = load ptr, ptr %347, align 8, !tbaa !9
  store ptr %348, ptr %35, align 8, !tbaa !9
  br label %361

349:                                              ; preds = %335
  %350 = load ptr, ptr @stderr, align 8, !tbaa !9
  %351 = load ptr, ptr %7, align 8, !tbaa !9
  %352 = load ptr, ptr %5, align 8, !tbaa !9
  %353 = load ptr, ptr %352, align 8, !tbaa !9
  %354 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %350, ptr noundef @.str.27, ptr noundef %351, ptr noundef %353) #9
  br label %634

355:                                              ; preds = %344, %321, %307, %292, %277, %256, %248, %215, %188, %174, %148, %125, %99, %76
  %356 = load ptr, ptr @stderr, align 8, !tbaa !9
  %357 = load ptr, ptr %7, align 8, !tbaa !9
  %358 = load ptr, ptr %5, align 8, !tbaa !9
  %359 = load ptr, ptr %358, align 8, !tbaa !9
  %360 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %356, ptr noundef @.str.28, ptr noundef %357, ptr noundef %359) #9
  br label %634

361:                                              ; preds = %345
  br label %362

362:                                              ; preds = %361, %331
  br label %363

363:                                              ; preds = %362, %322
  br label %364

364:                                              ; preds = %363, %308
  br label %365

365:                                              ; preds = %364, %293
  br label %366

366:                                              ; preds = %365, %278
  br label %367

367:                                              ; preds = %366, %267
  br label %368

368:                                              ; preds = %367, %261
  br label %369

369:                                              ; preds = %368, %238
  br label %370

370:                                              ; preds = %369, %200
  br label %371

371:                                              ; preds = %370, %175
  br label %372

372:                                              ; preds = %371, %164
  br label %373

373:                                              ; preds = %372, %138
  br label %374

374:                                              ; preds = %373, %115
  br label %375

375:                                              ; preds = %374, %89
  br label %376

376:                                              ; preds = %375
  %377 = load i32, ptr %4, align 4, !tbaa !5
  %378 = add nsw i32 %377, -1
  store i32 %378, ptr %4, align 4, !tbaa !5
  %379 = load ptr, ptr %5, align 8, !tbaa !9
  %380 = getelementptr inbounds ptr, ptr %379, i32 1
  store ptr %380, ptr %5, align 8, !tbaa !9
  br label %53, !llvm.loop !13

381:                                              ; preds = %53
  %382 = load ptr, ptr %9, align 8, !tbaa !9
  %383 = icmp ne ptr %382, null
  br i1 %383, label %392, label %384

384:                                              ; preds = %381
  %385 = load ptr, ptr @stderr, align 8, !tbaa !9
  %386 = load ptr, ptr %7, align 8, !tbaa !9
  %387 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %385, ptr noundef @.str.29, ptr noundef %386) #9
  %388 = load ptr, ptr @stderr, align 8, !tbaa !9
  %389 = load ptr, ptr %7, align 8, !tbaa !9
  %390 = load ptr, ptr @usage, align 8, !tbaa !9
  %391 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %388, ptr noundef @.str.30, ptr noundef %389, ptr noundef %390) #9
  br label %634

392:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %393 = load ptr, ptr %9, align 8, !tbaa !9
  store ptr %393, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %394 = load i64, ptr %10, align 8, !tbaa !11
  store i64 %394, ptr %37, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  br label %395

395:                                              ; preds = %405, %392
  %396 = load i64, ptr %37, align 8, !tbaa !11
  %397 = icmp ne i64 %396, 0
  br i1 %397, label %398, label %410

398:                                              ; preds = %395
  %399 = call i32 @x509_revoked_cert_from_der(ptr noundef %38, ptr noundef %39, ptr noundef %40, ptr noundef %41, ptr noundef %42, ptr noundef %36, ptr noundef %37)
  %400 = icmp ne i32 %399, 1
  br i1 %400, label %401, label %405

401:                                              ; preds = %398
  %402 = load ptr, ptr @stderr, align 8, !tbaa !9
  %403 = load ptr, ptr %7, align 8, !tbaa !9
  %404 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %402, ptr noundef @.str.31, ptr noundef %403) #9
  store i32 4, ptr %43, align 4
  br label %411

405:                                              ; preds = %398
  %406 = load ptr, ptr @stderr, align 8, !tbaa !9
  %407 = load ptr, ptr %38, align 8, !tbaa !9
  %408 = load i64, ptr %39, align 8, !tbaa !11
  %409 = call i32 @format_bytes(ptr noundef %406, i32 noundef 0, i32 noundef 4, ptr noundef @.str.32, ptr noundef %407, i64 noundef %408)
  br label %395, !llvm.loop !15

410:                                              ; preds = %395
  store i32 0, ptr %43, align 4
  br label %411

411:                                              ; preds = %410, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  %412 = load i32, ptr %43, align 4
  switch i32 %412, label %666 [
    i32 0, label %413
    i32 4, label %634
  ]

413:                                              ; preds = %411
  br label %414

414:                                              ; preds = %413
  %415 = load ptr, ptr %16, align 8, !tbaa !9
  %416 = icmp ne ptr %415, null
  br i1 %416, label %425, label %417

417:                                              ; preds = %414
  %418 = load ptr, ptr @stderr, align 8, !tbaa !9
  %419 = load ptr, ptr %7, align 8, !tbaa !9
  %420 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %418, ptr noundef @.str.33, ptr noundef %419) #9
  %421 = load ptr, ptr @stderr, align 8, !tbaa !9
  %422 = load ptr, ptr %7, align 8, !tbaa !9
  %423 = load ptr, ptr @usage, align 8, !tbaa !9
  %424 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %421, ptr noundef @.str.30, ptr noundef %422, ptr noundef %423) #9
  br label %634

425:                                              ; preds = %414
  %426 = load ptr, ptr %18, align 8, !tbaa !9
  %427 = icmp ne ptr %426, null
  br i1 %427, label %436, label %428

428:                                              ; preds = %425
  %429 = load ptr, ptr @stderr, align 8, !tbaa !9
  %430 = load ptr, ptr %7, align 8, !tbaa !9
  %431 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %429, ptr noundef @.str.34, ptr noundef %430) #9
  %432 = load ptr, ptr @stderr, align 8, !tbaa !9
  %433 = load ptr, ptr %7, align 8, !tbaa !9
  %434 = load ptr, ptr @usage, align 8, !tbaa !9
  %435 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %432, ptr noundef @.str.30, ptr noundef %433, ptr noundef %434) #9
  br label %634

436:                                              ; preds = %425
  %437 = load ptr, ptr %19, align 8, !tbaa !9
  %438 = icmp ne ptr %437, null
  br i1 %438, label %447, label %439

439:                                              ; preds = %436
  %440 = load ptr, ptr @stderr, align 8, !tbaa !9
  %441 = load ptr, ptr %7, align 8, !tbaa !9
  %442 = load ptr, ptr @usage, align 8, !tbaa !9
  %443 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %440, ptr noundef @.str.30, ptr noundef %441, ptr noundef %442) #9
  %444 = load ptr, ptr @stderr, align 8, !tbaa !9
  %445 = load ptr, ptr %7, align 8, !tbaa !9
  %446 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %444, ptr noundef @.str.35, ptr noundef %445) #9
  br label %634

447:                                              ; preds = %436
  %448 = load ptr, ptr %19, align 8, !tbaa !9
  %449 = load ptr, ptr %18, align 8, !tbaa !9
  %450 = call i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef %20, ptr noundef %448, ptr noundef %449)
  %451 = icmp ne i32 %450, 1
  br i1 %451, label %452, label %456

452:                                              ; preds = %447
  %453 = load ptr, ptr @stderr, align 8, !tbaa !9
  %454 = load ptr, ptr %7, align 8, !tbaa !9
  %455 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %453, ptr noundef @.str.36, ptr noundef %454) #9
  br label %634

456:                                              ; preds = %447
  %457 = load i64, ptr %22, align 8, !tbaa !11
  %458 = icmp ne i64 %457, 0
  br i1 %458, label %462, label %459

459:                                              ; preds = %456
  %460 = getelementptr inbounds [8192 x i8], ptr %21, i64 0, i64 0
  %461 = call ptr @strcpy(ptr noundef %460, ptr noundef @.str.37) #9
  store i64 16, ptr %22, align 8, !tbaa !11
  br label %462

462:                                              ; preds = %459, %456
  %463 = load ptr, ptr %16, align 8, !tbaa !9
  %464 = load i64, ptr %17, align 8, !tbaa !11
  %465 = call i32 @x509_cert_get_subject(ptr noundef %463, i64 noundef %464, ptr noundef %23, ptr noundef %24)
  %466 = icmp ne i32 %465, 1
  br i1 %466, label %467, label %471

467:                                              ; preds = %462
  %468 = load ptr, ptr @stderr, align 8, !tbaa !9
  %469 = load ptr, ptr %7, align 8, !tbaa !9
  %470 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %468, ptr noundef @.str.38, ptr noundef %469) #9
  br label %634

471:                                              ; preds = %462
  %472 = load i32, ptr %29, align 4, !tbaa !5
  %473 = icmp ne i32 %472, 0
  br i1 %473, label %474, label %483

474:                                              ; preds = %471
  %475 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  %476 = call i32 @x509_crl_exts_add_default_authority_key_identifier(ptr noundef %475, ptr noundef %28, i64 noundef 512, ptr noundef %20)
  %477 = icmp ne i32 %476, 1
  br i1 %477, label %478, label %482

478:                                              ; preds = %474
  %479 = load ptr, ptr @stderr, align 8, !tbaa !9
  %480 = load ptr, ptr %7, align 8, !tbaa !9
  %481 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %479, ptr noundef @.str.39, ptr noundef %480) #9
  br label %634

482:                                              ; preds = %474
  br label %483

483:                                              ; preds = %482, %471
  %484 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  %485 = load i32, ptr %30, align 4, !tbaa !5
  %486 = call i32 @x509_crl_exts_add_crl_number(ptr noundef %484, ptr noundef %28, i64 noundef 512, i32 noundef -1, i32 noundef %485)
  %487 = icmp slt i32 %486, 0
  br i1 %487, label %488, label %492

488:                                              ; preds = %483
  %489 = load ptr, ptr @stderr, align 8, !tbaa !9
  %490 = load ptr, ptr %7, align 8, !tbaa !9
  %491 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %489, ptr noundef @.str.40, ptr noundef %490) #9
  br label %634

492:                                              ; preds = %483
  %493 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  %494 = load i32, ptr %31, align 4, !tbaa !5
  %495 = call i32 @x509_crl_exts_add_delta_crl_indicator(ptr noundef %493, ptr noundef %28, i64 noundef 512, i32 noundef 1, i32 noundef %494)
  %496 = icmp slt i32 %495, 0
  br i1 %496, label %497, label %501

497:                                              ; preds = %492
  %498 = load ptr, ptr @stderr, align 8, !tbaa !9
  %499 = load ptr, ptr %7, align 8, !tbaa !9
  %500 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %498, ptr noundef @.str.41, ptr noundef %499) #9
  br label %634

501:                                              ; preds = %492
  %502 = load ptr, ptr %34, align 8, !tbaa !9
  %503 = icmp ne ptr %502, null
  br i1 %503, label %507, label %504

504:                                              ; preds = %501
  %505 = load ptr, ptr %35, align 8, !tbaa !9
  %506 = icmp ne ptr %505, null
  br i1 %506, label %507, label %534

507:                                              ; preds = %504, %501
  %508 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  %509 = load ptr, ptr %34, align 8, !tbaa !9
  %510 = load ptr, ptr %34, align 8, !tbaa !9
  %511 = icmp ne ptr %510, null
  br i1 %511, label %512, label %515

512:                                              ; preds = %507
  %513 = load ptr, ptr %34, align 8, !tbaa !9
  %514 = call i64 @strlen(ptr noundef %513) #10
  br label %516

515:                                              ; preds = %507
  br label %516

516:                                              ; preds = %515, %512
  %517 = phi i64 [ %514, %512 ], [ 0, %515 ]
  %518 = load ptr, ptr %35, align 8, !tbaa !9
  %519 = load ptr, ptr %35, align 8, !tbaa !9
  %520 = icmp ne ptr %519, null
  br i1 %520, label %521, label %524

521:                                              ; preds = %516
  %522 = load ptr, ptr %35, align 8, !tbaa !9
  %523 = call i64 @strlen(ptr noundef %522) #10
  br label %525

524:                                              ; preds = %516
  br label %525

525:                                              ; preds = %524, %521
  %526 = phi i64 [ %523, %521 ], [ 0, %524 ]
  %527 = call i32 @x509_crl_exts_add_authority_info_acess(ptr noundef %508, ptr noundef %28, i64 noundef 512, i32 noundef -1, ptr noundef %509, i64 noundef %517, ptr noundef %518, i64 noundef %526)
  %528 = icmp ne i32 %527, 1
  br i1 %528, label %529, label %533

529:                                              ; preds = %525
  %530 = load ptr, ptr @stderr, align 8, !tbaa !9
  %531 = load ptr, ptr %7, align 8, !tbaa !9
  %532 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %530, ptr noundef @.str.42, ptr noundef %531) #9
  br label %634

533:                                              ; preds = %525
  br label %534

534:                                              ; preds = %533, %504
  %535 = load ptr, ptr %32, align 8, !tbaa !9
  %536 = icmp ne ptr %535, null
  br i1 %536, label %540, label %537

537:                                              ; preds = %534
  %538 = load ptr, ptr %33, align 8, !tbaa !9
  %539 = icmp ne ptr %538, null
  br i1 %539, label %540, label %567

540:                                              ; preds = %537, %534
  %541 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  %542 = load ptr, ptr %32, align 8, !tbaa !9
  %543 = load ptr, ptr %32, align 8, !tbaa !9
  %544 = icmp ne ptr %543, null
  br i1 %544, label %545, label %548

545:                                              ; preds = %540
  %546 = load ptr, ptr %32, align 8, !tbaa !9
  %547 = call i64 @strlen(ptr noundef %546) #10
  br label %549

548:                                              ; preds = %540
  br label %549

549:                                              ; preds = %548, %545
  %550 = phi i64 [ %547, %545 ], [ 0, %548 ]
  %551 = load ptr, ptr %33, align 8, !tbaa !9
  %552 = load ptr, ptr %33, align 8, !tbaa !9
  %553 = icmp ne ptr %552, null
  br i1 %553, label %554, label %557

554:                                              ; preds = %549
  %555 = load ptr, ptr %33, align 8, !tbaa !9
  %556 = call i64 @strlen(ptr noundef %555) #10
  br label %558

557:                                              ; preds = %549
  br label %558

558:                                              ; preds = %557, %554
  %559 = phi i64 [ %556, %554 ], [ 0, %557 ]
  %560 = call i32 @x509_crl_exts_add_freshest_crl(ptr noundef %541, ptr noundef %28, i64 noundef 512, i32 noundef -1, ptr noundef %542, i64 noundef %550, ptr noundef %551, i64 noundef %559)
  %561 = icmp ne i32 %560, 1
  br i1 %561, label %562, label %566

562:                                              ; preds = %558
  %563 = load ptr, ptr @stderr, align 8, !tbaa !9
  %564 = load ptr, ptr %7, align 8, !tbaa !9
  %565 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %563, ptr noundef @.str.43, ptr noundef %564) #9
  br label %634

566:                                              ; preds = %558
  br label %567

567:                                              ; preds = %566, %537
  %568 = load ptr, ptr %23, align 8, !tbaa !9
  %569 = load i64, ptr %24, align 8, !tbaa !11
  %570 = load i64, ptr %25, align 8, !tbaa !11
  %571 = load i64, ptr %26, align 8, !tbaa !11
  %572 = load ptr, ptr %9, align 8, !tbaa !9
  %573 = load i64, ptr %10, align 8, !tbaa !11
  %574 = load i64, ptr %28, align 8, !tbaa !11
  %575 = icmp ne i64 %574, 0
  br i1 %575, label %576, label %578

576:                                              ; preds = %567
  %577 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  br label %579

578:                                              ; preds = %567
  br label %579

579:                                              ; preds = %578, %576
  %580 = phi ptr [ %577, %576 ], [ null, %578 ]
  %581 = load i64, ptr %28, align 8, !tbaa !11
  %582 = getelementptr inbounds [8192 x i8], ptr %21, i64 0, i64 0
  %583 = load i64, ptr %22, align 8, !tbaa !11
  %584 = call i32 @x509_crl_sign_to_der(i32 noundef 1, i32 noundef 16, ptr noundef %568, i64 noundef %569, i64 noundef %570, i64 noundef %571, ptr noundef %572, i64 noundef %573, ptr noundef %580, i64 noundef %581, ptr noundef %20, ptr noundef %582, i64 noundef %583, ptr noundef null, ptr noundef %15)
  %585 = icmp ne i32 %584, 1
  br i1 %585, label %586, label %590

586:                                              ; preds = %579
  %587 = load ptr, ptr @stderr, align 8, !tbaa !9
  %588 = load ptr, ptr %7, align 8, !tbaa !9
  %589 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %587, ptr noundef @.str.39, ptr noundef %588) #9
  br label %634

590:                                              ; preds = %579
  %591 = load i64, ptr %15, align 8, !tbaa !11
  %592 = call noalias ptr @malloc(i64 noundef %591) #12
  store ptr %592, ptr %13, align 8, !tbaa !9
  %593 = icmp ne ptr %592, null
  br i1 %593, label %598, label %594

594:                                              ; preds = %590
  %595 = load ptr, ptr @stderr, align 8, !tbaa !9
  %596 = load ptr, ptr %7, align 8, !tbaa !9
  %597 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %595, ptr noundef @.str.44, ptr noundef %596) #9
  br label %634

598:                                              ; preds = %590
  %599 = load ptr, ptr %13, align 8, !tbaa !9
  store ptr %599, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !11
  %600 = load ptr, ptr %23, align 8, !tbaa !9
  %601 = load i64, ptr %24, align 8, !tbaa !11
  %602 = load i64, ptr %25, align 8, !tbaa !11
  %603 = load i64, ptr %26, align 8, !tbaa !11
  %604 = load ptr, ptr %9, align 8, !tbaa !9
  %605 = load i64, ptr %10, align 8, !tbaa !11
  %606 = load i64, ptr %28, align 8, !tbaa !11
  %607 = icmp ne i64 %606, 0
  br i1 %607, label %608, label %610

608:                                              ; preds = %598
  %609 = getelementptr inbounds [512 x i8], ptr %27, i64 0, i64 0
  br label %611

610:                                              ; preds = %598
  br label %611

611:                                              ; preds = %610, %608
  %612 = phi ptr [ %609, %608 ], [ null, %610 ]
  %613 = load i64, ptr %28, align 8, !tbaa !11
  %614 = getelementptr inbounds [8192 x i8], ptr %21, i64 0, i64 0
  %615 = load i64, ptr %22, align 8, !tbaa !11
  %616 = call i32 @x509_crl_sign_to_der(i32 noundef 1, i32 noundef 16, ptr noundef %600, i64 noundef %601, i64 noundef %602, i64 noundef %603, ptr noundef %604, i64 noundef %605, ptr noundef %612, i64 noundef %613, ptr noundef %20, ptr noundef %614, i64 noundef %615, ptr noundef %14, ptr noundef %15)
  %617 = icmp ne i32 %616, 1
  br i1 %617, label %618, label %622

618:                                              ; preds = %611
  %619 = load ptr, ptr @stderr, align 8, !tbaa !9
  %620 = load ptr, ptr %7, align 8, !tbaa !9
  %621 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %619, ptr noundef @.str.39, ptr noundef %620) #9
  br label %634

622:                                              ; preds = %611
  %623 = load ptr, ptr %13, align 8, !tbaa !9
  %624 = load i64, ptr %15, align 8, !tbaa !11
  %625 = load ptr, ptr %12, align 8, !tbaa !9
  %626 = call i64 @fwrite(ptr noundef %623, i64 noundef 1, i64 noundef %624, ptr noundef %625)
  %627 = load i64, ptr %15, align 8, !tbaa !11
  %628 = icmp ne i64 %626, %627
  br i1 %628, label %629, label %633

629:                                              ; preds = %622
  %630 = load ptr, ptr @stderr, align 8, !tbaa !9
  %631 = load ptr, ptr %7, align 8, !tbaa !9
  %632 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %630, ptr noundef @.str.45, ptr noundef %631) #9
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %43, align 4
  br label %666

633:                                              ; preds = %622
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %634

634:                                              ; preds = %633, %618, %594, %586, %562, %529, %497, %488, %478, %467, %452, %439, %428, %417, %411, %384, %355, %349, %234, %223, %196, %156, %133, %107, %84, %61
  %635 = load ptr, ptr %9, align 8, !tbaa !9
  %636 = icmp ne ptr %635, null
  br i1 %636, label %637, label %639

637:                                              ; preds = %634
  %638 = load ptr, ptr %9, align 8, !tbaa !9
  call void @free(ptr noundef %638) #9
  br label %639

639:                                              ; preds = %637, %634
  %640 = load ptr, ptr %18, align 8, !tbaa !9
  %641 = icmp ne ptr %640, null
  br i1 %641, label %642, label %645

642:                                              ; preds = %639
  %643 = load ptr, ptr %18, align 8, !tbaa !9
  %644 = call i32 @fclose(ptr noundef %643)
  br label %645

645:                                              ; preds = %642, %639
  %646 = load ptr, ptr %16, align 8, !tbaa !9
  %647 = icmp ne ptr %646, null
  br i1 %647, label %648, label %650

648:                                              ; preds = %645
  %649 = load ptr, ptr %16, align 8, !tbaa !9
  call void @free(ptr noundef %649) #9
  br label %650

650:                                              ; preds = %648, %645
  %651 = load ptr, ptr %11, align 8, !tbaa !9
  %652 = icmp ne ptr %651, null
  br i1 %652, label %653, label %659

653:                                              ; preds = %650
  %654 = load ptr, ptr %12, align 8, !tbaa !9
  %655 = icmp ne ptr %654, null
  br i1 %655, label %656, label %659

656:                                              ; preds = %653
  %657 = load ptr, ptr %12, align 8, !tbaa !9
  %658 = call i32 @fclose(ptr noundef %657)
  br label %659

659:                                              ; preds = %656, %653, %650
  %660 = load ptr, ptr %13, align 8, !tbaa !9
  %661 = icmp ne ptr %660, null
  br i1 %661, label %662, label %664

662:                                              ; preds = %659
  %663 = load ptr, ptr %13, align 8, !tbaa !9
  call void @free(ptr noundef %663) #9
  br label %664

664:                                              ; preds = %662, %659
  %665 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %665, ptr %3, align 4
  store i32 1, ptr %43, align 4
  br label %666

666:                                              ; preds = %664, %629, %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 512, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8192, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  %667 = load i32, ptr %3, align 4
  ret i32 %667
}

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

declare i32 @printf(ptr noundef, ...) #5

declare i32 @file_read_all(ptr noundef, ptr noundef, ptr noundef) #5

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

declare noalias ptr @fopen(ptr noundef, ptr noundef) #5

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #3

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #6

declare i32 @x509_cert_new_from_file(ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #4

; Function Attrs: nounwind
declare ptr @strncpy(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #5

declare i32 @asn1_time_from_str(i32 noundef, ptr noundef, ptr noundef) #5

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #7

declare i32 @x509_revoked_cert_from_der(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @format_bytes(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef) #5

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

declare i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #3

declare i32 @x509_cert_get_subject(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #5

declare i32 @x509_crl_exts_add_default_authority_key_identifier(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #5

declare i32 @x509_crl_exts_add_crl_number(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) #5

declare i32 @x509_crl_exts_add_delta_crl_indicator(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) #5

declare i32 @x509_crl_exts_add_authority_info_acess(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_crl_exts_add_freshest_crl(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_crl_sign_to_der(i32 noundef, i32 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #8

declare i64 @fwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #5

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

declare i32 @fclose(ptr noundef) #5

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { 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 #5 = { "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 willreturn memory(none) "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 #7 = { inlinehint nounwind willreturn memory(read) 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 #8 = { nounwind allocsize(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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { nounwind willreturn memory(none) }
attributes #12 = { nounwind allocsize(0) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}


; 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] }

@stdout = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@usage = external hidden local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@options = external hidden local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @crlgen_main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca ptr, align 8
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca %struct.SM2_KEY, align 8
  %10 = alloca [8192 x i8], align 16
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca [512 x i8], align 16
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = load ptr, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #12
  store ptr null, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #12
  store i64 0, ptr %4, align 8, !tbaa !9
  %25 = load ptr, ptr @stdout, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #12
  store i64 0, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #12
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #12
  store i64 0, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %9) #12
  call void @llvm.lifetime.start.p0(i64 8192, ptr nonnull %10) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(8192) %10, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #12
  store i64 0, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #12
  %26 = tail call i64 @time(ptr noundef null) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #12
  store i64 -1, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %15) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #12
  store i64 0, ptr %16, align 8, !tbaa !9
  %27 = icmp sgt i32 %0, 1
  br i1 %27, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %2, %198
  %.0140405 = phi ptr [ %.1, %198 ], [ null, %2 ]
  %.0141404 = phi ptr [ %.1142, %198 ], [ null, %2 ]
  %.0143403 = phi ptr [ %.1144, %198 ], [ null, %2 ]
  %.0145402 = phi ptr [ %.1146, %198 ], [ null, %2 ]
  %.0147401 = phi i32 [ %.1148, %198 ], [ -1, %2 ]
  %.0149400 = phi i32 [ %.1150, %198 ], [ -1, %2 ]
  %.0151399 = phi i32 [ %.1152, %198 ], [ 0, %2 ]
  %.0154398 = phi ptr [ %.1155, %198 ], [ null, %2 ]
  %.0156397 = phi ptr [ %.1157, %198 ], [ null, %2 ]
  %.0159396 = phi ptr [ %.1160, %198 ], [ %25, %2 ]
  %.0162395 = phi ptr [ %.1163, %198 ], [ null, %2 ]
  %.0165.in394 = phi i32 [ %.1166, %198 ], [ %0, %2 ]
  %.pn393 = phi ptr [ %.2170, %198 ], [ %1, %2 ]
  %.0168406 = getelementptr inbounds i8, ptr %.pn393, i64 8
  %.0165407 = add nsw i32 %.0165.in394, -1
  %28 = load ptr, ptr %.0168406, align 8, !tbaa !5
  %29 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str) #13
  %.not211 = icmp eq i32 %29, 0
  br i1 %.not211, label %30, label %35

30:                                               ; preds = %.lr.ph
  %31 = load ptr, ptr @usage, align 8, !tbaa !5
  %32 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %24, ptr noundef %31)
  %33 = load ptr, ptr @options, align 8, !tbaa !5
  %34 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %33)
  br label %342

35:                                               ; preds = %.lr.ph
  %36 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.3) #13
  %.not212 = icmp eq i32 %36, 0
  br i1 %.not212, label %37, label %47

37:                                               ; preds = %35
  %38 = icmp eq i32 %.0165.in394, 2
  br i1 %38, label %.loopexit, label %39

39:                                               ; preds = %37
  %40 = add nsw i32 %.0165.in394, -2
  %41 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %42 = load ptr, ptr %41, align 8, !tbaa !5
  %43 = call i32 @file_read_all(ptr noundef %42, ptr noundef nonnull %3, ptr noundef nonnull %4) #12
  %.not213 = icmp eq i32 %43, 1
  br i1 %.not213, label %198, label %44

44:                                               ; preds = %39
  %45 = load ptr, ptr @stderr, align 8, !tbaa !5
  %46 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %45, ptr noundef nonnull @.str.4, ptr noundef %24, ptr noundef %42) #14
  br label %342

47:                                               ; preds = %35
  %48 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.5) #13
  %.not214 = icmp eq i32 %48, 0
  br i1 %.not214, label %49, label %62

49:                                               ; preds = %47
  %50 = icmp eq i32 %.0165.in394, 2
  br i1 %50, label %.loopexit, label %51

51:                                               ; preds = %49
  %52 = add nsw i32 %.0165.in394, -2
  %53 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %54 = load ptr, ptr %53, align 8, !tbaa !5
  %55 = call noalias ptr @fopen(ptr noundef %54, ptr noundef nonnull @.str.6)
  %.not215 = icmp eq ptr %55, null
  br i1 %.not215, label %56, label %198

56:                                               ; preds = %51
  %57 = load ptr, ptr @stderr, align 8, !tbaa !5
  %58 = tail call ptr @__errno_location() #15
  %59 = load i32, ptr %58, align 4, !tbaa !11
  %60 = call ptr @strerror(i32 noundef %59) #12
  %61 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %57, ptr noundef nonnull @.str.7, ptr noundef %24, ptr noundef %54, ptr noundef %60) #14
  br label %342

62:                                               ; preds = %47
  %63 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.8) #13
  %.not216 = icmp eq i32 %63, 0
  br i1 %.not216, label %64, label %74

64:                                               ; preds = %62
  %65 = icmp eq i32 %.0165.in394, 2
  br i1 %65, label %.loopexit, label %66

66:                                               ; preds = %64
  %67 = add nsw i32 %.0165.in394, -2
  %68 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %70 = call i32 @x509_cert_new_from_file(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %69) #12
  %.not217 = icmp eq i32 %70, 1
  br i1 %.not217, label %198, label %71

71:                                               ; preds = %66
  %72 = load ptr, ptr @stderr, align 8, !tbaa !5
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef nonnull @.str.9, ptr noundef %24, ptr noundef %69) #14
  br label %342

74:                                               ; preds = %62
  %75 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.10) #13
  %.not218 = icmp eq i32 %75, 0
  br i1 %.not218, label %76, label %89

76:                                               ; preds = %74
  %77 = icmp eq i32 %.0165.in394, 2
  br i1 %77, label %.loopexit, label %78

78:                                               ; preds = %76
  %79 = add nsw i32 %.0165.in394, -2
  %80 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = call noalias ptr @fopen(ptr noundef %81, ptr noundef nonnull @.str.11)
  %.not219 = icmp eq ptr %82, null
  br i1 %.not219, label %83, label %198

83:                                               ; preds = %78
  %84 = load ptr, ptr @stderr, align 8, !tbaa !5
  %85 = tail call ptr @__errno_location() #15
  %86 = load i32, ptr %85, align 4, !tbaa !11
  %87 = call ptr @strerror(i32 noundef %86) #12
  %88 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %84, ptr noundef nonnull @.str.7, ptr noundef %24, ptr noundef %81, ptr noundef %87) #14
  br label %342

89:                                               ; preds = %74
  %90 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.12) #13
  %.not220 = icmp eq i32 %90, 0
  br i1 %.not220, label %91, label %97

91:                                               ; preds = %89
  %92 = icmp eq i32 %.0165.in394, 2
  br i1 %92, label %.loopexit, label %93

93:                                               ; preds = %91
  %94 = add nsw i32 %.0165.in394, -2
  %95 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %96 = load ptr, ptr %95, align 8, !tbaa !5
  br label %198

97:                                               ; preds = %89
  %98 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.13) #13
  %.not221 = icmp eq i32 %98, 0
  br i1 %.not221, label %99, label %113

99:                                               ; preds = %97
  %100 = add nsw i32 %.0165.in394, -2
  %101 = icmp eq i32 %.0165.in394, 2
  br i1 %101, label %.loopexit, label %102

102:                                              ; preds = %99
  %103 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %104 = load ptr, ptr %103, align 8, !tbaa !5
  %105 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %104) #13
  %106 = icmp ugt i64 %105, 8191
  br i1 %106, label %107, label %110

107:                                              ; preds = %102
  %108 = load ptr, ptr @stderr, align 8, !tbaa !5
  %109 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.14, ptr noundef %24) #14
  br label %342

110:                                              ; preds = %102
  %111 = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) %10, ptr noundef nonnull dereferenceable(1) %104, i64 noundef 8192) #12
  %112 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %104) #13
  store i64 %112, ptr %11, align 8, !tbaa !9
  br label %198

113:                                              ; preds = %97
  %114 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.15) #13
  %.not222 = icmp eq i32 %114, 0
  br i1 %.not222, label %115, label %131

115:                                              ; preds = %113
  %116 = add nsw i32 %.0165.in394, -2
  %117 = icmp eq i32 %.0165.in394, 2
  br i1 %117, label %.loopexit, label %118

118:                                              ; preds = %115
  %119 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  %121 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %120) #13
  %122 = icmp ugt i64 %121, 16382
  br i1 %122, label %123, label %126

123:                                              ; preds = %118
  %124 = load ptr, ptr @stderr, align 8, !tbaa !5
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef nonnull @.str.16, ptr noundef %24) #14
  br label %342

126:                                              ; preds = %118
  %127 = call i32 @hex_to_bytes(ptr noundef %120, i64 noundef %121, ptr noundef nonnull %10, ptr noundef nonnull %11) #12
  %.not223 = icmp eq i32 %127, 1
  br i1 %.not223, label %198, label %128

128:                                              ; preds = %126
  %129 = load ptr, ptr @stderr, align 8, !tbaa !5
  %130 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %129, ptr noundef nonnull @.str.17, ptr noundef %24) #14
  br label %342

131:                                              ; preds = %113
  %132 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.18) #13
  %.not224 = icmp eq i32 %132, 0
  br i1 %.not224, label %133, label %143

133:                                              ; preds = %131
  %134 = icmp eq i32 %.0165.in394, 2
  br i1 %134, label %.loopexit, label %135

135:                                              ; preds = %133
  %136 = add nsw i32 %.0165.in394, -2
  %137 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = call i32 @asn1_time_from_str(i32 noundef 0, ptr noundef nonnull %14, ptr noundef %138) #12
  %.not225 = icmp eq i32 %139, 1
  br i1 %.not225, label %198, label %140

140:                                              ; preds = %135
  %141 = load ptr, ptr @stderr, align 8, !tbaa !5
  %142 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %141, ptr noundef nonnull @.str.19, ptr noundef %24, ptr noundef %138) #14
  %.pre486 = load ptr, ptr %137, align 8, !tbaa !5
  br label %.loopexit

143:                                              ; preds = %131
  %144 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.20) #13
  %.not226 = icmp eq i32 %144, 0
  br i1 %.not226, label %198, label %145

145:                                              ; preds = %143
  %146 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.21) #13
  %.not227 = icmp eq i32 %146, 0
  br i1 %.not227, label %147, label %154

147:                                              ; preds = %145
  %148 = icmp eq i32 %.0165.in394, 2
  br i1 %148, label %.loopexit, label %149

149:                                              ; preds = %147
  %150 = add nsw i32 %.0165.in394, -2
  %151 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %152 = load ptr, ptr %151, align 8, !tbaa !5
  %153 = call i32 @atoi(ptr nocapture noundef %152) #13
  br label %198

154:                                              ; preds = %145
  %155 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.22) #13
  %.not228 = icmp eq i32 %155, 0
  br i1 %.not228, label %156, label %163

156:                                              ; preds = %154
  %157 = icmp eq i32 %.0165.in394, 2
  br i1 %157, label %.loopexit, label %158

158:                                              ; preds = %156
  %159 = add nsw i32 %.0165.in394, -2
  %160 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %162 = call i32 @atoi(ptr nocapture noundef %161) #13
  br label %198

163:                                              ; preds = %154
  %164 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.23) #13
  %.not229 = icmp eq i32 %164, 0
  br i1 %.not229, label %165, label %171

165:                                              ; preds = %163
  %166 = icmp eq i32 %.0165.in394, 2
  br i1 %166, label %.loopexit, label %167

167:                                              ; preds = %165
  %168 = add nsw i32 %.0165.in394, -2
  %169 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %170 = load ptr, ptr %169, align 8, !tbaa !5
  br label %198

171:                                              ; preds = %163
  %172 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.24) #13
  %.not230 = icmp eq i32 %172, 0
  br i1 %.not230, label %173, label %179

173:                                              ; preds = %171
  %174 = icmp eq i32 %.0165.in394, 2
  br i1 %174, label %.loopexit, label %175

175:                                              ; preds = %173
  %176 = add nsw i32 %.0165.in394, -2
  %177 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %178 = load ptr, ptr %177, align 8, !tbaa !5
  br label %198

179:                                              ; preds = %171
  %180 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.25) #13
  %.not231 = icmp eq i32 %180, 0
  br i1 %.not231, label %181, label %184

181:                                              ; preds = %179
  %182 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %183 = load ptr, ptr %182, align 8, !tbaa !5
  br label %198

184:                                              ; preds = %179
  %185 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.26) #13
  %.not232 = icmp eq i32 %185, 0
  br i1 %.not232, label %186, label %192

186:                                              ; preds = %184
  %187 = icmp eq i32 %.0165.in394, 2
  br i1 %187, label %.loopexit, label %188

188:                                              ; preds = %186
  %189 = add nsw i32 %.0165.in394, -2
  %190 = getelementptr inbounds i8, ptr %.pn393, i64 16
  %191 = load ptr, ptr %190, align 8, !tbaa !5
  br label %198

192:                                              ; preds = %184
  %193 = load ptr, ptr @stderr, align 8, !tbaa !5
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef nonnull @.str.27, ptr noundef %24, ptr noundef %28) #14
  br label %342

.loopexit:                                        ; preds = %186, %173, %165, %156, %147, %133, %115, %99, %91, %76, %64, %49, %37, %140
  %195 = phi ptr [ %.pre486, %140 ], [ %28, %37 ], [ %28, %49 ], [ %28, %64 ], [ %28, %76 ], [ %28, %91 ], [ %28, %99 ], [ %28, %115 ], [ %28, %133 ], [ %28, %147 ], [ %28, %156 ], [ %28, %165 ], [ %28, %173 ], [ %28, %186 ]
  %196 = load ptr, ptr @stderr, align 8, !tbaa !5
  %197 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.28, ptr noundef %24, ptr noundef %195) #14
  br label %342

198:                                              ; preds = %143, %39, %66, %93, %126, %158, %175, %188, %181, %167, %149, %135, %110, %78, %51
  %.2170 = phi ptr [ %190, %188 ], [ %182, %181 ], [ %177, %175 ], [ %169, %167 ], [ %160, %158 ], [ %151, %149 ], [ %137, %135 ], [ %119, %126 ], [ %103, %110 ], [ %95, %93 ], [ %80, %78 ], [ %68, %66 ], [ %53, %51 ], [ %41, %39 ], [ %.0168406, %143 ]
  %.1166 = phi i32 [ %189, %188 ], [ %.0165407, %181 ], [ %176, %175 ], [ %168, %167 ], [ %159, %158 ], [ %150, %149 ], [ %136, %135 ], [ %116, %126 ], [ %100, %110 ], [ %94, %93 ], [ %79, %78 ], [ %67, %66 ], [ %52, %51 ], [ %40, %39 ], [ %.0165407, %143 ]
  %.1163 = phi ptr [ %.0162395, %188 ], [ %.0162395, %181 ], [ %.0162395, %175 ], [ %.0162395, %167 ], [ %.0162395, %158 ], [ %.0162395, %149 ], [ %.0162395, %135 ], [ %.0162395, %126 ], [ %.0162395, %110 ], [ %.0162395, %93 ], [ %.0162395, %78 ], [ %.0162395, %66 ], [ %54, %51 ], [ %.0162395, %39 ], [ %.0162395, %143 ]
  %.1160 = phi ptr [ %.0159396, %188 ], [ %.0159396, %181 ], [ %.0159396, %175 ], [ %.0159396, %167 ], [ %.0159396, %158 ], [ %.0159396, %149 ], [ %.0159396, %135 ], [ %.0159396, %126 ], [ %.0159396, %110 ], [ %.0159396, %93 ], [ %.0159396, %78 ], [ %.0159396, %66 ], [ %55, %51 ], [ %.0159396, %39 ], [ %.0159396, %143 ]
  %.1157 = phi ptr [ %.0156397, %188 ], [ %.0156397, %181 ], [ %.0156397, %175 ], [ %.0156397, %167 ], [ %.0156397, %158 ], [ %.0156397, %149 ], [ %.0156397, %135 ], [ %.0156397, %126 ], [ %.0156397, %110 ], [ %.0156397, %93 ], [ %82, %78 ], [ %.0156397, %66 ], [ %.0156397, %51 ], [ %.0156397, %39 ], [ %.0156397, %143 ]
  %.1155 = phi ptr [ %.0154398, %188 ], [ %.0154398, %181 ], [ %.0154398, %175 ], [ %.0154398, %167 ], [ %.0154398, %158 ], [ %.0154398, %149 ], [ %.0154398, %135 ], [ %.0154398, %126 ], [ %.0154398, %110 ], [ %96, %93 ], [ %.0154398, %78 ], [ %.0154398, %66 ], [ %.0154398, %51 ], [ %.0154398, %39 ], [ %.0154398, %143 ]
  %.1152 = phi i32 [ %.0151399, %188 ], [ %.0151399, %181 ], [ %.0151399, %175 ], [ %.0151399, %167 ], [ %.0151399, %158 ], [ %.0151399, %149 ], [ %.0151399, %135 ], [ %.0151399, %126 ], [ %.0151399, %110 ], [ %.0151399, %93 ], [ %.0151399, %78 ], [ %.0151399, %66 ], [ %.0151399, %51 ], [ %.0151399, %39 ], [ 1, %143 ]
  %.1150 = phi i32 [ %.0149400, %188 ], [ %.0149400, %181 ], [ %.0149400, %175 ], [ %.0149400, %167 ], [ %.0149400, %158 ], [ %153, %149 ], [ %.0149400, %135 ], [ %.0149400, %126 ], [ %.0149400, %110 ], [ %.0149400, %93 ], [ %.0149400, %78 ], [ %.0149400, %66 ], [ %.0149400, %51 ], [ %.0149400, %39 ], [ %.0149400, %143 ]
  %.1148 = phi i32 [ %.0147401, %188 ], [ %.0147401, %181 ], [ %.0147401, %175 ], [ %.0147401, %167 ], [ %162, %158 ], [ %.0147401, %149 ], [ %.0147401, %135 ], [ %.0147401, %126 ], [ %.0147401, %110 ], [ %.0147401, %93 ], [ %.0147401, %78 ], [ %.0147401, %66 ], [ %.0147401, %51 ], [ %.0147401, %39 ], [ %.0147401, %143 ]
  %.1146 = phi ptr [ %.0145402, %188 ], [ %.0145402, %181 ], [ %.0145402, %175 ], [ %170, %167 ], [ %.0145402, %158 ], [ %.0145402, %149 ], [ %.0145402, %135 ], [ %.0145402, %126 ], [ %.0145402, %110 ], [ %.0145402, %93 ], [ %.0145402, %78 ], [ %.0145402, %66 ], [ %.0145402, %51 ], [ %.0145402, %39 ], [ %.0145402, %143 ]
  %.1144 = phi ptr [ %.0143403, %188 ], [ %.0143403, %181 ], [ %178, %175 ], [ %.0143403, %167 ], [ %.0143403, %158 ], [ %.0143403, %149 ], [ %.0143403, %135 ], [ %.0143403, %126 ], [ %.0143403, %110 ], [ %.0143403, %93 ], [ %.0143403, %78 ], [ %.0143403, %66 ], [ %.0143403, %51 ], [ %.0143403, %39 ], [ %.0143403, %143 ]
  %.1142 = phi ptr [ %.0141404, %188 ], [ %183, %181 ], [ %.0141404, %175 ], [ %.0141404, %167 ], [ %.0141404, %158 ], [ %.0141404, %149 ], [ %.0141404, %135 ], [ %.0141404, %126 ], [ %.0141404, %110 ], [ %.0141404, %93 ], [ %.0141404, %78 ], [ %.0141404, %66 ], [ %.0141404, %51 ], [ %.0141404, %39 ], [ %.0141404, %143 ]
  %.1 = phi ptr [ %191, %188 ], [ %.0140405, %181 ], [ %.0140405, %175 ], [ %.0140405, %167 ], [ %.0140405, %158 ], [ %.0140405, %149 ], [ %.0140405, %135 ], [ %.0140405, %126 ], [ %.0140405, %110 ], [ %.0140405, %93 ], [ %.0140405, %78 ], [ %.0140405, %66 ], [ %.0140405, %51 ], [ %.0140405, %39 ], [ %.0140405, %143 ]
  %199 = icmp sgt i32 %.1166, 1
  br i1 %199, label %.lr.ph, label %._crit_edge, !llvm.loop !13

._crit_edge:                                      ; preds = %198
  %.pre = load ptr, ptr %3, align 8, !tbaa !5
  %.not = icmp eq ptr %.pre, null
  br i1 %.not, label %._crit_edge.thread, label %205

._crit_edge.thread:                               ; preds = %2, %._crit_edge
  %.0156.lcssa501 = phi ptr [ %.1157, %._crit_edge ], [ null, %2 ]
  %.0159.lcssa500 = phi ptr [ %.1160, %._crit_edge ], [ %25, %2 ]
  %.0162.lcssa499 = phi ptr [ %.1163, %._crit_edge ], [ null, %2 ]
  %200 = load ptr, ptr @stderr, align 8, !tbaa !5
  %201 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %200, ptr noundef nonnull @.str.29, ptr noundef %24) #14
  %202 = load ptr, ptr @stderr, align 8, !tbaa !5
  %203 = load ptr, ptr @usage, align 8, !tbaa !5
  %204 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %202, ptr noundef nonnull @.str.30, ptr noundef %24, ptr noundef %203) #14
  br label %342

205:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #12
  store ptr %.pre, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #12
  %206 = load i64, ptr %4, align 8, !tbaa !9
  store i64 %206, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #12
  %.not193418 = icmp eq i64 %206, 0
  br i1 %.not193418, label %._crit_edge421, label %.lr.ph420

.lr.ph420:                                        ; preds = %205, %209
  %207 = call i32 @x509_revoked_cert_from_der(ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %17, ptr noundef nonnull %18) #12
  %.not194 = icmp eq i32 %207, 1
  %208 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %.not194, label %209, label %214

209:                                              ; preds = %.lr.ph420
  %210 = load ptr, ptr %19, align 8, !tbaa !5
  %211 = load i64, ptr %20, align 8, !tbaa !9
  %212 = call i32 @format_bytes(ptr noundef %208, i32 noundef 0, i32 noundef 4, ptr noundef nonnull @.str.32, ptr noundef %210, i64 noundef %211) #12
  %213 = load i64, ptr %18, align 8, !tbaa !9
  %.not193 = icmp eq i64 %213, 0
  br i1 %.not193, label %._crit_edge421, label %.lr.ph420, !llvm.loop !15

214:                                              ; preds = %.lr.ph420
  %215 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %208, ptr noundef nonnull @.str.31, ptr noundef %24) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  br label %342

._crit_edge421:                                   ; preds = %209, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  %216 = load ptr, ptr %7, align 8, !tbaa !5
  %.not195 = icmp eq ptr %216, null
  br i1 %.not195, label %217, label %223

217:                                              ; preds = %._crit_edge421
  %218 = load ptr, ptr @stderr, align 8, !tbaa !5
  %219 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %218, ptr noundef nonnull @.str.33, ptr noundef %24) #14
  %220 = load ptr, ptr @stderr, align 8, !tbaa !5
  %221 = load ptr, ptr @usage, align 8, !tbaa !5
  %222 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %220, ptr noundef nonnull @.str.30, ptr noundef %24, ptr noundef %221) #14
  br label %342

223:                                              ; preds = %._crit_edge421
  %.not196 = icmp eq ptr %.1157, null
  br i1 %.not196, label %224, label %230

224:                                              ; preds = %223
  %225 = load ptr, ptr @stderr, align 8, !tbaa !5
  %226 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %225, ptr noundef nonnull @.str.34, ptr noundef %24) #14
  %227 = load ptr, ptr @stderr, align 8, !tbaa !5
  %228 = load ptr, ptr @usage, align 8, !tbaa !5
  %229 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %227, ptr noundef nonnull @.str.30, ptr noundef %24, ptr noundef %228) #14
  br label %342

230:                                              ; preds = %223
  %.not197 = icmp eq ptr %.1155, null
  br i1 %.not197, label %231, label %237

231:                                              ; preds = %230
  %232 = load ptr, ptr @stderr, align 8, !tbaa !5
  %233 = load ptr, ptr @usage, align 8, !tbaa !5
  %234 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %232, ptr noundef nonnull @.str.30, ptr noundef %24, ptr noundef %233) #14
  %235 = load ptr, ptr @stderr, align 8, !tbaa !5
  %236 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %235, ptr noundef nonnull @.str.35, ptr noundef %24) #14
  br label %342

237:                                              ; preds = %230
  %238 = call i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef nonnull %9, ptr noundef nonnull %.1155, ptr noundef nonnull %.1157) #12
  %.not198 = icmp eq i32 %238, 1
  br i1 %.not198, label %242, label %239

239:                                              ; preds = %237
  %240 = load ptr, ptr @stderr, align 8, !tbaa !5
  %241 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %240, ptr noundef nonnull @.str.36, ptr noundef %24) #14
  br label %342

242:                                              ; preds = %237
  %243 = load i64, ptr %11, align 8, !tbaa !9
  %.not199 = icmp eq i64 %243, 0
  br i1 %.not199, label %244, label %246

244:                                              ; preds = %242
  %245 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %10, ptr noundef nonnull dereferenceable(1) @.str.37) #12
  store i64 16, ptr %11, align 8, !tbaa !9
  br label %246

246:                                              ; preds = %244, %242
  %247 = load ptr, ptr %7, align 8, !tbaa !5
  %248 = load i64, ptr %8, align 8, !tbaa !9
  %249 = call i32 @x509_cert_get_subject(ptr noundef %247, i64 noundef %248, ptr noundef nonnull %12, ptr noundef nonnull %13) #12
  %.not200 = icmp eq i32 %249, 1
  br i1 %.not200, label %253, label %250

250:                                              ; preds = %246
  %251 = load ptr, ptr @stderr, align 8, !tbaa !5
  %252 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %251, ptr noundef nonnull @.str.38, ptr noundef %24) #14
  br label %342

253:                                              ; preds = %246
  %.not201 = icmp eq i32 %.1152, 0
  br i1 %.not201, label %259, label %254

254:                                              ; preds = %253
  %255 = call i32 @x509_crl_exts_add_default_authority_key_identifier(ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef 512, ptr noundef nonnull %9) #12
  %.not202 = icmp eq i32 %255, 1
  br i1 %.not202, label %259, label %256

256:                                              ; preds = %254
  %257 = load ptr, ptr @stderr, align 8, !tbaa !5
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %257, ptr noundef nonnull @.str.39, ptr noundef %24) #14
  br label %342

259:                                              ; preds = %254, %253
  %260 = call i32 @x509_crl_exts_add_crl_number(ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef 512, i32 noundef -1, i32 noundef %.1150) #12
  %261 = icmp slt i32 %260, 0
  br i1 %261, label %262, label %265

262:                                              ; preds = %259
  %263 = load ptr, ptr @stderr, align 8, !tbaa !5
  %264 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %263, ptr noundef nonnull @.str.40, ptr noundef %24) #14
  br label %342

265:                                              ; preds = %259
  %266 = call i32 @x509_crl_exts_add_delta_crl_indicator(ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef 512, i32 noundef 1, i32 noundef %.1148) #12
  %267 = icmp slt i32 %266, 0
  br i1 %267, label %268, label %271

268:                                              ; preds = %265
  %269 = load ptr, ptr @stderr, align 8, !tbaa !5
  %270 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %269, ptr noundef nonnull @.str.41, ptr noundef %24) #14
  br label %342

271:                                              ; preds = %265
  %272 = icmp ne ptr %.1142, null
  %273 = icmp ne ptr %.1, null
  %or.cond = select i1 %272, i1 true, i1 %273
  br i1 %or.cond, label %274, label %287

274:                                              ; preds = %271
  br i1 %272, label %275, label %277

275:                                              ; preds = %274
  %276 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1142) #13
  br label %277

277:                                              ; preds = %274, %275
  %278 = phi i64 [ %276, %275 ], [ 0, %274 ]
  br i1 %273, label %279, label %281

279:                                              ; preds = %277
  %280 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1) #13
  br label %281

281:                                              ; preds = %277, %279
  %282 = phi i64 [ %280, %279 ], [ 0, %277 ]
  %283 = call i32 @x509_crl_exts_add_authority_info_acess(ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef 512, i32 noundef -1, ptr noundef %.1142, i64 noundef %278, ptr noundef %.1, i64 noundef %282) #12
  %.not203 = icmp eq i32 %283, 1
  br i1 %.not203, label %287, 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.42, ptr noundef %24) #14
  br label %342

287:                                              ; preds = %281, %271
  %288 = icmp ne ptr %.1146, null
  %289 = icmp ne ptr %.1144, null
  %or.cond3 = select i1 %288, i1 true, i1 %289
  br i1 %or.cond3, label %290, label %303

290:                                              ; preds = %287
  br i1 %288, label %291, label %293

291:                                              ; preds = %290
  %292 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1146) #13
  br label %293

293:                                              ; preds = %290, %291
  %294 = phi i64 [ %292, %291 ], [ 0, %290 ]
  br i1 %289, label %295, label %297

295:                                              ; preds = %293
  %296 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1144) #13
  br label %297

297:                                              ; preds = %293, %295
  %298 = phi i64 [ %296, %295 ], [ 0, %293 ]
  %299 = call i32 @x509_crl_exts_add_freshest_crl(ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef 512, i32 noundef -1, ptr noundef %.1146, i64 noundef %294, ptr noundef %.1144, i64 noundef %298) #12
  %.not204 = icmp eq i32 %299, 1
  br i1 %.not204, label %303, label %300

300:                                              ; preds = %297
  %301 = load ptr, ptr @stderr, align 8, !tbaa !5
  %302 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %301, ptr noundef nonnull @.str.43, ptr noundef %24) #14
  br label %342

303:                                              ; preds = %297, %287
  %304 = load ptr, ptr %12, align 8, !tbaa !5
  %305 = load i64, ptr %13, align 8, !tbaa !9
  %306 = load i64, ptr %14, align 8, !tbaa !9
  %307 = load ptr, ptr %3, align 8, !tbaa !5
  %308 = load i64, ptr %4, align 8, !tbaa !9
  %309 = load i64, ptr %16, align 8, !tbaa !9
  %.not205 = icmp eq i64 %309, 0
  %310 = select i1 %.not205, ptr null, ptr %15
  %311 = load i64, ptr %11, align 8, !tbaa !9
  %312 = call i32 @x509_crl_sign_to_der(i32 noundef 1, i32 noundef 16, ptr noundef %304, i64 noundef %305, i64 noundef %26, i64 noundef %306, ptr noundef %307, i64 noundef %308, ptr noundef %310, i64 noundef %309, ptr noundef nonnull %9, ptr noundef nonnull %10, i64 noundef %311, ptr noundef null, ptr noundef nonnull %6) #12
  %.not206 = icmp eq i32 %312, 1
  br i1 %.not206, label %316, label %313

313:                                              ; preds = %303
  %314 = load ptr, ptr @stderr, align 8, !tbaa !5
  %315 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %314, ptr noundef nonnull @.str.39, ptr noundef %24) #14
  br label %342

316:                                              ; preds = %303
  %317 = load i64, ptr %6, align 8, !tbaa !9
  %318 = call noalias ptr @malloc(i64 noundef %317) #16
  %.not207 = icmp eq ptr %318, null
  br i1 %.not207, label %319, label %322

319:                                              ; preds = %316
  %320 = load ptr, ptr @stderr, align 8, !tbaa !5
  %321 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %320, ptr noundef nonnull @.str.44, ptr noundef %24) #14
  br label %342

322:                                              ; preds = %316
  store ptr %318, ptr %5, align 8, !tbaa !5
  store i64 0, ptr %6, align 8, !tbaa !9
  %323 = load ptr, ptr %12, align 8, !tbaa !5
  %324 = load i64, ptr %13, align 8, !tbaa !9
  %325 = load i64, ptr %14, align 8, !tbaa !9
  %326 = load ptr, ptr %3, align 8, !tbaa !5
  %327 = load i64, ptr %4, align 8, !tbaa !9
  %328 = load i64, ptr %16, align 8, !tbaa !9
  %.not208 = icmp eq i64 %328, 0
  %329 = select i1 %.not208, ptr null, ptr %15
  %330 = load i64, ptr %11, align 8, !tbaa !9
  %331 = call i32 @x509_crl_sign_to_der(i32 noundef 1, i32 noundef 16, ptr noundef %323, i64 noundef %324, i64 noundef %26, i64 noundef %325, ptr noundef %326, i64 noundef %327, ptr noundef %329, i64 noundef %328, ptr noundef nonnull %9, ptr noundef nonnull %10, i64 noundef %330, ptr noundef nonnull %5, ptr noundef nonnull %6) #12
  %.not209 = icmp eq i32 %331, 1
  br i1 %.not209, label %335, label %332

332:                                              ; preds = %322
  %333 = load ptr, ptr @stderr, align 8, !tbaa !5
  %334 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %333, ptr noundef nonnull @.str.39, ptr noundef %24) #14
  br label %342

335:                                              ; preds = %322
  %336 = load i64, ptr %6, align 8, !tbaa !9
  %337 = call i64 @fwrite(ptr noundef nonnull %318, i64 noundef 1, i64 noundef %336, ptr noundef %.1160)
  %338 = load i64, ptr %6, align 8, !tbaa !9
  %.not210 = icmp eq i64 %337, %338
  br i1 %.not210, label %342, label %339

339:                                              ; preds = %335
  %340 = load ptr, ptr @stderr, align 8, !tbaa !5
  %341 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %340, ptr noundef nonnull @.str.45, ptr noundef %24) #14
  br label %358

342:                                              ; preds = %214, %335, %332, %319, %313, %300, %284, %268, %262, %256, %250, %239, %231, %224, %217, %._crit_edge.thread, %.loopexit, %192, %128, %123, %107, %83, %71, %56, %44, %30
  %.0167 = phi i32 [ 1, %192 ], [ 1, %.loopexit ], [ 1, %123 ], [ 1, %128 ], [ 1, %107 ], [ 1, %83 ], [ 1, %71 ], [ 1, %56 ], [ 1, %44 ], [ 0, %30 ], [ 1, %214 ], [ 1, %239 ], [ 1, %250 ], [ 1, %256 ], [ 1, %262 ], [ 1, %268 ], [ 1, %284 ], [ 1, %300 ], [ 1, %313 ], [ 1, %332 ], [ 1, %319 ], [ 1, %231 ], [ 1, %224 ], [ 1, %217 ], [ 1, %._crit_edge.thread ], [ 0, %335 ]
  %.2164 = phi ptr [ %.0162395, %192 ], [ %.0162395, %.loopexit ], [ %.0162395, %123 ], [ %.0162395, %128 ], [ %.0162395, %107 ], [ %.0162395, %83 ], [ %.0162395, %71 ], [ %54, %56 ], [ %.0162395, %44 ], [ %.0162395, %30 ], [ %.1163, %214 ], [ %.1163, %239 ], [ %.1163, %250 ], [ %.1163, %256 ], [ %.1163, %262 ], [ %.1163, %268 ], [ %.1163, %284 ], [ %.1163, %300 ], [ %.1163, %313 ], [ %.1163, %332 ], [ %.1163, %319 ], [ %.1163, %231 ], [ %.1163, %224 ], [ %.1163, %217 ], [ %.0162.lcssa499, %._crit_edge.thread ], [ %.1163, %335 ]
  %.2161 = phi ptr [ %.0159396, %192 ], [ %.0159396, %.loopexit ], [ %.0159396, %123 ], [ %.0159396, %128 ], [ %.0159396, %107 ], [ %.0159396, %83 ], [ %.0159396, %71 ], [ null, %56 ], [ %.0159396, %44 ], [ %.0159396, %30 ], [ %.1160, %214 ], [ %.1160, %239 ], [ %.1160, %250 ], [ %.1160, %256 ], [ %.1160, %262 ], [ %.1160, %268 ], [ %.1160, %284 ], [ %.1160, %300 ], [ %.1160, %313 ], [ %.1160, %332 ], [ %.1160, %319 ], [ %.1160, %231 ], [ %.1160, %224 ], [ %.1160, %217 ], [ %.0159.lcssa500, %._crit_edge.thread ], [ %.1160, %335 ]
  %.0158 = phi ptr [ null, %192 ], [ null, %.loopexit ], [ null, %123 ], [ null, %128 ], [ null, %107 ], [ null, %83 ], [ null, %71 ], [ null, %56 ], [ null, %44 ], [ null, %30 ], [ null, %214 ], [ null, %239 ], [ null, %250 ], [ null, %256 ], [ null, %262 ], [ null, %268 ], [ null, %284 ], [ null, %300 ], [ null, %313 ], [ %318, %332 ], [ null, %319 ], [ null, %231 ], [ null, %224 ], [ null, %217 ], [ null, %._crit_edge.thread ], [ %318, %335 ]
  %.2 = phi ptr [ %.0156397, %192 ], [ %.0156397, %.loopexit ], [ %.0156397, %123 ], [ %.0156397, %128 ], [ %.0156397, %107 ], [ null, %83 ], [ %.0156397, %71 ], [ %.0156397, %56 ], [ %.0156397, %44 ], [ %.0156397, %30 ], [ %.1157, %214 ], [ %.1157, %239 ], [ %.1157, %250 ], [ %.1157, %256 ], [ %.1157, %262 ], [ %.1157, %268 ], [ %.1157, %284 ], [ %.1157, %300 ], [ %.1157, %313 ], [ %.1157, %332 ], [ %.1157, %319 ], [ %.1157, %231 ], [ null, %224 ], [ %.1157, %217 ], [ %.0156.lcssa501, %._crit_edge.thread ], [ %.1157, %335 ]
  %343 = load ptr, ptr %3, align 8, !tbaa !5
  %.not233 = icmp eq ptr %343, null
  br i1 %.not233, label %345, label %344

344:                                              ; preds = %342
  call void @free(ptr noundef nonnull %343) #12
  br label %345

345:                                              ; preds = %344, %342
  %.not234 = icmp eq ptr %.2, null
  br i1 %.not234, label %348, label %346

346:                                              ; preds = %345
  %347 = call i32 @fclose(ptr noundef nonnull %.2)
  br label %348

348:                                              ; preds = %346, %345
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %.not235 = icmp eq ptr %349, null
  br i1 %.not235, label %351, label %350

350:                                              ; preds = %348
  call void @free(ptr noundef nonnull %349) #12
  br label %351

351:                                              ; preds = %350, %348
  %352 = icmp ne ptr %.2164, null
  %353 = icmp ne ptr %.2161, null
  %or.cond5 = select i1 %352, i1 %353, i1 false
  br i1 %or.cond5, label %354, label %356

354:                                              ; preds = %351
  %355 = call i32 @fclose(ptr noundef nonnull %.2161)
  br label %356

356:                                              ; preds = %354, %351
  %.not236 = icmp eq ptr %.0158, null
  br i1 %.not236, label %358, label %357

357:                                              ; preds = %356
  call void @free(ptr noundef nonnull %.0158) #12
  br label %358

358:                                              ; preds = %356, %357, %339
  %.0153 = phi i32 [ -1, %339 ], [ %.0167, %357 ], [ %.0167, %356 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 8192, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #12
  ret i32 %.0153
}

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

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

declare i32 @file_read_all(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

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

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #5

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #7

declare i32 @x509_cert_new_from_file(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strncpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly, i64 noundef) local_unnamed_addr #8

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

declare i32 @asn1_time_from_str(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #9

declare i32 @x509_revoked_cert_from_der(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

declare i32 @format_bytes(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #6

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

declare i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #8

declare i32 @x509_cert_get_subject(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

declare i32 @x509_crl_exts_add_default_authority_key_identifier(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #6

declare i32 @x509_crl_exts_add_crl_number(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

declare i32 @x509_crl_exts_add_delta_crl_indicator(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

declare i32 @x509_crl_exts_add_authority_info_acess(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #6

declare i32 @x509_crl_exts_add_freshest_crl(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #6

declare i32 @x509_crl_sign_to_der(i32 noundef, i32 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #10

; Function Attrs: nofree nounwind
declare noundef i64 @fwrite(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #11

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #5

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { mustprogress nofree nounwind willreturn memory(argmem: 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 #5 = { 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 #6 = { "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 #7 = { mustprogress nofree nosync nounwind willreturn memory(none) "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 #8 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "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 #9 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #10 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #11 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #12 = { nounwind }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { cold nounwind }
attributes #15 = { nounwind willreturn memory(none) }
attributes #16 = { nounwind allocsize(0) }

!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 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass