; LLVM IR from aws/s2n-tls :: tls (s2n_x509_validator)

; 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.s2n_debug_info = type { ptr, ptr }
%struct.s2n_result = type { i32 }
%struct.s2n_x509_validator = type { ptr, ptr, i8, i8, i16, ptr, i32, ptr, %struct.s2n_cert_validation_info, i8 }
%struct.s2n_cert_validation_info = type { i8, [3 x i8] }
%struct.s2n_x509_trust_store = type { ptr, i8 }
%struct.s2n_connection = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [22 x i8], [22 x i8], [22 x i8], i32, i32, %struct.s2n_timer, i64, i64, [32 x i8], i8, i8, i8, i8, i8, i8, i8, ptr, ptr, %struct.s2n_secrets, ptr, ptr, %struct.s2n_kex_parameters, %struct.s2n_handshake_parameters, %struct.s2n_psk_parameters, ptr, i8, i32, [5 x i8], %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, i32, i64, [2 x i8], %struct.s2n_stuffer, i8, i8, i8, i8, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, %struct.s2n_handshake, i16, i32, i16, i64, i8, i64, i64, i64, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, [256 x i8], [256 x i8], i32, %struct.s2n_blob, i32, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_client_hello, %struct.s2n_x509_validator, ptr, ptr, i8, i32, %struct.s2n_blob, i32, %struct.s2n_ticket_fields, [138 x i8], %struct.s2n_stuffer, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8, i16, i16, i32, i32, %struct.s2n_blob, i32, %struct.s2n_post_handshake, %struct.s2n_atomic_flag, i8, i8 }
%struct.s2n_timer = type { i64 }
%struct.s2n_secrets = type { %union.anon, i32 }
%union.anon = type { %struct.s2n_tls13_secrets }
%struct.s2n_tls13_secrets = type { [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], i32 }
%struct.s2n_kex_parameters = type { %struct.s2n_dh_params, %struct.s2n_ecc_evp_params, [4 x ptr], %struct.s2n_ecc_evp_params, %struct.s2n_kem_group_params, %struct.s2n_kem_group_params, [8 x ptr], %struct.s2n_kem_params, %struct.s2n_blob, %struct.s2n_blob }
%struct.s2n_dh_params = type { ptr }
%struct.s2n_ecc_evp_params = type { ptr, ptr }
%struct.s2n_kem_group_params = type { ptr, %struct.s2n_kem_params, %struct.s2n_ecc_evp_params }
%struct.s2n_kem_params = type { ptr, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8 }
%struct.s2n_handshake_parameters = type { %struct.s2n_pkey, %struct.s2n_pkey, %struct.s2n_blob, i32, %struct.s2n_sig_scheme_list, ptr, ptr, ptr, [4 x ptr], [4 x ptr], i8, i8, [32 x i8], [32 x i8] }
%struct.s2n_pkey = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.s2n_sig_scheme_list = type { [128 x i16], i8 }
%struct.s2n_psk_parameters = type { i32, %struct.s2n_array, i16, i16, ptr, i32 }
%struct.s2n_array = type { %struct.s2n_blob, i32, i32 }
%struct.s2n_handshake = type { %struct.s2n_stuffer, ptr, [8 x i8], [48 x i8], [48 x i8], i8, i32, i32, i32, i32, %struct.s2n_offered_early_data, i8, i32 }
%struct.s2n_offered_early_data = type { ptr }
%struct.s2n_client_hello = type { %struct.s2n_blob, %struct.s2n_parsed_extensions_list, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8 }
%struct.s2n_parsed_extensions_list = type { [21 x %struct.s2n_parsed_extension], %struct.s2n_blob, i16 }
%struct.s2n_parsed_extension = type { %struct.s2n_blob, i16, i16, i8 }
%struct.s2n_ticket_fields = type { %struct.s2n_blob, i32 }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_post_handshake = type { %struct.s2n_stuffer, [4 x i8] }
%struct.s2n_atomic_flag = type { i32 }

@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@.str.24 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [95 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #0

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

declare i32 @s2n_calculate_stacktrace() #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @s2n_result_is_ok(i32) #4

declare i32 @OPENSSL_sk_num(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @ossl_check_const_X509_sk_type(ptr noundef) #4

declare ptr @OPENSSL_sk_value(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_x509_validator_validate_cert_stapled_ocsp_response(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3) #5 {
  %5 = alloca %struct.s2n_result, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i64, align 8
  %30 = alloca %struct.s2n_result, align 4
  %31 = alloca i64, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i64, align 8
  %36 = alloca %struct.s2n_result, align 4
  %37 = alloca %struct.s2n_result, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.s2n_x509_validator, ptr %38, i32 0, i32 2
  %40 = load i8, ptr %39, align 8, !tbaa !11
  %41 = zext i8 %40 to i32
  %42 = icmp ne i32 %41, 0
  br i1 %42, label %48, label %43

43:                                               ; preds = %4
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.s2n_x509_validator, ptr %44, i32 0, i32 3
  %46 = load i8, ptr %45, align 1, !tbaa !16
  %47 = icmp ne i8 %46, 0
  br i1 %47, label %52, label %48

48:                                               ; preds = %43, %4
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.s2n_x509_validator, ptr %49, i32 0, i32 6
  store i32 5, ptr %50, align 8, !tbaa !17
  %51 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 0, ptr %51, align 4, !tbaa !18
  br label %920

52:                                               ; preds = %43
  br label %53

53:                                               ; preds = %52
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.s2n_x509_validator, ptr %54, i32 0, i32 6
  %56 = load i32, ptr %55, align 8, !tbaa !17
  %57 = icmp eq i32 %56, 4
  br i1 %57, label %90, label %58

58:                                               ; preds = %53
  br label %59

59:                                               ; preds = %58
  br label %60

60:                                               ; preds = %59
  %61 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %62 = getelementptr inbounds %struct.s2n_debug_info, ptr %61, i32 0, i32 0
  store ptr @.str.24, ptr %62, align 8, !tbaa !20
  %63 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %64 = getelementptr inbounds %struct.s2n_debug_info, ptr %63, i32 0, i32 0
  %65 = load ptr, ptr %64, align 8, !tbaa !20
  %66 = getelementptr inbounds i8, ptr %65, i64 21
  %67 = call ptr @strrchr(ptr noundef %66, i32 noundef 47) #6
  %68 = icmp ne ptr %67, null
  br i1 %68, label %69, label %76

69:                                               ; preds = %60
  %70 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %71 = getelementptr inbounds %struct.s2n_debug_info, ptr %70, i32 0, i32 0
  %72 = load ptr, ptr %71, align 8, !tbaa !20
  %73 = getelementptr inbounds i8, ptr %72, i64 21
  %74 = call ptr @strrchr(ptr noundef %73, i32 noundef 47) #6
  %75 = getelementptr inbounds i8, ptr %74, i64 1
  br label %81

76:                                               ; preds = %60
  %77 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %78 = getelementptr inbounds %struct.s2n_debug_info, ptr %77, i32 0, i32 0
  %79 = load ptr, ptr %78, align 8, !tbaa !20
  %80 = getelementptr inbounds i8, ptr %79, i64 21
  br label %81

81:                                               ; preds = %76, %69
  %82 = phi ptr [ %75, %69 ], [ %80, %76 ]
  %83 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %84 = getelementptr inbounds %struct.s2n_debug_info, ptr %83, i32 0, i32 1
  store ptr %82, ptr %84, align 8, !tbaa !22
  %85 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653261, ptr %85, align 4, !tbaa !9
  %86 = call i32 @s2n_calculate_stacktrace()
  br label %87

87:                                               ; preds = %81
  %88 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %88, align 4, !tbaa !18
  br label %920

89:                                               ; No predecessors!
  br label %90

90:                                               ; preds = %89, %53
  br label %91

91:                                               ; preds = %90
  br label %92

92:                                               ; preds = %91
  %93 = load ptr, ptr %8, align 8, !tbaa !5
  %94 = icmp ne ptr %93, null
  br i1 %94, label %127, label %95

95:                                               ; preds = %92
  br label %96

96:                                               ; preds = %95
  br label %97

97:                                               ; preds = %96
  %98 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %99 = getelementptr inbounds %struct.s2n_debug_info, ptr %98, i32 0, i32 0
  store ptr @.str.25, ptr %99, align 8, !tbaa !20
  %100 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %101 = getelementptr inbounds %struct.s2n_debug_info, ptr %100, i32 0, i32 0
  %102 = load ptr, ptr %101, align 8, !tbaa !20
  %103 = getelementptr inbounds i8, ptr %102, i64 21
  %104 = call ptr @strrchr(ptr noundef %103, i32 noundef 47) #6
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %113

106:                                              ; preds = %97
  %107 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %108 = getelementptr inbounds %struct.s2n_debug_info, ptr %107, i32 0, i32 0
  %109 = load ptr, ptr %108, align 8, !tbaa !20
  %110 = getelementptr inbounds i8, ptr %109, i64 21
  %111 = call ptr @strrchr(ptr noundef %110, i32 noundef 47) #6
  %112 = getelementptr inbounds i8, ptr %111, i64 1
  br label %118

113:                                              ; preds = %97
  %114 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %115 = getelementptr inbounds %struct.s2n_debug_info, ptr %114, i32 0, i32 0
  %116 = load ptr, ptr %115, align 8, !tbaa !20
  %117 = getelementptr inbounds i8, ptr %116, i64 21
  br label %118

118:                                              ; preds = %113, %106
  %119 = phi ptr [ %112, %106 ], [ %117, %113 ]
  %120 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %121 = getelementptr inbounds %struct.s2n_debug_info, ptr %120, i32 0, i32 1
  store ptr %119, ptr %121, align 8, !tbaa !22
  %122 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %122, align 4, !tbaa !9
  %123 = call i32 @s2n_calculate_stacktrace()
  br label %124

124:                                              ; preds = %118
  %125 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %125, align 4, !tbaa !18
  br label %920

126:                                              ; No predecessors!
  br label %127

127:                                              ; preds = %126, %92
  br label %128

128:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %129 = load i32, ptr %9, align 4, !tbaa !9
  %130 = zext i32 %129 to i64
  %131 = call ptr @d2i_OCSP_RESPONSE(ptr noundef null, ptr noundef %8, i64 noundef %130)
  store ptr %131, ptr %10, align 8, !tbaa !5
  br label %132

132:                                              ; preds = %128
  %133 = load ptr, ptr %10, align 8, !tbaa !5
  %134 = icmp ne ptr %133, null
  br i1 %134, label %169, label %135

135:                                              ; preds = %132
  br label %136

136:                                              ; preds = %135
  br label %137

137:                                              ; preds = %136
  %138 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %139 = getelementptr inbounds %struct.s2n_debug_info, ptr %138, i32 0, i32 0
  store ptr @.str.26, ptr %139, align 8, !tbaa !20
  %140 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %141 = getelementptr inbounds %struct.s2n_debug_info, ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 8, !tbaa !20
  %143 = getelementptr inbounds i8, ptr %142, i64 21
  %144 = call ptr @strrchr(ptr noundef %143, i32 noundef 47) #6
  %145 = icmp ne ptr %144, null
  br i1 %145, label %146, label %153

146:                                              ; preds = %137
  %147 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %148 = getelementptr inbounds %struct.s2n_debug_info, ptr %147, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !20
  %150 = getelementptr inbounds i8, ptr %149, i64 21
  %151 = call ptr @strrchr(ptr noundef %150, i32 noundef 47) #6
  %152 = getelementptr inbounds i8, ptr %151, i64 1
  br label %158

153:                                              ; preds = %137
  %154 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %155 = getelementptr inbounds %struct.s2n_debug_info, ptr %154, i32 0, i32 0
  %156 = load ptr, ptr %155, align 8, !tbaa !20
  %157 = getelementptr inbounds i8, ptr %156, i64 21
  br label %158

158:                                              ; preds = %153, %146
  %159 = phi ptr [ %152, %146 ], [ %157, %153 ]
  %160 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %161 = getelementptr inbounds %struct.s2n_debug_info, ptr %160, i32 0, i32 1
  store ptr %159, ptr %161, align 8, !tbaa !22
  %162 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762074, ptr %162, align 4, !tbaa !9
  %163 = call i32 @s2n_calculate_stacktrace()
  br label %164

164:                                              ; preds = %158
  br label %165

165:                                              ; preds = %164
  %166 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %166, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %918

167:                                              ; No predecessors!
  br label %168

168:                                              ; preds = %167
  br label %169

169:                                              ; preds = %168, %132
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = call i32 @OCSP_response_status(ptr noundef %172)
  store i32 %173, ptr %12, align 4, !tbaa !9
  br label %174

174:                                              ; preds = %171
  %175 = load i32, ptr %12, align 4, !tbaa !9
  %176 = icmp eq i32 %175, 0
  br i1 %176, label %211, label %177

177:                                              ; preds = %174
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178
  %180 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %181 = getelementptr inbounds %struct.s2n_debug_info, ptr %180, i32 0, i32 0
  store ptr @.str.27, ptr %181, align 8, !tbaa !20
  %182 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %183 = getelementptr inbounds %struct.s2n_debug_info, ptr %182, i32 0, i32 0
  %184 = load ptr, ptr %183, align 8, !tbaa !20
  %185 = getelementptr inbounds i8, ptr %184, i64 21
  %186 = call ptr @strrchr(ptr noundef %185, i32 noundef 47) #6
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %195

188:                                              ; preds = %179
  %189 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %190 = getelementptr inbounds %struct.s2n_debug_info, ptr %189, i32 0, i32 0
  %191 = load ptr, ptr %190, align 8, !tbaa !20
  %192 = getelementptr inbounds i8, ptr %191, i64 21
  %193 = call ptr @strrchr(ptr noundef %192, i32 noundef 47) #6
  %194 = getelementptr inbounds i8, ptr %193, i64 1
  br label %200

195:                                              ; preds = %179
  %196 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %197 = getelementptr inbounds %struct.s2n_debug_info, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !20
  %199 = getelementptr inbounds i8, ptr %198, i64 21
  br label %200

200:                                              ; preds = %195, %188
  %201 = phi ptr [ %194, %188 ], [ %199, %195 ]
  %202 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %203 = getelementptr inbounds %struct.s2n_debug_info, ptr %202, i32 0, i32 1
  store ptr %201, ptr %203, align 8, !tbaa !22
  %204 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %204, align 4, !tbaa !9
  %205 = call i32 @s2n_calculate_stacktrace()
  br label %206

206:                                              ; preds = %200
  br label %207

207:                                              ; preds = %206
  %208 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %208, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %917

209:                                              ; No predecessors!
  br label %210

210:                                              ; preds = %209
  br label %211

211:                                              ; preds = %210, %174
  br label %212

212:                                              ; preds = %211
  br label %213

213:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %214 = load ptr, ptr %10, align 8, !tbaa !5
  %215 = call ptr @OCSP_response_get1_basic(ptr noundef %214)
  store ptr %215, ptr %13, align 8, !tbaa !5
  br label %216

216:                                              ; preds = %213
  %217 = load ptr, ptr %13, align 8, !tbaa !5
  %218 = icmp ne ptr %217, null
  br i1 %218, label %253, label %219

219:                                              ; preds = %216
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220
  %222 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %223 = getelementptr inbounds %struct.s2n_debug_info, ptr %222, i32 0, i32 0
  store ptr @.str.28, ptr %223, align 8, !tbaa !20
  %224 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %225 = getelementptr inbounds %struct.s2n_debug_info, ptr %224, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8, !tbaa !20
  %227 = getelementptr inbounds i8, ptr %226, i64 21
  %228 = call ptr @strrchr(ptr noundef %227, i32 noundef 47) #6
  %229 = icmp ne ptr %228, null
  br i1 %229, label %230, label %237

230:                                              ; preds = %221
  %231 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %232 = getelementptr inbounds %struct.s2n_debug_info, ptr %231, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !20
  %234 = getelementptr inbounds i8, ptr %233, i64 21
  %235 = call ptr @strrchr(ptr noundef %234, i32 noundef 47) #6
  %236 = getelementptr inbounds i8, ptr %235, i64 1
  br label %242

237:                                              ; preds = %221
  %238 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %239 = getelementptr inbounds %struct.s2n_debug_info, ptr %238, i32 0, i32 0
  %240 = load ptr, ptr %239, align 8, !tbaa !20
  %241 = getelementptr inbounds i8, ptr %240, i64 21
  br label %242

242:                                              ; preds = %237, %230
  %243 = phi ptr [ %236, %230 ], [ %241, %237 ]
  %244 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %245 = getelementptr inbounds %struct.s2n_debug_info, ptr %244, i32 0, i32 1
  store ptr %243, ptr %245, align 8, !tbaa !22
  %246 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762074, ptr %246, align 4, !tbaa !9
  %247 = call i32 @s2n_calculate_stacktrace()
  br label %248

248:                                              ; preds = %242
  br label %249

249:                                              ; preds = %248
  %250 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %250, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %916

251:                                              ; No predecessors!
  br label %252

252:                                              ; preds = %251
  br label %253

253:                                              ; preds = %252, %216
  br label %254

254:                                              ; preds = %253
  br label %255

255:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.s2n_x509_validator, ptr %256, i32 0, i32 1
  %258 = load ptr, ptr %257, align 8, !tbaa !23
  %259 = call ptr @X509_STORE_CTX_get1_chain(ptr noundef %258)
  store ptr %259, ptr %14, align 8, !tbaa !5
  br label %260

260:                                              ; preds = %255
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = icmp ne ptr %261, null
  br i1 %262, label %297, label %263

263:                                              ; preds = %260
  br label %264

264:                                              ; preds = %263
  br label %265

265:                                              ; preds = %264
  %266 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %267 = getelementptr inbounds %struct.s2n_debug_info, ptr %266, i32 0, i32 0
  store ptr @.str.29, ptr %267, align 8, !tbaa !20
  %268 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %269 = getelementptr inbounds %struct.s2n_debug_info, ptr %268, i32 0, i32 0
  %270 = load ptr, ptr %269, align 8, !tbaa !20
  %271 = getelementptr inbounds i8, ptr %270, i64 21
  %272 = call ptr @strrchr(ptr noundef %271, i32 noundef 47) #6
  %273 = icmp ne ptr %272, null
  br i1 %273, label %274, label %281

274:                                              ; preds = %265
  %275 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %276 = getelementptr inbounds %struct.s2n_debug_info, ptr %275, i32 0, i32 0
  %277 = load ptr, ptr %276, align 8, !tbaa !20
  %278 = getelementptr inbounds i8, ptr %277, i64 21
  %279 = call ptr @strrchr(ptr noundef %278, i32 noundef 47) #6
  %280 = getelementptr inbounds i8, ptr %279, i64 1
  br label %286

281:                                              ; preds = %265
  %282 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %283 = getelementptr inbounds %struct.s2n_debug_info, ptr %282, i32 0, i32 0
  %284 = load ptr, ptr %283, align 8, !tbaa !20
  %285 = getelementptr inbounds i8, ptr %284, i64 21
  br label %286

286:                                              ; preds = %281, %274
  %287 = phi ptr [ %280, %274 ], [ %285, %281 ]
  %288 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %289 = getelementptr inbounds %struct.s2n_debug_info, ptr %288, i32 0, i32 1
  store ptr %287, ptr %289, align 8, !tbaa !22
  %290 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %290, align 4, !tbaa !9
  %291 = call i32 @s2n_calculate_stacktrace()
  br label %292

292:                                              ; preds = %286
  br label %293

293:                                              ; preds = %292
  %294 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %294, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %913

295:                                              ; No predecessors!
  br label %296

296:                                              ; preds = %295
  br label %297

297:                                              ; preds = %296, %260
  br label %298

298:                                              ; preds = %297
  br label %299

299:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %300 = load ptr, ptr %14, align 8, !tbaa !5
  %301 = call ptr @ossl_check_const_X509_sk_type(ptr noundef %300)
  %302 = call i32 @OPENSSL_sk_num(ptr noundef %301)
  store i32 %302, ptr %15, align 4, !tbaa !9
  br label %303

303:                                              ; preds = %299
  %304 = load i32, ptr %15, align 4, !tbaa !9
  %305 = icmp sgt i32 %304, 0
  br i1 %305, label %340, label %306

306:                                              ; preds = %303
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307
  %309 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %310 = getelementptr inbounds %struct.s2n_debug_info, ptr %309, i32 0, i32 0
  store ptr @.str.30, ptr %310, align 8, !tbaa !20
  %311 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %312 = getelementptr inbounds %struct.s2n_debug_info, ptr %311, i32 0, i32 0
  %313 = load ptr, ptr %312, align 8, !tbaa !20
  %314 = getelementptr inbounds i8, ptr %313, i64 21
  %315 = call ptr @strrchr(ptr noundef %314, i32 noundef 47) #6
  %316 = icmp ne ptr %315, null
  br i1 %316, label %317, label %324

317:                                              ; preds = %308
  %318 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %319 = getelementptr inbounds %struct.s2n_debug_info, ptr %318, i32 0, i32 0
  %320 = load ptr, ptr %319, align 8, !tbaa !20
  %321 = getelementptr inbounds i8, ptr %320, i64 21
  %322 = call ptr @strrchr(ptr noundef %321, i32 noundef 47) #6
  %323 = getelementptr inbounds i8, ptr %322, i64 1
  br label %329

324:                                              ; preds = %308
  %325 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %326 = getelementptr inbounds %struct.s2n_debug_info, ptr %325, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8, !tbaa !20
  %328 = getelementptr inbounds i8, ptr %327, i64 21
  br label %329

329:                                              ; preds = %324, %317
  %330 = phi ptr [ %323, %317 ], [ %328, %324 ]
  %331 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %332 = getelementptr inbounds %struct.s2n_debug_info, ptr %331, i32 0, i32 1
  store ptr %330, ptr %332, align 8, !tbaa !22
  %333 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762114, ptr %333, align 4, !tbaa !9
  %334 = call i32 @s2n_calculate_stacktrace()
  br label %335

335:                                              ; preds = %329
  br label %336

336:                                              ; preds = %335
  %337 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %337, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %912

338:                                              ; No predecessors!
  br label %339

339:                                              ; preds = %338
  br label %340

340:                                              ; preds = %339, %303
  br label %341

341:                                              ; preds = %340
  br label %342

342:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %343 = load ptr, ptr %14, align 8, !tbaa !5
  %344 = call ptr @ossl_check_const_X509_sk_type(ptr noundef %343)
  %345 = call ptr @OPENSSL_sk_value(ptr noundef %344, i32 noundef 0)
  store ptr %345, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  store ptr null, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %367, %342
  %347 = load i32, ptr %18, align 4, !tbaa !9
  %348 = load i32, ptr %15, align 4, !tbaa !9
  %349 = icmp slt i32 %347, %348
  br i1 %349, label %351, label %350

350:                                              ; preds = %346
  store i32 44, ptr %11, align 4
  br label %370

351:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %352 = load ptr, ptr %14, align 8, !tbaa !5
  %353 = call ptr @ossl_check_const_X509_sk_type(ptr noundef %352)
  %354 = load i32, ptr %18, align 4, !tbaa !9
  %355 = call ptr @OPENSSL_sk_value(ptr noundef %353, i32 noundef %354)
  store ptr %355, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %356 = load ptr, ptr %19, align 8, !tbaa !5
  %357 = load ptr, ptr %16, align 8, !tbaa !5
  %358 = call i32 @X509_check_issued(ptr noundef %356, ptr noundef %357)
  store i32 %358, ptr %20, align 4, !tbaa !9
  %359 = load i32, ptr %20, align 4, !tbaa !9
  %360 = icmp eq i32 %359, 0
  br i1 %360, label %361, label %363

361:                                              ; preds = %351
  %362 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %362, ptr %17, align 8, !tbaa !5
  store i32 44, ptr %11, align 4
  br label %364

363:                                              ; preds = %351
  store i32 0, ptr %11, align 4
  br label %364

364:                                              ; preds = %363, %361
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  %365 = load i32, ptr %11, align 4
  switch i32 %365, label %370 [
    i32 0, label %366
  ]

366:                                              ; preds = %364
  br label %367

367:                                              ; preds = %366
  %368 = load i32, ptr %18, align 4, !tbaa !9
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %18, align 4, !tbaa !9
  br label %346, !llvm.loop !24

370:                                              ; preds = %364, %350
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %371

371:                                              ; preds = %370
  br label %372

372:                                              ; preds = %371
  %373 = load ptr, ptr %17, align 8, !tbaa !5
  %374 = icmp ne ptr %373, null
  br i1 %374, label %409, label %375

375:                                              ; preds = %372
  br label %376

376:                                              ; preds = %375
  br label %377

377:                                              ; preds = %376
  %378 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %379 = getelementptr inbounds %struct.s2n_debug_info, ptr %378, i32 0, i32 0
  store ptr @.str.31, ptr %379, align 8, !tbaa !20
  %380 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %381 = getelementptr inbounds %struct.s2n_debug_info, ptr %380, i32 0, i32 0
  %382 = load ptr, ptr %381, align 8, !tbaa !20
  %383 = getelementptr inbounds i8, ptr %382, i64 21
  %384 = call ptr @strrchr(ptr noundef %383, i32 noundef 47) #6
  %385 = icmp ne ptr %384, null
  br i1 %385, label %386, label %393

386:                                              ; preds = %377
  %387 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %388 = getelementptr inbounds %struct.s2n_debug_info, ptr %387, i32 0, i32 0
  %389 = load ptr, ptr %388, align 8, !tbaa !20
  %390 = getelementptr inbounds i8, ptr %389, i64 21
  %391 = call ptr @strrchr(ptr noundef %390, i32 noundef 47) #6
  %392 = getelementptr inbounds i8, ptr %391, i64 1
  br label %398

393:                                              ; preds = %377
  %394 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %395 = getelementptr inbounds %struct.s2n_debug_info, ptr %394, i32 0, i32 0
  %396 = load ptr, ptr %395, align 8, !tbaa !20
  %397 = getelementptr inbounds i8, ptr %396, i64 21
  br label %398

398:                                              ; preds = %393, %386
  %399 = phi ptr [ %392, %386 ], [ %397, %393 ]
  %400 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %401 = getelementptr inbounds %struct.s2n_debug_info, ptr %400, i32 0, i32 1
  store ptr %399, ptr %401, align 8, !tbaa !22
  %402 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %402, align 4, !tbaa !9
  %403 = call i32 @s2n_calculate_stacktrace()
  br label %404

404:                                              ; preds = %398
  br label %405

405:                                              ; preds = %404
  %406 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %406, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %911

407:                                              ; No predecessors!
  br label %408

408:                                              ; preds = %407
  br label %409

409:                                              ; preds = %408, %372
  br label %410

410:                                              ; preds = %409
  br label %411

411:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %412 = load ptr, ptr %13, align 8, !tbaa !5
  %413 = load ptr, ptr %14, align 8, !tbaa !5
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.s2n_x509_validator, ptr %414, i32 0, i32 0
  %416 = load ptr, ptr %415, align 8, !tbaa !26
  %417 = getelementptr inbounds %struct.s2n_x509_trust_store, ptr %416, i32 0, i32 0
  %418 = load ptr, ptr %417, align 8, !tbaa !27
  %419 = call i32 @OCSP_basic_verify(ptr noundef %412, ptr noundef %413, ptr noundef %418, i64 noundef 0)
  store i32 %419, ptr %21, align 4, !tbaa !9
  br label %420

420:                                              ; preds = %411
  %421 = load i32, ptr %21, align 4, !tbaa !9
  %422 = icmp eq i32 %421, 1
  br i1 %422, label %457, label %423

423:                                              ; preds = %420
  br label %424

424:                                              ; preds = %423
  br label %425

425:                                              ; preds = %424
  %426 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %427 = getelementptr inbounds %struct.s2n_debug_info, ptr %426, i32 0, i32 0
  store ptr @.str.32, ptr %427, align 8, !tbaa !20
  %428 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %429 = getelementptr inbounds %struct.s2n_debug_info, ptr %428, i32 0, i32 0
  %430 = load ptr, ptr %429, align 8, !tbaa !20
  %431 = getelementptr inbounds i8, ptr %430, i64 21
  %432 = call ptr @strrchr(ptr noundef %431, i32 noundef 47) #6
  %433 = icmp ne ptr %432, null
  br i1 %433, label %434, label %441

434:                                              ; preds = %425
  %435 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %436 = getelementptr inbounds %struct.s2n_debug_info, ptr %435, i32 0, i32 0
  %437 = load ptr, ptr %436, align 8, !tbaa !20
  %438 = getelementptr inbounds i8, ptr %437, i64 21
  %439 = call ptr @strrchr(ptr noundef %438, i32 noundef 47) #6
  %440 = getelementptr inbounds i8, ptr %439, i64 1
  br label %446

441:                                              ; preds = %425
  %442 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %443 = getelementptr inbounds %struct.s2n_debug_info, ptr %442, i32 0, i32 0
  %444 = load ptr, ptr %443, align 8, !tbaa !20
  %445 = getelementptr inbounds i8, ptr %444, i64 21
  br label %446

446:                                              ; preds = %441, %434
  %447 = phi ptr [ %440, %434 ], [ %445, %441 ]
  %448 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %449 = getelementptr inbounds %struct.s2n_debug_info, ptr %448, i32 0, i32 1
  store ptr %447, ptr %449, align 8, !tbaa !22
  %450 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %450, align 4, !tbaa !9
  %451 = call i32 @s2n_calculate_stacktrace()
  br label %452

452:                                              ; preds = %446
  br label %453

453:                                              ; preds = %452
  %454 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %454, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %910

455:                                              ; No predecessors!
  br label %456

456:                                              ; preds = %455
  br label %457

457:                                              ; preds = %456, %420
  br label %458

458:                                              ; preds = %457
  br label %459

459:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %460 = call ptr @EVP_sha1()
  %461 = load ptr, ptr %16, align 8, !tbaa !5
  %462 = load ptr, ptr %17, align 8, !tbaa !5
  %463 = call ptr @OCSP_cert_to_id(ptr noundef %460, ptr noundef %461, ptr noundef %462)
  store ptr %463, ptr %24, align 8, !tbaa !5
  br label %464

464:                                              ; preds = %459
  %465 = load ptr, ptr %24, align 8, !tbaa !5
  %466 = icmp ne ptr %465, null
  br i1 %466, label %501, label %467

467:                                              ; preds = %464
  br label %468

468:                                              ; preds = %467
  br label %469

469:                                              ; preds = %468
  %470 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %471 = getelementptr inbounds %struct.s2n_debug_info, ptr %470, i32 0, i32 0
  store ptr @.str.33, ptr %471, align 8, !tbaa !20
  %472 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %473 = getelementptr inbounds %struct.s2n_debug_info, ptr %472, i32 0, i32 0
  %474 = load ptr, ptr %473, align 8, !tbaa !20
  %475 = getelementptr inbounds i8, ptr %474, i64 21
  %476 = call ptr @strrchr(ptr noundef %475, i32 noundef 47) #6
  %477 = icmp ne ptr %476, null
  br i1 %477, label %478, label %485

478:                                              ; preds = %469
  %479 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %480 = getelementptr inbounds %struct.s2n_debug_info, ptr %479, i32 0, i32 0
  %481 = load ptr, ptr %480, align 8, !tbaa !20
  %482 = getelementptr inbounds i8, ptr %481, i64 21
  %483 = call ptr @strrchr(ptr noundef %482, i32 noundef 47) #6
  %484 = getelementptr inbounds i8, ptr %483, i64 1
  br label %490

485:                                              ; preds = %469
  %486 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %487 = getelementptr inbounds %struct.s2n_debug_info, ptr %486, i32 0, i32 0
  %488 = load ptr, ptr %487, align 8, !tbaa !20
  %489 = getelementptr inbounds i8, ptr %488, i64 21
  br label %490

490:                                              ; preds = %485, %478
  %491 = phi ptr [ %484, %478 ], [ %489, %485 ]
  %492 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %493 = getelementptr inbounds %struct.s2n_debug_info, ptr %492, i32 0, i32 1
  store ptr %491, ptr %493, align 8, !tbaa !22
  %494 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %494, align 4, !tbaa !9
  %495 = call i32 @s2n_calculate_stacktrace()
  br label %496

496:                                              ; preds = %490
  br label %497

497:                                              ; preds = %496
  %498 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %498, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %909

499:                                              ; No predecessors!
  br label %500

500:                                              ; preds = %499
  br label %501

501:                                              ; preds = %500, %464
  br label %502

502:                                              ; preds = %501
  br label %503

503:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  store ptr null, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  store ptr null, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store ptr null, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %504 = load ptr, ptr %13, align 8, !tbaa !5
  %505 = load ptr, ptr %24, align 8, !tbaa !5
  %506 = call i32 @OCSP_resp_find_status(ptr noundef %504, ptr noundef %505, ptr noundef %22, ptr noundef %23, ptr noundef %25, ptr noundef %26, ptr noundef %27)
  store i32 %506, ptr %28, align 4, !tbaa !9
  %507 = load ptr, ptr %24, align 8, !tbaa !5
  call void @OCSP_CERTID_free(ptr noundef %507)
  br label %508

508:                                              ; preds = %503
  %509 = load i32, ptr %28, align 4, !tbaa !9
  %510 = icmp eq i32 %509, 1
  br i1 %510, label %545, label %511

511:                                              ; preds = %508
  br label %512

512:                                              ; preds = %511
  br label %513

513:                                              ; preds = %512
  %514 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %515 = getelementptr inbounds %struct.s2n_debug_info, ptr %514, i32 0, i32 0
  store ptr @.str.34, ptr %515, align 8, !tbaa !20
  %516 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %517 = getelementptr inbounds %struct.s2n_debug_info, ptr %516, i32 0, i32 0
  %518 = load ptr, ptr %517, align 8, !tbaa !20
  %519 = getelementptr inbounds i8, ptr %518, i64 21
  %520 = call ptr @strrchr(ptr noundef %519, i32 noundef 47) #6
  %521 = icmp ne ptr %520, null
  br i1 %521, label %522, label %529

522:                                              ; preds = %513
  %523 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %524 = getelementptr inbounds %struct.s2n_debug_info, ptr %523, i32 0, i32 0
  %525 = load ptr, ptr %524, align 8, !tbaa !20
  %526 = getelementptr inbounds i8, ptr %525, i64 21
  %527 = call ptr @strrchr(ptr noundef %526, i32 noundef 47) #6
  %528 = getelementptr inbounds i8, ptr %527, i64 1
  br label %534

529:                                              ; preds = %513
  %530 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %531 = getelementptr inbounds %struct.s2n_debug_info, ptr %530, i32 0, i32 0
  %532 = load ptr, ptr %531, align 8, !tbaa !20
  %533 = getelementptr inbounds i8, ptr %532, i64 21
  br label %534

534:                                              ; preds = %529, %522
  %535 = phi ptr [ %528, %522 ], [ %533, %529 ]
  %536 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %537 = getelementptr inbounds %struct.s2n_debug_info, ptr %536, i32 0, i32 1
  store ptr %535, ptr %537, align 8, !tbaa !22
  %538 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %538, align 4, !tbaa !9
  %539 = call i32 @s2n_calculate_stacktrace()
  br label %540

540:                                              ; preds = %534
  br label %541

541:                                              ; preds = %540
  %542 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %542, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %908

543:                                              ; No predecessors!
  br label %544

544:                                              ; preds = %543
  br label %545

545:                                              ; preds = %544, %508
  br label %546

546:                                              ; preds = %545
  br label %547

547:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  store i64 0, ptr %29, align 8, !tbaa !29
  br label %548

548:                                              ; preds = %547
  %549 = load ptr, ptr %7, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.s2n_connection, ptr %549, i32 0, i32 1
  %551 = load ptr, ptr %550, align 8, !tbaa !31
  %552 = call i32 @s2n_config_wall_clock(ptr noundef %551, ptr noundef %29)
  %553 = getelementptr inbounds %struct.s2n_result, ptr %30, i32 0, i32 0
  store i32 %552, ptr %553, align 4
  %554 = getelementptr inbounds %struct.s2n_result, ptr %30, i32 0, i32 0
  %555 = load i32, ptr %554, align 4
  %556 = call zeroext i1 @s2n_result_is_ok(i32 %555)
  br i1 %556, label %559, label %557

557:                                              ; preds = %548
  %558 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %558, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %907

559:                                              ; preds = %548
  br label %560

560:                                              ; preds = %559
  br label %561

561:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %562 = load i64, ptr %29, align 8, !tbaa !29
  %563 = udiv i64 %562, 1000000000
  store i64 %563, ptr %31, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %564 = load i64, ptr %31, align 8, !tbaa !29
  %565 = call ptr @ASN1_GENERALIZEDTIME_set(ptr noundef null, i64 noundef %564)
  store ptr %565, ptr %32, align 8, !tbaa !5
  br label %566

566:                                              ; preds = %561
  %567 = load ptr, ptr %32, align 8, !tbaa !5
  %568 = icmp ne ptr %567, null
  br i1 %568, label %603, label %569

569:                                              ; preds = %566
  br label %570

570:                                              ; preds = %569
  br label %571

571:                                              ; preds = %570
  %572 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %573 = getelementptr inbounds %struct.s2n_debug_info, ptr %572, i32 0, i32 0
  store ptr @.str.35, ptr %573, align 8, !tbaa !20
  %574 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %575 = getelementptr inbounds %struct.s2n_debug_info, ptr %574, i32 0, i32 0
  %576 = load ptr, ptr %575, align 8, !tbaa !20
  %577 = getelementptr inbounds i8, ptr %576, i64 21
  %578 = call ptr @strrchr(ptr noundef %577, i32 noundef 47) #6
  %579 = icmp ne ptr %578, null
  br i1 %579, label %580, label %587

580:                                              ; preds = %571
  %581 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %582 = getelementptr inbounds %struct.s2n_debug_info, ptr %581, i32 0, i32 0
  %583 = load ptr, ptr %582, align 8, !tbaa !20
  %584 = getelementptr inbounds i8, ptr %583, i64 21
  %585 = call ptr @strrchr(ptr noundef %584, i32 noundef 47) #6
  %586 = getelementptr inbounds i8, ptr %585, i64 1
  br label %592

587:                                              ; preds = %571
  %588 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %589 = getelementptr inbounds %struct.s2n_debug_info, ptr %588, i32 0, i32 0
  %590 = load ptr, ptr %589, align 8, !tbaa !20
  %591 = getelementptr inbounds i8, ptr %590, i64 21
  br label %592

592:                                              ; preds = %587, %580
  %593 = phi ptr [ %586, %580 ], [ %591, %587 ]
  %594 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %595 = getelementptr inbounds %struct.s2n_debug_info, ptr %594, i32 0, i32 1
  store ptr %593, ptr %595, align 8, !tbaa !22
  %596 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %596, align 4, !tbaa !9
  %597 = call i32 @s2n_calculate_stacktrace()
  br label %598

598:                                              ; preds = %592
  br label %599

599:                                              ; preds = %598
  %600 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %600, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %904

601:                                              ; No predecessors!
  br label %602

602:                                              ; preds = %601
  br label %603

603:                                              ; preds = %602, %566
  br label %604

604:                                              ; preds = %603
  br label %605

605:                                              ; preds = %604
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %606

606:                                              ; preds = %605
  %607 = load ptr, ptr %26, align 8, !tbaa !5
  %608 = load ptr, ptr %32, align 8, !tbaa !5
  %609 = call i32 @ASN1_TIME_diff(ptr noundef %33, ptr noundef %34, ptr noundef %607, ptr noundef %608)
  %610 = icmp eq i32 %609, 1
  br i1 %610, label %645, label %611

611:                                              ; preds = %606
  br label %612

612:                                              ; preds = %611
  br label %613

613:                                              ; preds = %612
  %614 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %615 = getelementptr inbounds %struct.s2n_debug_info, ptr %614, i32 0, i32 0
  store ptr @.str.36, ptr %615, align 8, !tbaa !20
  %616 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %617 = getelementptr inbounds %struct.s2n_debug_info, ptr %616, i32 0, i32 0
  %618 = load ptr, ptr %617, align 8, !tbaa !20
  %619 = getelementptr inbounds i8, ptr %618, i64 21
  %620 = call ptr @strrchr(ptr noundef %619, i32 noundef 47) #6
  %621 = icmp ne ptr %620, null
  br i1 %621, label %622, label %629

622:                                              ; preds = %613
  %623 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %624 = getelementptr inbounds %struct.s2n_debug_info, ptr %623, i32 0, i32 0
  %625 = load ptr, ptr %624, align 8, !tbaa !20
  %626 = getelementptr inbounds i8, ptr %625, i64 21
  %627 = call ptr @strrchr(ptr noundef %626, i32 noundef 47) #6
  %628 = getelementptr inbounds i8, ptr %627, i64 1
  br label %634

629:                                              ; preds = %613
  %630 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %631 = getelementptr inbounds %struct.s2n_debug_info, ptr %630, i32 0, i32 0
  %632 = load ptr, ptr %631, align 8, !tbaa !20
  %633 = getelementptr inbounds i8, ptr %632, i64 21
  br label %634

634:                                              ; preds = %629, %622
  %635 = phi ptr [ %628, %622 ], [ %633, %629 ]
  %636 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %637 = getelementptr inbounds %struct.s2n_debug_info, ptr %636, i32 0, i32 1
  store ptr %635, ptr %637, align 8, !tbaa !22
  %638 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %638, align 4, !tbaa !9
  %639 = call i32 @s2n_calculate_stacktrace()
  br label %640

640:                                              ; preds = %634
  br label %641

641:                                              ; preds = %640
  %642 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %642, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

643:                                              ; No predecessors!
  br label %644

644:                                              ; preds = %643
  br label %645

645:                                              ; preds = %644, %606
  br label %646

646:                                              ; preds = %645
  br label %647

647:                                              ; preds = %646
  br label %648

648:                                              ; preds = %647
  %649 = load i32, ptr %33, align 4, !tbaa !9
  %650 = icmp sge i32 %649, 0
  br i1 %650, label %651, label %654

651:                                              ; preds = %648
  %652 = load i32, ptr %34, align 4, !tbaa !9
  %653 = icmp sge i32 %652, 0
  br i1 %653, label %688, label %654

654:                                              ; preds = %651, %648
  br label %655

655:                                              ; preds = %654
  br label %656

656:                                              ; preds = %655
  %657 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %658 = getelementptr inbounds %struct.s2n_debug_info, ptr %657, i32 0, i32 0
  store ptr @.str.37, ptr %658, align 8, !tbaa !20
  %659 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %660 = getelementptr inbounds %struct.s2n_debug_info, ptr %659, i32 0, i32 0
  %661 = load ptr, ptr %660, align 8, !tbaa !20
  %662 = getelementptr inbounds i8, ptr %661, i64 21
  %663 = call ptr @strrchr(ptr noundef %662, i32 noundef 47) #6
  %664 = icmp ne ptr %663, null
  br i1 %664, label %665, label %672

665:                                              ; preds = %656
  %666 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %667 = getelementptr inbounds %struct.s2n_debug_info, ptr %666, i32 0, i32 0
  %668 = load ptr, ptr %667, align 8, !tbaa !20
  %669 = getelementptr inbounds i8, ptr %668, i64 21
  %670 = call ptr @strrchr(ptr noundef %669, i32 noundef 47) #6
  %671 = getelementptr inbounds i8, ptr %670, i64 1
  br label %677

672:                                              ; preds = %656
  %673 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %674 = getelementptr inbounds %struct.s2n_debug_info, ptr %673, i32 0, i32 0
  %675 = load ptr, ptr %674, align 8, !tbaa !20
  %676 = getelementptr inbounds i8, ptr %675, i64 21
  br label %677

677:                                              ; preds = %672, %665
  %678 = phi ptr [ %671, %665 ], [ %676, %672 ]
  %679 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %680 = getelementptr inbounds %struct.s2n_debug_info, ptr %679, i32 0, i32 1
  store ptr %678, ptr %680, align 8, !tbaa !22
  %681 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544371, ptr %681, align 4, !tbaa !9
  %682 = call i32 @s2n_calculate_stacktrace()
  br label %683

683:                                              ; preds = %677
  br label %684

684:                                              ; preds = %683
  %685 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %685, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

686:                                              ; No predecessors!
  br label %687

687:                                              ; preds = %686
  br label %688

688:                                              ; preds = %687, %651
  br label %689

689:                                              ; preds = %688
  br label %690

690:                                              ; preds = %689
  %691 = load ptr, ptr %27, align 8, !tbaa !5
  %692 = icmp ne ptr %691, null
  br i1 %692, label %693, label %779

693:                                              ; preds = %690
  br label %694

694:                                              ; preds = %693
  %695 = load ptr, ptr %32, align 8, !tbaa !5
  %696 = load ptr, ptr %27, align 8, !tbaa !5
  %697 = call i32 @ASN1_TIME_diff(ptr noundef %33, ptr noundef %34, ptr noundef %695, ptr noundef %696)
  %698 = icmp eq i32 %697, 1
  br i1 %698, label %733, label %699

699:                                              ; preds = %694
  br label %700

700:                                              ; preds = %699
  br label %701

701:                                              ; preds = %700
  %702 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %703 = getelementptr inbounds %struct.s2n_debug_info, ptr %702, i32 0, i32 0
  store ptr @.str.38, ptr %703, align 8, !tbaa !20
  %704 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %705 = getelementptr inbounds %struct.s2n_debug_info, ptr %704, i32 0, i32 0
  %706 = load ptr, ptr %705, align 8, !tbaa !20
  %707 = getelementptr inbounds i8, ptr %706, i64 21
  %708 = call ptr @strrchr(ptr noundef %707, i32 noundef 47) #6
  %709 = icmp ne ptr %708, null
  br i1 %709, label %710, label %717

710:                                              ; preds = %701
  %711 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %712 = getelementptr inbounds %struct.s2n_debug_info, ptr %711, i32 0, i32 0
  %713 = load ptr, ptr %712, align 8, !tbaa !20
  %714 = getelementptr inbounds i8, ptr %713, i64 21
  %715 = call ptr @strrchr(ptr noundef %714, i32 noundef 47) #6
  %716 = getelementptr inbounds i8, ptr %715, i64 1
  br label %722

717:                                              ; preds = %701
  %718 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %719 = getelementptr inbounds %struct.s2n_debug_info, ptr %718, i32 0, i32 0
  %720 = load ptr, ptr %719, align 8, !tbaa !20
  %721 = getelementptr inbounds i8, ptr %720, i64 21
  br label %722

722:                                              ; preds = %717, %710
  %723 = phi ptr [ %716, %710 ], [ %721, %717 ]
  %724 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %725 = getelementptr inbounds %struct.s2n_debug_info, ptr %724, i32 0, i32 1
  store ptr %723, ptr %725, align 8, !tbaa !22
  %726 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %726, align 4, !tbaa !9
  %727 = call i32 @s2n_calculate_stacktrace()
  br label %728

728:                                              ; preds = %722
  br label %729

729:                                              ; preds = %728
  %730 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %730, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

731:                                              ; No predecessors!
  br label %732

732:                                              ; preds = %731
  br label %733

733:                                              ; preds = %732, %694
  br label %734

734:                                              ; preds = %733
  br label %735

735:                                              ; preds = %734
  br label %736

736:                                              ; preds = %735
  %737 = load i32, ptr %33, align 4, !tbaa !9
  %738 = icmp sge i32 %737, 0
  br i1 %738, label %739, label %742

739:                                              ; preds = %736
  %740 = load i32, ptr %34, align 4, !tbaa !9
  %741 = icmp sge i32 %740, 0
  br i1 %741, label %776, label %742

742:                                              ; preds = %739, %736
  br label %743

743:                                              ; preds = %742
  br label %744

744:                                              ; preds = %743
  %745 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %746 = getelementptr inbounds %struct.s2n_debug_info, ptr %745, i32 0, i32 0
  store ptr @.str.39, ptr %746, align 8, !tbaa !20
  %747 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %748 = getelementptr inbounds %struct.s2n_debug_info, ptr %747, i32 0, i32 0
  %749 = load ptr, ptr %748, align 8, !tbaa !20
  %750 = getelementptr inbounds i8, ptr %749, i64 21
  %751 = call ptr @strrchr(ptr noundef %750, i32 noundef 47) #6
  %752 = icmp ne ptr %751, null
  br i1 %752, label %753, label %760

753:                                              ; preds = %744
  %754 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %755 = getelementptr inbounds %struct.s2n_debug_info, ptr %754, i32 0, i32 0
  %756 = load ptr, ptr %755, align 8, !tbaa !20
  %757 = getelementptr inbounds i8, ptr %756, i64 21
  %758 = call ptr @strrchr(ptr noundef %757, i32 noundef 47) #6
  %759 = getelementptr inbounds i8, ptr %758, i64 1
  br label %765

760:                                              ; preds = %744
  %761 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %762 = getelementptr inbounds %struct.s2n_debug_info, ptr %761, i32 0, i32 0
  %763 = load ptr, ptr %762, align 8, !tbaa !20
  %764 = getelementptr inbounds i8, ptr %763, i64 21
  br label %765

765:                                              ; preds = %760, %753
  %766 = phi ptr [ %759, %753 ], [ %764, %760 ]
  %767 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %768 = getelementptr inbounds %struct.s2n_debug_info, ptr %767, i32 0, i32 1
  store ptr %766, ptr %768, align 8, !tbaa !22
  %769 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544369, ptr %769, align 4, !tbaa !9
  %770 = call i32 @s2n_calculate_stacktrace()
  br label %771

771:                                              ; preds = %765
  br label %772

772:                                              ; preds = %771
  %773 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %773, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

774:                                              ; No predecessors!
  br label %775

775:                                              ; preds = %774
  br label %776

776:                                              ; preds = %775, %739
  br label %777

777:                                              ; preds = %776
  br label %778

778:                                              ; preds = %777
  br label %828

779:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %780 = load i32, ptr %33, align 4, !tbaa !9
  %781 = mul nsw i32 %780, 86400
  %782 = load i32, ptr %34, align 4, !tbaa !9
  %783 = add nsw i32 %781, %782
  %784 = sext i32 %783 to i64
  store i64 %784, ptr %35, align 8, !tbaa !29
  br label %785

785:                                              ; preds = %779
  %786 = load i64, ptr %35, align 8, !tbaa !29
  %787 = icmp ult i64 %786, 3600
  br i1 %787, label %822, label %788

788:                                              ; preds = %785
  br label %789

789:                                              ; preds = %788
  br label %790

790:                                              ; preds = %789
  %791 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %792 = getelementptr inbounds %struct.s2n_debug_info, ptr %791, i32 0, i32 0
  store ptr @.str.40, ptr %792, align 8, !tbaa !20
  %793 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %794 = getelementptr inbounds %struct.s2n_debug_info, ptr %793, i32 0, i32 0
  %795 = load ptr, ptr %794, align 8, !tbaa !20
  %796 = getelementptr inbounds i8, ptr %795, i64 21
  %797 = call ptr @strrchr(ptr noundef %796, i32 noundef 47) #6
  %798 = icmp ne ptr %797, null
  br i1 %798, label %799, label %806

799:                                              ; preds = %790
  %800 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %801 = getelementptr inbounds %struct.s2n_debug_info, ptr %800, i32 0, i32 0
  %802 = load ptr, ptr %801, align 8, !tbaa !20
  %803 = getelementptr inbounds i8, ptr %802, i64 21
  %804 = call ptr @strrchr(ptr noundef %803, i32 noundef 47) #6
  %805 = getelementptr inbounds i8, ptr %804, i64 1
  br label %811

806:                                              ; preds = %790
  %807 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %808 = getelementptr inbounds %struct.s2n_debug_info, ptr %807, i32 0, i32 0
  %809 = load ptr, ptr %808, align 8, !tbaa !20
  %810 = getelementptr inbounds i8, ptr %809, i64 21
  br label %811

811:                                              ; preds = %806, %799
  %812 = phi ptr [ %805, %799 ], [ %810, %806 ]
  %813 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %814 = getelementptr inbounds %struct.s2n_debug_info, ptr %813, i32 0, i32 1
  store ptr %812, ptr %814, align 8, !tbaa !22
  %815 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544369, ptr %815, align 4, !tbaa !9
  %816 = call i32 @s2n_calculate_stacktrace()
  br label %817

817:                                              ; preds = %811
  br label %818

818:                                              ; preds = %817
  %819 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %819, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %825

820:                                              ; No predecessors!
  br label %821

821:                                              ; preds = %820
  br label %822

822:                                              ; preds = %821, %785
  br label %823

823:                                              ; preds = %822
  br label %824

824:                                              ; preds = %823
  store i32 0, ptr %11, align 4
  br label %825

825:                                              ; preds = %824, %818
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  %826 = load i32, ptr %11, align 4
  switch i32 %826, label %903 [
    i32 0, label %827
  ]

827:                                              ; preds = %825
  br label %828

828:                                              ; preds = %827, %778
  %829 = load i32, ptr %22, align 4, !tbaa !9
  switch i32 %829, label %868 [
    i32 0, label %830
    i32 1, label %834
  ]

830:                                              ; preds = %828
  %831 = load ptr, ptr %6, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.s2n_x509_validator, ptr %831, i32 0, i32 6
  store i32 5, ptr %832, align 8, !tbaa !17
  %833 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 0, ptr %833, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

834:                                              ; preds = %828
  br label %835

835:                                              ; preds = %834
  br label %836

836:                                              ; preds = %835
  %837 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %838 = getelementptr inbounds %struct.s2n_debug_info, ptr %837, i32 0, i32 0
  store ptr @.str.41, ptr %838, align 8, !tbaa !20
  %839 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %840 = getelementptr inbounds %struct.s2n_debug_info, ptr %839, i32 0, i32 0
  %841 = load ptr, ptr %840, align 8, !tbaa !20
  %842 = getelementptr inbounds i8, ptr %841, i64 21
  %843 = call ptr @strrchr(ptr noundef %842, i32 noundef 47) #6
  %844 = icmp ne ptr %843, null
  br i1 %844, label %845, label %852

845:                                              ; preds = %836
  %846 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %847 = getelementptr inbounds %struct.s2n_debug_info, ptr %846, i32 0, i32 0
  %848 = load ptr, ptr %847, align 8, !tbaa !20
  %849 = getelementptr inbounds i8, ptr %848, i64 21
  %850 = call ptr @strrchr(ptr noundef %849, i32 noundef 47) #6
  %851 = getelementptr inbounds i8, ptr %850, i64 1
  br label %857

852:                                              ; preds = %836
  %853 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %854 = getelementptr inbounds %struct.s2n_debug_info, ptr %853, i32 0, i32 0
  %855 = load ptr, ptr %854, align 8, !tbaa !20
  %856 = getelementptr inbounds i8, ptr %855, i64 21
  br label %857

857:                                              ; preds = %852, %845
  %858 = phi ptr [ %851, %845 ], [ %856, %852 ]
  %859 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %860 = getelementptr inbounds %struct.s2n_debug_info, ptr %859, i32 0, i32 1
  store ptr %858, ptr %860, align 8, !tbaa !22
  %861 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544367, ptr %861, align 4, !tbaa !9
  %862 = call i32 @s2n_calculate_stacktrace()
  br label %863

863:                                              ; preds = %857
  br label %864

864:                                              ; preds = %863
  %865 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %865, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

866:                                              ; No predecessors!
  br label %867

867:                                              ; preds = %866
  br label %868

868:                                              ; preds = %867, %828
  br label %869

869:                                              ; preds = %868
  br label %870

870:                                              ; preds = %869
  %871 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %872 = getelementptr inbounds %struct.s2n_debug_info, ptr %871, i32 0, i32 0
  store ptr @.str.42, ptr %872, align 8, !tbaa !20
  %873 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %874 = getelementptr inbounds %struct.s2n_debug_info, ptr %873, i32 0, i32 0
  %875 = load ptr, ptr %874, align 8, !tbaa !20
  %876 = getelementptr inbounds i8, ptr %875, i64 21
  %877 = call ptr @strrchr(ptr noundef %876, i32 noundef 47) #6
  %878 = icmp ne ptr %877, null
  br i1 %878, label %879, label %886

879:                                              ; preds = %870
  %880 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %881 = getelementptr inbounds %struct.s2n_debug_info, ptr %880, i32 0, i32 0
  %882 = load ptr, ptr %881, align 8, !tbaa !20
  %883 = getelementptr inbounds i8, ptr %882, i64 21
  %884 = call ptr @strrchr(ptr noundef %883, i32 noundef 47) #6
  %885 = getelementptr inbounds i8, ptr %884, i64 1
  br label %891

886:                                              ; preds = %870
  %887 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %888 = getelementptr inbounds %struct.s2n_debug_info, ptr %887, i32 0, i32 0
  %889 = load ptr, ptr %888, align 8, !tbaa !20
  %890 = getelementptr inbounds i8, ptr %889, i64 21
  br label %891

891:                                              ; preds = %886, %879
  %892 = phi ptr [ %885, %879 ], [ %890, %886 ]
  %893 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %894 = getelementptr inbounds %struct.s2n_debug_info, ptr %893, i32 0, i32 1
  store ptr %892, ptr %894, align 8, !tbaa !22
  %895 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %895, align 4, !tbaa !9
  %896 = call i32 @s2n_calculate_stacktrace()
  br label %897

897:                                              ; preds = %891
  br label %898

898:                                              ; preds = %897
  %899 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 -1, ptr %899, align 4, !tbaa !18
  store i32 1, ptr %11, align 4
  br label %903

900:                                              ; No predecessors!
  br label %901

901:                                              ; preds = %900
  br label %902

902:                                              ; preds = %901
  store i32 0, ptr %11, align 4
  br label %903

903:                                              ; preds = %902, %898, %864, %830, %825, %772, %729, %684, %641
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %904

904:                                              ; preds = %903, %599
  %905 = call i32 @s2n_openssl_asn1_time_free_pointer(ptr noundef %32)
  %906 = getelementptr inbounds %struct.s2n_result, ptr %36, i32 0, i32 0
  store i32 %905, ptr %906, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %907

907:                                              ; preds = %904, %557
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %908

908:                                              ; preds = %907, %541
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %909

909:                                              ; preds = %908, %497
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %910

910:                                              ; preds = %909, %453
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %911

911:                                              ; preds = %910, %405
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %912

912:                                              ; preds = %911, %336
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %913

913:                                              ; preds = %912, %293
  %914 = call i32 @s2n_openssl_x509_stack_pop_free(ptr noundef %14)
  %915 = getelementptr inbounds %struct.s2n_result, ptr %37, i32 0, i32 0
  store i32 %914, ptr %915, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  br label %916

916:                                              ; preds = %913, %249
  call void @OCSP_BASICRESP_free_pointer(ptr noundef %13)
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %917

917:                                              ; preds = %916, %207
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %918

918:                                              ; preds = %917, %165
  call void @OCSP_RESPONSE_free_pointer(ptr noundef %10)
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  %919 = load i32, ptr %11, align 4
  switch i32 %919, label %923 [
    i32 0, label %920
    i32 1, label %920
  ]

920:                                              ; preds = %918, %918, %124, %87, %48
  %921 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  %922 = load i32, ptr %921, align 4
  ret i32 %922

923:                                              ; preds = %918
  unreachable
}

declare ptr @d2i_OCSP_RESPONSE(ptr noundef, ptr noundef, i64 noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @OCSP_RESPONSE_free_pointer(ptr noundef) #4

declare i32 @OCSP_response_status(ptr noundef) #2

declare ptr @OCSP_response_get1_basic(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @OCSP_BASICRESP_free_pointer(ptr noundef) #4

declare ptr @X509_STORE_CTX_get1_chain(ptr noundef) #2

declare i32 @s2n_openssl_x509_stack_pop_free(ptr noundef) #2

declare i32 @X509_check_issued(ptr noundef, ptr noundef) #2

declare i32 @OCSP_basic_verify(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #2

declare ptr @OCSP_cert_to_id(ptr noundef, ptr noundef, ptr noundef) #2

declare ptr @EVP_sha1() #2

declare i32 @OCSP_resp_find_status(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @OCSP_CERTID_free(ptr noundef) #2

declare i32 @s2n_config_wall_clock(ptr noundef, ptr noundef) #2

declare ptr @ASN1_GENERALIZEDTIME_set(ptr noundef, i64 noundef) #2

declare i32 @s2n_openssl_asn1_time_free_pointer(ptr noundef) #2

declare i32 @ASN1_TIME_diff(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { inlinehint 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 #5 = { 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 #6 = { nounwind willreturn memory(read) }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !7, i64 16}
!12 = !{!"s2n_x509_validator", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !13, i64 18, !6, i64 24, !10, i64 32, !6, i64 40, !14, i64 48, !15, i64 52}
!13 = !{!"short", !7, i64 0}
!14 = !{!"s2n_cert_validation_info", !10, i64 0, !10, i64 0}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!12, !7, i64 17}
!17 = !{!12, !10, i64 32}
!18 = !{!19, !10, i64 0}
!19 = !{!"", !10, i64 0}
!20 = !{!21, !6, i64 0}
!21 = !{!"s2n_debug_info", !6, i64 0, !6, i64 8}
!22 = !{!21, !6, i64 8}
!23 = !{!12, !6, i64 8}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!12, !6, i64 0}
!27 = !{!28, !6, i64 0}
!28 = !{!"s2n_x509_trust_store", !6, i64 0, !10, i64 8}
!29 = !{!30, !30, i64 0}
!30 = !{!"long", !7, i64 0}
!31 = !{!32, !6, i64 8}
!32 = !{!"s2n_connection", !10, i64 0, !10, i64 0, !10, i64 0, !10, i64 0, !10, i64 0, !10, i64 0, !10, i64 0, !10, i64 0, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 2, !10, i64 2, !10, i64 2, !10, i64 2, !10, i64 2, !10, i64 2, !10, i64 2, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !7, i64 80, !7, i64 102, !7, i64 124, !10, i64 148, !10, i64 152, !33, i64 160, !30, i64 168, !30, i64 176, !7, i64 184, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !7, i64 220, !7, i64 221, !7, i64 222, !6, i64 224, !6, i64 232, !34, i64 240, !6, i64 632, !6, i64 640, !35, i64 648, !41, i64 1144, !44, i64 1688, !6, i64 1752, !7, i64 1760, !10, i64 1764, !7, i64 1768, !46, i64 1776, !46, i64 1816, !46, i64 1856, !46, i64 1896, !10, i64 1936, !30, i64 1944, !7, i64 1952, !46, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !15, i64 2003, !19, i64 2004, !19, i64 2008, !47, i64 2016, !13, i64 2208, !10, i64 2212, !13, i64 2216, !30, i64 2224, !7, i64 2232, !30, i64 2240, !30, i64 2248, !30, i64 2256, !19, i64 2264, !19, i64 2268, !7, i64 2272, !7, i64 2528, !10, i64 2784, !40, i64 2792, !10, i64 2816, !40, i64 2824, !40, i64 2848, !40, i64 2872, !49, i64 2896, !12, i64 3704, !6, i64 3760, !6, i64 3768, !7, i64 3776, !10, i64 3780, !40, i64 3784, !10, i64 3808, !51, i64 3816, !7, i64 3848, !46, i64 3992, !40, i64 4032, !40, i64 4056, !15, i64 4080, !15, i64 4081, !15, i64 4082, !13, i64 4084, !13, i64 4086, !10, i64 4088, !10, i64 4092, !40, i64 4096, !10, i64 4120, !52, i64 4128, !19, i64 4176, !7, i64 4180, !7, i64 4181}
!33 = !{!"s2n_timer", !30, i64 0}
!34 = !{!"s2n_secrets", !7, i64 0, !10, i64 388}
!35 = !{!"s2n_kex_parameters", !36, i64 0, !37, i64 8, !7, i64 24, !37, i64 56, !38, i64 72, !38, i64 184, !7, i64 296, !39, i64 360, !40, i64 448, !40, i64 472}
!36 = !{!"s2n_dh_params", !6, i64 0}
!37 = !{!"s2n_ecc_evp_params", !6, i64 0, !6, i64 8}
!38 = !{!"s2n_kem_group_params", !6, i64 0, !39, i64 8, !37, i64 96}
!39 = !{!"s2n_kem_params", !6, i64 0, !40, i64 8, !40, i64 32, !40, i64 56, !15, i64 80}
!40 = !{!"s2n_blob", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16}
!41 = !{!"s2n_handshake_parameters", !42, i64 0, !42, i64 48, !40, i64 96, !10, i64 120, !43, i64 124, !6, i64 384, !6, i64 392, !6, i64 400, !7, i64 408, !7, i64 440, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 506}
!42 = !{!"s2n_pkey", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!43 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!44 = !{!"s2n_psk_parameters", !10, i64 0, !45, i64 8, !13, i64 40, !13, i64 42, !6, i64 48, !10, i64 56}
!45 = !{!"s2n_array", !40, i64 0, !10, i64 24, !10, i64 28}
!46 = !{!"s2n_stuffer", !40, i64 0, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 36, !10, i64 36}
!47 = !{!"s2n_handshake", !46, i64 0, !6, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !48, i64 176, !10, i64 184, !10, i64 184, !10, i64 184, !10, i64 184, !10, i64 188}
!48 = !{!"s2n_offered_early_data", !6, i64 0}
!49 = !{!"s2n_client_hello", !40, i64 0, !50, i64 24, !40, i64 728, !40, i64 752, !40, i64 776, !7, i64 800, !7, i64 801, !10, i64 802, !10, i64 802, !10, i64 802, !10, i64 802, !10, i64 802, !10, i64 802, !10, i64 802}
!50 = !{!"", !7, i64 0, !40, i64 672, !13, i64 696}
!51 = !{!"s2n_ticket_fields", !40, i64 0, !10, i64 24}
!52 = !{!"s2n_post_handshake", !46, i64 0, !7, i64 40}


; 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.s2n_debug_info = type { ptr, ptr }

@_s2n_debug_info = external thread_local local_unnamed_addr global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local local_unnamed_addr global i32, align 4
@.str.24 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [95 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #0

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

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @s2n_result_is_ok(i32) local_unnamed_addr #4

declare i32 @OPENSSL_sk_num(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @ossl_check_const_X509_sk_type(ptr noundef) local_unnamed_addr #4

declare ptr @OPENSSL_sk_value(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @s2n_x509_validator_validate_cert_stapled_ocsp_response(ptr nocapture noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, i32 noundef %3) local_unnamed_addr #5 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  store ptr %2, ptr %5, align 8, !tbaa !5
  %18 = getelementptr inbounds i8, ptr %0, i64 16
  %19 = load i8, ptr %18, align 8, !tbaa !9
  %.not = icmp eq i8 %19, 0
  br i1 %.not, label %20, label %23

20:                                               ; preds = %4
  %21 = getelementptr inbounds i8, ptr %0, i64 17
  %22 = load i8, ptr %21, align 1, !tbaa !15
  %.not66 = icmp eq i8 %22, 0
  br i1 %.not66, label %23, label %25

23:                                               ; preds = %20, %4
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  store i32 5, ptr %24, align 8, !tbaa !16
  br label %262

25:                                               ; preds = %20
  %26 = getelementptr inbounds i8, ptr %0, i64 32
  %27 = load i32, ptr %26, align 8, !tbaa !16
  %28 = icmp eq i32 %27, 4
  br i1 %28, label %37, label %29

29:                                               ; preds = %25
  %30 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.24, ptr %30, align 8, !tbaa !17
  %31 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.24, i64 21), i32 noundef 47) #6
  %.not67 = icmp eq ptr %31, null
  %32 = getelementptr inbounds i8, ptr %31, i64 1
  %33 = select i1 %.not67, ptr getelementptr inbounds (i8, ptr @.str.24, i64 21), ptr %32
  %34 = getelementptr inbounds i8, ptr %30, i64 8
  store ptr %33, ptr %34, align 8, !tbaa !19
  %35 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653261, ptr %35, align 4, !tbaa !20
  %36 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %262

37:                                               ; preds = %25
  %.not68 = icmp eq ptr %2, null
  br i1 %.not68, label %38, label %46

38:                                               ; preds = %37
  %39 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.25, ptr %39, align 8, !tbaa !17
  %40 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.25, i64 21), i32 noundef 47) #6
  %.not69 = icmp eq ptr %40, null
  %41 = getelementptr inbounds i8, ptr %40, i64 1
  %42 = select i1 %.not69, ptr getelementptr inbounds (i8, ptr @.str.25, i64 21), ptr %41
  %43 = getelementptr inbounds i8, ptr %39, i64 8
  store ptr %42, ptr %43, align 8, !tbaa !19
  %44 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %44, align 4, !tbaa !20
  %45 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %262

46:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %47 = zext i32 %3 to i64
  %48 = call ptr @d2i_OCSP_RESPONSE(ptr noundef null, ptr noundef nonnull %5, i64 noundef %47) #7
  store ptr %48, ptr %6, align 8, !tbaa !5
  %.not70 = icmp eq ptr %48, null
  br i1 %.not70, label %49, label %57

49:                                               ; preds = %46
  %50 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.26, ptr %50, align 8, !tbaa !17
  %51 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.26, i64 21), i32 noundef 47) #6
  %.not71 = icmp eq ptr %51, null
  %52 = getelementptr inbounds i8, ptr %51, i64 1
  %53 = select i1 %.not71, ptr getelementptr inbounds (i8, ptr @.str.26, i64 21), ptr %52
  %54 = getelementptr inbounds i8, ptr %50, i64 8
  store ptr %53, ptr %54, align 8, !tbaa !19
  %55 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762074, ptr %55, align 4, !tbaa !20
  %56 = call i32 @s2n_calculate_stacktrace() #7
  br label %261

57:                                               ; preds = %46
  %58 = call i32 @OCSP_response_status(ptr noundef nonnull %48) #7
  %59 = icmp eq i32 %58, 0
  br i1 %59, label %68, label %60

60:                                               ; preds = %57
  %61 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.27, ptr %61, align 8, !tbaa !17
  %62 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.27, i64 21), i32 noundef 47) #6
  %.not72 = icmp eq ptr %62, null
  %63 = getelementptr inbounds i8, ptr %62, i64 1
  %64 = select i1 %.not72, ptr getelementptr inbounds (i8, ptr @.str.27, i64 21), ptr %63
  %65 = getelementptr inbounds i8, ptr %61, i64 8
  store ptr %64, ptr %65, align 8, !tbaa !19
  %66 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %66, align 4, !tbaa !20
  %67 = call i32 @s2n_calculate_stacktrace() #7
  br label %261

68:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %69 = call ptr @OCSP_response_get1_basic(ptr noundef nonnull %48) #7
  store ptr %69, ptr %7, align 8, !tbaa !5
  %.not73 = icmp eq ptr %69, null
  br i1 %.not73, label %70, label %78

70:                                               ; preds = %68
  %71 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.28, ptr %71, align 8, !tbaa !17
  %72 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.28, i64 21), i32 noundef 47) #6
  %.not74 = icmp eq ptr %72, null
  %73 = getelementptr inbounds i8, ptr %72, i64 1
  %74 = select i1 %.not74, ptr getelementptr inbounds (i8, ptr @.str.28, i64 21), ptr %73
  %75 = getelementptr inbounds i8, ptr %71, i64 8
  store ptr %74, ptr %75, align 8, !tbaa !19
  %76 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762074, ptr %76, align 4, !tbaa !20
  %77 = call i32 @s2n_calculate_stacktrace() #7
  br label %260

78:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %79 = getelementptr inbounds i8, ptr %0, i64 8
  %80 = load ptr, ptr %79, align 8, !tbaa !21
  %81 = call ptr @X509_STORE_CTX_get1_chain(ptr noundef %80) #7
  store ptr %81, ptr %8, align 8, !tbaa !5
  %.not75 = icmp eq ptr %81, null
  br i1 %.not75, label %82, label %90

82:                                               ; preds = %78
  %83 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.29, ptr %83, align 8, !tbaa !17
  %84 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.29, i64 21), i32 noundef 47) #6
  %.not76 = icmp eq ptr %84, null
  %85 = getelementptr inbounds i8, ptr %84, i64 1
  %86 = select i1 %.not76, ptr getelementptr inbounds (i8, ptr @.str.29, i64 21), ptr %85
  %87 = getelementptr inbounds i8, ptr %83, i64 8
  store ptr %86, ptr %87, align 8, !tbaa !19
  %88 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %88, align 4, !tbaa !20
  %89 = call i32 @s2n_calculate_stacktrace() #7
  br label %258

90:                                               ; preds = %78
  %91 = call ptr @ossl_check_const_X509_sk_type(ptr noundef nonnull %81)
  %92 = call i32 @OPENSSL_sk_num(ptr noundef %91) #7
  %93 = icmp sgt i32 %92, 0
  br i1 %93, label %102, label %94

94:                                               ; preds = %90
  %95 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.30, ptr %95, align 8, !tbaa !17
  %96 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.30, i64 21), i32 noundef 47) #6
  %.not77 = icmp eq ptr %96, null
  %97 = getelementptr inbounds i8, ptr %96, i64 1
  %98 = select i1 %.not77, ptr getelementptr inbounds (i8, ptr @.str.30, i64 21), ptr %97
  %99 = getelementptr inbounds i8, ptr %95, i64 8
  store ptr %98, ptr %99, align 8, !tbaa !19
  %100 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762114, ptr %100, align 4, !tbaa !20
  %101 = call i32 @s2n_calculate_stacktrace() #7
  br label %258

102:                                              ; preds = %90
  %103 = call ptr @ossl_check_const_X509_sk_type(ptr noundef nonnull %81)
  %104 = call ptr @OPENSSL_sk_value(ptr noundef %103, i32 noundef 0) #7
  br label %107

105:                                              ; preds = %107
  %106 = add nuw nsw i32 %.03995, 1
  %exitcond.not = icmp eq i32 %106, %92
  br i1 %exitcond.not, label %.thread, label %107, !llvm.loop !22

107:                                              ; preds = %102, %105
  %.03995 = phi i32 [ 0, %102 ], [ %106, %105 ]
  %108 = call ptr @ossl_check_const_X509_sk_type(ptr noundef nonnull %81)
  %109 = call ptr @OPENSSL_sk_value(ptr noundef %108, i32 noundef %.03995) #7
  %110 = call i32 @X509_check_issued(ptr noundef %109, ptr noundef %104) #7
  %.not78 = icmp eq i32 %110, 0
  br i1 %.not78, label %111, label %105

111:                                              ; preds = %107
  %.not79 = icmp eq ptr %109, null
  br i1 %.not79, label %.thread, label %119

.thread:                                          ; preds = %105, %111
  %112 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.31, ptr %112, align 8, !tbaa !17
  %113 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.31, i64 21), i32 noundef 47) #6
  %.not80 = icmp eq ptr %113, null
  %114 = getelementptr inbounds i8, ptr %113, i64 1
  %115 = select i1 %.not80, ptr getelementptr inbounds (i8, ptr @.str.31, i64 21), ptr %114
  %116 = getelementptr inbounds i8, ptr %112, i64 8
  store ptr %115, ptr %116, align 8, !tbaa !19
  %117 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %117, align 4, !tbaa !20
  %118 = call i32 @s2n_calculate_stacktrace() #7
  br label %258

119:                                              ; preds = %111
  %120 = load ptr, ptr %0, align 8, !tbaa !24
  %121 = load ptr, ptr %120, align 8, !tbaa !25
  %122 = call i32 @OCSP_basic_verify(ptr noundef nonnull %69, ptr noundef nonnull %81, ptr noundef %121, i64 noundef 0) #7
  %123 = icmp eq i32 %122, 1
  br i1 %123, label %132, label %124

124:                                              ; preds = %119
  %125 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.32, ptr %125, align 8, !tbaa !17
  %126 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.32, i64 21), i32 noundef 47) #6
  %.not81 = icmp eq ptr %126, null
  %127 = getelementptr inbounds i8, ptr %126, i64 1
  %128 = select i1 %.not81, ptr getelementptr inbounds (i8, ptr @.str.32, i64 21), ptr %127
  %129 = getelementptr inbounds i8, ptr %125, i64 8
  store ptr %128, ptr %129, align 8, !tbaa !19
  %130 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %130, align 4, !tbaa !20
  %131 = call i32 @s2n_calculate_stacktrace() #7
  br label %258

132:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  store i32 0, ptr %9, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  store i32 0, ptr %10, align 4, !tbaa !20
  %133 = call ptr @EVP_sha1() #7
  %134 = call ptr @OCSP_cert_to_id(ptr noundef %133, ptr noundef %104, ptr noundef nonnull %109) #7
  %.not82 = icmp eq ptr %134, null
  br i1 %.not82, label %135, label %143

135:                                              ; preds = %132
  %136 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.33, ptr %136, align 8, !tbaa !17
  %137 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.33, i64 21), i32 noundef 47) #6
  %.not83 = icmp eq ptr %137, null
  %138 = getelementptr inbounds i8, ptr %137, i64 1
  %139 = select i1 %.not83, ptr getelementptr inbounds (i8, ptr @.str.33, i64 21), ptr %138
  %140 = getelementptr inbounds i8, ptr %136, i64 8
  store ptr %139, ptr %140, align 8, !tbaa !19
  %141 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %141, align 4, !tbaa !20
  %142 = call i32 @s2n_calculate_stacktrace() #7
  br label %257

143:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  store ptr null, ptr %13, align 8, !tbaa !5
  %144 = call i32 @OCSP_resp_find_status(ptr noundef nonnull %69, ptr noundef nonnull %134, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13) #7
  call void @OCSP_CERTID_free(ptr noundef nonnull %134) #7
  %145 = icmp eq i32 %144, 1
  br i1 %145, label %154, label %146

146:                                              ; preds = %143
  %147 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.34, ptr %147, align 8, !tbaa !17
  %148 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.34, i64 21), i32 noundef 47) #6
  %.not84 = icmp eq ptr %148, null
  %149 = getelementptr inbounds i8, ptr %148, i64 1
  %150 = select i1 %.not84, ptr getelementptr inbounds (i8, ptr @.str.34, i64 21), ptr %149
  %151 = getelementptr inbounds i8, ptr %147, i64 8
  store ptr %150, ptr %151, align 8, !tbaa !19
  %152 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %152, align 4, !tbaa !20
  %153 = call i32 @s2n_calculate_stacktrace() #7
  br label %256

154:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  store i64 0, ptr %14, align 8, !tbaa !27
  %155 = getelementptr inbounds i8, ptr %1, i64 8
  %156 = load ptr, ptr %155, align 8, !tbaa !29
  %157 = call i32 @s2n_config_wall_clock(ptr noundef %156, ptr noundef nonnull %14) #7
  %158 = call zeroext i1 @s2n_result_is_ok(i32 %157)
  br i1 %158, label %159, label %255

159:                                              ; preds = %154
  %160 = load i64, ptr %14, align 8, !tbaa !27
  %161 = udiv i64 %160, 1000000000
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %162 = call ptr @ASN1_GENERALIZEDTIME_set(ptr noundef null, i64 noundef %161) #7
  store ptr %162, ptr %15, align 8, !tbaa !5
  %.not85 = icmp eq ptr %162, null
  br i1 %.not85, label %163, label %171

163:                                              ; preds = %159
  %164 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.35, ptr %164, align 8, !tbaa !17
  %165 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.35, i64 21), i32 noundef 47) #6
  %.not86 = icmp eq ptr %165, null
  %166 = getelementptr inbounds i8, ptr %165, i64 1
  %167 = select i1 %.not86, ptr getelementptr inbounds (i8, ptr @.str.35, i64 21), ptr %166
  %168 = getelementptr inbounds i8, ptr %164, i64 8
  store ptr %167, ptr %168, align 8, !tbaa !19
  %169 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %169, align 4, !tbaa !20
  %170 = call i32 @s2n_calculate_stacktrace() #7
  br label %253

171:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  store i32 0, ptr %16, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #7
  store i32 0, ptr %17, align 4, !tbaa !20
  %172 = load ptr, ptr %12, align 8, !tbaa !5
  %173 = call i32 @ASN1_TIME_diff(ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef %172, ptr noundef nonnull %162) #7
  %174 = icmp eq i32 %173, 1
  br i1 %174, label %183, label %175

175:                                              ; preds = %171
  %176 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.36, ptr %176, align 8, !tbaa !17
  %177 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.36, i64 21), i32 noundef 47) #6
  %.not87 = icmp eq ptr %177, null
  %178 = getelementptr inbounds i8, ptr %177, i64 1
  %179 = select i1 %.not87, ptr getelementptr inbounds (i8, ptr @.str.36, i64 21), ptr %178
  %180 = getelementptr inbounds i8, ptr %176, i64 8
  store ptr %179, ptr %180, align 8, !tbaa !19
  %181 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %181, align 4, !tbaa !20
  %182 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

183:                                              ; preds = %171
  %184 = load i32, ptr %16, align 4, !tbaa !20
  %185 = icmp sgt i32 %184, -1
  %186 = load i32, ptr %17, align 4
  %187 = icmp sgt i32 %186, -1
  %or.cond = select i1 %185, i1 %187, i1 false
  br i1 %or.cond, label %196, label %188

188:                                              ; preds = %183
  %189 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.37, ptr %189, align 8, !tbaa !17
  %190 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.37, i64 21), i32 noundef 47) #6
  %.not88 = icmp eq ptr %190, null
  %191 = getelementptr inbounds i8, ptr %190, i64 1
  %192 = select i1 %.not88, ptr getelementptr inbounds (i8, ptr @.str.37, i64 21), ptr %191
  %193 = getelementptr inbounds i8, ptr %189, i64 8
  store ptr %192, ptr %193, align 8, !tbaa !19
  %194 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544371, ptr %194, align 4, !tbaa !20
  %195 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

196:                                              ; preds = %183
  %197 = load ptr, ptr %13, align 8, !tbaa !5
  %.not89 = icmp eq ptr %197, null
  br i1 %.not89, label %222, label %198

198:                                              ; preds = %196
  %199 = call i32 @ASN1_TIME_diff(ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %162, ptr noundef nonnull %197) #7
  %200 = icmp eq i32 %199, 1
  br i1 %200, label %209, label %201

201:                                              ; preds = %198
  %202 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.38, ptr %202, align 8, !tbaa !17
  %203 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.38, i64 21), i32 noundef 47) #6
  %.not91 = icmp eq ptr %203, null
  %204 = getelementptr inbounds i8, ptr %203, i64 1
  %205 = select i1 %.not91, ptr getelementptr inbounds (i8, ptr @.str.38, i64 21), ptr %204
  %206 = getelementptr inbounds i8, ptr %202, i64 8
  store ptr %205, ptr %206, align 8, !tbaa !19
  %207 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %207, align 4, !tbaa !20
  %208 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

209:                                              ; preds = %198
  %210 = load i32, ptr %16, align 4, !tbaa !20
  %211 = icmp sgt i32 %210, -1
  %212 = load i32, ptr %17, align 4
  %213 = icmp sgt i32 %212, -1
  %or.cond4 = select i1 %211, i1 %213, i1 false
  br i1 %or.cond4, label %.critedge, label %214

214:                                              ; preds = %209
  %215 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.39, ptr %215, align 8, !tbaa !17
  %216 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.39, i64 21), i32 noundef 47) #6
  %.not92 = icmp eq ptr %216, null
  %217 = getelementptr inbounds i8, ptr %216, i64 1
  %218 = select i1 %.not92, ptr getelementptr inbounds (i8, ptr @.str.39, i64 21), ptr %217
  %219 = getelementptr inbounds i8, ptr %215, i64 8
  store ptr %218, ptr %219, align 8, !tbaa !19
  %220 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544369, ptr %220, align 4, !tbaa !20
  %221 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

222:                                              ; preds = %196
  %223 = mul nuw nsw i32 %184, 86400
  %224 = add nuw nsw i32 %223, %186
  %225 = icmp ult i32 %224, 3600
  br i1 %225, label %.critedge, label %226

226:                                              ; preds = %222
  %227 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.40, ptr %227, align 8, !tbaa !17
  %228 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.40, i64 21), i32 noundef 47) #6
  %.not90 = icmp eq ptr %228, null
  %229 = getelementptr inbounds i8, ptr %228, i64 1
  %230 = select i1 %.not90, ptr getelementptr inbounds (i8, ptr @.str.40, i64 21), ptr %229
  %231 = getelementptr inbounds i8, ptr %227, i64 8
  store ptr %230, ptr %231, align 8, !tbaa !19
  %232 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544369, ptr %232, align 4, !tbaa !20
  %233 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

.critedge:                                        ; preds = %222, %209
  %234 = load i32, ptr %9, align 4, !tbaa !20
  switch i32 %234, label %244 [
    i32 0, label %235
    i32 1, label %236
  ]

235:                                              ; preds = %.critedge
  store i32 5, ptr %26, align 8, !tbaa !16
  br label %252

236:                                              ; preds = %.critedge
  %237 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.41, ptr %237, align 8, !tbaa !17
  %238 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.41, i64 21), i32 noundef 47) #6
  %.not93 = icmp eq ptr %238, null
  %239 = getelementptr inbounds i8, ptr %238, i64 1
  %240 = select i1 %.not93, ptr getelementptr inbounds (i8, ptr @.str.41, i64 21), ptr %239
  %241 = getelementptr inbounds i8, ptr %237, i64 8
  store ptr %240, ptr %241, align 8, !tbaa !19
  %242 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544367, ptr %242, align 4, !tbaa !20
  %243 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

244:                                              ; preds = %.critedge
  %245 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.42, ptr %245, align 8, !tbaa !17
  %246 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.42, i64 21), i32 noundef 47) #6
  %.not94 = icmp eq ptr %246, null
  %247 = getelementptr inbounds i8, ptr %246, i64 1
  %248 = select i1 %.not94, ptr getelementptr inbounds (i8, ptr @.str.42, i64 21), ptr %247
  %249 = getelementptr inbounds i8, ptr %245, i64 8
  store ptr %248, ptr %249, align 8, !tbaa !19
  %250 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544366, ptr %250, align 4, !tbaa !20
  %251 = call i32 @s2n_calculate_stacktrace() #7
  br label %252

252:                                              ; preds = %226, %244, %236, %235, %214, %201, %188, %175
  %.sroa.036.1 = phi i32 [ -1, %244 ], [ -1, %236 ], [ 0, %235 ], [ -1, %214 ], [ -1, %201 ], [ -1, %226 ], [ -1, %188 ], [ -1, %175 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  br label %253

253:                                              ; preds = %252, %163
  %.sroa.036.2 = phi i32 [ %.sroa.036.1, %252 ], [ -1, %163 ]
  %254 = call i32 @s2n_openssl_asn1_time_free_pointer(ptr noundef nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  br label %255

255:                                              ; preds = %154, %253
  %.sroa.036.3 = phi i32 [ %.sroa.036.2, %253 ], [ -1, %154 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %256

256:                                              ; preds = %255, %146
  %.sroa.036.4 = phi i32 [ %.sroa.036.3, %255 ], [ -1, %146 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %257

257:                                              ; preds = %256, %135
  %.sroa.036.5 = phi i32 [ %.sroa.036.4, %256 ], [ -1, %135 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %258

258:                                              ; preds = %94, %124, %257, %.thread, %82
  %.sroa.036.9 = phi i32 [ -1, %82 ], [ -1, %94 ], [ -1, %.thread ], [ %.sroa.036.5, %257 ], [ -1, %124 ]
  %259 = call i32 @s2n_openssl_x509_stack_pop_free(ptr noundef nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %260

260:                                              ; preds = %258, %70
  %.sroa.036.10 = phi i32 [ %.sroa.036.9, %258 ], [ -1, %70 ]
  call void @OCSP_BASICRESP_free_pointer(ptr noundef nonnull %7)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %261

261:                                              ; preds = %60, %260, %49
  %.sroa.036.12 = phi i32 [ -1, %49 ], [ %.sroa.036.10, %260 ], [ -1, %60 ]
  call void @OCSP_RESPONSE_free_pointer(ptr noundef nonnull %6)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  br label %262

262:                                              ; preds = %261, %38, %29, %23
  %.sroa.036.13 = phi i32 [ 0, %23 ], [ %.sroa.036.12, %261 ], [ -1, %38 ], [ -1, %29 ]
  ret i32 %.sroa.036.13
}

declare ptr @d2i_OCSP_RESPONSE(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @OCSP_RESPONSE_free_pointer(ptr noundef) local_unnamed_addr #4

declare i32 @OCSP_response_status(ptr noundef) local_unnamed_addr #2

declare ptr @OCSP_response_get1_basic(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @OCSP_BASICRESP_free_pointer(ptr noundef) local_unnamed_addr #4

declare ptr @X509_STORE_CTX_get1_chain(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_openssl_x509_stack_pop_free(ptr noundef) local_unnamed_addr #2

declare i32 @X509_check_issued(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @OCSP_basic_verify(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare ptr @OCSP_cert_to_id(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @EVP_sha1() local_unnamed_addr #2

declare i32 @OCSP_resp_find_status(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @OCSP_CERTID_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_config_wall_clock(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @ASN1_GENERALIZEDTIME_set(ptr noundef, i64 noundef) local_unnamed_addr #2

declare i32 @s2n_openssl_asn1_time_free_pointer(ptr noundef) local_unnamed_addr #2

declare i32 @ASN1_TIME_diff(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { inlinehint 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 #5 = { 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 #6 = { nounwind willreturn memory(read) }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !7, i64 16}
!10 = !{!"s2n_x509_validator", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !11, i64 18, !6, i64 24, !12, i64 32, !6, i64 40, !13, i64 48, !14, i64 52}
!11 = !{!"short", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"s2n_cert_validation_info", !12, i64 0, !12, i64 0}
!14 = !{!"_Bool", !7, i64 0}
!15 = !{!10, !7, i64 17}
!16 = !{!10, !12, i64 32}
!17 = !{!18, !6, i64 0}
!18 = !{!"s2n_debug_info", !6, i64 0, !6, i64 8}
!19 = !{!18, !6, i64 8}
!20 = !{!12, !12, i64 0}
!21 = !{!10, !6, i64 8}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!10, !6, i64 0}
!25 = !{!26, !6, i64 0}
!26 = !{!"s2n_x509_trust_store", !6, i64 0, !12, i64 8}
!27 = !{!28, !28, i64 0}
!28 = !{!"long", !7, i64 0}
!29 = !{!30, !6, i64 8}
!30 = !{!"s2n_connection", !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !7, i64 80, !7, i64 102, !7, i64 124, !12, i64 148, !12, i64 152, !31, i64 160, !28, i64 168, !28, i64 176, !7, i64 184, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !7, i64 220, !7, i64 221, !7, i64 222, !6, i64 224, !6, i64 232, !32, i64 240, !6, i64 632, !6, i64 640, !33, i64 648, !39, i64 1144, !42, i64 1688, !6, i64 1752, !7, i64 1760, !12, i64 1764, !7, i64 1768, !44, i64 1776, !44, i64 1816, !44, i64 1856, !44, i64 1896, !12, i64 1936, !28, i64 1944, !7, i64 1952, !44, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !14, i64 2003, !45, i64 2004, !45, i64 2008, !46, i64 2016, !11, i64 2208, !12, i64 2212, !11, i64 2216, !28, i64 2224, !7, i64 2232, !28, i64 2240, !28, i64 2248, !28, i64 2256, !45, i64 2264, !45, i64 2268, !7, i64 2272, !7, i64 2528, !12, i64 2784, !38, i64 2792, !12, i64 2816, !38, i64 2824, !38, i64 2848, !38, i64 2872, !48, i64 2896, !10, i64 3704, !6, i64 3760, !6, i64 3768, !7, i64 3776, !12, i64 3780, !38, i64 3784, !12, i64 3808, !50, i64 3816, !7, i64 3848, !44, i64 3992, !38, i64 4032, !38, i64 4056, !14, i64 4080, !14, i64 4081, !14, i64 4082, !11, i64 4084, !11, i64 4086, !12, i64 4088, !12, i64 4092, !38, i64 4096, !12, i64 4120, !51, i64 4128, !45, i64 4176, !7, i64 4180, !7, i64 4181}
!31 = !{!"s2n_timer", !28, i64 0}
!32 = !{!"s2n_secrets", !7, i64 0, !12, i64 388}
!33 = !{!"s2n_kex_parameters", !34, i64 0, !35, i64 8, !7, i64 24, !35, i64 56, !36, i64 72, !36, i64 184, !7, i64 296, !37, i64 360, !38, i64 448, !38, i64 472}
!34 = !{!"s2n_dh_params", !6, i64 0}
!35 = !{!"s2n_ecc_evp_params", !6, i64 0, !6, i64 8}
!36 = !{!"s2n_kem_group_params", !6, i64 0, !37, i64 8, !35, i64 96}
!37 = !{!"s2n_kem_params", !6, i64 0, !38, i64 8, !38, i64 32, !38, i64 56, !14, i64 80}
!38 = !{!"s2n_blob", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!39 = !{!"s2n_handshake_parameters", !40, i64 0, !40, i64 48, !38, i64 96, !12, i64 120, !41, i64 124, !6, i64 384, !6, i64 392, !6, i64 400, !7, i64 408, !7, i64 440, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 506}
!40 = !{!"s2n_pkey", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!41 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!42 = !{!"s2n_psk_parameters", !12, i64 0, !43, i64 8, !11, i64 40, !11, i64 42, !6, i64 48, !12, i64 56}
!43 = !{!"s2n_array", !38, i64 0, !12, i64 24, !12, i64 28}
!44 = !{!"s2n_stuffer", !38, i64 0, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 36, !12, i64 36}
!45 = !{!"", !12, i64 0}
!46 = !{!"s2n_handshake", !44, i64 0, !6, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !12, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !47, i64 176, !12, i64 184, !12, i64 184, !12, i64 184, !12, i64 184, !12, i64 188}
!47 = !{!"s2n_offered_early_data", !6, i64 0}
!48 = !{!"s2n_client_hello", !38, i64 0, !49, i64 24, !38, i64 728, !38, i64 752, !38, i64 776, !7, i64 800, !7, i64 801, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802}
!49 = !{!"", !7, i64 0, !38, i64 672, !11, i64 696}
!50 = !{!"s2n_ticket_fields", !38, i64 0, !12, i64 24}
!51 = !{!"s2n_post_handshake", !44, i64 0, !7, i64 40}


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