; LLVM IR from albertobsd/keyhunt :: keyhunt_legacy.ll (Z23thread_process_minikeysPv)

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

%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.bloom = type { i64, i64, i64, i8, x86_fp80, i8, i8, i8, double, ptr }
%class.Point = type { %class.Int, %class.Int, %class.Int }
%class.Int = type { [1 x %struct.__mpz_struct] }
%struct.__mpz_struct = type { i32, i32, ptr }
%struct.tothread = type { i32, ptr, ptr }

@raw_baseminikey = external dso_local global ptr, align 8
@write_keys = external dso_local global %union.pthread_mutex_t, align 8
@write_random = external dso_local global %union.pthread_mutex_t, align 8
@bloom = external dso_local global %struct.bloom, align 16
@steps = external dso_local global ptr, align 8
@N = external dso_local global i64, align 8
@N_SEQUENTIAL_MAX = external dso_local global i64, align 8
@FLAGBASEMINIKEY = external dso_local global i32, align 4
@FLAGQUIET = external dso_local global i32, align 4
@FLAGMATRIX = external dso_local global i32, align 4
@FLAGRANDOM = external dso_local global i32, align 4
@addressTable = external dso_local global ptr, align 8
@secp = external dso_local global ptr, align 8
@.str.80 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [16 x i8], align 1
@stdout = external global ptr, align 8
@.str.226 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.227 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.228 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.229 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.230 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.231 = external hidden unnamed_addr constant [59 x i8], align 1

declare void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1

declare void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

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

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

declare noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z12checkpointerPvPKcS1_S1_i(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #3

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

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

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

declare i32 @fclose(ptr noundef) #0

declare i32 @fflush(ptr noundef) #0

declare void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef) #0

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #0

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

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

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_Z23thread_process_minikeysPv(ptr noundef %0) #6 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca [4 x %class.Point], align 16
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca [4 x %class.Int], align 16
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca [4 x [20 x i8]], align 16
  %12 = alloca [131 x i8], align 16
  %13 = alloca [4 x [32 x i8]], align 16
  %14 = alloca [4 x [40 x i8]], align 16
  %15 = alloca [4 x [24 x i8]], align 16
  %16 = alloca [8 x [24 x i8]], align 16
  %17 = alloca [21 x i8], align 16
  %18 = alloca [24 x i8], align 16
  %19 = alloca ptr, align 8
  %20 = alloca [32 x i8], align 16
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %class.Point, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 192, ptr %5) #7
  %28 = getelementptr inbounds [4 x %class.Point], ptr %5, i32 0, i32 0
  %29 = getelementptr inbounds %class.Point, ptr %28, i64 4
  br label %30

30:                                               ; preds = %32, %1
  %31 = phi ptr [ %28, %1 ], [ %33, %32 ]
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %31)
          to label %32 unwind label %68

32:                                               ; preds = %30
  %33 = getelementptr inbounds %class.Point, ptr %31, i64 1
  %34 = icmp eq ptr %33, %29
  br i1 %34, label %35, label %30

35:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 64, ptr %8) #7
  %36 = getelementptr inbounds [4 x %class.Int], ptr %8, i32 0, i32 0
  %37 = getelementptr inbounds %class.Int, ptr %36, i64 4
  br label %38

38:                                               ; preds = %40, %35
  %39 = phi ptr [ %36, %35 ], [ %41, %40 ]
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %39)
          to label %40 unwind label %78

40:                                               ; preds = %38
  %41 = getelementptr inbounds %class.Int, ptr %39, i64 1
  %42 = icmp eq ptr %41, %37
  br i1 %42, label %43, label %38

43:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 80, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 131, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 160, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 192, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 21, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 1, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %44 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %44, ptr %9, align 8, !tbaa !5
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.tothread, ptr %45, i32 0, i32 0
  %47 = load i32, ptr %46, align 8, !tbaa !11
  store i32 %47, ptr %22, align 4, !tbaa !9
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free(ptr noundef %48) #7
  store i32 0, ptr %26, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %49

49:                                               ; preds = %65, %43
  %50 = load i32, ptr %24, align 4, !tbaa !9
  %51 = icmp slt i32 %50, 4
  br i1 %51, label %52, label %88

52:                                               ; preds = %49
  %53 = load i32, ptr %24, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 %54
  %56 = getelementptr inbounds [24 x i8], ptr %55, i64 0, i64 0
  store i8 83, ptr %56, align 8, !tbaa !13
  %57 = load i32, ptr %24, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 %58
  %60 = getelementptr inbounds [24 x i8], ptr %59, i64 0, i64 22
  store i8 63, ptr %60, align 2, !tbaa !13
  %61 = load i32, ptr %24, align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 %62
  %64 = getelementptr inbounds [24 x i8], ptr %63, i64 0, i64 23
  store i8 0, ptr %64, align 1, !tbaa !13
  br label %65

65:                                               ; preds = %52
  %66 = load i32, ptr %24, align 4, !tbaa !9
  %67 = add nsw i32 %66, 1
  store i32 %67, ptr %24, align 4, !tbaa !9
  br label %49, !llvm.loop !14

68:                                               ; preds = %30
  %69 = landingpad { ptr, i32 }
          cleanup
  %70 = extractvalue { ptr, i32 } %69, 0
  store ptr %70, ptr %6, align 8
  %71 = extractvalue { ptr, i32 } %69, 1
  store i32 %71, ptr %7, align 4
  %72 = icmp eq ptr %28, %31
  br i1 %72, label %77, label %73

73:                                               ; preds = %73, %68
  %74 = phi ptr [ %31, %68 ], [ %75, %73 ]
  %75 = getelementptr inbounds %class.Point, ptr %74, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %75) #7
  %76 = icmp eq ptr %75, %28
  br i1 %76, label %77, label %73

77:                                               ; preds = %73, %68
  br label %533

78:                                               ; preds = %38
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %6, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %7, align 4
  %82 = icmp eq ptr %36, %39
  br i1 %82, label %87, label %83

83:                                               ; preds = %83, %78
  %84 = phi ptr [ %39, %78 ], [ %85, %83 ]
  %85 = getelementptr inbounds %class.Int, ptr %84, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %85) #7
  %86 = icmp eq ptr %85, %36
  br i1 %86, label %87, label %83

87:                                               ; preds = %83, %78
  br label %519

88:                                               ; preds = %49
  %89 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  store i8 83, ptr %89, align 16, !tbaa !13
  %90 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 22
  store i8 63, ptr %90, align 2, !tbaa !13
  %91 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 23
  store i8 0, ptr %91, align 1, !tbaa !13
  br label %92

92:                                               ; preds = %498, %88
  %93 = load i32, ptr @FLAGRANDOM, align 4, !tbaa !9
  %94 = icmp ne i32 %93, 0
  br i1 %94, label %95, label %121

95:                                               ; preds = %92
  %96 = getelementptr inbounds [32 x i8], ptr %20, i64 0, i64 0
  %97 = invoke noundef i32 @_Z12random_bytesPhi(ptr noundef %96, i32 noundef 32)
          to label %98 unwind label %116

98:                                               ; preds = %95
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %113, %98
  %100 = load i32, ptr %24, align 4, !tbaa !9
  %101 = icmp slt i32 %100, 21
  br i1 %101, label %102, label %120

102:                                              ; preds = %99
  %103 = load i32, ptr %24, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds [32 x i8], ptr %20, i64 0, i64 %104
  %106 = load i8, ptr %105, align 1, !tbaa !13
  %107 = zext i8 %106 to i32
  %108 = srem i32 %107, 58
  %109 = trunc i32 %108 to i8
  %110 = load i32, ptr %24, align 4, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 %111
  store i8 %109, ptr %112, align 1, !tbaa !13
  br label %113

113:                                              ; preds = %102
  %114 = load i32, ptr %24, align 4, !tbaa !9
  %115 = add nsw i32 %114, 1
  store i32 %115, ptr %24, align 4, !tbaa !9
  br label %99, !llvm.loop !16

116:                                              ; preds = %454, %438, %422, %419, %413, %408, %389, %371, %340, %317, %264, %254, %244, %234, %229, %196, %193, %186, %183, %173, %165, %160, %138, %135, %124, %95
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %6, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %7, align 4
  br label %504

120:                                              ; preds = %99
  br label %173

121:                                              ; preds = %92
  %122 = load i32, ptr @FLAGBASEMINIKEY, align 4, !tbaa !9
  %123 = icmp ne i32 %122, 0
  br i1 %123, label %124, label %131

124:                                              ; preds = %121
  %125 = call i32 @pthread_mutex_lock(ptr noundef @write_random) #7
  %126 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %127 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %126, ptr align 1 %127, i64 21, i1 false)
  %128 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  invoke void @_Z19increment_minikey_NPc(ptr noundef %128)
          to label %129 unwind label %116

129:                                              ; preds = %124
  %130 = call i32 @pthread_mutex_unlock(ptr noundef @write_random) #7
  br label %172

131:                                              ; preds = %121
  %132 = call i32 @pthread_mutex_lock(ptr noundef @write_random) #7
  %133 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  %134 = icmp eq ptr %133, null
  br i1 %134, label %135, label %165

135:                                              ; preds = %131
  %136 = call noalias ptr @malloc(i64 noundef 22) #8
  store ptr %136, ptr @raw_baseminikey, align 8, !tbaa !5
  %137 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  invoke void @_Z12checkpointerPvPKcS1_S1_i(ptr noundef %137, ptr noundef @.str.80, ptr noundef @.str.81, ptr noundef @.str.87, i32 noundef 2414)
          to label %138 unwind label %116

138:                                              ; preds = %135
  %139 = getelementptr inbounds [32 x i8], ptr %20, i64 0, i64 0
  %140 = invoke noundef i32 @_Z12random_bytesPhi(ptr noundef %139, i32 noundef 32)
          to label %141 unwind label %116

141:                                              ; preds = %138
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %157, %141
  %143 = load i32, ptr %24, align 4, !tbaa !9
  %144 = icmp slt i32 %143, 21
  br i1 %144, label %145, label %160

145:                                              ; preds = %142
  %146 = load i32, ptr %24, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds [32 x i8], ptr %20, i64 0, i64 %147
  %149 = load i8, ptr %148, align 1, !tbaa !13
  %150 = zext i8 %149 to i32
  %151 = srem i32 %150, 58
  %152 = trunc i32 %151 to i8
  %153 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  %154 = load i32, ptr %24, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i8, ptr %153, i64 %155
  store i8 %152, ptr %156, align 1, !tbaa !13
  br label %157

157:                                              ; preds = %145
  %158 = load i32, ptr %24, align 4, !tbaa !9
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr %24, align 4, !tbaa !9
  br label %142, !llvm.loop !17

160:                                              ; preds = %142
  %161 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %162 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %161, ptr align 1 %162, i64 21, i1 false)
  %163 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  invoke void @_Z19increment_minikey_NPc(ptr noundef %163)
          to label %164 unwind label %116

164:                                              ; preds = %160
  br label %170

165:                                              ; preds = %131
  %166 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %167 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %166, ptr align 1 %167, i64 21, i1 false)
  %168 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !5
  invoke void @_Z19increment_minikey_NPc(ptr noundef %168)
          to label %169 unwind label %116

169:                                              ; preds = %165
  br label %170

170:                                              ; preds = %169, %164
  %171 = call i32 @pthread_mutex_unlock(ptr noundef @write_random) #7
  br label %172

172:                                              ; preds = %170, %129
  br label %173

173:                                              ; preds = %172, %120
  %174 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %175 = getelementptr inbounds i8, ptr %174, i64 1
  %176 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  invoke void @_Z11set_minikeyPcS_i(ptr noundef %175, ptr noundef %176, i32 noundef 21)
          to label %177 unwind label %116

177:                                              ; preds = %173
  %178 = load i32, ptr %23, align 4, !tbaa !9
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %180, label %497

180:                                              ; preds = %177
  store i64 0, ptr %10, align 8, !tbaa !18
  %181 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !9
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %183, label %190

183:                                              ; preds = %180
  %184 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %185 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.226, ptr noundef %184)
          to label %186 unwind label %116

186:                                              ; preds = %183
  %187 = load ptr, ptr @stdout, align 8, !tbaa !5
  %188 = invoke i32 @fflush(ptr noundef %187)
          to label %189 unwind label %116

189:                                              ; preds = %186
  br label %201

190:                                              ; preds = %180
  %191 = load i32, ptr @FLAGQUIET, align 4, !tbaa !9
  %192 = icmp ne i32 %191, 0
  br i1 %192, label %200, label %193

193:                                              ; preds = %190
  %194 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %195 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.227, ptr noundef %194)
          to label %196 unwind label %116

196:                                              ; preds = %193
  %197 = load ptr, ptr @stdout, align 8, !tbaa !5
  %198 = invoke i32 @fflush(ptr noundef %197)
          to label %199 unwind label %116

199:                                              ; preds = %196
  br label %200

200:                                              ; preds = %199, %190
  br label %201

201:                                              ; preds = %200, %189
  br label %202

202:                                              ; preds = %494, %201
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %475, %202
  %204 = load i32, ptr %25, align 4, !tbaa !9
  %205 = icmp slt i32 %204, 256
  br i1 %205, label %206, label %478

206:                                              ; preds = %203
  %207 = load i32, ptr %26, align 4, !tbaa !9
  %208 = icmp sgt i32 %207, 0
  br i1 %208, label %209, label %228

209:                                              ; preds = %206
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %210

210:                                              ; preds = %224, %209
  %211 = load i32, ptr %24, align 4, !tbaa !9
  %212 = load i32, ptr %26, align 4, !tbaa !9
  %213 = icmp slt i32 %211, %212
  br i1 %213, label %214, label %227

214:                                              ; preds = %210
  %215 = load i32, ptr %24, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 %216
  %218 = getelementptr inbounds [24 x i8], ptr %217, i64 0, i64 0
  %219 = load i32, ptr %24, align 4, !tbaa !9
  %220 = add nsw i32 4, %219
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 %221
  %223 = getelementptr inbounds [24 x i8], ptr %222, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %218, ptr align 8 %223, i64 22, i1 false)
  br label %224

224:                                              ; preds = %214
  %225 = load i32, ptr %24, align 4, !tbaa !9
  %226 = add nsw i32 %225, 1
  store i32 %226, ptr %24, align 4, !tbaa !9
  br label %210, !llvm.loop !20

227:                                              ; preds = %210
  br label %228

228:                                              ; preds = %227, %206
  br label %229

229:                                              ; preds = %314, %228
  %230 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %231 = getelementptr inbounds i8, ptr %230, i64 1
  %232 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %233 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef %231, ptr noundef %232, i32 noundef 20)
          to label %234 unwind label %116

234:                                              ; preds = %229
  %235 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 0
  %236 = getelementptr inbounds [24 x i8], ptr %235, i64 0, i64 0
  %237 = getelementptr inbounds i8, ptr %236, i64 1
  %238 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %239 = getelementptr inbounds i8, ptr %238, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %237, ptr align 1 %239, i64 21, i1 false)
  %240 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %241 = getelementptr inbounds i8, ptr %240, i64 1
  %242 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %243 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef %241, ptr noundef %242, i32 noundef 20)
          to label %244 unwind label %116

244:                                              ; preds = %234
  %245 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 1
  %246 = getelementptr inbounds [24 x i8], ptr %245, i64 0, i64 0
  %247 = getelementptr inbounds i8, ptr %246, i64 1
  %248 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %249 = getelementptr inbounds i8, ptr %248, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %247, ptr align 1 %249, i64 21, i1 false)
  %250 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %251 = getelementptr inbounds i8, ptr %250, i64 1
  %252 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %253 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef %251, ptr noundef %252, i32 noundef 20)
          to label %254 unwind label %116

254:                                              ; preds = %244
  %255 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 2
  %256 = getelementptr inbounds [24 x i8], ptr %255, i64 0, i64 0
  %257 = getelementptr inbounds i8, ptr %256, i64 1
  %258 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %259 = getelementptr inbounds i8, ptr %258, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %257, ptr align 1 %259, i64 21, i1 false)
  %260 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %261 = getelementptr inbounds i8, ptr %260, i64 1
  %262 = getelementptr inbounds [21 x i8], ptr %17, i64 0, i64 0
  %263 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef %261, ptr noundef %262, i32 noundef 20)
          to label %264 unwind label %116

264:                                              ; preds = %254
  %265 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 3
  %266 = getelementptr inbounds [24 x i8], ptr %265, i64 0, i64 0
  %267 = getelementptr inbounds i8, ptr %266, i64 1
  %268 = getelementptr inbounds [24 x i8], ptr %18, i64 0, i64 0
  %269 = getelementptr inbounds i8, ptr %268, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %267, ptr align 1 %269, i64 21, i1 false)
  %270 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 0
  %271 = getelementptr inbounds [24 x i8], ptr %270, i64 0, i64 0
  %272 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 1
  %273 = getelementptr inbounds [24 x i8], ptr %272, i64 0, i64 0
  %274 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 2
  %275 = getelementptr inbounds [24 x i8], ptr %274, i64 0, i64 0
  %276 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 3
  %277 = getelementptr inbounds [24 x i8], ptr %276, i64 0, i64 0
  %278 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 0
  %279 = getelementptr inbounds [32 x i8], ptr %278, i64 0, i64 0
  %280 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 1
  %281 = getelementptr inbounds [32 x i8], ptr %280, i64 0, i64 0
  %282 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 2
  %283 = getelementptr inbounds [32 x i8], ptr %282, i64 0, i64 0
  %284 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 3
  %285 = getelementptr inbounds [32 x i8], ptr %284, i64 0, i64 0
  invoke void @_Z12sha256sse_23PhS_S_S_S_S_S_S_(ptr noundef %271, ptr noundef %273, ptr noundef %275, ptr noundef %277, ptr noundef %279, ptr noundef %281, ptr noundef %283, ptr noundef %285)
          to label %286 unwind label %116

286:                                              ; preds = %264
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %287

287:                                              ; preds = %310, %286
  %288 = load i32, ptr %24, align 4, !tbaa !9
  %289 = icmp slt i32 %288, 4
  br i1 %289, label %290, label %313

290:                                              ; preds = %287
  %291 = load i32, ptr %24, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 %292
  %294 = getelementptr inbounds [32 x i8], ptr %293, i64 0, i64 0
  %295 = load i8, ptr %294, align 16, !tbaa !13
  %296 = sext i8 %295 to i32
  %297 = icmp eq i32 %296, 0
  br i1 %297, label %298, label %309

298:                                              ; preds = %290
  %299 = load i32, ptr %26, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 %300
  %302 = getelementptr inbounds [24 x i8], ptr %301, i64 0, i64 0
  %303 = load i32, ptr %24, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds [4 x [24 x i8]], ptr %15, i64 0, i64 %304
  %306 = getelementptr inbounds [24 x i8], ptr %305, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %302, ptr align 8 %306, i64 22, i1 false)
  %307 = load i32, ptr %26, align 4, !tbaa !9
  %308 = add nsw i32 %307, 1
  store i32 %308, ptr %26, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %298, %290
  br label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %24, align 4, !tbaa !9
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %24, align 4, !tbaa !9
  br label %287, !llvm.loop !21

313:                                              ; preds = %287
  br label %314

314:                                              ; preds = %313
  %315 = load i32, ptr %26, align 4, !tbaa !9
  %316 = icmp slt i32 %315, 4
  br i1 %316, label %229, label %317, !llvm.loop !22

317:                                              ; preds = %314
  %318 = load i32, ptr %26, align 4, !tbaa !9
  %319 = sub nsw i32 %318, 4
  store i32 %319, ptr %26, align 4, !tbaa !9
  %320 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 0
  %321 = getelementptr inbounds [24 x i8], ptr %320, i64 0, i64 0
  %322 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 1
  %323 = getelementptr inbounds [24 x i8], ptr %322, i64 0, i64 0
  %324 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 2
  %325 = getelementptr inbounds [24 x i8], ptr %324, i64 0, i64 0
  %326 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 3
  %327 = getelementptr inbounds [24 x i8], ptr %326, i64 0, i64 0
  %328 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 0
  %329 = getelementptr inbounds [32 x i8], ptr %328, i64 0, i64 0
  %330 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 1
  %331 = getelementptr inbounds [32 x i8], ptr %330, i64 0, i64 0
  %332 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 2
  %333 = getelementptr inbounds [32 x i8], ptr %332, i64 0, i64 0
  %334 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 3
  %335 = getelementptr inbounds [32 x i8], ptr %334, i64 0, i64 0
  invoke void @_Z12sha256sse_22PhS_S_S_S_S_S_S_(ptr noundef %321, ptr noundef %323, ptr noundef %325, ptr noundef %327, ptr noundef %329, ptr noundef %331, ptr noundef %333, ptr noundef %335)
          to label %336 unwind label %116

336:                                              ; preds = %317
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %359, %336
  %338 = load i32, ptr %24, align 4, !tbaa !9
  %339 = icmp slt i32 %338, 4
  br i1 %339, label %340, label %371

340:                                              ; preds = %337
  %341 = load i32, ptr %24, align 4, !tbaa !9
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds [4 x %class.Int], ptr %8, i64 0, i64 %342
  %344 = load i32, ptr %24, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [4 x [32 x i8]], ptr %13, i64 0, i64 %345
  %347 = getelementptr inbounds [32 x i8], ptr %346, i64 0, i64 0
  invoke void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %343, ptr noundef %347)
          to label %348 unwind label %116

348:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 48, ptr %27) #7
  %349 = load ptr, ptr @secp, align 8, !tbaa !5
  %350 = load i32, ptr %24, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds [4 x %class.Int], ptr %8, i64 0, i64 %351
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %27, ptr noundef nonnull align 8 dereferenceable(393296) %349, ptr noundef %352)
          to label %353 unwind label %362

353:                                              ; preds = %348
  %354 = load i32, ptr %24, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [4 x %class.Point], ptr %5, i64 0, i64 %355
  %357 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %356, ptr noundef nonnull align 8 dereferenceable(48) %27)
          to label %358 unwind label %366

358:                                              ; preds = %353
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %27) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #7
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %24, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %24, align 4, !tbaa !9
  br label %337, !llvm.loop !23

362:                                              ; preds = %348
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %6, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %7, align 4
  br label %370

366:                                              ; preds = %353
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %6, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %7, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %27) #7
  br label %370

370:                                              ; preds = %366, %362
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #7
  br label %504

371:                                              ; preds = %337
  %372 = load ptr, ptr @secp, align 8, !tbaa !5
  %373 = getelementptr inbounds [4 x %class.Point], ptr %5, i64 0, i64 0
  %374 = getelementptr inbounds [4 x %class.Point], ptr %5, i64 0, i64 1
  %375 = getelementptr inbounds [4 x %class.Point], ptr %5, i64 0, i64 2
  %376 = getelementptr inbounds [4 x %class.Point], ptr %5, i64 0, i64 3
  %377 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 0
  %378 = getelementptr inbounds [20 x i8], ptr %377, i64 0, i64 0
  %379 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 1
  %380 = getelementptr inbounds [20 x i8], ptr %379, i64 0, i64 0
  %381 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 2
  %382 = getelementptr inbounds [20 x i8], ptr %381, i64 0, i64 0
  %383 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 3
  %384 = getelementptr inbounds [20 x i8], ptr %383, i64 0, i64 0
  invoke void @_ZN9Secp256K110GetHash160EibR5PointS1_S1_S1_PhS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(393296) %372, i32 noundef 0, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %373, ptr noundef nonnull align 8 dereferenceable(48) %374, ptr noundef nonnull align 8 dereferenceable(48) %375, ptr noundef nonnull align 8 dereferenceable(48) %376, ptr noundef %378, ptr noundef %380, ptr noundef %382, ptr noundef %384)
          to label %385 unwind label %116

385:                                              ; preds = %371
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %471, %385
  %387 = load i32, ptr %24, align 4, !tbaa !9
  %388 = icmp slt i32 %387, 4
  br i1 %388, label %389, label %474

389:                                              ; preds = %386
  %390 = load i32, ptr %24, align 4, !tbaa !9
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 %391
  %393 = getelementptr inbounds [20 x i8], ptr %392, i64 0, i64 0
  %394 = invoke i32 @bloom_check(ptr noundef @bloom, ptr noundef %393, i32 noundef 20)
          to label %395 unwind label %116

395:                                              ; preds = %389
  store i32 %394, ptr %21, align 4, !tbaa !9
  %396 = load i32, ptr %21, align 4, !tbaa !9
  %397 = icmp ne i32 %396, 0
  br i1 %397, label %398, label %470

398:                                              ; preds = %395
  %399 = load ptr, ptr @addressTable, align 8, !tbaa !5
  %400 = load i32, ptr %24, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 %401
  %403 = getelementptr inbounds [20 x i8], ptr %402, i64 0, i64 0
  %404 = load i64, ptr @N, align 8, !tbaa !18
  %405 = call noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef %399, ptr noundef %403, i64 noundef %404)
  store i32 %405, ptr %21, align 4, !tbaa !9
  %406 = load i32, ptr %21, align 4, !tbaa !9
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %408, label %469

408:                                              ; preds = %398
  %409 = load i32, ptr %24, align 4, !tbaa !9
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds [4 x %class.Int], ptr %8, i64 0, i64 %410
  %412 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %411)
          to label %413 unwind label %116

413:                                              ; preds = %408
  store ptr %412, ptr %19, align 8, !tbaa !5
  %414 = load ptr, ptr @secp, align 8, !tbaa !5
  %415 = load i32, ptr %24, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [4 x %class.Point], ptr %5, i64 0, i64 %416
  %418 = getelementptr inbounds [131 x i8], ptr %12, i64 0, i64 0
  invoke void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296) %414, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %417, ptr noundef %418)
          to label %419 unwind label %116

419:                                              ; preds = %413
  %420 = call i32 @pthread_mutex_lock(ptr noundef @write_keys) #7
  %421 = invoke noalias ptr @fopen(ptr noundef @.str.228, ptr noundef @.str.229)
          to label %422 unwind label %116

422:                                              ; preds = %419
  store ptr %421, ptr %4, align 8, !tbaa !5
  %423 = load i32, ptr %24, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds [4 x [20 x i8]], ptr %11, i64 0, i64 %424
  %426 = getelementptr inbounds [20 x i8], ptr %425, i64 0, i64 0
  %427 = load i32, ptr %24, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds [4 x [40 x i8]], ptr %14, i64 0, i64 %428
  %430 = getelementptr inbounds [40 x i8], ptr %429, i64 0, i64 0
  invoke void @_Z19rmd160toaddress_dstPcS_(ptr noundef %426, ptr noundef %430)
          to label %431 unwind label %116

431:                                              ; preds = %422
  %432 = load i32, ptr %24, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 %433
  %435 = getelementptr inbounds [24 x i8], ptr %434, i64 0, i64 22
  store i8 0, ptr %435, align 2, !tbaa !13
  %436 = load ptr, ptr %4, align 8, !tbaa !5
  %437 = icmp ne ptr %436, null
  br i1 %437, label %438, label %454

438:                                              ; preds = %431
  %439 = load ptr, ptr %4, align 8, !tbaa !5
  %440 = load ptr, ptr %19, align 8, !tbaa !5
  %441 = getelementptr inbounds [131 x i8], ptr %12, i64 0, i64 0
  %442 = load i32, ptr %24, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 %443
  %445 = getelementptr inbounds [24 x i8], ptr %444, i64 0, i64 0
  %446 = load i32, ptr %24, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds [4 x [40 x i8]], ptr %14, i64 0, i64 %447
  %449 = getelementptr inbounds [40 x i8], ptr %448, i64 0, i64 0
  %450 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %439, ptr noundef @.str.230, ptr noundef %440, ptr noundef %441, ptr noundef %445, ptr noundef %449) #7
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = invoke i32 @fclose(ptr noundef %451)
          to label %453 unwind label %116

453:                                              ; preds = %438
  br label %454

454:                                              ; preds = %453, %431
  %455 = load ptr, ptr %19, align 8, !tbaa !5
  %456 = getelementptr inbounds [131 x i8], ptr %12, i64 0, i64 0
  %457 = load i32, ptr %24, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds [8 x [24 x i8]], ptr %16, i64 0, i64 %458
  %460 = getelementptr inbounds [24 x i8], ptr %459, i64 0, i64 0
  %461 = load i32, ptr %24, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds [4 x [40 x i8]], ptr %14, i64 0, i64 %462
  %464 = getelementptr inbounds [40 x i8], ptr %463, i64 0, i64 0
  %465 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.231, ptr noundef %455, ptr noundef %456, ptr noundef %460, ptr noundef %464)
          to label %466 unwind label %116

466:                                              ; preds = %454
  %467 = call i32 @pthread_mutex_unlock(ptr noundef @write_keys) #7
  %468 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %468) #7
  br label %469

469:                                              ; preds = %466, %398
  br label %470

470:                                              ; preds = %469, %395
  br label %471

471:                                              ; preds = %470
  %472 = load i32, ptr %24, align 4, !tbaa !9
  %473 = add nsw i32 %472, 1
  store i32 %473, ptr %24, align 4, !tbaa !9
  br label %386, !llvm.loop !24

474:                                              ; preds = %386
  br label %475

475:                                              ; preds = %474
  %476 = load i32, ptr %25, align 4, !tbaa !9
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %25, align 4, !tbaa !9
  br label %203, !llvm.loop !25

478:                                              ; preds = %203
  %479 = load ptr, ptr @steps, align 8, !tbaa !5
  %480 = load i32, ptr %22, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds i64, ptr %479, i64 %481
  %483 = load i64, ptr %482, align 8, !tbaa !18
  %484 = add i64 %483, 1
  store i64 %484, ptr %482, align 8, !tbaa !18
  %485 = load i64, ptr %10, align 8, !tbaa !18
  %486 = add i64 %485, 1024
  store i64 %486, ptr %10, align 8, !tbaa !18
  br label %487

487:                                              ; preds = %478
  %488 = load i64, ptr %10, align 8, !tbaa !18
  %489 = load i64, ptr @N_SEQUENTIAL_MAX, align 8, !tbaa !18
  %490 = icmp ult i64 %488, %489
  br i1 %490, label %491, label %494

491:                                              ; preds = %487
  %492 = load i32, ptr %23, align 4, !tbaa !9
  %493 = icmp ne i32 %492, 0
  br label %494

494:                                              ; preds = %491, %487
  %495 = phi i1 [ false, %487 ], [ %493, %491 ]
  br i1 %495, label %202, label %496, !llvm.loop !26

496:                                              ; preds = %494
  br label %497

497:                                              ; preds = %496, %177
  br label %498

498:                                              ; preds = %497
  %499 = load i32, ptr %23, align 4, !tbaa !9
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %92, label %501, !llvm.loop !27

501:                                              ; preds = %498
  store ptr null, ptr %2, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 21, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 192, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 160, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 131, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  %502 = getelementptr inbounds [4 x %class.Int], ptr %8, i32 0, i32 0
  %503 = getelementptr inbounds %class.Int, ptr %502, i64 4
  br label %507

504:                                              ; preds = %370, %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 21, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 192, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 160, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 131, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  %505 = getelementptr inbounds [4 x %class.Int], ptr %8, i32 0, i32 0
  %506 = getelementptr inbounds %class.Int, ptr %505, i64 4
  br label %514

507:                                              ; preds = %507, %501
  %508 = phi ptr [ %503, %501 ], [ %509, %507 ]
  %509 = getelementptr inbounds %class.Int, ptr %508, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %509) #7
  %510 = icmp eq ptr %509, %502
  br i1 %510, label %511, label %507

511:                                              ; preds = %507
  call void @llvm.lifetime.end.p0(i64 64, ptr %8) #7
  %512 = getelementptr inbounds [4 x %class.Point], ptr %5, i32 0, i32 0
  %513 = getelementptr inbounds %class.Point, ptr %512, i64 4
  br label %522

514:                                              ; preds = %514, %504
  %515 = phi ptr [ %506, %504 ], [ %516, %514 ]
  %516 = getelementptr inbounds %class.Int, ptr %515, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %516) #7
  %517 = icmp eq ptr %516, %505
  br i1 %517, label %518, label %514

518:                                              ; preds = %514
  br label %519

519:                                              ; preds = %518, %87
  call void @llvm.lifetime.end.p0(i64 64, ptr %8) #7
  %520 = getelementptr inbounds [4 x %class.Point], ptr %5, i32 0, i32 0
  %521 = getelementptr inbounds %class.Point, ptr %520, i64 4
  br label %528

522:                                              ; preds = %522, %511
  %523 = phi ptr [ %513, %511 ], [ %524, %522 ]
  %524 = getelementptr inbounds %class.Point, ptr %523, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %524) #7
  %525 = icmp eq ptr %524, %512
  br i1 %525, label %526, label %522

526:                                              ; preds = %522
  call void @llvm.lifetime.end.p0(i64 192, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  %527 = load ptr, ptr %2, align 8
  ret ptr %527

528:                                              ; preds = %528, %519
  %529 = phi ptr [ %521, %519 ], [ %530, %528 ]
  %530 = getelementptr inbounds %class.Point, ptr %529, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %530) #7
  %531 = icmp eq ptr %530, %520
  br i1 %531, label %532, label %528

532:                                              ; preds = %528
  br label %533

533:                                              ; preds = %532, %77
  call void @llvm.lifetime.end.p0(i64 192, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  br label %534

534:                                              ; preds = %533
  %535 = load ptr, ptr %6, align 8
  %536 = load i32, ptr %7, align 4
  %537 = insertvalue { ptr, i32 } poison, ptr %535, 0
  %538 = insertvalue { ptr, i32 } %537, i32 %536, 1
  resume { ptr, i32 } %538
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z19rmd160toaddress_dstPcS_(ptr noundef, ptr noundef) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef, ptr noundef, i64 noundef) #3

declare noundef i32 @_Z12random_bytesPhi(ptr noundef, i32 noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z19increment_minikey_NPc(ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z11set_minikeyPcS_i(ptr noundef, ptr noundef, i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef, ptr noundef, i32 noundef) #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12sha256sse_23PhS_S_S_S_S_S_S_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12sha256sse_22PhS_S_S_S_S_S_S_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

declare void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN9Secp256K110GetHash160EibR5PointS1_S1_S1_PhS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(393296), i32 noundef, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @bloom_check(ptr noundef, ptr noundef, i32 noundef) #0

declare void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef) #0

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTS8tothread", !10, i64 0, !6, i64 8, !6, i64 16}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}


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

%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.bloom = type { i64, i64, i64, i8, x86_fp80, i8, i8, i8, double, ptr }
%class.Point = type { %class.Int, %class.Int, %class.Int }
%class.Int = type { [1 x %struct.__mpz_struct] }
%struct.__mpz_struct = type { i32, i32, ptr }

@raw_baseminikey = external dso_local local_unnamed_addr global ptr, align 8
@write_keys = external dso_local global %union.pthread_mutex_t, align 8
@write_random = external dso_local global %union.pthread_mutex_t, align 8
@bloom = external dso_local global %struct.bloom, align 16
@steps = external dso_local local_unnamed_addr global ptr, align 8
@N = external dso_local local_unnamed_addr global i64, align 8
@N_SEQUENTIAL_MAX = external dso_local local_unnamed_addr global i64, align 8
@FLAGBASEMINIKEY = external dso_local local_unnamed_addr global i32, align 4
@FLAGQUIET = external dso_local local_unnamed_addr global i32, align 4
@FLAGMATRIX = external dso_local local_unnamed_addr global i32, align 4
@FLAGRANDOM = external dso_local local_unnamed_addr global i32, align 4
@addressTable = external dso_local local_unnamed_addr global ptr, align 8
@secp = external dso_local local_unnamed_addr global ptr, align 8
@.str.80 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [16 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.226 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.227 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.228 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.229 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.230 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.231 = external hidden unnamed_addr constant [59 x i8], align 1

declare void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1

declare void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

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

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

declare noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z12checkpointerPvPKcS1_S1_i(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

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

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

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

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

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

declare void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef) local_unnamed_addr #0

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

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

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

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress noreturn uwtable
define dso_local noalias noundef nonnull ptr @_Z23thread_process_minikeysPv(ptr nocapture noundef %0) local_unnamed_addr #8 personality ptr @__gxx_personality_v0 {
  %2 = alloca [4 x %class.Point], align 16
  %3 = alloca [4 x %class.Int], align 16
  %4 = alloca [4 x [20 x i8]], align 16
  %5 = alloca [131 x i8], align 16
  %6 = alloca [4 x [32 x i8]], align 16
  %7 = alloca [4 x [40 x i8]], align 16
  %8 = alloca [4 x [24 x i8]], align 16
  %9 = alloca [8 x [24 x i8]], align 16
  %10 = alloca [21 x i8], align 16
  %11 = alloca [24 x i8], align 16
  %12 = alloca [32 x i8], align 16
  %13 = alloca %class.Point, align 8
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %2) #10
  call void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %2)
  %.ptr.1 = getelementptr inbounds i8, ptr %2, i64 48
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %.ptr.1)
          to label %14 unwind label %.preheader130.preheader

14:                                               ; preds = %1
  %.ptr.2 = getelementptr inbounds i8, ptr %2, i64 96
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %.ptr.2)
          to label %15 unwind label %.preheader130.preheader

15:                                               ; preds = %14
  %.ptr.3 = getelementptr inbounds i8, ptr %2, i64 144
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %.ptr.3)
          to label %16 unwind label %.preheader130.preheader

16:                                               ; preds = %15
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %17 unwind label %84

17:                                               ; preds = %16
  %.ptr98.1 = getelementptr inbounds i8, ptr %3, i64 16
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.1)
          to label %18 unwind label %.preheader128.preheader

18:                                               ; preds = %17
  %.ptr98.2 = getelementptr inbounds i8, ptr %3, i64 32
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.2)
          to label %19 unwind label %.preheader128.preheader

19:                                               ; preds = %18
  %.ptr98.3 = getelementptr inbounds i8, ptr %3, i64 48
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.3)
          to label %20 unwind label %.preheader128.preheader

20:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 131, ptr nonnull %5) #10
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %6) #10
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %7) #10
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %8) #10
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 21, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #10
  %21 = load i32, ptr %0, align 8, !tbaa !5
  call void @free(ptr noundef %0) #10
  store i8 83, ptr %8, align 16, !tbaa !11
  %22 = getelementptr inbounds i8, ptr %8, i64 22
  store i8 63, ptr %22, align 2, !tbaa !11
  %23 = getelementptr inbounds i8, ptr %8, i64 23
  store i8 0, ptr %23, align 1, !tbaa !11
  %24 = getelementptr inbounds i8, ptr %8, i64 24
  store i8 83, ptr %24, align 8, !tbaa !11
  %25 = getelementptr inbounds i8, ptr %8, i64 46
  store i8 63, ptr %25, align 2, !tbaa !11
  %26 = getelementptr inbounds i8, ptr %8, i64 47
  store i8 0, ptr %26, align 1, !tbaa !11
  %27 = getelementptr inbounds i8, ptr %8, i64 48
  store i8 83, ptr %27, align 16, !tbaa !11
  %28 = getelementptr inbounds i8, ptr %8, i64 70
  store i8 63, ptr %28, align 2, !tbaa !11
  %29 = getelementptr inbounds i8, ptr %8, i64 71
  store i8 0, ptr %29, align 1, !tbaa !11
  %30 = getelementptr inbounds i8, ptr %8, i64 72
  store i8 83, ptr %30, align 8, !tbaa !11
  %31 = getelementptr inbounds i8, ptr %8, i64 94
  store i8 63, ptr %31, align 2, !tbaa !11
  %32 = getelementptr inbounds i8, ptr %8, i64 95
  store i8 0, ptr %32, align 1, !tbaa !11
  store i8 83, ptr %11, align 16, !tbaa !11
  %33 = getelementptr inbounds i8, ptr %11, i64 22
  store i8 63, ptr %33, align 2, !tbaa !11
  %34 = getelementptr inbounds i8, ptr %11, i64 23
  store i8 0, ptr %34, align 1, !tbaa !11
  %35 = getelementptr inbounds i8, ptr %11, i64 1
  %36 = getelementptr inbounds i8, ptr %8, i64 1
  %37 = getelementptr inbounds i8, ptr %8, i64 25
  %38 = getelementptr inbounds i8, ptr %8, i64 49
  %39 = getelementptr inbounds i8, ptr %8, i64 73
  %40 = getelementptr inbounds i8, ptr %6, i64 32
  %41 = getelementptr inbounds i8, ptr %6, i64 64
  %42 = getelementptr inbounds i8, ptr %6, i64 96
  %43 = getelementptr inbounds i8, ptr %9, i64 24
  %44 = getelementptr inbounds i8, ptr %9, i64 48
  %45 = getelementptr inbounds i8, ptr %9, i64 72
  %46 = getelementptr inbounds i8, ptr %4, i64 20
  %47 = getelementptr inbounds i8, ptr %4, i64 40
  %48 = getelementptr inbounds i8, ptr %4, i64 60
  %49 = sext i32 %21 to i64
  %50 = getelementptr inbounds i8, ptr %12, i64 16
  %51 = getelementptr inbounds i8, ptr %10, i64 16
  %52 = getelementptr inbounds i8, ptr %12, i64 20
  %53 = getelementptr inbounds i8, ptr %10, i64 20
  %54 = getelementptr inbounds i8, ptr %12, i64 1
  %55 = getelementptr inbounds i8, ptr %12, i64 2
  %56 = getelementptr inbounds i8, ptr %12, i64 3
  %57 = getelementptr inbounds i8, ptr %12, i64 4
  %58 = getelementptr inbounds i8, ptr %12, i64 5
  %59 = getelementptr inbounds i8, ptr %12, i64 6
  %60 = getelementptr inbounds i8, ptr %12, i64 7
  %61 = getelementptr inbounds i8, ptr %12, i64 8
  %62 = getelementptr inbounds i8, ptr %12, i64 9
  %63 = getelementptr inbounds i8, ptr %12, i64 10
  %64 = getelementptr inbounds i8, ptr %12, i64 11
  %65 = getelementptr inbounds i8, ptr %12, i64 12
  %66 = getelementptr inbounds i8, ptr %12, i64 13
  %67 = getelementptr inbounds i8, ptr %12, i64 14
  %68 = getelementptr inbounds i8, ptr %12, i64 15
  %69 = getelementptr inbounds i8, ptr %12, i64 16
  %70 = getelementptr inbounds i8, ptr %12, i64 17
  %71 = getelementptr inbounds i8, ptr %12, i64 18
  %72 = getelementptr inbounds i8, ptr %12, i64 19
  %73 = getelementptr inbounds i8, ptr %12, i64 20
  %74 = getelementptr inbounds i8, ptr %9, i64 22
  %75 = getelementptr inbounds i8, ptr %7, i64 40
  %76 = getelementptr inbounds i8, ptr %9, i64 46
  %77 = getelementptr inbounds i8, ptr %7, i64 80
  %78 = getelementptr inbounds i8, ptr %9, i64 70
  %79 = getelementptr inbounds i8, ptr %7, i64 120
  %80 = getelementptr inbounds i8, ptr %9, i64 94
  br label %88

.preheader130.preheader:                          ; preds = %1, %14, %15
  %.ptr.lcssa.ph = phi ptr [ %.ptr.3, %15 ], [ %.ptr.2, %14 ], [ %.ptr.1, %1 ]
  %lpad.thr_comm = landingpad { ptr, i32 }
          cleanup
  br label %.preheader130

.preheader130:                                    ; preds = %.preheader130.preheader, %.preheader130
  %81 = phi ptr [ %82, %.preheader130 ], [ %.ptr.lcssa.ph, %.preheader130.preheader ]
  %82 = getelementptr inbounds i8, ptr %81, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %82) #10
  %83 = icmp eq ptr %82, %2
  br i1 %83, label %.loopexit, label %.preheader130

84:                                               ; preds = %16
  %lpad.thr_comm.split-lp189 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit110

.preheader128.preheader:                          ; preds = %17, %18, %19
  %.ptr98.lcssa.ph = phi ptr [ %.ptr98.3, %19 ], [ %.ptr98.2, %18 ], [ %.ptr98.1, %17 ]
  %lpad.thr_comm188 = landingpad { ptr, i32 }
          cleanup
  br label %.preheader128

.preheader128:                                    ; preds = %.preheader128.preheader, %.preheader128
  %85 = phi ptr [ %86, %.preheader128 ], [ %.ptr98.lcssa.ph, %.preheader128.preheader ]
  %86 = getelementptr inbounds i8, ptr %85, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %86) #10
  %87 = icmp eq ptr %86, %3
  br i1 %87, label %.loopexit110, label %.preheader128

.loopexit124:                                     ; preds = %343
  br label %88, !llvm.loop !12

88:                                               ; preds = %.loopexit124, %20
  %.0 = phi i32 [ 0, %20 ], [ %237, %.loopexit124 ]
  %89 = load i32, ptr @FLAGRANDOM, align 4, !tbaa !14
  %.not = icmp eq i32 %89, 0
  br i1 %.not, label %98, label %90

90:                                               ; preds = %88
  %91 = invoke noundef i32 @_Z12random_bytesPhi(ptr noundef nonnull %12, i32 noundef 32)
          to label %.preheader126.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader126.preheader:                          ; preds = %90
  %92 = load <16 x i8>, ptr %12, align 16, !tbaa !11
  %93 = urem <16 x i8> %92, <i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58, i8 58>
  store <16 x i8> %93, ptr %10, align 16, !tbaa !11
  %94 = load <4 x i8>, ptr %50, align 16, !tbaa !11
  %95 = urem <4 x i8> %94, <i8 58, i8 58, i8 58, i8 58>
  store <4 x i8> %95, ptr %51, align 16, !tbaa !11
  %96 = load i8, ptr %52, align 4, !tbaa !11
  %97 = urem i8 %96, 58
  store i8 %97, ptr %53, align 4, !tbaa !11
  br label %.loopexit127

.loopexit112:                                     ; preds = %331, %329, %327, %.preheader111.3, %311, %309, %307, %.preheader111.2, %291, %289, %287, %.preheader111.1, %.preheader111.preheader, %267, %269, %271
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit:                      ; preds = %.preheader113.3, %.preheader113.2, %.preheader113.1, %.preheader113.preheader
  %lpad.loopexit114 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit:    ; preds = %.loopexit120, %203, %205, %207, %209
  %lpad.loopexit117 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %254, %236
  %lpad.loopexit121 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp: ; preds = %106, %90
  %lpad.loopexit.split-lp122 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

98:                                               ; preds = %88
  %99 = load i32, ptr @FLAGBASEMINIKEY, align 4, !tbaa !14
  %.not100 = icmp eq i32 %99, 0
  %100 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_random) #10
  %101 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  br i1 %.not100, label %104, label %102

102:                                              ; preds = %98
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(21) %10, ptr noundef nonnull align 1 dereferenceable(21) %101, i64 21, i1 false)
  call void @_Z19increment_minikey_NPc(ptr noundef %101)
  %103 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_random) #10
  br label %.loopexit127

104:                                              ; preds = %98
  %105 = icmp eq ptr %101, null
  br i1 %105, label %106, label %180

106:                                              ; preds = %104
  %107 = call noalias dereferenceable_or_null(22) ptr @malloc(i64 noundef 22) #11
  store ptr %107, ptr @raw_baseminikey, align 8, !tbaa !15
  call void @_Z12checkpointerPvPKcS1_S1_i(ptr noundef %107, ptr noundef nonnull @.str.80, ptr noundef nonnull @.str.81, ptr noundef nonnull @.str.87, i32 noundef 2414)
  %108 = invoke noundef i32 @_Z12random_bytesPhi(ptr noundef nonnull %12, i32 noundef 32)
          to label %.preheader125.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader125.preheader:                          ; preds = %106
  %109 = load i8, ptr %12, align 16, !tbaa !11
  %110 = urem i8 %109, 58
  %111 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  store i8 %110, ptr %111, align 1, !tbaa !11
  %112 = load i8, ptr %54, align 1, !tbaa !11
  %113 = urem i8 %112, 58
  %114 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %115 = getelementptr inbounds i8, ptr %114, i64 1
  store i8 %113, ptr %115, align 1, !tbaa !11
  %116 = load i8, ptr %55, align 2, !tbaa !11
  %117 = urem i8 %116, 58
  %118 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %119 = getelementptr inbounds i8, ptr %118, i64 2
  store i8 %117, ptr %119, align 1, !tbaa !11
  %120 = load i8, ptr %56, align 1, !tbaa !11
  %121 = urem i8 %120, 58
  %122 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %123 = getelementptr inbounds i8, ptr %122, i64 3
  store i8 %121, ptr %123, align 1, !tbaa !11
  %124 = load i8, ptr %57, align 4, !tbaa !11
  %125 = urem i8 %124, 58
  %126 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %127 = getelementptr inbounds i8, ptr %126, i64 4
  store i8 %125, ptr %127, align 1, !tbaa !11
  %128 = load i8, ptr %58, align 1, !tbaa !11
  %129 = urem i8 %128, 58
  %130 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %131 = getelementptr inbounds i8, ptr %130, i64 5
  store i8 %129, ptr %131, align 1, !tbaa !11
  %132 = load i8, ptr %59, align 2, !tbaa !11
  %133 = urem i8 %132, 58
  %134 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %135 = getelementptr inbounds i8, ptr %134, i64 6
  store i8 %133, ptr %135, align 1, !tbaa !11
  %136 = load i8, ptr %60, align 1, !tbaa !11
  %137 = urem i8 %136, 58
  %138 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %139 = getelementptr inbounds i8, ptr %138, i64 7
  store i8 %137, ptr %139, align 1, !tbaa !11
  %140 = load i8, ptr %61, align 8, !tbaa !11
  %141 = urem i8 %140, 58
  %142 = load ptr, ptr @raw_baseminikey, align 8, !tbaa !15
  %143 = getelementptr inbounds i8, ptr %142, i64 8
  store i8 %141, ptr %143, align 1, !tbaa !11
  %144 = load i8, ptr %62, align 1, !tbaa !11
  %145 = urem i8 %144, 58
  %146 = getelementptr inbounds i8, ptr %142, i64 9
  store i8 %145, ptr %146, align 1, !tbaa !11
  %147 = load i8, ptr %63, align 2, !tbaa !11
  %148 = urem i8 %147, 58
  %149 = getelementptr inbounds i8, ptr %142, i64 10
  store i8 %148, ptr %149, align 1, !tbaa !11
  %150 = load i8, ptr %64, align 1, !tbaa !11
  %151 = urem i8 %150, 58
  %152 = getelementptr inbounds i8, ptr %142, i64 11
  store i8 %151, ptr %152, align 1, !tbaa !11
  %153 = load i8, ptr %65, align 4, !tbaa !11
  %154 = urem i8 %153, 58
  %155 = getelementptr inbounds i8, ptr %142, i64 12
  store i8 %154, ptr %155, align 1, !tbaa !11
  %156 = load i8, ptr %66, align 1, !tbaa !11
  %157 = urem i8 %156, 58
  %158 = getelementptr inbounds i8, ptr %142, i64 13
  store i8 %157, ptr %158, align 1, !tbaa !11
  %159 = load i8, ptr %67, align 2, !tbaa !11
  %160 = urem i8 %159, 58
  %161 = getelementptr inbounds i8, ptr %142, i64 14
  store i8 %160, ptr %161, align 1, !tbaa !11
  %162 = load i8, ptr %68, align 1, !tbaa !11
  %163 = urem i8 %162, 58
  %164 = getelementptr inbounds i8, ptr %142, i64 15
  store i8 %163, ptr %164, align 1, !tbaa !11
  %165 = load i8, ptr %69, align 16, !tbaa !11
  %166 = urem i8 %165, 58
  %167 = getelementptr inbounds i8, ptr %142, i64 16
  store i8 %166, ptr %167, align 1, !tbaa !11
  %168 = load i8, ptr %70, align 1, !tbaa !11
  %169 = urem i8 %168, 58
  %170 = getelementptr inbounds i8, ptr %142, i64 17
  store i8 %169, ptr %170, align 1, !tbaa !11
  %171 = load i8, ptr %71, align 2, !tbaa !11
  %172 = urem i8 %171, 58
  %173 = getelementptr inbounds i8, ptr %142, i64 18
  store i8 %172, ptr %173, align 1, !tbaa !11
  %174 = load i8, ptr %72, align 1, !tbaa !11
  %175 = urem i8 %174, 58
  %176 = getelementptr inbounds i8, ptr %142, i64 19
  store i8 %175, ptr %176, align 1, !tbaa !11
  %177 = load i8, ptr %73, align 4, !tbaa !11
  %178 = urem i8 %177, 58
  %179 = getelementptr inbounds i8, ptr %142, i64 20
  store i8 %178, ptr %179, align 1, !tbaa !11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(21) %10, ptr noundef nonnull align 1 dereferenceable(21) %142, i64 21, i1 false)
  call void @_Z19increment_minikey_NPc(ptr noundef %142)
  br label %181

180:                                              ; preds = %104
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(21) %10, ptr noundef nonnull align 1 dereferenceable(21) %101, i64 21, i1 false)
  call void @_Z19increment_minikey_NPc(ptr noundef nonnull %101)
  br label %181

181:                                              ; preds = %180, %.preheader125.preheader
  %182 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_random) #10
  br label %.loopexit127

.loopexit127:                                     ; preds = %.preheader126.preheader, %102, %181
  call void @_Z11set_minikeyPcS_i(ptr noundef nonnull %35, ptr noundef nonnull %10, i32 noundef 21)
  %183 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !14
  %.not101 = icmp eq i32 %183, 0
  br i1 %.not101, label %184, label %.sink.split

184:                                              ; preds = %.loopexit127
  %185 = load i32, ptr @FLAGQUIET, align 4, !tbaa !14
  %.not102 = icmp eq i32 %185, 0
  br i1 %.not102, label %.sink.split, label %.preheader

.sink.split:                                      ; preds = %184, %.loopexit127
  %.str.227.sink = phi ptr [ @.str.226, %.loopexit127 ], [ @.str.227, %184 ]
  %186 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.227.sink, ptr noundef nonnull %11)
  %187 = load ptr, ptr @stdout, align 8, !tbaa !15
  %188 = call i32 @fflush(ptr noundef %187)
  br label %.preheader

.preheader:                                       ; preds = %.sink.split, %184
  br label %189

189:                                              ; preds = %.preheader, %343
  %.083 = phi i64 [ %348, %343 ], [ 0, %.preheader ]
  %.1 = phi i32 [ %237, %343 ], [ %.0, %.preheader ]
  br label %190

190:                                              ; preds = %189, %341
  %.2153 = phi i32 [ %.1, %189 ], [ %237, %341 ]
  %.067152 = phi i32 [ 0, %189 ], [ %342, %341 ]
  %191 = icmp sgt i32 %.2153, 0
  br i1 %191, label %.preheader119.preheader, label %.loopexit120.preheader

.preheader119.preheader:                          ; preds = %190
  %wide.trip.count = zext nneg i32 %.2153 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %192 = icmp eq i32 %.2153, 1
  br i1 %192, label %.loopexit120.preheader.loopexit.unr-lcssa, label %.preheader119.preheader.new

.preheader119.preheader.new:                      ; preds = %.preheader119.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  br label %.preheader119

.preheader119:                                    ; preds = %.preheader119, %.preheader119.preheader.new
  %indvars.iv = phi i64 [ 0, %.preheader119.preheader.new ], [ %indvars.iv.next.1, %.preheader119 ]
  %niter = phi i64 [ 0, %.preheader119.preheader.new ], [ %niter.next.1, %.preheader119 ]
  %193 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %indvars.iv
  %194 = add nuw nsw i64 %indvars.iv, 4
  %195 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %194
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(22) %193, ptr noundef nonnull align 16 dereferenceable(22) %195, i64 22, i1 false)
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %196 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %indvars.iv.next
  %197 = add nuw nsw i64 %indvars.iv, 5
  %198 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %197
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(22) %196, ptr noundef nonnull align 8 dereferenceable(22) %198, i64 22, i1 false)
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit120.preheader.loopexit.unr-lcssa, label %.preheader119, !llvm.loop !16

.loopexit120.preheader.loopexit.unr-lcssa:        ; preds = %.preheader119, %.preheader119.preheader
  %indvars.iv.unr = phi i64 [ 0, %.preheader119.preheader ], [ %indvars.iv.next.1, %.preheader119 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit120.preheader, label %.preheader119.epil

.preheader119.epil:                               ; preds = %.loopexit120.preheader.loopexit.unr-lcssa
  %199 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %indvars.iv.unr
  %200 = add nuw nsw i64 %indvars.iv.unr, 4
  %201 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %200
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(22) %199, ptr noundef nonnull align 8 dereferenceable(22) %201, i64 22, i1 false)
  br label %.loopexit120.preheader

.loopexit120.preheader:                           ; preds = %.preheader119.epil, %.loopexit120.preheader.loopexit.unr-lcssa, %190
  br label %.loopexit120

.loopexit120:                                     ; preds = %.loopexit120.preheader, %234
  %.3 = phi i32 [ %.5.3, %234 ], [ %.2153, %.loopexit120.preheader ]
  %202 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef nonnull %35, ptr noundef nonnull %10, i32 noundef 20)
          to label %203 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

203:                                              ; preds = %.loopexit120
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(21) %36, ptr noundef nonnull align 1 dereferenceable(21) %35, i64 21, i1 false)
  %204 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef nonnull %35, ptr noundef nonnull %10, i32 noundef 20)
          to label %205 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

205:                                              ; preds = %203
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(21) %37, ptr noundef nonnull align 1 dereferenceable(21) %35, i64 21, i1 false)
  %206 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef nonnull %35, ptr noundef nonnull %10, i32 noundef 20)
          to label %207 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

207:                                              ; preds = %205
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(21) %38, ptr noundef nonnull align 1 dereferenceable(21) %35, i64 21, i1 false)
  %208 = invoke noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef nonnull %35, ptr noundef nonnull %10, i32 noundef 20)
          to label %209 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

209:                                              ; preds = %207
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(21) %39, ptr noundef nonnull align 1 dereferenceable(21) %35, i64 21, i1 false)
  invoke void @_Z12sha256sse_23PhS_S_S_S_S_S_S_(ptr noundef nonnull %8, ptr noundef nonnull %24, ptr noundef nonnull %27, ptr noundef nonnull %30, ptr noundef nonnull %6, ptr noundef nonnull %40, ptr noundef nonnull %41, ptr noundef nonnull %42)
          to label %.preheader.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

.preheader.preheader:                             ; preds = %209
  %210 = load i8, ptr %6, align 16, !tbaa !11
  %211 = icmp eq i8 %210, 0
  br i1 %211, label %212, label %.preheader.1

212:                                              ; preds = %.preheader.preheader
  %213 = sext i32 %.3 to i64
  %214 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %213
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(22) %214, ptr noundef nonnull align 16 dereferenceable(22) %8, i64 22, i1 false)
  %215 = add nsw i32 %.3, 1
  br label %.preheader.1

.preheader.1:                                     ; preds = %.preheader.preheader, %212
  %.5 = phi i32 [ %215, %212 ], [ %.3, %.preheader.preheader ]
  %216 = load i8, ptr %40, align 16, !tbaa !11
  %217 = icmp eq i8 %216, 0
  br i1 %217, label %218, label %.preheader.2

218:                                              ; preds = %.preheader.1
  %219 = sext i32 %.5 to i64
  %220 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %219
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(22) %220, ptr noundef nonnull align 8 dereferenceable(22) %24, i64 22, i1 false)
  %221 = add nsw i32 %.5, 1
  br label %.preheader.2

.preheader.2:                                     ; preds = %218, %.preheader.1
  %.5.1 = phi i32 [ %221, %218 ], [ %.5, %.preheader.1 ]
  %222 = load i8, ptr %41, align 16, !tbaa !11
  %223 = icmp eq i8 %222, 0
  br i1 %223, label %224, label %.preheader.3

224:                                              ; preds = %.preheader.2
  %225 = sext i32 %.5.1 to i64
  %226 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(22) %226, ptr noundef nonnull align 16 dereferenceable(22) %27, i64 22, i1 false)
  %227 = add nsw i32 %.5.1, 1
  br label %.preheader.3

.preheader.3:                                     ; preds = %224, %.preheader.2
  %.5.2 = phi i32 [ %227, %224 ], [ %.5.1, %.preheader.2 ]
  %228 = load i8, ptr %42, align 16, !tbaa !11
  %229 = icmp eq i8 %228, 0
  br i1 %229, label %230, label %234

230:                                              ; preds = %.preheader.3
  %231 = sext i32 %.5.2 to i64
  %232 = getelementptr inbounds [8 x [24 x i8]], ptr %9, i64 0, i64 %231
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(22) %232, ptr noundef nonnull align 8 dereferenceable(22) %30, i64 22, i1 false)
  %233 = add nsw i32 %.5.2, 1
  br label %234

234:                                              ; preds = %230, %.preheader.3
  %.5.3 = phi i32 [ %233, %230 ], [ %.5.2, %.preheader.3 ]
  %235 = icmp slt i32 %.5.3, 4
  br i1 %235, label %.loopexit120, label %236, !llvm.loop !17

236:                                              ; preds = %234
  %237 = add nsw i32 %.5.3, -4
  invoke void @_Z12sha256sse_22PhS_S_S_S_S_S_S_(ptr noundef nonnull %9, ptr noundef nonnull %43, ptr noundef nonnull %44, ptr noundef nonnull %45, ptr noundef nonnull %6, ptr noundef nonnull %40, ptr noundef nonnull %41, ptr noundef nonnull %42)
          to label %.preheader113.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

.preheader113.preheader:                          ; preds = %236
  invoke void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull %6)
          to label %238 unwind label %.loopexit.split-lp.loopexit

238:                                              ; preds = %.preheader113.preheader
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %13) #10
  %239 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %13, ptr noundef nonnull align 8 dereferenceable(393296) %239, ptr noundef nonnull %3)
          to label %240 unwind label %256

240:                                              ; preds = %238
  %241 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %.preheader113.1 unwind label %258

.preheader113.1:                                  ; preds = %240
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #10
  invoke void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.1, ptr noundef nonnull %40)
          to label %242 unwind label %.loopexit.split-lp.loopexit

242:                                              ; preds = %.preheader113.1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %13) #10
  %243 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %13, ptr noundef nonnull align 8 dereferenceable(393296) %243, ptr noundef nonnull %.ptr98.1)
          to label %244 unwind label %256

244:                                              ; preds = %242
  %245 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %.ptr.1, ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %.preheader113.2 unwind label %258

.preheader113.2:                                  ; preds = %244
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #10
  invoke void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.2, ptr noundef nonnull %41)
          to label %246 unwind label %.loopexit.split-lp.loopexit

246:                                              ; preds = %.preheader113.2
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %13) #10
  %247 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %13, ptr noundef nonnull align 8 dereferenceable(393296) %247, ptr noundef nonnull %.ptr98.2)
          to label %248 unwind label %256

248:                                              ; preds = %246
  %249 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %.ptr.2, ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %.preheader113.3 unwind label %258

.preheader113.3:                                  ; preds = %248
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #10
  invoke void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.3, ptr noundef nonnull %42)
          to label %250 unwind label %.loopexit.split-lp.loopexit

250:                                              ; preds = %.preheader113.3
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %13) #10
  %251 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %13, ptr noundef nonnull align 8 dereferenceable(393296) %251, ptr noundef nonnull %.ptr98.3)
          to label %252 unwind label %256

252:                                              ; preds = %250
  %253 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %.ptr.3, ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %254 unwind label %258

254:                                              ; preds = %252
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #10
  %255 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K110GetHash160EibR5PointS1_S1_S1_PhS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(393296) %255, i32 noundef 0, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 8 dereferenceable(48) %.ptr.1, ptr noundef nonnull align 8 dereferenceable(48) %.ptr.2, ptr noundef nonnull align 8 dereferenceable(48) %.ptr.3, ptr noundef nonnull %4, ptr noundef nonnull %46, ptr noundef nonnull %47, ptr noundef nonnull %48)
          to label %.preheader111.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

256:                                              ; preds = %250, %246, %242, %238
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %260

258:                                              ; preds = %252, %248, %244, %240
  %259 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #10
  br label %260

260:                                              ; preds = %258, %256
  %.pn = phi { ptr, i32 } [ %259, %258 ], [ %257, %256 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #10
  br label %.loopexit.split-lp

.preheader111.preheader:                          ; preds = %254
  %261 = invoke i32 @bloom_check(ptr noundef nonnull @bloom, ptr noundef nonnull %4, i32 noundef 20)
          to label %262 unwind label %.loopexit112

262:                                              ; preds = %.preheader111.preheader
  %.not103 = icmp eq i32 %261, 0
  br i1 %.not103, label %.preheader111.1, label %263

263:                                              ; preds = %262
  %264 = load ptr, ptr @addressTable, align 8, !tbaa !15
  %265 = load i64, ptr @N, align 8, !tbaa !18
  %266 = call noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef %264, ptr noundef nonnull %4, i64 noundef %265)
  %.not104 = icmp eq i32 %266, 0
  br i1 %.not104, label %.preheader111.1, label %267

267:                                              ; preds = %263
  %268 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %269 unwind label %.loopexit112

269:                                              ; preds = %267
  %270 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296) %270, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull %5)
          to label %271 unwind label %.loopexit112

271:                                              ; preds = %269
  %272 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #10
  %273 = call noalias ptr @fopen(ptr noundef nonnull @.str.228, ptr noundef nonnull @.str.229)
  invoke void @_Z19rmd160toaddress_dstPcS_(ptr noundef nonnull %4, ptr noundef nonnull %7)
          to label %274 unwind label %.loopexit112

274:                                              ; preds = %271
  store i8 0, ptr %74, align 2, !tbaa !11
  %.not105 = icmp eq ptr %273, null
  br i1 %.not105, label %278, label %275

275:                                              ; preds = %274
  %276 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %273, ptr noundef nonnull @.str.230, ptr noundef %268, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %7) #10
  %277 = call i32 @fclose(ptr noundef nonnull %273)
  br label %278

278:                                              ; preds = %275, %274
  %279 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.231, ptr noundef %268, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %7)
  %280 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #10
  call void @free(ptr noundef %268) #10
  br label %.preheader111.1

.preheader111.1:                                  ; preds = %262, %278, %263
  %281 = invoke i32 @bloom_check(ptr noundef nonnull @bloom, ptr noundef nonnull %46, i32 noundef 20)
          to label %282 unwind label %.loopexit112

282:                                              ; preds = %.preheader111.1
  %.not103.1 = icmp eq i32 %281, 0
  br i1 %.not103.1, label %.preheader111.2, label %283

283:                                              ; preds = %282
  %284 = load ptr, ptr @addressTable, align 8, !tbaa !15
  %285 = load i64, ptr @N, align 8, !tbaa !18
  %286 = call noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef %284, ptr noundef nonnull %46, i64 noundef %285)
  %.not104.1 = icmp eq i32 %286, 0
  br i1 %.not104.1, label %.preheader111.2, label %287

287:                                              ; preds = %283
  %288 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.1)
          to label %289 unwind label %.loopexit112

289:                                              ; preds = %287
  %290 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296) %290, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %.ptr.1, ptr noundef nonnull %5)
          to label %291 unwind label %.loopexit112

291:                                              ; preds = %289
  %292 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #10
  %293 = call noalias ptr @fopen(ptr noundef nonnull @.str.228, ptr noundef nonnull @.str.229)
  invoke void @_Z19rmd160toaddress_dstPcS_(ptr noundef nonnull %46, ptr noundef nonnull %75)
          to label %294 unwind label %.loopexit112

294:                                              ; preds = %291
  store i8 0, ptr %76, align 2, !tbaa !11
  %.not105.1 = icmp eq ptr %293, null
  br i1 %.not105.1, label %298, label %295

295:                                              ; preds = %294
  %296 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %293, ptr noundef nonnull @.str.230, ptr noundef %288, ptr noundef nonnull %5, ptr noundef nonnull %43, ptr noundef nonnull %75) #10
  %297 = call i32 @fclose(ptr noundef nonnull %293)
  br label %298

298:                                              ; preds = %295, %294
  %299 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.231, ptr noundef %288, ptr noundef nonnull %5, ptr noundef nonnull %43, ptr noundef nonnull %75)
  %300 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #10
  call void @free(ptr noundef %288) #10
  br label %.preheader111.2

.preheader111.2:                                  ; preds = %298, %283, %282
  %301 = invoke i32 @bloom_check(ptr noundef nonnull @bloom, ptr noundef nonnull %47, i32 noundef 20)
          to label %302 unwind label %.loopexit112

302:                                              ; preds = %.preheader111.2
  %.not103.2 = icmp eq i32 %301, 0
  br i1 %.not103.2, label %.preheader111.3, label %303

303:                                              ; preds = %302
  %304 = load ptr, ptr @addressTable, align 8, !tbaa !15
  %305 = load i64, ptr @N, align 8, !tbaa !18
  %306 = call noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef %304, ptr noundef nonnull %47, i64 noundef %305)
  %.not104.2 = icmp eq i32 %306, 0
  br i1 %.not104.2, label %.preheader111.3, label %307

307:                                              ; preds = %303
  %308 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.2)
          to label %309 unwind label %.loopexit112

309:                                              ; preds = %307
  %310 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296) %310, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %.ptr.2, ptr noundef nonnull %5)
          to label %311 unwind label %.loopexit112

311:                                              ; preds = %309
  %312 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #10
  %313 = call noalias ptr @fopen(ptr noundef nonnull @.str.228, ptr noundef nonnull @.str.229)
  invoke void @_Z19rmd160toaddress_dstPcS_(ptr noundef nonnull %47, ptr noundef nonnull %77)
          to label %314 unwind label %.loopexit112

314:                                              ; preds = %311
  store i8 0, ptr %78, align 2, !tbaa !11
  %.not105.2 = icmp eq ptr %313, null
  br i1 %.not105.2, label %318, label %315

315:                                              ; preds = %314
  %316 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %313, ptr noundef nonnull @.str.230, ptr noundef %308, ptr noundef nonnull %5, ptr noundef nonnull %44, ptr noundef nonnull %77) #10
  %317 = call i32 @fclose(ptr noundef nonnull %313)
  br label %318

318:                                              ; preds = %315, %314
  %319 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.231, ptr noundef %308, ptr noundef nonnull %5, ptr noundef nonnull %44, ptr noundef nonnull %77)
  %320 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #10
  call void @free(ptr noundef %308) #10
  br label %.preheader111.3

.preheader111.3:                                  ; preds = %318, %303, %302
  %321 = invoke i32 @bloom_check(ptr noundef nonnull @bloom, ptr noundef nonnull %48, i32 noundef 20)
          to label %322 unwind label %.loopexit112

322:                                              ; preds = %.preheader111.3
  %.not103.3 = icmp eq i32 %321, 0
  br i1 %.not103.3, label %341, label %323

323:                                              ; preds = %322
  %324 = load ptr, ptr @addressTable, align 8, !tbaa !15
  %325 = load i64, ptr @N, align 8, !tbaa !18
  %326 = call noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef %324, ptr noundef nonnull %48, i64 noundef %325)
  %.not104.3 = icmp eq i32 %326, 0
  br i1 %.not104.3, label %341, label %327

327:                                              ; preds = %323
  %328 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr98.3)
          to label %329 unwind label %.loopexit112

329:                                              ; preds = %327
  %330 = load ptr, ptr @secp, align 8, !tbaa !15
  invoke void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296) %330, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(48) %.ptr.3, ptr noundef nonnull %5)
          to label %331 unwind label %.loopexit112

331:                                              ; preds = %329
  %332 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #10
  %333 = call noalias ptr @fopen(ptr noundef nonnull @.str.228, ptr noundef nonnull @.str.229)
  invoke void @_Z19rmd160toaddress_dstPcS_(ptr noundef nonnull %48, ptr noundef nonnull %79)
          to label %334 unwind label %.loopexit112

334:                                              ; preds = %331
  store i8 0, ptr %80, align 2, !tbaa !11
  %.not105.3 = icmp eq ptr %333, null
  br i1 %.not105.3, label %338, label %335

335:                                              ; preds = %334
  %336 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %333, ptr noundef nonnull @.str.230, ptr noundef %328, ptr noundef nonnull %5, ptr noundef nonnull %45, ptr noundef nonnull %79) #10
  %337 = call i32 @fclose(ptr noundef nonnull %333)
  br label %338

338:                                              ; preds = %335, %334
  %339 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.231, ptr noundef %328, ptr noundef nonnull %5, ptr noundef nonnull %45, ptr noundef nonnull %79)
  %340 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #10
  call void @free(ptr noundef %328) #10
  br label %341

341:                                              ; preds = %338, %323, %322
  %342 = add nuw nsw i32 %.067152, 1
  %exitcond181.not = icmp eq i32 %342, 256
  br i1 %exitcond181.not, label %343, label %190, !llvm.loop !20

343:                                              ; preds = %341
  %344 = load ptr, ptr @steps, align 8, !tbaa !15
  %345 = getelementptr inbounds i64, ptr %344, i64 %49
  %346 = load i64, ptr %345, align 8, !tbaa !18
  %347 = add i64 %346, 1
  store i64 %347, ptr %345, align 8, !tbaa !18
  %348 = add i64 %.083, 1024
  %349 = load i64, ptr @N_SEQUENTIAL_MAX, align 8, !tbaa !18
  %350 = icmp ult i64 %348, %349
  br i1 %350, label %189, label %.loopexit124, !llvm.loop !12

.loopexit.split-lp:                               ; preds = %.loopexit112, %.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit, %260
  %.pn.pn = phi { ptr, i32 } [ %.pn, %260 ], [ %lpad.loopexit, %.loopexit112 ], [ %lpad.loopexit114, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit117, %.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit121, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp122, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 21, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 131, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %4) #10
  %351 = getelementptr inbounds i8, ptr %3, i64 48
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %351) #10
  %352 = getelementptr inbounds i8, ptr %3, i64 32
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %352) #10
  %353 = getelementptr inbounds i8, ptr %3, i64 16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %353) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #10
  br label %.loopexit110

.loopexit110:                                     ; preds = %.preheader128, %84, %.loopexit.split-lp
  %.pn.pn.pn = phi { ptr, i32 } [ %lpad.thr_comm.split-lp189, %84 ], [ %.pn.pn, %.loopexit.split-lp ], [ %lpad.thr_comm188, %.preheader128 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #10
  %354 = getelementptr inbounds i8, ptr %2, i64 144
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %354) #10
  %355 = getelementptr inbounds i8, ptr %2, i64 96
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %355) #10
  %356 = getelementptr inbounds i8, ptr %2, i64 48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %356) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %2) #10
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader130, %.loopexit110
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %.loopexit110 ], [ %lpad.thr_comm, %.preheader130 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z19rmd160toaddress_dstPcS_(ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z12searchbinaryP13address_valuePcl(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare noundef i32 @_Z12random_bytesPhi(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z19increment_minikey_NPc(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z11set_minikeyPcS_i(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z23increment_minikey_indexPcS_i(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12sha256sse_23PhS_S_S_S_S_S_S_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12sha256sse_22PhS_S_S_S_S_S_S_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

declare void @_ZN3Int10Set32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN9Secp256K110GetHash160EibR5PointS1_S1_S1_PhS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(393296), i32 noundef, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @bloom_check(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @_ZN9Secp256K115GetPublicKeyHexEbR5PointPc(ptr noundef nonnull align 8 dereferenceable(393296), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef) local_unnamed_addr #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress 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 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { mustprogress noreturn 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 #9 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTS8tothread", !7, i64 0, !10, i64 8, !10, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!8, !8, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!7, !7, i64 0}
!15 = !{!10, !10, i64 0}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !8, i64 0}
!20 = distinct !{!20, !13}


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