; LLVM IR from shbang91/rpc :: simulator/mujoco/draco/simulate/simulate.ll (ZN6mujoco8Simulate6RenderEv)

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

%struct.mjrRect_ = type { i32, i32, i32, i32 }
%"class.std::unique_ptr.40" = type { %"struct.std::__uniq_ptr_data.41" }
%"struct.std::__uniq_ptr_data.41" = type { %"class.std::__uniq_ptr_impl.42" }
%"class.std::__uniq_ptr_impl.42" = type { %"class.std::tuple.43" }
%"class.std::tuple.43" = type { %"struct.std::_Tuple_impl.44" }
%"struct.std::_Tuple_impl.44" = type { %"struct.std::_Head_base.47" }
%"struct.std::_Head_base.47" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.mujoco::Simulate" = type <{ i8, [7 x i8], ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, [4 x i8], %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector.12", %"class.std::vector.12", %"class.std::vector.12", %"class.std::vector.12", %"class.std::vector.12", %struct.mjvSceneState_, %struct.mjOption_, %struct.mjvOption_, [4 x i8], %struct.mjvCamera_, i32, [4 x i8], %struct.anon.24, %"class.mujoco::SimulateMutex", %"class.std::_V2::condition_variable_any", i32, [4 x i8], %"class.std::chrono::time_point", double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", i32, [1000 x i8], [1000 x i8], [1000 x i8], [1000 x i8], i32, i8, [3 x i8], float, double, double, [300 x i8], i32, [15 x i32], [6 x i32], [6 x i32], i32, %struct.mjvScene_, ptr, ptr, ptr, %struct.mjvFigure_, %struct.mjvFigure_, %struct.mjvFigure_, %struct.mjvFigure_, %struct.mjvFigure_, [4 x i8], ptr, [10 x i8], [2 x i8], i32, [2 x i32], [2 x i32], %"class.std::unique_ptr", ptr, %struct.mjUI_, %struct.mjUI_, [13 x %struct.mjuiDef_], [14 x %struct.mjuiDef_], [5 x %struct.mjuiDef_], [1000 x i8], [1000 x i8], %"class.std::_V2::condition_variable_any", i32, i32, i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = type { %"struct.std::_Vector_base<std::optional<std::pair<double, double>>, std::allocator<std::optional<std::pair<double, double>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::optional<std::pair<double, double>>, std::allocator<std::optional<std::pair<double, double>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::optional<std::pair<double, double>>, std::allocator<std::optional<std::pair<double, double>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::optional<std::pair<double, double>>, std::allocator<std::optional<std::pair<double, double>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.7" = type { %"struct.std::_Vector_base.8" }
%"struct.std::_Vector_base.8" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.12" = type { %"struct.std::_Vector_base.13" }
%"struct.std::_Vector_base.13" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.mjvSceneState_ = type { i32, ptr, i32, %struct.mjvScene_, %struct.anon, %struct.anon.23 }
%struct.anon = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.mjOption_, %struct.mjVisual_, %struct.mjStatistic_, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mjVisual_ = type { %struct.anon.17, %struct.anon.18, %struct.anon.19, %struct.anon.20, %struct.anon.21, %struct.anon.22 }
%struct.anon.17 = type { float, float, float, float, float, float, float, i32, i32, i32, i32 }
%struct.anon.18 = type { i32, i32, i32, i32, i32 }
%struct.anon.19 = type { [3 x float], [3 x float], [3 x float], i32 }
%struct.anon.20 = type { float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.anon.21 = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.anon.22 = type { [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float] }
%struct.mjStatistic_ = type { double, double, double, double, [3 x double] }
%struct.anon.23 = type { [8 x %struct.mjWarningStat_], i32, i32, i32, double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mjWarningStat_ = type { i32, i32 }
%struct.mjOption_ = type { double, double, double, double, double, double, double, [3 x double], [3 x double], [3 x double], double, double, double, [2 x double], [5 x double], [5 x double], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.mjvOption_ = type { i32, i32, [6 x i8], [6 x i8], [6 x i8], [6 x i8], [6 x i8], [6 x i8], [6 x i8], [32 x i8], i32, i32 }
%struct.mjvCamera_ = type { i32, i32, i32, [3 x double], double, double, double }
%struct.anon.24 = type <{ %"class.std::optional", %"class.std::optional", %"class.std::optional", %"class.std::optional", i8, i8, i8, i8, i8, i8, i8, i8, i32, i8, [3 x i8], %struct.mjuiState_, i8, i8, i8, i8, i8, i8, [2 x i8] }>
%"class.std::optional" = type { %"struct.std::_Optional_base" }
%"struct.std::_Optional_base" = type { %"struct.std::_Optional_payload" }
%"struct.std::_Optional_payload" = type { %"struct.std::_Optional_payload.base", [7 x i8] }
%"struct.std::_Optional_payload.base" = type { %"struct.std::_Optional_payload_base.base" }
%"struct.std::_Optional_payload_base.base" = type <{ %"union.std::_Optional_payload_base<std::__cxx11::basic_string<char>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::__cxx11::basic_string<char>>::_Storage" = type { %"class.std::__cxx11::basic_string" }
%struct.mjuiState_ = type { i32, [25 x %struct.mjrRect_], ptr, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, i32, i32, i32, i32, double, i32, i32, i32, i32, ptr }
%"class.mujoco::SimulateMutex" = type { %"class.std::recursive_mutex" }
%"class.std::recursive_mutex" = type { %"class.std::__recursive_mutex_base" }
%"class.std::__recursive_mutex_base" = type { %union.pthread_mutex_t }
%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 }
%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%struct.mjvScene_ = type { i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, i32, ptr, ptr, ptr, ptr, ptr, i32, [100 x %struct.mjvLight_], [2 x %struct.mjvGLCamera_], i8, [3 x float], [4 x float], float, i32, [10 x i8], i32, [3 x float] }
%struct.mjvLight_ = type { [3 x float], [3 x float], [3 x float], float, float, [3 x float], [3 x float], [3 x float], i8, i8, i8 }
%struct.mjvGLCamera_ = type { [3 x float], [3 x float], [3 x float], float, float, float, float, float, float }
%struct.mjvFigure_ = type { i32, [2 x i32], i32, i32, i32, i32, float, float, [2 x i32], [3 x float], [4 x float], [4 x float], [4 x float], [3 x float], [100 x [3 x float]], [2 x [2 x float]], [20 x i8], [20 x i8], [20 x i8], [1000 x i8], [100 x i8], [100 x [100 x i8]], i32, i32, [2 x i32], i32, float, [100 x i32], [100 x [2000 x float]], [2 x i32], [2 x i32], [2 x float], [2 x float] }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%struct.mjUI_ = type { %struct.mjuiThemeSpacing_, %struct.mjuiThemeColor_, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [300 x i8], ptr, i32, [10 x %struct.mjuiSection_] }
%struct.mjuiThemeSpacing_ = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.mjuiThemeColor_ = type { [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], [3 x float] }
%struct.mjuiSection_ = type { [40 x i8], i32, i32, i32, i32, [200 x %struct.mjuiItem_], %struct.mjrRect_, %struct.mjrRect_ }
%struct.mjuiItem_ = type { i32, [40 x i8], i32, ptr, i32, i32, %union.anon.31, %struct.mjrRect_ }
%union.anon.31 = type { %struct.mjuiItemEdit_, [1288 x i8] }
%struct.mjuiItemEdit_ = type { i32, [7 x [2 x double]] }
%struct.mjuiDef_ = type { i32, [40 x i8], i32, ptr, [300 x i8] }
%"class.std::_V2::condition_variable_any" = type { %"class.std::condition_variable", %"class.std::shared_ptr" }
%"class.std::condition_variable" = type { %"class.std::__condvar" }
%"class.std::__condvar" = type { %union.pthread_cond_t }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }

@_ZN6mujoco8Simulate15percentRealTimeE = external dso_local constant [31 x float], align 16
@.str.52 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [12 x i8], align 1
@_ZN12_GLOBAL__N_110help_titleE = external hidden constant [282 x i8], align 16
@_ZN12_GLOBAL__N_112help_contentE = external hidden constant [268 x i8], align 16
@.str.58 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [22 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

; 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) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) #6

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6mujoco8Simulate6RenderEv(ptr noundef nonnull align 8 dereferenceable(10060044) %0) #5 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct.mjrRect_, align 4
  %4 = alloca %struct.mjrRect_, align 4
  %5 = alloca %struct.mjrRect_, align 4
  %6 = alloca %struct.mjrRect_, align 4
  %7 = alloca [1000 x i8], align 16
  %8 = alloca %struct.mjrRect_, align 4
  %9 = alloca %struct.mjrRect_, align 4
  %10 = alloca i32, align 4
  %11 = alloca %struct.mjrRect_, align 4
  %12 = alloca %struct.mjrRect_, align 4
  %13 = alloca [30 x i8], align 16
  %14 = alloca %struct.mjrRect_, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca i8, align 1
  %19 = alloca [30 x i8], align 16
  %20 = alloca i32, align 4
  %21 = alloca %struct.mjrRect_, align 4
  %22 = alloca %struct.mjrRect_, align 4
  %23 = alloca %struct.mjrRect_, align 4
  %24 = alloca %struct.mjrRect_, align 4
  %25 = alloca %struct.mjrRect_, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %"class.std::unique_ptr.40", align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca %struct.mjrRect_, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %36 = load ptr, ptr %2, align 8
  %37 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %38 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  %39 = load ptr, ptr %38, align 8, !tbaa !9
  %40 = getelementptr inbounds ptr, ptr %39, i64 3
  %41 = load ptr, ptr %40, align 8
  %42 = call noundef zeroext i1 %41(ptr noundef nonnull align 8 dereferenceable(2900) %38)
  br i1 %42, label %43, label %56

43:                                               ; preds = %1
  %44 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %45 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %48 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  %49 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %48)
  call void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef %44, ptr noundef %46, ptr noundef %49)
  %50 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %51 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %52 = load ptr, ptr %51, align 8, !tbaa !11
  %53 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %54 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  %55 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %54)
  call void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef %50, ptr noundef %52, ptr noundef %55)
  br label %56

56:                                               ; preds = %43, %1
  call void @llvm.lifetime.start.p0(i64 16, ptr %3) #10
  %57 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %58 = load ptr, ptr %57, align 8, !tbaa !11
  %59 = getelementptr inbounds %struct.mjuiState_, ptr %58, i32 0, i32 1
  %60 = getelementptr inbounds [25 x %struct.mjrRect_], ptr %59, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3, ptr align 4 %60, i64 16, i1 false), !tbaa.struct !79
  call void @llvm.lifetime.start.p0(i64 16, ptr %4) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %4, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %61 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 48
  %62 = load i32, ptr %61, align 4, !tbaa !81
  %63 = icmp ne i32 %62, 0
  br i1 %63, label %64, label %72

64:                                               ; preds = %56
  %65 = getelementptr inbounds %struct.mjrRect_, ptr %3, i32 0, i32 2
  %66 = load i32, ptr %65, align 4, !tbaa !82
  %67 = getelementptr inbounds %struct.mjrRect_, ptr %3, i32 0, i32 2
  %68 = load i32, ptr %67, align 4, !tbaa !82
  %69 = sdiv i32 %68, 4
  %70 = sub nsw i32 %66, %69
  %71 = getelementptr inbounds %struct.mjrRect_, ptr %4, i32 0, i32 2
  store i32 %70, ptr %71, align 4, !tbaa !82
  br label %72

72:                                               ; preds = %64, %56
  %73 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 0
  %74 = load i8, ptr %73, align 8, !tbaa !84, !range !85, !noundef !86
  %75 = trunc i8 %74 to i1
  br i1 %75, label %150, label %76

76:                                               ; preds = %72
  %77 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 4
  %78 = load ptr, ptr %77, align 8, !tbaa !87
  %79 = icmp ne ptr %78, null
  br i1 %79, label %150, label %80

80:                                               ; preds = %76
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %5, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %81 = getelementptr inbounds { i64, i64 }, ptr %5, i32 0, i32 0
  %82 = load i64, ptr %81, align 4
  %83 = getelementptr inbounds { i64, i64 }, ptr %5, i32 0, i32 1
  %84 = load i64, ptr %83, align 4
  call void @mjr_rectangle(i64 %82, i64 %84, float noundef 0x3FC99999A0000000, float noundef 0x3FD3333340000000, float noundef 0x3FD99999A0000000, float noundef 1.000000e+00)
  %85 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 61
  %86 = load i32, ptr %85, align 8, !tbaa !88
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %96

88:                                               ; preds = %80
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %6, ptr align 4 %4, i64 16, i1 false), !tbaa.struct !79
  %89 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %90 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %89) #10
  %91 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %90)
  %92 = getelementptr inbounds { i64, i64 }, ptr %6, i32 0, i32 0
  %93 = load i64, ptr %92, align 4
  %94 = getelementptr inbounds { i64, i64 }, ptr %6, i32 0, i32 1
  %95 = load i64, ptr %94, align 4
  call void @mjr_overlay(i32 noundef 2, i32 noundef 4, i64 %93, i64 %95, ptr noundef @.str.52, ptr noundef null, ptr noundef %91)
  br label %107

96:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1000, ptr %7) #10
  %97 = call ptr @mj_versionString()
  %98 = call noundef i32 (ptr, ptr, ...) @_ZN6mujoco11sample_utilL11sprintf_arrILm1000EEEiRAT__cPKcz(ptr noundef nonnull align 1 dereferenceable(1000) %7, ptr noundef @.str.53, ptr noundef %97)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %99 = getelementptr inbounds [1000 x i8], ptr %7, i64 0, i64 0
  %100 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %101 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %100) #10
  %102 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %101)
  %103 = getelementptr inbounds { i64, i64 }, ptr %8, i32 0, i32 0
  %104 = load i64, ptr %103, align 4
  %105 = getelementptr inbounds { i64, i64 }, ptr %8, i32 0, i32 1
  %106 = load i64, ptr %105, align 4
  call void @mjr_overlay(i32 noundef 0, i32 noundef 0, i64 %104, i64 %106, ptr noundef %99, ptr noundef null, ptr noundef %102)
  call void @llvm.lifetime.end.p0(i64 1000, ptr %7) #10
  br label %107

107:                                              ; preds = %96, %88
  %108 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 62
  %109 = getelementptr inbounds [1000 x i8], ptr %108, i64 0, i64 0
  %110 = load i8, ptr %109, align 4, !tbaa !89
  %111 = icmp ne i8 %110, 0
  br i1 %111, label %112, label %122

112:                                              ; preds = %107
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %113 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 62
  %114 = getelementptr inbounds [1000 x i8], ptr %113, i64 0, i64 0
  %115 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %116 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %115) #10
  %117 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %116)
  %118 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 0
  %119 = load i64, ptr %118, align 4
  %120 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 1
  %121 = load i64, ptr %120, align 4
  call void @mjr_overlay(i32 noundef 0, i32 noundef 2, i64 %119, i64 %121, ptr noundef %114, ptr noundef null, ptr noundef %117)
  br label %122

122:                                              ; preds = %112, %107
  %123 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %124 = load i32, ptr %123, align 4, !tbaa !90
  %125 = icmp ne i32 %124, 0
  br i1 %125, label %126, label %133

126:                                              ; preds = %122
  %127 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %128 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %129 = load ptr, ptr %128, align 8, !tbaa !11
  %130 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %131 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %130) #10
  %132 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %131)
  call void @mjui_render(ptr noundef %127, ptr noundef %129, ptr noundef %132)
  br label %133

133:                                              ; preds = %126, %122
  %134 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 45
  %135 = load i32, ptr %134, align 8, !tbaa !91
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %144

137:                                              ; preds = %133
  %138 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %139 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %140 = load ptr, ptr %139, align 8, !tbaa !11
  %141 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %142 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %141) #10
  %143 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %142)
  call void @mjui_render(ptr noundef %138, ptr noundef %140, ptr noundef %143)
  br label %144

144:                                              ; preds = %137, %133
  %145 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %146 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %145) #10
  %147 = load ptr, ptr %146, align 8, !tbaa !9
  %148 = getelementptr inbounds ptr, ptr %147, i64 14
  %149 = load ptr, ptr %148, align 8
  call void %149(ptr noundef nonnull align 8 dereferenceable(2900) %146)
  store i32 1, ptr %10, align 4
  br label %763

150:                                              ; preds = %76, %72
  %151 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %152 = getelementptr inbounds %struct.anon.24, ptr %151, i32 0, i32 16
  %153 = load i8, ptr %152, align 8, !tbaa !92, !range !85, !noundef !86
  %154 = trunc i8 %153 to i1
  br i1 %154, label %155, label %170

155:                                              ; preds = %150
  %156 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %157 = load i32, ptr %156, align 4, !tbaa !90
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %167

159:                                              ; preds = %155
  %160 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %161 = getelementptr inbounds %struct.mjUI_, ptr %160, i32 0, i32 21
  %162 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %161, i64 0, i64 2
  %163 = getelementptr inbounds %struct.mjuiSection_, ptr %162, i32 0, i32 1
  %164 = load i32, ptr %163, align 8, !tbaa !93
  %165 = icmp ne i32 %164, 0
  br i1 %165, label %166, label %167

166:                                              ; preds = %159
  call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef %36, i32 noundef 2)
  br label %167

167:                                              ; preds = %166, %159, %155
  %168 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %169 = getelementptr inbounds %struct.anon.24, ptr %168, i32 0, i32 16
  store i8 0, ptr %169, align 8, !tbaa !92
  br label %170

170:                                              ; preds = %167, %150
  %171 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %172 = load i32, ptr %171, align 4, !tbaa !90
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %174, label %182

174:                                              ; preds = %170
  %175 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %176 = getelementptr inbounds %struct.mjUI_, ptr %175, i32 0, i32 21
  %177 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %176, i64 0, i64 3
  %178 = getelementptr inbounds %struct.mjuiSection_, ptr %177, i32 0, i32 1
  %179 = load i32, ptr %178, align 8, !tbaa !93
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %182

181:                                              ; preds = %174
  call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef %36, i32 noundef 3)
  br label %182

182:                                              ; preds = %181, %174, %170
  %183 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %184 = getelementptr inbounds %struct.anon.24, ptr %183, i32 0, i32 17
  %185 = load i8, ptr %184, align 1, !tbaa !95, !range !85, !noundef !86
  %186 = trunc i8 %185 to i1
  br i1 %186, label %187, label %202

187:                                              ; preds = %182
  %188 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %189 = load i32, ptr %188, align 4, !tbaa !90
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %191, label %199

191:                                              ; preds = %187
  %192 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %193 = getelementptr inbounds %struct.mjUI_, ptr %192, i32 0, i32 21
  %194 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %193, i64 0, i64 4
  %195 = getelementptr inbounds %struct.mjuiSection_, ptr %194, i32 0, i32 1
  %196 = load i32, ptr %195, align 8, !tbaa !93
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %198, label %199

198:                                              ; preds = %191
  call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef %36, i32 noundef 4)
  br label %199

199:                                              ; preds = %198, %191, %187
  %200 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %201 = getelementptr inbounds %struct.anon.24, ptr %200, i32 0, i32 17
  store i8 0, ptr %201, align 1, !tbaa !95
  br label %202

202:                                              ; preds = %199, %182
  %203 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 0
  %204 = load i8, ptr %203, align 8, !tbaa !84, !range !85, !noundef !86
  %205 = trunc i8 %204 to i1
  br i1 %205, label %206, label %340

206:                                              ; preds = %202
  %207 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %208 = load i32, ptr %207, align 4, !tbaa !90
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %272

210:                                              ; preds = %206
  %211 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %212 = getelementptr inbounds %struct.mjUI_, ptr %211, i32 0, i32 21
  %213 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %212, i64 0, i64 5
  %214 = getelementptr inbounds %struct.mjuiSection_, ptr %213, i32 0, i32 1
  %215 = load i32, ptr %214, align 8, !tbaa !93
  %216 = icmp ne i32 %215, 0
  br i1 %216, label %217, label %272

217:                                              ; preds = %210
  %218 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 31
  %219 = getelementptr inbounds %struct.mjvCamera_, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !96
  %221 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 79
  %222 = load ptr, ptr %221, align 8, !tbaa !97
  %223 = getelementptr inbounds %struct.mjvCamera_, ptr %222, i32 0, i32 0
  %224 = load i32, ptr %223, align 8, !tbaa !98
  %225 = icmp ne i32 %220, %224
  br i1 %225, label %269, label %226

226:                                              ; preds = %217
  %227 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 31
  %228 = getelementptr inbounds %struct.mjvCamera_, ptr %227, i32 0, i32 1
  %229 = load i32, ptr %228, align 4, !tbaa !99
  %230 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 79
  %231 = load ptr, ptr %230, align 8, !tbaa !97
  %232 = getelementptr inbounds %struct.mjvCamera_, ptr %231, i32 0, i32 1
  %233 = load i32, ptr %232, align 4, !tbaa !100
  %234 = icmp ne i32 %229, %233
  br i1 %234, label %269, label %235

235:                                              ; preds = %226
  %236 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 31
  %237 = getelementptr inbounds %struct.mjvCamera_, ptr %236, i32 0, i32 2
  %238 = load i32, ptr %237, align 8, !tbaa !101
  %239 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 79
  %240 = load ptr, ptr %239, align 8, !tbaa !97
  %241 = getelementptr inbounds %struct.mjvCamera_, ptr %240, i32 0, i32 2
  %242 = load i32, ptr %241, align 8, !tbaa !102
  %243 = icmp ne i32 %238, %242
  br i1 %243, label %269, label %244

244:                                              ; preds = %235
  %245 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %246 = getelementptr inbounds %struct.mjvOption_, ptr %245, i32 0, i32 0
  %247 = load i32, ptr %246, align 8, !tbaa !103
  %248 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %249 = load ptr, ptr %248, align 8, !tbaa !104
  %250 = getelementptr inbounds %struct.mjvOption_, ptr %249, i32 0, i32 0
  %251 = load i32, ptr %250, align 4, !tbaa !105
  %252 = icmp ne i32 %247, %251
  br i1 %252, label %269, label %253

253:                                              ; preds = %244
  %254 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %255 = getelementptr inbounds %struct.mjvOption_, ptr %254, i32 0, i32 1
  %256 = load i32, ptr %255, align 4, !tbaa !106
  %257 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %258 = load ptr, ptr %257, align 8, !tbaa !104
  %259 = getelementptr inbounds %struct.mjvOption_, ptr %258, i32 0, i32 1
  %260 = load i32, ptr %259, align 4, !tbaa !107
  %261 = icmp ne i32 %256, %260
  br i1 %261, label %269, label %262

262:                                              ; preds = %253
  %263 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %264 = getelementptr inbounds %struct.mjvOption_, ptr %263, i32 0, i32 9
  %265 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %266 = load ptr, ptr %265, align 8, !tbaa !104
  %267 = getelementptr inbounds %struct.mjvOption_, ptr %266, i32 0, i32 9
  %268 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA32_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(32) %264, ptr noundef nonnull align 1 dereferenceable(32) %267)
  br i1 %268, label %269, label %272

269:                                              ; preds = %262, %253, %244, %235, %226, %217
  %270 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %271 = getelementptr inbounds %struct.anon.24, ptr %270, i32 0, i32 18
  store i8 1, ptr %271, align 2, !tbaa !108
  br label %272

272:                                              ; preds = %269, %262, %210, %206
  %273 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %274 = load i32, ptr %273, align 4, !tbaa !90
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %276, label %333

276:                                              ; preds = %272
  %277 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %278 = getelementptr inbounds %struct.mjUI_, ptr %277, i32 0, i32 21
  %279 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %278, i64 0, i64 5
  %280 = getelementptr inbounds %struct.mjuiSection_, ptr %279, i32 0, i32 1
  %281 = load i32, ptr %280, align 8, !tbaa !93
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %283, label %333

283:                                              ; preds = %276
  %284 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %285 = getelementptr inbounds %struct.mjvOption_, ptr %284, i32 0, i32 2
  %286 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %287 = load ptr, ptr %286, align 8, !tbaa !104
  %288 = getelementptr inbounds %struct.mjvOption_, ptr %287, i32 0, i32 2
  %289 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %285, ptr noundef nonnull align 1 dereferenceable(6) %288)
  br i1 %289, label %332, label %290

290:                                              ; preds = %283
  %291 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %292 = getelementptr inbounds %struct.mjvOption_, ptr %291, i32 0, i32 3
  %293 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %294 = load ptr, ptr %293, align 8, !tbaa !104
  %295 = getelementptr inbounds %struct.mjvOption_, ptr %294, i32 0, i32 3
  %296 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %292, ptr noundef nonnull align 1 dereferenceable(6) %295)
  br i1 %296, label %332, label %297

297:                                              ; preds = %290
  %298 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %299 = getelementptr inbounds %struct.mjvOption_, ptr %298, i32 0, i32 4
  %300 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %301 = load ptr, ptr %300, align 8, !tbaa !104
  %302 = getelementptr inbounds %struct.mjvOption_, ptr %301, i32 0, i32 4
  %303 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %299, ptr noundef nonnull align 1 dereferenceable(6) %302)
  br i1 %303, label %332, label %304

304:                                              ; preds = %297
  %305 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %306 = getelementptr inbounds %struct.mjvOption_, ptr %305, i32 0, i32 5
  %307 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %308 = load ptr, ptr %307, align 8, !tbaa !104
  %309 = getelementptr inbounds %struct.mjvOption_, ptr %308, i32 0, i32 5
  %310 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %306, ptr noundef nonnull align 1 dereferenceable(6) %309)
  br i1 %310, label %332, label %311

311:                                              ; preds = %304
  %312 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %313 = getelementptr inbounds %struct.mjvOption_, ptr %312, i32 0, i32 6
  %314 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %315 = load ptr, ptr %314, align 8, !tbaa !104
  %316 = getelementptr inbounds %struct.mjvOption_, ptr %315, i32 0, i32 6
  %317 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %313, ptr noundef nonnull align 1 dereferenceable(6) %316)
  br i1 %317, label %332, label %318

318:                                              ; preds = %311
  %319 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %320 = getelementptr inbounds %struct.mjvOption_, ptr %319, i32 0, i32 7
  %321 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %322 = load ptr, ptr %321, align 8, !tbaa !104
  %323 = getelementptr inbounds %struct.mjvOption_, ptr %322, i32 0, i32 7
  %324 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %320, ptr noundef nonnull align 1 dereferenceable(6) %323)
  br i1 %324, label %332, label %325

325:                                              ; preds = %318
  %326 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  %327 = getelementptr inbounds %struct.mjvOption_, ptr %326, i32 0, i32 8
  %328 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %329 = load ptr, ptr %328, align 8, !tbaa !104
  %330 = getelementptr inbounds %struct.mjvOption_, ptr %329, i32 0, i32 8
  %331 = call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %327, ptr noundef nonnull align 1 dereferenceable(6) %330)
  br i1 %331, label %332, label %333

332:                                              ; preds = %325, %318, %311, %304, %297, %290, %283
  call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef %36, i32 noundef 7)
  br label %333

333:                                              ; preds = %332, %325, %276, %272
  %334 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 80
  %335 = load ptr, ptr %334, align 8, !tbaa !104
  %336 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 29
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %336, ptr align 4 %335, i64 92, i1 false), !tbaa.struct !109
  %337 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 79
  %338 = load ptr, ptr %337, align 8, !tbaa !97
  %339 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 31
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %339, ptr align 8 %338, i64 64, i1 false), !tbaa.struct !110
  br label %340

340:                                              ; preds = %333, %202
  %341 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %342 = getelementptr inbounds %struct.anon.24, ptr %341, i32 0, i32 18
  %343 = load i8, ptr %342, align 2, !tbaa !108, !range !85, !noundef !86
  %344 = trunc i8 %343 to i1
  br i1 %344, label %345, label %360

345:                                              ; preds = %340
  %346 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %347 = load i32, ptr %346, align 4, !tbaa !90
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %349, label %357

349:                                              ; preds = %345
  %350 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %351 = getelementptr inbounds %struct.mjUI_, ptr %350, i32 0, i32 21
  %352 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %351, i64 0, i64 5
  %353 = getelementptr inbounds %struct.mjuiSection_, ptr %352, i32 0, i32 1
  %354 = load i32, ptr %353, align 8, !tbaa !93
  %355 = icmp ne i32 %354, 0
  br i1 %355, label %356, label %357

356:                                              ; preds = %349
  call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef %36, i32 noundef 5)
  br label %357

357:                                              ; preds = %356, %349, %345
  %358 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %359 = getelementptr inbounds %struct.anon.24, ptr %358, i32 0, i32 18
  store i8 0, ptr %359, align 2, !tbaa !108
  br label %360

360:                                              ; preds = %357, %340
  %361 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %362 = getelementptr inbounds %struct.anon.24, ptr %361, i32 0, i32 19
  %363 = load i8, ptr %362, align 1, !tbaa !112, !range !85, !noundef !86
  %364 = trunc i8 %363 to i1
  br i1 %364, label %365, label %386

365:                                              ; preds = %360
  %366 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 45
  %367 = load i32, ptr %366, align 8, !tbaa !91
  %368 = icmp ne i32 %367, 0
  br i1 %368, label %369, label %383

369:                                              ; preds = %365
  %370 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %371 = getelementptr inbounds %struct.mjUI_, ptr %370, i32 0, i32 21
  %372 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %371, i64 0, i64 0
  %373 = getelementptr inbounds %struct.mjuiSection_, ptr %372, i32 0, i32 1
  %374 = load i32, ptr %373, align 8, !tbaa !93
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %383

376:                                              ; preds = %369
  %377 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %378 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %379 = load ptr, ptr %378, align 8, !tbaa !11
  %380 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %381 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %380) #10
  %382 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %381)
  call void @mjui_update(i32 noundef 0, i32 noundef -1, ptr noundef %377, ptr noundef %379, ptr noundef %382)
  br label %383

383:                                              ; preds = %376, %369, %365
  %384 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %385 = getelementptr inbounds %struct.anon.24, ptr %384, i32 0, i32 19
  store i8 0, ptr %385, align 1, !tbaa !112
  br label %386

386:                                              ; preds = %383, %360
  %387 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %388 = getelementptr inbounds %struct.anon.24, ptr %387, i32 0, i32 21
  %389 = load i8, ptr %388, align 1, !tbaa !113, !range !85, !noundef !86
  %390 = trunc i8 %389 to i1
  br i1 %390, label %391, label %421

391:                                              ; preds = %386
  %392 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 45
  %393 = load i32, ptr %392, align 8, !tbaa !91
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %395, label %418

395:                                              ; preds = %391
  %396 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %397 = getelementptr inbounds %struct.mjUI_, ptr %396, i32 0, i32 21
  %398 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %397, i64 0, i64 1
  %399 = getelementptr inbounds %struct.mjuiSection_, ptr %398, i32 0, i32 1
  %400 = load i32, ptr %399, align 8, !tbaa !93
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %402, label %418

402:                                              ; preds = %395
  %403 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %404 = getelementptr inbounds %struct.mjUI_, ptr %403, i32 0, i32 20
  store i32 1, ptr %404, align 8, !tbaa !114
  %405 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %406 = getelementptr inbounds %struct.mjUI_, ptr %405, i32 0, i32 21
  %407 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %406, i64 0, i64 1
  %408 = getelementptr inbounds %struct.mjuiSection_, ptr %407, i32 0, i32 1
  %409 = load i32, ptr %408, align 8, !tbaa !93
  call void @_ZN12_GLOBAL__N_118MakeControlSectionEPN6mujoco8SimulateEi(ptr noundef %36, i32 noundef %409)
  %410 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %411 = getelementptr inbounds %struct.mjUI_, ptr %410, i32 0, i32 20
  store i32 2, ptr %411, align 8, !tbaa !114
  %412 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %413 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %414 = load ptr, ptr %413, align 8, !tbaa !11
  %415 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %416 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %415) #10
  %417 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %416)
  call void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef %412, ptr noundef %414, ptr noundef %417)
  br label %418

418:                                              ; preds = %402, %395, %391
  %419 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %420 = getelementptr inbounds %struct.anon.24, ptr %419, i32 0, i32 21
  store i8 0, ptr %420, align 1, !tbaa !113
  br label %421

421:                                              ; preds = %418, %386
  %422 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %423 = getelementptr inbounds %struct.anon.24, ptr %422, i32 0, i32 20
  %424 = load i8, ptr %423, align 4, !tbaa !115, !range !85, !noundef !86
  %425 = trunc i8 %424 to i1
  br i1 %425, label %426, label %447

426:                                              ; preds = %421
  %427 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 45
  %428 = load i32, ptr %427, align 8, !tbaa !91
  %429 = icmp ne i32 %428, 0
  br i1 %429, label %430, label %444

430:                                              ; preds = %426
  %431 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %432 = getelementptr inbounds %struct.mjUI_, ptr %431, i32 0, i32 21
  %433 = getelementptr inbounds [10 x %struct.mjuiSection_], ptr %432, i64 0, i64 1
  %434 = getelementptr inbounds %struct.mjuiSection_, ptr %433, i32 0, i32 1
  %435 = load i32, ptr %434, align 8, !tbaa !93
  %436 = icmp ne i32 %435, 0
  br i1 %436, label %437, label %444

437:                                              ; preds = %430
  %438 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %439 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %440 = load ptr, ptr %439, align 8, !tbaa !11
  %441 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %442 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %441) #10
  %443 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %442)
  call void @mjui_update(i32 noundef 1, i32 noundef -1, ptr noundef %438, ptr noundef %440, ptr noundef %443)
  br label %444

444:                                              ; preds = %437, %430, %426
  %445 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 34
  %446 = getelementptr inbounds %struct.anon.24, ptr %445, i32 0, i32 20
  store i8 0, ptr %446, align 4, !tbaa !115
  br label %447

447:                                              ; preds = %444, %421
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %11, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %448 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 78
  %449 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %450 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %449) #10
  %451 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %450)
  %452 = getelementptr inbounds { i64, i64 }, ptr %11, i32 0, i32 0
  %453 = load i64, ptr %452, align 4
  %454 = getelementptr inbounds { i64, i64 }, ptr %11, i32 0, i32 1
  %455 = load i64, ptr %454, align 4
  call void @mjr_render(i64 %453, i64 %455, ptr noundef %448, ptr noundef %451)
  %456 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 62
  %457 = getelementptr inbounds [1000 x i8], ptr %456, i64 0, i64 0
  %458 = load i8, ptr %457, align 4, !tbaa !89
  %459 = icmp ne i8 %458, 0
  br i1 %459, label %460, label %470

460:                                              ; preds = %447
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %461 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 62
  %462 = getelementptr inbounds [1000 x i8], ptr %461, i64 0, i64 0
  %463 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %464 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %463) #10
  %465 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %464)
  %466 = getelementptr inbounds { i64, i64 }, ptr %12, i32 0, i32 0
  %467 = load i64, ptr %466, align 4
  %468 = getelementptr inbounds { i64, i64 }, ptr %12, i32 0, i32 1
  %469 = load i64, ptr %468, align 4
  call void @mjr_overlay(i32 noundef 0, i32 noundef 2, i64 %467, i64 %469, ptr noundef %462, ptr noundef null, ptr noundef %465)
  br label %470

470:                                              ; preds = %460, %447
  %471 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 56
  %472 = load i32, ptr %471, align 4, !tbaa !116
  %473 = icmp ne i32 %472, 0
  br i1 %473, label %474, label %478

474:                                              ; preds = %470
  %475 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 61
  %476 = load i32, ptr %475, align 8, !tbaa !88
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %478, label %507

478:                                              ; preds = %474, %470
  call void @llvm.lifetime.start.p0(i64 30, ptr %13) #10
  call void @llvm.memset.p0.i64(ptr align 16 %13, i8 0, i64 30, i1 false)
  %479 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 61
  %480 = load i32, ptr %479, align 8, !tbaa !88
  %481 = icmp ne i32 %480, 0
  br i1 %481, label %482, label %485

482:                                              ; preds = %478
  %483 = getelementptr inbounds [30 x i8], ptr %13, i64 0, i64 0
  %484 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %483, i64 noundef 30, ptr noundef @.str.52) #10
  br label %498

485:                                              ; preds = %478
  %486 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 55
  %487 = load i32, ptr %486, align 8, !tbaa !117
  %488 = icmp eq i32 %487, 0
  br i1 %488, label %489, label %492

489:                                              ; preds = %485
  %490 = getelementptr inbounds [30 x i8], ptr %13, i64 0, i64 0
  %491 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %490, i64 noundef 30, ptr noundef @.str.54) #10
  br label %497

492:                                              ; preds = %485
  %493 = getelementptr inbounds [30 x i8], ptr %13, i64 0, i64 0
  %494 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 55
  %495 = load i32, ptr %494, align 8, !tbaa !117
  %496 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %493, i64 noundef 30, ptr noundef @.str.55, i32 noundef %495) #10
  br label %497

497:                                              ; preds = %492, %489
  br label %498

498:                                              ; preds = %497, %482
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 4 %4, i64 16, i1 false), !tbaa.struct !79
  %499 = getelementptr inbounds [30 x i8], ptr %13, i64 0, i64 0
  %500 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %501 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %500) #10
  %502 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %501)
  %503 = getelementptr inbounds { i64, i64 }, ptr %14, i32 0, i32 0
  %504 = load i64, ptr %503, align 4
  %505 = getelementptr inbounds { i64, i64 }, ptr %14, i32 0, i32 1
  %506 = load i64, ptr %505, align 4
  call void @mjr_overlay(i32 noundef 2, i32 noundef 4, i64 %504, i64 %506, ptr noundef %499, ptr noundef null, ptr noundef %502)
  call void @llvm.lifetime.end.p0(i64 30, ptr %13) #10
  br label %507

507:                                              ; preds = %498, %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  %508 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 66
  %509 = load i32, ptr %508, align 4, !tbaa !118
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds [31 x float], ptr @_ZN6mujoco8Simulate15percentRealTimeE, i64 0, i64 %510
  %512 = load float, ptr %511, align 4, !tbaa !119
  store float %512, ptr %15, align 4, !tbaa !119
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  %513 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 69
  %514 = load float, ptr %513, align 4, !tbaa !120
  %515 = fdiv float 1.000000e+02, %514
  store float %515, ptr %16, align 4, !tbaa !119
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  %516 = load float, ptr %16, align 4, !tbaa !119
  %517 = load float, ptr %15, align 4, !tbaa !119
  %518 = fsub float %516, %517
  %519 = call noundef float @_ZSt4fabsf(float noundef %518)
  store float %519, ptr %17, align 4, !tbaa !119
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #10
  %520 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 56
  %521 = load i32, ptr %520, align 4, !tbaa !116
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %530

523:                                              ; preds = %507
  %524 = load float, ptr %17, align 4, !tbaa !119
  %525 = fpext float %524 to double
  %526 = load float, ptr %15, align 4, !tbaa !119
  %527 = fpext float %526 to double
  %528 = fmul double 1.000000e-01, %527
  %529 = fcmp ogt double %525, %528
  br label %530

530:                                              ; preds = %523, %507
  %531 = phi i1 [ false, %507 ], [ %529, %523 ]
  %532 = zext i1 %531 to i8
  store i8 %532, ptr %18, align 1, !tbaa !121
  call void @llvm.lifetime.start.p0(i64 30, ptr %19) #10
  call void @llvm.memset.p0.i64(ptr align 16 %19, i8 0, i64 30, i1 false)
  %533 = load float, ptr %15, align 4, !tbaa !119
  %534 = fpext float %533 to double
  %535 = fcmp une double %534, 1.000000e+02
  br i1 %535, label %539, label %536

536:                                              ; preds = %530
  %537 = load i8, ptr %18, align 1, !tbaa !121, !range !85, !noundef !86
  %538 = trunc i8 %537 to i1
  br i1 %538, label %539, label %558

539:                                              ; preds = %536, %530
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  %540 = getelementptr inbounds [30 x i8], ptr %19, i64 0, i64 0
  %541 = load float, ptr %15, align 4, !tbaa !119
  %542 = fpext float %541 to double
  %543 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %540, i64 noundef 30, ptr noundef @.str.56, double noundef %542) #10
  store i32 %543, ptr %20, align 4, !tbaa !80
  %544 = load i8, ptr %18, align 1, !tbaa !121, !range !85, !noundef !86
  %545 = trunc i8 %544 to i1
  br i1 %545, label %546, label %557

546:                                              ; preds = %539
  %547 = getelementptr inbounds [30 x i8], ptr %19, i64 0, i64 0
  %548 = load i32, ptr %20, align 4, !tbaa !80
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i8, ptr %547, i64 %549
  %551 = load i32, ptr %20, align 4, !tbaa !80
  %552 = sext i32 %551 to i64
  %553 = sub i64 30, %552
  %554 = load float, ptr %16, align 4, !tbaa !119
  %555 = fpext float %554 to double
  %556 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %550, i64 noundef %553, ptr noundef @.str.57, double noundef %555) #10
  br label %557

557:                                              ; preds = %546, %539
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  br label %558

558:                                              ; preds = %557, %536
  %559 = getelementptr inbounds [30 x i8], ptr %19, i64 0, i64 0
  %560 = load i8, ptr %559, align 16, !tbaa !89
  %561 = icmp ne i8 %560, 0
  br i1 %561, label %562, label %571

562:                                              ; preds = %558
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %4, i64 16, i1 false), !tbaa.struct !79
  %563 = getelementptr inbounds [30 x i8], ptr %19, i64 0, i64 0
  %564 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %565 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %564) #10
  %566 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %565)
  %567 = getelementptr inbounds { i64, i64 }, ptr %21, i32 0, i32 0
  %568 = load i64, ptr %567, align 4
  %569 = getelementptr inbounds { i64, i64 }, ptr %21, i32 0, i32 1
  %570 = load i64, ptr %569, align 4
  call void @mjr_overlay(i32 noundef 2, i32 noundef 0, i64 %568, i64 %570, ptr noundef %563, ptr noundef null, ptr noundef %566)
  br label %571

571:                                              ; preds = %562, %558
  %572 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 44
  %573 = load i32, ptr %572, align 4, !tbaa !90
  %574 = icmp ne i32 %573, 0
  br i1 %574, label %575, label %582

575:                                              ; preds = %571
  %576 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 96
  %577 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %578 = load ptr, ptr %577, align 8, !tbaa !11
  %579 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %580 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %579) #10
  %581 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %580)
  call void @mjui_render(ptr noundef %576, ptr noundef %578, ptr noundef %581)
  br label %582

582:                                              ; preds = %575, %571
  %583 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 45
  %584 = load i32, ptr %583, align 8, !tbaa !91
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %593

586:                                              ; preds = %582
  %587 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 97
  %588 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %589 = load ptr, ptr %588, align 8, !tbaa !11
  %590 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %591 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %590) #10
  %592 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %591)
  call void @mjui_render(ptr noundef %587, ptr noundef %589, ptr noundef %592)
  br label %593

593:                                              ; preds = %586, %582
  %594 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 46
  %595 = load i32, ptr %594, align 4, !tbaa !122
  %596 = icmp ne i32 %595, 0
  br i1 %596, label %597, label %605

597:                                              ; preds = %593
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %598 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %599 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %598) #10
  %600 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %599)
  %601 = getelementptr inbounds { i64, i64 }, ptr %22, i32 0, i32 0
  %602 = load i64, ptr %601, align 4
  %603 = getelementptr inbounds { i64, i64 }, ptr %22, i32 0, i32 1
  %604 = load i64, ptr %603, align 4
  call void @mjr_overlay(i32 noundef 0, i32 noundef 0, i64 %602, i64 %604, ptr noundef @_ZN12_GLOBAL__N_110help_titleE, ptr noundef @_ZN12_GLOBAL__N_112help_contentE, ptr noundef %600)
  br label %605

605:                                              ; preds = %597, %593
  %606 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 47
  %607 = load i32, ptr %606, align 8, !tbaa !123
  %608 = icmp ne i32 %607, 0
  br i1 %608, label %609, label %621

609:                                              ; preds = %605
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %610 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 101
  %611 = getelementptr inbounds [1000 x i8], ptr %610, i64 0, i64 0
  %612 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 102
  %613 = getelementptr inbounds [1000 x i8], ptr %612, i64 0, i64 0
  %614 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %615 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %614) #10
  %616 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %615)
  %617 = getelementptr inbounds { i64, i64 }, ptr %23, i32 0, i32 0
  %618 = load i64, ptr %617, align 4
  %619 = getelementptr inbounds { i64, i64 }, ptr %23, i32 0, i32 1
  %620 = load i64, ptr %619, align 4
  call void @mjr_overlay(i32 noundef 0, i32 noundef 2, i64 %618, i64 %620, ptr noundef %611, ptr noundef %613, ptr noundef %616)
  br label %621

621:                                              ; preds = %609, %605
  %622 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 48
  %623 = load i32, ptr %622, align 4, !tbaa !81
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %630

625:                                              ; preds = %621
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 4 %3, i64 16, i1 false), !tbaa.struct !79
  %626 = getelementptr inbounds { i64, i64 }, ptr %24, i32 0, i32 0
  %627 = load i64, ptr %626, align 4
  %628 = getelementptr inbounds { i64, i64 }, ptr %24, i32 0, i32 1
  %629 = load i64, ptr %628, align 4
  call void @_ZN12_GLOBAL__N_112ShowProfilerEPN6mujoco8SimulateE8mjrRect_(ptr noundef %36, i64 %627, i64 %629)
  br label %630

630:                                              ; preds = %625, %621
  %631 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 49
  %632 = load i32, ptr %631, align 8, !tbaa !124
  %633 = icmp ne i32 %632, 0
  br i1 %633, label %634, label %639

634:                                              ; preds = %630
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %4, i64 16, i1 false), !tbaa.struct !79
  %635 = getelementptr inbounds { i64, i64 }, ptr %25, i32 0, i32 0
  %636 = load i64, ptr %635, align 4
  %637 = getelementptr inbounds { i64, i64 }, ptr %25, i32 0, i32 1
  %638 = load i64, ptr %637, align 4
  call void @_ZN12_GLOBAL__N_110ShowSensorEPN6mujoco8SimulateE8mjrRect_(ptr noundef %36, i64 %636, i64 %638)
  br label %639

639:                                              ; preds = %634, %630
  %640 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 59
  %641 = call noundef i32 @_ZNSt13__atomic_baseIiE8exchangeEiSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %640, i32 noundef 0, i32 noundef 5) #10
  %642 = icmp ne i32 %641, 0
  br i1 %642, label %643, label %757

643:                                              ; preds = %639
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  %644 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %645 = load ptr, ptr %644, align 8, !tbaa !11
  %646 = getelementptr inbounds %struct.mjuiState_, ptr %645, i32 0, i32 1
  %647 = getelementptr inbounds [25 x %struct.mjrRect_], ptr %646, i64 0, i64 0
  %648 = getelementptr inbounds %struct.mjrRect_, ptr %647, i32 0, i32 3
  %649 = load i32, ptr %648, align 4, !tbaa !125
  store i32 %649, ptr %26, align 4, !tbaa !80
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  %650 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %651 = load ptr, ptr %650, align 8, !tbaa !11
  %652 = getelementptr inbounds %struct.mjuiState_, ptr %651, i32 0, i32 1
  %653 = getelementptr inbounds [25 x %struct.mjrRect_], ptr %652, i64 0, i64 0
  %654 = getelementptr inbounds %struct.mjrRect_, ptr %653, i32 0, i32 2
  %655 = load i32, ptr %654, align 4, !tbaa !82
  store i32 %655, ptr %27, align 4, !tbaa !80
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %656 = load i32, ptr %27, align 4, !tbaa !80
  %657 = mul i32 3, %656
  %658 = load i32, ptr %26, align 4, !tbaa !80
  %659 = mul i32 %657, %658
  %660 = zext i32 %659 to i64
  %661 = call noalias noundef nonnull ptr @_Znam(i64 noundef %660) #11
  call void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EEC2IPhS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef %661) #10
  %662 = call noundef zeroext i1 @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  br i1 %662, label %669, label %663

663:                                              ; preds = %643
  invoke void (ptr, ...) @mju_error(ptr noundef @.str.58)
          to label %664 unwind label %665

664:                                              ; preds = %663
  br label %669

665:                                              ; preds = %678, %669, %663
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %29, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %30, align 4
  br label %756

669:                                              ; preds = %664, %643
  %670 = call noundef ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  %671 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 95
  %672 = load ptr, ptr %671, align 8, !tbaa !11
  %673 = getelementptr inbounds %struct.mjuiState_, ptr %672, i32 0, i32 1
  %674 = getelementptr inbounds [25 x %struct.mjrRect_], ptr %673, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %674, i64 16, i1 false), !tbaa.struct !79
  %675 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %676 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %675) #10
  %677 = invoke noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %676)
          to label %678 unwind label %665

678:                                              ; preds = %669
  %679 = getelementptr inbounds { i64, i64 }, ptr %31, i32 0, i32 0
  %680 = load i64, ptr %679, align 4
  %681 = getelementptr inbounds { i64, i64 }, ptr %31, i32 0, i32 1
  %682 = load i64, ptr %681, align 4
  invoke void @mjr_readPixels(ptr noundef %670, ptr noundef null, i64 %680, i64 %682, ptr noundef %677)
          to label %683 unwind label %665

683:                                              ; preds = %678
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  store i32 0, ptr %32, align 4, !tbaa !80
  br label %684

684:                                              ; preds = %717, %683
  %685 = load i32, ptr %32, align 4, !tbaa !80
  %686 = load i32, ptr %26, align 4, !tbaa !80
  %687 = udiv i32 %686, 2
  %688 = icmp ult i32 %685, %687
  br i1 %688, label %690, label %689

689:                                              ; preds = %684
  store i32 2, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %729

690:                                              ; preds = %684
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %691 = load i32, ptr %27, align 4, !tbaa !80
  %692 = mul i32 3, %691
  %693 = load i32, ptr %32, align 4, !tbaa !80
  %694 = mul i32 %692, %693
  %695 = zext i32 %694 to i64
  %696 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %28, i64 noundef %695)
          to label %697 unwind label %720

697:                                              ; preds = %690
  store ptr %696, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %698 = load i32, ptr %27, align 4, !tbaa !80
  %699 = mul i32 3, %698
  %700 = load i32, ptr %26, align 4, !tbaa !80
  %701 = sub i32 %700, 1
  %702 = load i32, ptr %32, align 4, !tbaa !80
  %703 = sub i32 %701, %702
  %704 = mul i32 %699, %703
  %705 = zext i32 %704 to i64
  %706 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %28, i64 noundef %705)
          to label %707 unwind label %724

707:                                              ; preds = %697
  store ptr %706, ptr %34, align 8, !tbaa !5
  %708 = load ptr, ptr %33, align 8, !tbaa !5
  %709 = load ptr, ptr %33, align 8, !tbaa !5
  %710 = load i32, ptr %27, align 4, !tbaa !80
  %711 = mul i32 3, %710
  %712 = zext i32 %711 to i64
  %713 = getelementptr inbounds i8, ptr %709, i64 %712
  %714 = load ptr, ptr %34, align 8, !tbaa !5
  %715 = invoke noundef ptr @_ZSt11swap_rangesIPhS0_ET0_T_S2_S1_(ptr noundef %708, ptr noundef %713, ptr noundef %714)
          to label %716 unwind label %724

716:                                              ; preds = %707
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %717

717:                                              ; preds = %716
  %718 = load i32, ptr %32, align 4, !tbaa !80
  %719 = add nsw i32 %718, 1
  store i32 %719, ptr %32, align 4, !tbaa !80
  br label %684, !llvm.loop !126

720:                                              ; preds = %690
  %721 = landingpad { ptr, i32 }
          cleanup
  %722 = extractvalue { ptr, i32 } %721, 0
  store ptr %722, ptr %29, align 8
  %723 = extractvalue { ptr, i32 } %721, 1
  store i32 %723, ptr %30, align 4
  br label %728

724:                                              ; preds = %707, %697
  %725 = landingpad { ptr, i32 }
          cleanup
  %726 = extractvalue { ptr, i32 } %725, 0
  store ptr %726, ptr %29, align 8
  %727 = extractvalue { ptr, i32 } %725, 1
  store i32 %727, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %728

728:                                              ; preds = %724, %720
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %756

729:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #10
  invoke void @_ZL11GetSavePathB5cxx11PKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef @.str.59)
          to label %730 unwind label %741

730:                                              ; preds = %729
  %731 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  br i1 %731, label %754, label %732

732:                                              ; preds = %730
  %733 = call noundef ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  %734 = load i32, ptr %27, align 4, !tbaa !80
  %735 = load i32, ptr %26, align 4, !tbaa !80
  %736 = invoke noundef i32 @_ZN7lodepng6encodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKhjj16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef %733, i32 noundef %734, i32 noundef %735, i32 noundef 2, i32 noundef 8)
          to label %737 unwind label %745

737:                                              ; preds = %732
  %738 = icmp ne i32 %736, 0
  br i1 %738, label %739, label %749

739:                                              ; preds = %737
  invoke void (ptr, ...) @mju_error(ptr noundef @.str.60)
          to label %740 unwind label %745

740:                                              ; preds = %739
  br label %753

741:                                              ; preds = %729
  %742 = landingpad { ptr, i32 }
          cleanup
  %743 = extractvalue { ptr, i32 } %742, 0
  store ptr %743, ptr %29, align 8
  %744 = extractvalue { ptr, i32 } %742, 1
  store i32 %744, ptr %30, align 4
  br label %755

745:                                              ; preds = %749, %739, %732
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %29, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  br label %755

749:                                              ; preds = %737
  %750 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  %751 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.61, ptr noundef %750)
          to label %752 unwind label %745

752:                                              ; preds = %749
  br label %753

753:                                              ; preds = %752, %740
  br label %754

754:                                              ; preds = %753, %730
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #10
  call void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  br label %757

755:                                              ; preds = %745, %741
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #10
  br label %756

756:                                              ; preds = %755, %728, %665
  call void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 30, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #10
  br label %766

757:                                              ; preds = %754, %639
  %758 = getelementptr inbounds %"class.mujoco::Simulate", ptr %36, i32 0, i32 94
  %759 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %758) #10
  %760 = load ptr, ptr %759, align 8, !tbaa !9
  %761 = getelementptr inbounds ptr, ptr %760, i64 14
  %762 = load ptr, ptr %761, align 8
  call void %762(ptr noundef nonnull align 8 dereferenceable(2900) %759)
  call void @llvm.lifetime.end.p0(i64 30, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  store i32 0, ptr %10, align 4
  br label %763

763:                                              ; preds = %757, %144
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #10
  %764 = load i32, ptr %10, align 4
  switch i32 %764, label %771 [
    i32 0, label %765
    i32 1, label %765
  ]

765:                                              ; preds = %763, %763
  ret void

766:                                              ; preds = %756
  %767 = load ptr, ptr %29, align 8
  %768 = load i32, ptr %30, align 4
  %769 = insertvalue { ptr, i32 } poison, ptr %767, 0
  %770 = insertvalue { ptr, i32 } %769, i32 %768, 1
  resume { ptr, i32 } %770

771:                                              ; preds = %763
  unreachable
}

declare void @mjr_rectangle(i64, i64, float noundef, float noundef, float noundef, float noundef) #4

declare void @mjr_overlay(i32 noundef, i32 noundef, i64, i64, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN6mujoco11sample_utilL11sprintf_arrILm1000EEEiRAT__cPKcz(ptr noundef nonnull align 1 dereferenceable(1000), ptr noundef, ...) #6

declare ptr @mj_versionString() #4

declare void @mjui_render(ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef, i32 noundef) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA32_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(32)) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6), ptr noundef nonnull align 1 dereferenceable(6)) #6

declare void @mjui_update(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_118MakeControlSectionEPN6mujoco8SimulateEi(ptr noundef, i32 noundef) #5

declare void @mjr_render(i64, i64, ptr noundef, ptr noundef) #4

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_112ShowProfilerEPN6mujoco8SimulateE8mjrRect_(ptr noundef, i64, i64) #5

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_110ShowSensorEPN6mujoco8SimulateE8mjrRect_(ptr noundef, i64, i64) #5

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt13__atomic_baseIiE8exchangeEiSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef) #8 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EEC2IPhS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

declare void @mju_error(ptr noundef, ...) #4

declare void @mjr_readPixels(ptr noundef, ptr noundef, i64, i64, ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZSt11swap_rangesIPhS0_ET0_T_S2_S1_(ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11GetSavePathB5cxx11PKc(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) #5

declare noundef i32 @_ZN7lodepng6encodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKhjj16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint 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 #7 = { 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 #8 = { alwaysinline 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 #9 = { nobuiltin 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 #10 = { nounwind }
attributes #11 = { builtin 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 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !6, i64 4091304}
!12 = !{!"_ZTSN6mujoco8SimulateE", !13, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !14, i64 48, !14, i64 52, !14, i64 56, !14, i64 60, !14, i64 64, !15, i64 72, !15, i64 96, !15, i64 120, !15, i64 144, !19, i64 168, !23, i64 192, !15, i64 216, !19, i64 240, !23, i64 264, !27, i64 288, !27, i64 312, !27, i64 336, !27, i64 360, !27, i64 384, !31, i64 408, !35, i64 11864, !46, i64 12168, !47, i64 12264, !14, i64 12328, !48, i64 12336, !55, i64 13064, !58, i64 13104, !14, i64 13168, !64, i64 13176, !36, i64 13184, !14, i64 13192, !14, i64 13196, !14, i64 13200, !14, i64 13204, !14, i64 13208, !14, i64 13212, !14, i64 13216, !14, i64 13220, !14, i64 13224, !14, i64 13228, !14, i64 13232, !14, i64 13236, !14, i64 13240, !14, i64 13244, !14, i64 13248, !14, i64 13252, !67, i64 13256, !67, i64 13260, !67, i64 13264, !67, i64 13268, !14, i64 13272, !7, i64 13276, !7, i64 14276, !7, i64 15276, !7, i64 16276, !14, i64 17276, !13, i64 17280, !33, i64 17284, !36, i64 17288, !36, i64 17296, !7, i64 17304, !14, i64 17604, !7, i64 17608, !7, i64 17668, !7, i64 17692, !14, i64 17716, !32, i64 17720, !6, i64 26488, !6, i64 26496, !6, i64 26504, !69, i64 26512, !69, i64 839460, !69, i64 1652408, !69, i64 2465356, !69, i64 3278304, !6, i64 4091256, !7, i64 4091264, !14, i64 4091276, !7, i64 4091280, !7, i64 4091288, !70, i64 4091296, !6, i64 4091304, !76, i64 4091312, !76, i64 7068880, !7, i64 10046448, !7, i64 10051128, !7, i64 10056168, !7, i64 10057968, !7, i64 10058968, !58, i64 10059968, !14, i64 10060032, !14, i64 10060036, !14, i64 10060040}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTSSt6vectorIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSSt6vectorISt8optionalISt4pairIddEESaIS3_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseISt8optionalISt4pairIddEESaIS3_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseISt8optionalISt4pairIddEESaIS3_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseISt8optionalISt4pairIddEESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"_ZTSSt6vectorIdSaIdEE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTS14mjvSceneState_", !14, i64 0, !6, i64 8, !14, i64 16, !32, i64 24, !34, i64 8792, !45, i64 11072}
!32 = !{!"_ZTS9mjvScene_", !14, i64 0, !14, i64 4, !6, i64 8, !6, i64 16, !14, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !7, i64 128, !7, i64 129, !7, i64 130, !7, i64 131, !14, i64 132, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !14, i64 176, !7, i64 180, !7, i64 8580, !7, i64 8700, !7, i64 8704, !7, i64 8716, !33, i64 8732, !14, i64 8736, !7, i64 8740, !14, i64 8752, !7, i64 8756}
!33 = !{!"float", !7, i64 0}
!34 = !{!"_ZTSN14mjvSceneState_Ut_E", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !14, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !14, i64 76, !14, i64 80, !14, i64 84, !14, i64 88, !14, i64 92, !14, i64 96, !14, i64 100, !14, i64 104, !14, i64 108, !14, i64 112, !14, i64 116, !35, i64 120, !37, i64 424, !44, i64 1048, !6, i64 1104, !6, i64 1112, !6, i64 1120, !6, i64 1128, !6, i64 1136, !6, i64 1144, !6, i64 1152, !6, i64 1160, !6, i64 1168, !6, i64 1176, !6, i64 1184, !6, i64 1192, !6, i64 1200, !6, i64 1208, !6, i64 1216, !6, i64 1224, !6, i64 1232, !6, i64 1240, !6, i64 1248, !6, i64 1256, !6, i64 1264, !6, i64 1272, !6, i64 1280, !6, i64 1288, !6, i64 1296, !6, i64 1304, !6, i64 1312, !6, i64 1320, !6, i64 1328, !6, i64 1336, !6, i64 1344, !6, i64 1352, !6, i64 1360, !6, i64 1368, !6, i64 1376, !6, i64 1384, !6, i64 1392, !6, i64 1400, !6, i64 1408, !6, i64 1416, !6, i64 1424, !6, i64 1432, !6, i64 1440, !6, i64 1448, !6, i64 1456, !6, i64 1464, !6, i64 1472, !6, i64 1480, !6, i64 1488, !6, i64 1496, !6, i64 1504, !6, i64 1512, !6, i64 1520, !6, i64 1528, !6, i64 1536, !6, i64 1544, !6, i64 1552, !6, i64 1560, !6, i64 1568, !6, i64 1576, !6, i64 1584, !6, i64 1592, !6, i64 1600, !6, i64 1608, !6, i64 1616, !6, i64 1624, !6, i64 1632, !6, i64 1640, !6, i64 1648, !6, i64 1656, !6, i64 1664, !6, i64 1672, !6, i64 1680, !6, i64 1688, !6, i64 1696, !6, i64 1704, !6, i64 1712, !6, i64 1720, !6, i64 1728, !6, i64 1736, !6, i64 1744, !6, i64 1752, !6, i64 1760, !6, i64 1768, !6, i64 1776, !6, i64 1784, !6, i64 1792, !6, i64 1800, !6, i64 1808, !6, i64 1816, !6, i64 1824, !6, i64 1832, !6, i64 1840, !6, i64 1848, !6, i64 1856, !6, i64 1864, !6, i64 1872, !6, i64 1880, !6, i64 1888, !6, i64 1896, !6, i64 1904, !6, i64 1912, !6, i64 1920, !6, i64 1928, !6, i64 1936, !6, i64 1944, !6, i64 1952, !6, i64 1960, !6, i64 1968, !6, i64 1976, !6, i64 1984, !6, i64 1992, !6, i64 2000, !6, i64 2008, !6, i64 2016, !6, i64 2024, !6, i64 2032, !6, i64 2040, !6, i64 2048, !6, i64 2056, !6, i64 2064, !6, i64 2072, !6, i64 2080, !6, i64 2088, !6, i64 2096, !6, i64 2104, !6, i64 2112, !6, i64 2120, !6, i64 2128, !6, i64 2136, !6, i64 2144, !6, i64 2152, !6, i64 2160, !6, i64 2168, !6, i64 2176, !6, i64 2184, !6, i64 2192, !6, i64 2200, !6, i64 2208, !6, i64 2216, !6, i64 2224, !6, i64 2232, !6, i64 2240, !6, i64 2248, !6, i64 2256, !6, i64 2264, !6, i64 2272}
!35 = !{!"_ZTS9mjOption_", !36, i64 0, !36, i64 8, !36, i64 16, !36, i64 24, !36, i64 32, !36, i64 40, !36, i64 48, !7, i64 56, !7, i64 80, !7, i64 104, !36, i64 128, !36, i64 136, !36, i64 144, !7, i64 152, !7, i64 168, !7, i64 208, !14, i64 248, !14, i64 252, !14, i64 256, !14, i64 260, !14, i64 264, !14, i64 268, !14, i64 272, !14, i64 276, !14, i64 280, !14, i64 284, !14, i64 288, !14, i64 292, !14, i64 296}
!36 = !{!"double", !7, i64 0}
!37 = !{!"_ZTS9mjVisual_", !38, i64 0, !39, i64 44, !40, i64 64, !41, i64 104, !42, i64 156, !43, i64 224}
!38 = !{!"_ZTSN9mjVisual_Ut_E", !33, i64 0, !33, i64 4, !33, i64 8, !33, i64 12, !33, i64 16, !33, i64 20, !33, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40}
!39 = !{!"_ZTSN9mjVisual_Ut0_E", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16}
!40 = !{!"_ZTSN9mjVisual_Ut1_E", !7, i64 0, !7, i64 12, !7, i64 24, !14, i64 36}
!41 = !{!"_ZTSN9mjVisual_Ut2_E", !33, i64 0, !33, i64 4, !33, i64 8, !33, i64 12, !33, i64 16, !33, i64 20, !33, i64 24, !33, i64 28, !33, i64 32, !33, i64 36, !33, i64 40, !33, i64 44, !33, i64 48}
!42 = !{!"_ZTSN9mjVisual_Ut3_E", !33, i64 0, !33, i64 4, !33, i64 8, !33, i64 12, !33, i64 16, !33, i64 20, !33, i64 24, !33, i64 28, !33, i64 32, !33, i64 36, !33, i64 40, !33, i64 44, !33, i64 48, !33, i64 52, !33, i64 56, !33, i64 60, !33, i64 64}
!43 = !{!"_ZTSN9mjVisual_Ut4_E", !7, i64 0, !7, i64 16, !7, i64 32, !7, i64 48, !7, i64 64, !7, i64 80, !7, i64 96, !7, i64 112, !7, i64 128, !7, i64 144, !7, i64 160, !7, i64 176, !7, i64 192, !7, i64 208, !7, i64 224, !7, i64 240, !7, i64 256, !7, i64 272, !7, i64 288, !7, i64 304, !7, i64 320, !7, i64 336, !7, i64 352, !7, i64 368, !7, i64 384}
!44 = !{!"_ZTS12mjStatistic_", !36, i64 0, !36, i64 8, !36, i64 16, !36, i64 24, !7, i64 32}
!45 = !{!"_ZTSN14mjvSceneState_Ut0_E", !7, i64 0, !14, i64 64, !14, i64 68, !14, i64 72, !36, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376}
!46 = !{!"_ZTS10mjvOption_", !14, i64 0, !14, i64 4, !7, i64 8, !7, i64 14, !7, i64 20, !7, i64 26, !7, i64 32, !7, i64 38, !7, i64 44, !7, i64 50, !14, i64 84, !14, i64 88}
!47 = !{!"_ZTS10mjvCamera_", !14, i64 0, !14, i64 4, !14, i64 8, !7, i64 16, !36, i64 40, !36, i64 48, !36, i64 56}
!48 = !{!"_ZTSN6mujoco8SimulateUt_E", !49, i64 0, !49, i64 40, !49, i64 80, !49, i64 120, !13, i64 160, !13, i64 161, !13, i64 162, !13, i64 163, !13, i64 164, !13, i64 165, !13, i64 166, !14, i64 168, !13, i64 172, !54, i64 176, !13, i64 720, !13, i64 721, !13, i64 722, !13, i64 723, !13, i64 724, !13, i64 725}
!49 = !{!"_ZTSSt8optionalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE", !50, i64 0}
!50 = !{!"_ZTSSt14_Optional_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0ELb0EE", !51, i64 0}
!51 = !{!"_ZTSSt17_Optional_payloadINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0ELb0ELb0EE", !52, i64 0}
!52 = !{!"_ZTSSt17_Optional_payloadINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb0ELb0EE", !53, i64 0}
!53 = !{!"_ZTSSt22_Optional_payload_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE", !7, i64 0, !13, i64 32}
!54 = !{!"_ZTS10mjuiState_", !14, i64 0, !7, i64 4, !6, i64 408, !14, i64 416, !14, i64 420, !14, i64 424, !14, i64 428, !14, i64 432, !14, i64 436, !36, i64 440, !36, i64 448, !36, i64 456, !36, i64 464, !36, i64 472, !36, i64 480, !36, i64 488, !14, i64 496, !14, i64 500, !14, i64 504, !14, i64 508, !36, i64 512, !14, i64 520, !14, i64 524, !14, i64 528, !14, i64 532, !6, i64 536}
!55 = !{!"_ZTSN6mujoco13SimulateMutexE", !56, i64 0}
!56 = !{!"_ZTSSt15recursive_mutex", !57, i64 0}
!57 = !{!"_ZTSSt22__recursive_mutex_base", !7, i64 0}
!58 = !{!"_ZTSNSt3_V222condition_variable_anyE", !59, i64 0, !61, i64 48}
!59 = !{!"_ZTSSt18condition_variable", !60, i64 0}
!60 = !{!"_ZTSSt9__condvar", !7, i64 0}
!61 = !{!"_ZTSSt10shared_ptrISt5mutexE", !62, i64 0}
!62 = !{!"_ZTSSt12__shared_ptrISt5mutexLN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !63, i64 8}
!63 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!64 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !65, i64 0}
!65 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !66, i64 0}
!66 = !{!"long", !7, i64 0}
!67 = !{!"_ZTSSt6atomicIiE", !68, i64 0}
!68 = !{!"_ZTSSt13__atomic_baseIiE", !14, i64 0}
!69 = !{!"_ZTS10mjvFigure_", !14, i64 0, !7, i64 4, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !33, i64 28, !33, i64 32, !7, i64 36, !7, i64 44, !7, i64 56, !7, i64 72, !7, i64 88, !7, i64 104, !7, i64 116, !7, i64 1316, !7, i64 1332, !7, i64 1352, !7, i64 1372, !7, i64 1392, !7, i64 2392, !7, i64 2492, !14, i64 12492, !14, i64 12496, !7, i64 12500, !14, i64 12508, !33, i64 12512, !7, i64 12516, !7, i64 12916, !7, i64 812916, !7, i64 812924, !7, i64 812932, !7, i64 812940}
!70 = !{!"_ZTSSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EE", !71, i64 0}
!71 = !{!"_ZTSSt15__uniq_ptr_dataIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_ELb1ELb1EE", !72, i64 0}
!72 = !{!"_ZTSSt15__uniq_ptr_implIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EE", !73, i64 0}
!73 = !{!"_ZTSSt5tupleIJPN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEE", !74, i64 0}
!74 = !{!"_ZTSSt11_Tuple_implILm0EJPN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEE", !75, i64 0}
!75 = !{!"_ZTSSt10_Head_baseILm0EPN6mujoco17PlatformUIAdapterELb0EE", !6, i64 0}
!76 = !{!"_ZTS5mjUI_", !77, i64 0, !78, i64 44, !6, i64 296, !6, i64 304, !14, i64 312, !14, i64 316, !14, i64 320, !14, i64 324, !14, i64 328, !14, i64 332, !14, i64 336, !14, i64 340, !14, i64 344, !14, i64 348, !14, i64 352, !14, i64 356, !14, i64 360, !14, i64 364, !7, i64 368, !6, i64 672, !14, i64 680, !7, i64 688}
!77 = !{!"_ZTS17mjuiThemeSpacing_", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40}
!78 = !{!"_ZTS15mjuiThemeColor_", !7, i64 0, !7, i64 12, !7, i64 24, !7, i64 36, !7, i64 48, !7, i64 60, !7, i64 72, !7, i64 84, !7, i64 96, !7, i64 108, !7, i64 120, !7, i64 132, !7, i64 144, !7, i64 156, !7, i64 168, !7, i64 180, !7, i64 192, !7, i64 204, !7, i64 216, !7, i64 228, !7, i64 240}
!79 = !{i64 0, i64 4, !80, i64 4, i64 4, !80, i64 8, i64 4, !80, i64 12, i64 4, !80}
!80 = !{!14, !14, i64 0}
!81 = !{!12, !14, i64 13220}
!82 = !{!83, !14, i64 8}
!83 = !{!"_ZTS8mjrRect_", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12}
!84 = !{!12, !13, i64 0}
!85 = !{i8 0, i8 2}
!86 = !{}
!87 = !{!12, !6, i64 24}
!88 = !{!12, !14, i64 13272}
!89 = !{!7, !7, i64 0}
!90 = !{!12, !14, i64 13204}
!91 = !{!12, !14, i64 13208}
!92 = !{!12, !13, i64 13056}
!93 = !{!94, !14, i64 40}
!94 = !{!"_ZTS12mjuiSection_", !7, i64 0, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !7, i64 56, !83, i64 297656, !83, i64 297672}
!95 = !{!12, !13, i64 13057}
!96 = !{!12, !14, i64 12264}
!97 = !{!12, !6, i64 26488}
!98 = !{!47, !14, i64 0}
!99 = !{!12, !14, i64 12268}
!100 = !{!47, !14, i64 4}
!101 = !{!12, !14, i64 12272}
!102 = !{!47, !14, i64 8}
!103 = !{!12, !14, i64 12168}
!104 = !{!12, !6, i64 26496}
!105 = !{!46, !14, i64 0}
!106 = !{!12, !14, i64 12172}
!107 = !{!46, !14, i64 4}
!108 = !{!12, !13, i64 13058}
!109 = !{i64 0, i64 4, !80, i64 4, i64 4, !80, i64 8, i64 6, !89, i64 14, i64 6, !89, i64 20, i64 6, !89, i64 26, i64 6, !89, i64 32, i64 6, !89, i64 38, i64 6, !89, i64 44, i64 6, !89, i64 50, i64 32, !89, i64 84, i64 4, !80, i64 88, i64 4, !80}
!110 = !{i64 0, i64 4, !80, i64 4, i64 4, !80, i64 8, i64 4, !80, i64 16, i64 24, !89, i64 40, i64 8, !111, i64 48, i64 8, !111, i64 56, i64 8, !111}
!111 = !{!36, !36, i64 0}
!112 = !{!12, !13, i64 13059}
!113 = !{!12, !13, i64 13061}
!114 = !{!12, !14, i64 7069560}
!115 = !{!12, !13, i64 13060}
!116 = !{!12, !14, i64 13252}
!117 = !{!12, !14, i64 13248}
!118 = !{!12, !14, i64 17276}
!119 = !{!33, !33, i64 0}
!120 = !{!12, !33, i64 17284}
!121 = !{!13, !13, i64 0}
!122 = !{!12, !14, i64 13212}
!123 = !{!12, !14, i64 13216}
!124 = !{!12, !14, i64 13224}
!125 = !{!83, !14, i64 12}
!126 = distinct !{!126, !127}
!127 = !{!"llvm.loop.mustprogress"}


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

%"class.std::unique_ptr.40" = type { %"struct.std::__uniq_ptr_data.41" }
%"struct.std::__uniq_ptr_data.41" = type { %"class.std::__uniq_ptr_impl.42" }
%"class.std::__uniq_ptr_impl.42" = type { %"class.std::tuple.43" }
%"class.std::tuple.43" = type { %"struct.std::_Tuple_impl.44" }
%"struct.std::_Tuple_impl.44" = type { %"struct.std::_Head_base.47" }
%"struct.std::_Head_base.47" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@_ZN6mujoco8Simulate15percentRealTimeE = external dso_local local_unnamed_addr constant [31 x float], align 16
@.str.52 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [12 x i8], align 1
@_ZN12_GLOBAL__N_110help_titleE = external hidden constant [282 x i8], align 16
@_ZN12_GLOBAL__N_112help_contentE = external hidden constant [268 x i8], align 16
@.str.58 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [22 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

; 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) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6mujoco8Simulate6RenderEv(ptr noundef nonnull align 8 dereferenceable(10060044) %0) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca [1000 x i8], align 16
  %3 = alloca [30 x i8], align 16
  %4 = alloca [30 x i8], align 16
  %5 = alloca %"class.std::unique_ptr.40", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = getelementptr inbounds i8, ptr %0, i64 4091296
  %8 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %9, i64 24
  %11 = load ptr, ptr %10, align 8
  %12 = tail call noundef zeroext i1 %11(ptr noundef nonnull align 8 dereferenceable(2900) %8)
  br i1 %12, label %13, label %23

13:                                               ; preds = %1
  %14 = getelementptr inbounds i8, ptr %0, i64 4091312
  %15 = getelementptr inbounds i8, ptr %0, i64 4091304
  %16 = load ptr, ptr %15, align 8, !tbaa !8
  %17 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %18 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %17)
  tail call void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef nonnull %14, ptr noundef %16, ptr noundef nonnull %18)
  %19 = getelementptr inbounds i8, ptr %0, i64 7068880
  %20 = load ptr, ptr %15, align 8, !tbaa !8
  %21 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %22 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %21)
  tail call void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef nonnull %19, ptr noundef %20, ptr noundef nonnull %22)
  br label %23

23:                                               ; preds = %13, %1
  %24 = getelementptr inbounds i8, ptr %0, i64 4091304
  %25 = load ptr, ptr %24, align 8, !tbaa !8
  %26 = getelementptr inbounds i8, ptr %25, i64 52
  %.sroa.056.0.copyload = load i64, ptr %26, align 4
  %.sroa.13.0..sroa_idx = getelementptr inbounds i8, ptr %25, i64 60
  %.sroa.13.0.copyload = load i64, ptr %.sroa.13.0..sroa_idx, align 4
  %27 = getelementptr inbounds i8, ptr %0, i64 13220
  %28 = load i32, ptr %27, align 4, !tbaa !78
  %.not = icmp eq i32 %28, 0
  br i1 %.not, label %31, label %29

29:                                               ; preds = %23
  %.sroa.13.8.extract.trunc = trunc i64 %.sroa.13.0.copyload to i32
  %.neg = sdiv i32 %.sroa.13.8.extract.trunc, -4
  %30 = add i32 %.neg, %.sroa.13.8.extract.trunc
  %.sroa.8.8.insert.ext = zext i32 %30 to i64
  %.sroa.8.8.insert.mask = and i64 %.sroa.13.0.copyload, -4294967296
  %.sroa.8.8.insert.insert = or disjoint i64 %.sroa.8.8.insert.mask, %.sroa.8.8.insert.ext
  br label %31

31:                                               ; preds = %29, %23
  %.sroa.8.0 = phi i64 [ %.sroa.8.8.insert.insert, %29 ], [ %.sroa.13.0.copyload, %23 ]
  %32 = load i8, ptr %0, align 8, !tbaa !79, !range !80, !noundef !81
  %33 = trunc nuw i8 %32 to i1
  %34 = getelementptr inbounds i8, ptr %0, i64 24
  %35 = load ptr, ptr %34, align 8
  %.not73 = icmp ne ptr %35, null
  %or.cond.not = select i1 %33, i1 true, i1 %.not73
  br i1 %or.cond.not, label %74, label %36

36:                                               ; preds = %31
  tail call void @mjr_rectangle(i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, float noundef 0x3FC99999A0000000, float noundef 0x3FD3333340000000, float noundef 0x3FD99999A0000000, float noundef 1.000000e+00)
  %37 = getelementptr inbounds i8, ptr %0, i64 13272
  %38 = load i32, ptr %37, align 8, !tbaa !82
  %.not74 = icmp eq i32 %38, 0
  br i1 %.not74, label %42, label %39

39:                                               ; preds = %36
  %40 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %41 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %40)
  tail call void @mjr_overlay(i32 noundef 2, i32 noundef 4, i64 %.sroa.056.0.copyload, i64 %.sroa.8.0, ptr noundef nonnull @.str.52, ptr noundef null, ptr noundef nonnull %41)
  br label %47

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 1000, ptr nonnull %2) #10
  %43 = tail call ptr @mj_versionString()
  %44 = call noundef i32 (ptr, ptr, ...) @_ZN6mujoco11sample_utilL11sprintf_arrILm1000EEEiRAT__cPKcz(ptr noundef nonnull align 1 dereferenceable(1000) %2, ptr noundef nonnull @.str.53, ptr noundef %43)
  %45 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %46 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %45)
  call void @mjr_overlay(i32 noundef 0, i32 noundef 0, i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, ptr noundef nonnull %2, ptr noundef null, ptr noundef nonnull %46)
  call void @llvm.lifetime.end.p0(i64 1000, ptr nonnull %2) #10
  br label %47

47:                                               ; preds = %42, %39
  %48 = getelementptr inbounds i8, ptr %0, i64 13276
  %49 = load i8, ptr %48, align 4, !tbaa !83
  %.not75 = icmp eq i8 %49, 0
  br i1 %.not75, label %53, label %50

50:                                               ; preds = %47
  %51 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %52 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %51)
  call void @mjr_overlay(i32 noundef 0, i32 noundef 2, i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, ptr noundef nonnull %48, ptr noundef null, ptr noundef nonnull %52)
  br label %53

53:                                               ; preds = %50, %47
  %54 = getelementptr inbounds i8, ptr %0, i64 13204
  %55 = load i32, ptr %54, align 4, !tbaa !84
  %.not76 = icmp eq i32 %55, 0
  br i1 %.not76, label %61, label %56

56:                                               ; preds = %53
  %57 = getelementptr inbounds i8, ptr %0, i64 4091312
  %58 = load ptr, ptr %24, align 8, !tbaa !8
  %59 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %60 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %59)
  call void @mjui_render(ptr noundef nonnull %57, ptr noundef %58, ptr noundef nonnull %60)
  br label %61

61:                                               ; preds = %56, %53
  %62 = getelementptr inbounds i8, ptr %0, i64 13208
  %63 = load i32, ptr %62, align 8, !tbaa !85
  %.not77 = icmp eq i32 %63, 0
  br i1 %.not77, label %69, label %64

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %0, i64 7068880
  %66 = load ptr, ptr %24, align 8, !tbaa !8
  %67 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %68 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %67)
  call void @mjui_render(ptr noundef nonnull %65, ptr noundef %66, ptr noundef nonnull %68)
  br label %69

69:                                               ; preds = %64, %61
  %70 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %71 = load ptr, ptr %70, align 8, !tbaa !5
  %72 = getelementptr inbounds i8, ptr %71, i64 112
  %73 = load ptr, ptr %72, align 8
  call void %73(ptr noundef nonnull align 8 dereferenceable(2900) %70)
  br label %400

74:                                               ; preds = %31
  %75 = getelementptr inbounds i8, ptr %0, i64 13056
  %76 = load i8, ptr %75, align 8, !tbaa !86, !range !80, !noundef !81
  %77 = trunc nuw i8 %76 to i1
  br i1 %77, label %78, label %85

78:                                               ; preds = %74
  %79 = getelementptr inbounds i8, ptr %0, i64 13204
  %80 = load i32, ptr %79, align 4, !tbaa !84
  %.not78 = icmp eq i32 %80, 0
  %81 = getelementptr inbounds i8, ptr %0, i64 4687416
  %82 = load i32, ptr %81, align 8
  %.not79 = icmp eq i32 %82, 0
  %or.cond121 = select i1 %.not78, i1 true, i1 %.not79
  br i1 %or.cond121, label %84, label %83

83:                                               ; preds = %78
  tail call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef nonnull %0, i32 noundef 2)
  br label %84

84:                                               ; preds = %83, %78
  store i8 0, ptr %75, align 8, !tbaa !86
  br label %85

85:                                               ; preds = %84, %74
  %86 = getelementptr inbounds i8, ptr %0, i64 13204
  %87 = load i32, ptr %86, align 4, !tbaa !84
  %.not80 = icmp eq i32 %87, 0
  %88 = getelementptr inbounds i8, ptr %0, i64 4985104
  %89 = load i32, ptr %88, align 8
  %.not81 = icmp eq i32 %89, 0
  %or.cond123 = select i1 %.not80, i1 true, i1 %.not81
  br i1 %or.cond123, label %91, label %90

90:                                               ; preds = %85
  tail call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef nonnull %0, i32 noundef 3)
  br label %91

91:                                               ; preds = %90, %85
  %92 = getelementptr inbounds i8, ptr %0, i64 13057
  %93 = load i8, ptr %92, align 1, !tbaa !87, !range !80, !noundef !81
  %94 = trunc nuw i8 %93 to i1
  br i1 %94, label %95, label %101

95:                                               ; preds = %91
  %96 = load i32, ptr %86, align 4, !tbaa !84
  %.not82 = icmp eq i32 %96, 0
  %97 = getelementptr inbounds i8, ptr %0, i64 5282792
  %98 = load i32, ptr %97, align 8
  %.not83 = icmp eq i32 %98, 0
  %or.cond125 = select i1 %.not82, i1 true, i1 %.not83
  br i1 %or.cond125, label %100, label %99

99:                                               ; preds = %95
  tail call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef nonnull %0, i32 noundef 4)
  br label %100

100:                                              ; preds = %99, %95
  store i8 0, ptr %92, align 1, !tbaa !87
  br label %101

101:                                              ; preds = %100, %91
  %102 = load i8, ptr %0, align 8, !tbaa !79, !range !80, !noundef !81
  %103 = trunc nuw i8 %102 to i1
  br i1 %103, label %104, label %188

104:                                              ; preds = %101
  %105 = load i32, ptr %86, align 4, !tbaa !84
  %.not84 = icmp eq i32 %105, 0
  %106 = getelementptr inbounds i8, ptr %0, i64 5580480
  %107 = load i32, ptr %106, align 8
  %.not85 = icmp eq i32 %107, 0
  %or.cond127 = select i1 %.not84, i1 true, i1 %.not85
  br i1 %or.cond127, label %141, label %108

108:                                              ; preds = %104
  %109 = getelementptr inbounds i8, ptr %0, i64 12264
  %110 = load i32, ptr %109, align 8, !tbaa !88
  %111 = getelementptr inbounds i8, ptr %0, i64 26488
  %112 = load ptr, ptr %111, align 8, !tbaa !89
  %113 = load i32, ptr %112, align 8, !tbaa !90
  %.not86 = icmp eq i32 %110, %113
  br i1 %.not86, label %114, label %139

114:                                              ; preds = %108
  %115 = getelementptr inbounds i8, ptr %0, i64 12268
  %116 = load i32, ptr %115, align 4, !tbaa !91
  %117 = getelementptr inbounds i8, ptr %112, i64 4
  %118 = load i32, ptr %117, align 4, !tbaa !92
  %.not87 = icmp eq i32 %116, %118
  br i1 %.not87, label %119, label %139

119:                                              ; preds = %114
  %120 = getelementptr inbounds i8, ptr %0, i64 12272
  %121 = load i32, ptr %120, align 8, !tbaa !93
  %122 = getelementptr inbounds i8, ptr %112, i64 8
  %123 = load i32, ptr %122, align 8, !tbaa !94
  %.not88 = icmp eq i32 %121, %123
  br i1 %.not88, label %124, label %139

124:                                              ; preds = %119
  %125 = getelementptr inbounds i8, ptr %0, i64 12168
  %126 = load i32, ptr %125, align 8, !tbaa !95
  %127 = getelementptr inbounds i8, ptr %0, i64 26496
  %128 = load ptr, ptr %127, align 8, !tbaa !96
  %129 = load i32, ptr %128, align 4, !tbaa !97
  %.not89 = icmp eq i32 %126, %129
  br i1 %.not89, label %130, label %139

130:                                              ; preds = %124
  %131 = getelementptr inbounds i8, ptr %0, i64 12172
  %132 = load i32, ptr %131, align 4, !tbaa !98
  %133 = getelementptr inbounds i8, ptr %128, i64 4
  %134 = load i32, ptr %133, align 4, !tbaa !99
  %.not90 = icmp eq i32 %132, %134
  br i1 %.not90, label %135, label %139

135:                                              ; preds = %130
  %136 = getelementptr inbounds i8, ptr %0, i64 12218
  %137 = getelementptr inbounds i8, ptr %128, i64 50
  %138 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA32_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(32) %136, ptr noundef nonnull align 1 dereferenceable(32) %137)
  br i1 %138, label %139, label %141

139:                                              ; preds = %135, %130, %124, %119, %114, %108
  %140 = getelementptr inbounds i8, ptr %0, i64 13058
  store i8 1, ptr %140, align 2, !tbaa !100
  br label %141

141:                                              ; preds = %139, %135, %104
  %142 = load i32, ptr %86, align 4, !tbaa !84
  %.not91 = icmp eq i32 %142, 0
  %143 = load i32, ptr %106, align 8
  %.not92 = icmp eq i32 %143, 0
  %or.cond129 = select i1 %.not91, i1 true, i1 %.not92
  br i1 %or.cond129, label %181, label %144

144:                                              ; preds = %141
  %145 = getelementptr inbounds i8, ptr %0, i64 12176
  %146 = getelementptr inbounds i8, ptr %0, i64 26496
  %147 = load ptr, ptr %146, align 8, !tbaa !96
  %148 = getelementptr inbounds i8, ptr %147, i64 8
  %149 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %145, ptr noundef nonnull align 1 dereferenceable(6) %148)
  br i1 %149, label %180, label %150

150:                                              ; preds = %144
  %151 = getelementptr inbounds i8, ptr %0, i64 12182
  %152 = load ptr, ptr %146, align 8, !tbaa !96
  %153 = getelementptr inbounds i8, ptr %152, i64 14
  %154 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %151, ptr noundef nonnull align 1 dereferenceable(6) %153)
  br i1 %154, label %180, label %155

155:                                              ; preds = %150
  %156 = getelementptr inbounds i8, ptr %0, i64 12188
  %157 = load ptr, ptr %146, align 8, !tbaa !96
  %158 = getelementptr inbounds i8, ptr %157, i64 20
  %159 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %156, ptr noundef nonnull align 1 dereferenceable(6) %158)
  br i1 %159, label %180, label %160

160:                                              ; preds = %155
  %161 = getelementptr inbounds i8, ptr %0, i64 12194
  %162 = load ptr, ptr %146, align 8, !tbaa !96
  %163 = getelementptr inbounds i8, ptr %162, i64 26
  %164 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %161, ptr noundef nonnull align 1 dereferenceable(6) %163)
  br i1 %164, label %180, label %165

165:                                              ; preds = %160
  %166 = getelementptr inbounds i8, ptr %0, i64 12200
  %167 = load ptr, ptr %146, align 8, !tbaa !96
  %168 = getelementptr inbounds i8, ptr %167, i64 32
  %169 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %166, ptr noundef nonnull align 1 dereferenceable(6) %168)
  br i1 %169, label %180, label %170

170:                                              ; preds = %165
  %171 = getelementptr inbounds i8, ptr %0, i64 12206
  %172 = load ptr, ptr %146, align 8, !tbaa !96
  %173 = getelementptr inbounds i8, ptr %172, i64 38
  %174 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %171, ptr noundef nonnull align 1 dereferenceable(6) %173)
  br i1 %174, label %180, label %175

175:                                              ; preds = %170
  %176 = getelementptr inbounds i8, ptr %0, i64 12212
  %177 = load ptr, ptr %146, align 8, !tbaa !96
  %178 = getelementptr inbounds i8, ptr %177, i64 44
  %179 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6) %176, ptr noundef nonnull align 1 dereferenceable(6) %178)
  br i1 %179, label %180, label %181

180:                                              ; preds = %175, %170, %165, %160, %155, %150, %144
  tail call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef nonnull %0, i32 noundef 7)
  br label %181

181:                                              ; preds = %180, %175, %141
  %182 = getelementptr inbounds i8, ptr %0, i64 26496
  %183 = load ptr, ptr %182, align 8, !tbaa !96
  %184 = getelementptr inbounds i8, ptr %0, i64 12168
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(92) %184, ptr noundef nonnull align 4 dereferenceable(92) %183, i64 92, i1 false), !tbaa.struct !101
  %185 = getelementptr inbounds i8, ptr %0, i64 26488
  %186 = load ptr, ptr %185, align 8, !tbaa !89
  %187 = getelementptr inbounds i8, ptr %0, i64 12264
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %187, ptr noundef nonnull align 8 dereferenceable(64) %186, i64 64, i1 false), !tbaa.struct !103
  br label %188

188:                                              ; preds = %181, %101
  %189 = getelementptr inbounds i8, ptr %0, i64 13058
  %190 = load i8, ptr %189, align 2, !tbaa !100, !range !80, !noundef !81
  %191 = trunc nuw i8 %190 to i1
  br i1 %191, label %192, label %198

192:                                              ; preds = %188
  %193 = load i32, ptr %86, align 4, !tbaa !84
  %.not93 = icmp eq i32 %193, 0
  %194 = getelementptr inbounds i8, ptr %0, i64 5580480
  %195 = load i32, ptr %194, align 8
  %.not94 = icmp eq i32 %195, 0
  %or.cond131 = select i1 %.not93, i1 true, i1 %.not94
  br i1 %or.cond131, label %197, label %196

196:                                              ; preds = %192
  tail call void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef nonnull %0, i32 noundef 5)
  br label %197

197:                                              ; preds = %196, %192
  store i8 0, ptr %189, align 2, !tbaa !100
  br label %198

198:                                              ; preds = %197, %188
  %199 = getelementptr inbounds i8, ptr %0, i64 13059
  %200 = load i8, ptr %199, align 1, !tbaa !105, !range !80, !noundef !81
  %201 = trunc nuw i8 %200 to i1
  br i1 %201, label %202, label %213

202:                                              ; preds = %198
  %203 = getelementptr inbounds i8, ptr %0, i64 13208
  %204 = load i32, ptr %203, align 8, !tbaa !85
  %.not95 = icmp eq i32 %204, 0
  %205 = getelementptr inbounds i8, ptr %0, i64 7069608
  %206 = load i32, ptr %205, align 8
  %.not96 = icmp eq i32 %206, 0
  %or.cond133 = select i1 %.not95, i1 true, i1 %.not96
  br i1 %or.cond133, label %212, label %207

207:                                              ; preds = %202
  %208 = getelementptr inbounds i8, ptr %0, i64 7068880
  %209 = load ptr, ptr %24, align 8, !tbaa !8
  %210 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %211 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %210)
  tail call void @mjui_update(i32 noundef 0, i32 noundef -1, ptr noundef nonnull %208, ptr noundef %209, ptr noundef nonnull %211)
  br label %212

212:                                              ; preds = %207, %202
  store i8 0, ptr %199, align 1, !tbaa !105
  br label %213

213:                                              ; preds = %212, %198
  %214 = getelementptr inbounds i8, ptr %0, i64 13061
  %215 = load i8, ptr %214, align 1, !tbaa !106, !range !80, !noundef !81
  %216 = trunc nuw i8 %215 to i1
  br i1 %216, label %217, label %230

217:                                              ; preds = %213
  %218 = getelementptr inbounds i8, ptr %0, i64 13208
  %219 = load i32, ptr %218, align 8, !tbaa !85
  %.not97 = icmp eq i32 %219, 0
  br i1 %.not97, label %229, label %220

220:                                              ; preds = %217
  %221 = getelementptr inbounds i8, ptr %0, i64 7367296
  %222 = load i32, ptr %221, align 8, !tbaa !107
  %.not98 = icmp eq i32 %222, 0
  br i1 %.not98, label %229, label %223

223:                                              ; preds = %220
  %224 = getelementptr inbounds i8, ptr %0, i64 7068880
  %225 = getelementptr inbounds i8, ptr %0, i64 7069560
  store i32 1, ptr %225, align 8, !tbaa !110
  tail call void @_ZN12_GLOBAL__N_118MakeControlSectionEPN6mujoco8SimulateEi(ptr noundef nonnull %0, i32 noundef %222)
  store i32 2, ptr %225, align 8, !tbaa !110
  %226 = load ptr, ptr %24, align 8, !tbaa !8
  %227 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %228 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %227)
  tail call void @_ZN12_GLOBAL__N_18UiModifyEP5mjUI_P10mjuiState_P11mjrContext_(ptr noundef nonnull %224, ptr noundef %226, ptr noundef nonnull %228)
  br label %229

229:                                              ; preds = %223, %220, %217
  store i8 0, ptr %214, align 1, !tbaa !106
  br label %230

230:                                              ; preds = %229, %213
  %231 = getelementptr inbounds i8, ptr %0, i64 13060
  %232 = load i8, ptr %231, align 4, !tbaa !111, !range !80, !noundef !81
  %233 = trunc nuw i8 %232 to i1
  br i1 %233, label %234, label %245

234:                                              ; preds = %230
  %235 = getelementptr inbounds i8, ptr %0, i64 13208
  %236 = load i32, ptr %235, align 8, !tbaa !85
  %.not99 = icmp eq i32 %236, 0
  %237 = getelementptr inbounds i8, ptr %0, i64 7367296
  %238 = load i32, ptr %237, align 8
  %.not100 = icmp eq i32 %238, 0
  %or.cond135 = select i1 %.not99, i1 true, i1 %.not100
  br i1 %or.cond135, label %244, label %239

239:                                              ; preds = %234
  %240 = getelementptr inbounds i8, ptr %0, i64 7068880
  %241 = load ptr, ptr %24, align 8, !tbaa !8
  %242 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %243 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %242)
  tail call void @mjui_update(i32 noundef 1, i32 noundef -1, ptr noundef nonnull %240, ptr noundef %241, ptr noundef nonnull %243)
  br label %244

244:                                              ; preds = %239, %234
  store i8 0, ptr %231, align 4, !tbaa !111
  br label %245

245:                                              ; preds = %244, %230
  %246 = getelementptr inbounds i8, ptr %0, i64 17720
  %247 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %248 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %247)
  tail call void @mjr_render(i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, ptr noundef nonnull %246, ptr noundef nonnull %248)
  %249 = getelementptr inbounds i8, ptr %0, i64 13276
  %250 = load i8, ptr %249, align 4, !tbaa !83
  %.not101 = icmp eq i8 %250, 0
  br i1 %.not101, label %254, label %251

251:                                              ; preds = %245
  %252 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %253 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %252)
  tail call void @mjr_overlay(i32 noundef 0, i32 noundef 2, i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, ptr noundef nonnull %249, ptr noundef null, ptr noundef nonnull %253)
  br label %254

254:                                              ; preds = %251, %245
  %255 = getelementptr inbounds i8, ptr %0, i64 13252
  %256 = load i32, ptr %255, align 4, !tbaa !112
  %.not102 = icmp ne i32 %256, 0
  %257 = getelementptr inbounds i8, ptr %0, i64 13272
  %258 = load i32, ptr %257, align 8
  %.not103 = icmp eq i32 %258, 0
  %or.cond137 = select i1 %.not102, i1 %.not103, i1 false
  br i1 %or.cond137, label %273, label %259

259:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 30, ptr nonnull %3) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(30) %3, i8 0, i64 30, i1 false)
  br i1 %.not103, label %262, label %260

260:                                              ; preds = %259
  %261 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %3, i64 noundef 30, ptr noundef nonnull @.str.52) #10
  br label %270

262:                                              ; preds = %259
  %263 = getelementptr inbounds i8, ptr %0, i64 13248
  %264 = load i32, ptr %263, align 8, !tbaa !113
  %265 = icmp eq i32 %264, 0
  br i1 %265, label %266, label %268

266:                                              ; preds = %262
  %267 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %3, i64 noundef 30, ptr noundef nonnull @.str.54) #10
  br label %270

268:                                              ; preds = %262
  %269 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %3, i64 noundef 30, ptr noundef nonnull @.str.55, i32 noundef %264) #10
  br label %270

270:                                              ; preds = %266, %268, %260
  %271 = tail call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %272 = tail call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %271)
  call void @mjr_overlay(i32 noundef 2, i32 noundef 4, i64 %.sroa.056.0.copyload, i64 %.sroa.8.0, ptr noundef nonnull %3, ptr noundef null, ptr noundef nonnull %272)
  call void @llvm.lifetime.end.p0(i64 30, ptr nonnull %3) #10
  br label %273

273:                                              ; preds = %254, %270
  %274 = getelementptr inbounds i8, ptr %0, i64 17276
  %275 = load i32, ptr %274, align 4, !tbaa !114
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds [31 x float], ptr @_ZN6mujoco8Simulate15percentRealTimeE, i64 0, i64 %276
  %278 = load float, ptr %277, align 4, !tbaa !115
  %279 = getelementptr inbounds i8, ptr %0, i64 17284
  %280 = load float, ptr %279, align 4, !tbaa !116
  %281 = fdiv float 1.000000e+02, %280
  %282 = fsub float %281, %278
  %283 = call noundef float @_ZSt4fabsf(float noundef %282)
  %284 = load i32, ptr %255, align 4, !tbaa !112
  %.not105 = icmp ne i32 %284, 0
  %285 = fpext float %283 to double
  %286 = fpext float %278 to double
  %287 = fmul double %286, 1.000000e-01
  %288 = fcmp olt double %287, %285
  %289 = and i1 %.not105, %288
  call void @llvm.lifetime.start.p0(i64 30, ptr nonnull %4) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(30) %4, i8 0, i64 30, i1 false)
  %290 = fcmp une float %278, 1.000000e+02
  %brmerge = select i1 %290, i1 true, i1 %289
  br i1 %brmerge, label %291, label %.thread

291:                                              ; preds = %273
  %292 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %4, i64 noundef 30, ptr noundef nonnull @.str.56, double noundef %286) #10
  br i1 %289, label %293, label %299

293:                                              ; preds = %291
  %294 = sext i32 %292 to i64
  %295 = getelementptr inbounds i8, ptr %4, i64 %294
  %296 = sub nsw i64 30, %294
  %297 = fpext float %281 to double
  %298 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull %295, i64 noundef %296, ptr noundef nonnull @.str.57, double noundef %297) #10
  br label %299

299:                                              ; preds = %291, %293
  %.pr = load i8, ptr %4, align 16, !tbaa !83
  %.not106 = icmp eq i8 %.pr, 0
  br i1 %.not106, label %.thread, label %300

300:                                              ; preds = %299
  %301 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %302 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %301)
  call void @mjr_overlay(i32 noundef 2, i32 noundef 0, i64 %.sroa.056.0.copyload, i64 %.sroa.8.0, ptr noundef nonnull %4, ptr noundef null, ptr noundef nonnull %302)
  br label %.thread

.thread:                                          ; preds = %273, %300, %299
  %303 = load i32, ptr %86, align 4, !tbaa !84
  %.not107 = icmp eq i32 %303, 0
  br i1 %.not107, label %309, label %304

304:                                              ; preds = %.thread
  %305 = getelementptr inbounds i8, ptr %0, i64 4091312
  %306 = load ptr, ptr %24, align 8, !tbaa !8
  %307 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %308 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %307)
  call void @mjui_render(ptr noundef nonnull %305, ptr noundef %306, ptr noundef nonnull %308)
  br label %309

309:                                              ; preds = %304, %.thread
  %310 = getelementptr inbounds i8, ptr %0, i64 13208
  %311 = load i32, ptr %310, align 8, !tbaa !85
  %.not108 = icmp eq i32 %311, 0
  br i1 %.not108, label %317, label %312

312:                                              ; preds = %309
  %313 = getelementptr inbounds i8, ptr %0, i64 7068880
  %314 = load ptr, ptr %24, align 8, !tbaa !8
  %315 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %316 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %315)
  call void @mjui_render(ptr noundef nonnull %313, ptr noundef %314, ptr noundef nonnull %316)
  br label %317

317:                                              ; preds = %312, %309
  %318 = getelementptr inbounds i8, ptr %0, i64 13212
  %319 = load i32, ptr %318, align 4, !tbaa !117
  %.not109 = icmp eq i32 %319, 0
  br i1 %.not109, label %323, label %320

320:                                              ; preds = %317
  %321 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %322 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %321)
  call void @mjr_overlay(i32 noundef 0, i32 noundef 0, i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, ptr noundef nonnull @_ZN12_GLOBAL__N_110help_titleE, ptr noundef nonnull @_ZN12_GLOBAL__N_112help_contentE, ptr noundef nonnull %322)
  br label %323

323:                                              ; preds = %320, %317
  %324 = getelementptr inbounds i8, ptr %0, i64 13216
  %325 = load i32, ptr %324, align 8, !tbaa !118
  %.not110 = icmp eq i32 %325, 0
  br i1 %.not110, label %331, label %326

326:                                              ; preds = %323
  %327 = getelementptr inbounds i8, ptr %0, i64 10057968
  %328 = getelementptr inbounds i8, ptr %0, i64 10058968
  %329 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %330 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %329)
  call void @mjr_overlay(i32 noundef 0, i32 noundef 2, i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload, ptr noundef nonnull %327, ptr noundef nonnull %328, ptr noundef nonnull %330)
  br label %331

331:                                              ; preds = %326, %323
  %332 = load i32, ptr %27, align 4, !tbaa !78
  %.not111 = icmp eq i32 %332, 0
  br i1 %.not111, label %334, label %333

333:                                              ; preds = %331
  call void @_ZN12_GLOBAL__N_112ShowProfilerEPN6mujoco8SimulateE8mjrRect_(ptr noundef nonnull %0, i64 %.sroa.056.0.copyload, i64 %.sroa.13.0.copyload)
  br label %334

334:                                              ; preds = %333, %331
  %335 = getelementptr inbounds i8, ptr %0, i64 13224
  %336 = load i32, ptr %335, align 8, !tbaa !119
  %.not112 = icmp eq i32 %336, 0
  br i1 %.not112, label %338, label %337

337:                                              ; preds = %334
  call void @_ZN12_GLOBAL__N_110ShowSensorEPN6mujoco8SimulateE8mjrRect_(ptr noundef nonnull %0, i64 %.sroa.056.0.copyload, i64 %.sroa.8.0)
  br label %338

338:                                              ; preds = %337, %334
  %339 = getelementptr inbounds i8, ptr %0, i64 13264
  %340 = call noundef i32 @_ZNSt13__atomic_baseIiE8exchangeEiSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %339, i32 noundef 0, i32 noundef 5) #10
  %.not113 = icmp eq i32 %340, 0
  br i1 %.not113, label %395, label %341

341:                                              ; preds = %338
  %342 = load ptr, ptr %24, align 8, !tbaa !8
  %343 = getelementptr inbounds i8, ptr %342, i64 16
  %344 = load i32, ptr %343, align 4, !tbaa !120
  %345 = getelementptr inbounds i8, ptr %342, i64 12
  %346 = load i32, ptr %345, align 4, !tbaa !121
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #10
  %347 = mul i32 %346, 3
  %348 = mul i32 %347, %344
  %349 = zext i32 %348 to i64
  %350 = call noalias noundef nonnull ptr @_Znam(i64 noundef %349) #11
  call void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EEC2IPhS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull %350) #10
  %351 = call noundef zeroext i1 @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  br i1 %351, label %355, label %352

352:                                              ; preds = %341
  invoke void (ptr, ...) @mju_error(ptr noundef nonnull @.str.58)
          to label %355 unwind label %353

353:                                              ; preds = %355, %352
  %354 = landingpad { ptr, i32 }
          cleanup
  br label %394

355:                                              ; preds = %352, %341
  %356 = call noundef ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  %357 = load ptr, ptr %24, align 8, !tbaa !8
  %358 = getelementptr inbounds i8, ptr %357, i64 4
  %.sroa.0.0.copyload = load i64, ptr %358, align 4
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %357, i64 12
  %.sroa.2.0.copyload = load i64, ptr %.sroa.2.0..sroa_idx, align 4
  %359 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %360 = call noundef nonnull align 8 dereferenceable(2312) ptr @_ZN6mujoco17PlatformUIAdapter11mjr_contextEv(ptr noundef nonnull align 8 dereferenceable(2900) %359)
  invoke void @mjr_readPixels(ptr noundef %356, ptr noundef null, i64 %.sroa.0.0.copyload, i64 %.sroa.2.0.copyload, ptr noundef nonnull %360)
          to label %.preheader unwind label %353

.preheader:                                       ; preds = %355
  %.not140 = icmp ult i32 %344, 2
  br i1 %.not140, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %361 = lshr i32 %344, 1
  %362 = zext i32 %347 to i64
  %wide.trip.count = zext nneg i32 %361 to i64
  br label %363

._crit_edge:                                      ; preds = %375, %.preheader
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #10
  invoke void @_ZL11GetSavePathB5cxx11PKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull @.str.59)
          to label %378 unwind label %385

363:                                              ; preds = %.lr.ph, %375
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %375 ]
  %364 = trunc nuw nsw i64 %indvars.iv to i32
  %365 = mul i32 %347, %364
  %366 = zext i32 %365 to i64
  %367 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %5, i64 noundef %366)
  %368 = xor i32 %364, -1
  %369 = add i32 %344, %368
  %370 = mul i32 %369, %347
  %371 = zext i32 %370 to i64
  %372 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %5, i64 noundef %371)
  %373 = getelementptr inbounds i8, ptr %367, i64 %362
  %374 = invoke noundef ptr @_ZSt11swap_rangesIPhS0_ET0_T_S2_S1_(ptr noundef nonnull %367, ptr noundef nonnull %373, ptr noundef nonnull %372)
          to label %375 unwind label %376

375:                                              ; preds = %363
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %363, !llvm.loop !122

376:                                              ; preds = %363
  %377 = landingpad { ptr, i32 }
          cleanup
  br label %394

378:                                              ; preds = %._crit_edge
  %379 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #10
  br i1 %379, label %392, label %380

380:                                              ; preds = %378
  %381 = call noundef ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  %382 = invoke noundef i32 @_ZN7lodepng6encodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKhjj16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %381, i32 noundef %346, i32 noundef %344, i32 noundef 2, i32 noundef 8)
          to label %383 unwind label %387

383:                                              ; preds = %380
  %.not114 = icmp eq i32 %382, 0
  br i1 %.not114, label %389, label %384

384:                                              ; preds = %383
  invoke void (ptr, ...) @mju_error(ptr noundef nonnull @.str.60)
          to label %392 unwind label %387

385:                                              ; preds = %._crit_edge
  %386 = landingpad { ptr, i32 }
          cleanup
  br label %393

387:                                              ; preds = %384, %380
  %388 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #10
  br label %393

389:                                              ; preds = %383
  %390 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #10
  %391 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.61, ptr noundef %390)
  br label %392

392:                                              ; preds = %389, %384, %378
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #10
  call void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  br label %395

393:                                              ; preds = %387, %385
  %.pn = phi { ptr, i32 } [ %388, %387 ], [ %386, %385 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #10
  br label %394

394:                                              ; preds = %393, %376, %353
  %.pn116 = phi { ptr, i32 } [ %377, %376 ], [ %.pn, %393 ], [ %354, %353 ]
  call void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 30, ptr nonnull %4) #10
  resume { ptr, i32 } %.pn116

395:                                              ; preds = %392, %338
  %396 = call noundef ptr @_ZNKSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %397, i64 112
  %399 = load ptr, ptr %398, align 8
  call void %399(ptr noundef nonnull align 8 dereferenceable(2900) %396)
  call void @llvm.lifetime.end.p0(i64 30, ptr nonnull %4) #10
  br label %400

400:                                              ; preds = %395, %69
  ret void
}

declare void @mjr_rectangle(i64, i64, float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #7

declare void @mjr_overlay(i32 noundef, i32 noundef, i64, i64, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN6mujoco11sample_utilL11sprintf_arrILm1000EEEiRAT__cPKcz(ptr noundef nonnull align 1 dereferenceable(1000), ptr noundef, ...) local_unnamed_addr #6

declare ptr @mj_versionString() local_unnamed_addr #7

declare void @mjui_render(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_120mjui0_update_sectionEPN6mujoco8SimulateEi(ptr noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA32_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(32)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_111IsDifferentIA6_hEEbRKT_S4_(ptr noundef nonnull align 1 dereferenceable(6), ptr noundef nonnull align 1 dereferenceable(6)) local_unnamed_addr #6

declare void @mjui_update(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_118MakeControlSectionEPN6mujoco8SimulateEi(ptr noundef, i32 noundef) local_unnamed_addr #5

declare void @mjr_render(i64, i64, ptr noundef, ptr noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_112ShowProfilerEPN6mujoco8SimulateE8mjrRect_(ptr noundef, i64, i64) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_110ShowSensorEPN6mujoco8SimulateE8mjrRect_(ptr noundef, i64, i64) local_unnamed_addr #5

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt13__atomic_baseIiE8exchangeEiSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef) local_unnamed_addr #8 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EEC2IPhS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

declare void @mju_error(ptr noundef, ...) local_unnamed_addr #7

declare void @mjr_readPixels(ptr noundef, ptr noundef, i64, i64, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_hSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZSt11swap_rangesIPhS0_ET0_T_S2_S1_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11GetSavePathB5cxx11PKc(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) local_unnamed_addr #5

declare noundef i32 @_ZN7lodepng6encodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKhjj16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIA_hSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #5 = { 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 #6 = { inlinehint 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 #7 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline 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 #9 = { nobuiltin 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 #10 = { nounwind }
attributes #11 = { builtin 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !12, i64 4091304}
!9 = !{!"_ZTSN6mujoco8SimulateE", !10, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !14, i64 72, !14, i64 96, !14, i64 120, !14, i64 144, !18, i64 168, !22, i64 192, !14, i64 216, !18, i64 240, !22, i64 264, !26, i64 288, !26, i64 312, !26, i64 336, !26, i64 360, !26, i64 384, !30, i64 408, !34, i64 11864, !45, i64 12168, !46, i64 12264, !13, i64 12328, !47, i64 12336, !54, i64 13064, !57, i64 13104, !13, i64 13168, !63, i64 13176, !35, i64 13184, !13, i64 13192, !13, i64 13196, !13, i64 13200, !13, i64 13204, !13, i64 13208, !13, i64 13212, !13, i64 13216, !13, i64 13220, !13, i64 13224, !13, i64 13228, !13, i64 13232, !13, i64 13236, !13, i64 13240, !13, i64 13244, !13, i64 13248, !13, i64 13252, !66, i64 13256, !66, i64 13260, !66, i64 13264, !66, i64 13268, !13, i64 13272, !11, i64 13276, !11, i64 14276, !11, i64 15276, !11, i64 16276, !13, i64 17276, !10, i64 17280, !32, i64 17284, !35, i64 17288, !35, i64 17296, !11, i64 17304, !13, i64 17604, !11, i64 17608, !11, i64 17668, !11, i64 17692, !13, i64 17716, !31, i64 17720, !12, i64 26488, !12, i64 26496, !12, i64 26504, !68, i64 26512, !68, i64 839460, !68, i64 1652408, !68, i64 2465356, !68, i64 3278304, !12, i64 4091256, !11, i64 4091264, !13, i64 4091276, !11, i64 4091280, !11, i64 4091288, !69, i64 4091296, !12, i64 4091304, !75, i64 4091312, !75, i64 7068880, !11, i64 10046448, !11, i64 10051128, !11, i64 10056168, !11, i64 10057968, !11, i64 10058968, !57, i64 10059968, !13, i64 10060032, !13, i64 10060036, !13, i64 10060040}
!10 = !{!"bool", !11, i64 0}
!11 = !{!"omnipotent char", !7, i64 0}
!12 = !{!"any pointer", !11, i64 0}
!13 = !{!"int", !11, i64 0}
!14 = !{!"_ZTSSt6vectorIiSaIiEE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!18 = !{!"_ZTSSt6vectorISt8optionalISt4pairIddEESaIS3_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseISt8optionalISt4pairIddEESaIS3_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseISt8optionalISt4pairIddEESaIS3_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseISt8optionalISt4pairIddEESaIS3_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!22 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!26 = !{!"_ZTSSt6vectorIdSaIdEE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!30 = !{!"_ZTS14mjvSceneState_", !13, i64 0, !12, i64 8, !13, i64 16, !31, i64 24, !33, i64 8792, !44, i64 11072}
!31 = !{!"_ZTS9mjvScene_", !13, i64 0, !13, i64 4, !12, i64 8, !12, i64 16, !13, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !11, i64 128, !11, i64 129, !11, i64 130, !11, i64 131, !13, i64 132, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !13, i64 176, !11, i64 180, !11, i64 8580, !11, i64 8700, !11, i64 8704, !11, i64 8716, !32, i64 8732, !13, i64 8736, !11, i64 8740, !13, i64 8752, !11, i64 8756}
!32 = !{!"float", !11, i64 0}
!33 = !{!"_ZTSN14mjvSceneState_Ut_E", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !13, i64 92, !13, i64 96, !13, i64 100, !13, i64 104, !13, i64 108, !13, i64 112, !13, i64 116, !34, i64 120, !36, i64 424, !43, i64 1048, !12, i64 1104, !12, i64 1112, !12, i64 1120, !12, i64 1128, !12, i64 1136, !12, i64 1144, !12, i64 1152, !12, i64 1160, !12, i64 1168, !12, i64 1176, !12, i64 1184, !12, i64 1192, !12, i64 1200, !12, i64 1208, !12, i64 1216, !12, i64 1224, !12, i64 1232, !12, i64 1240, !12, i64 1248, !12, i64 1256, !12, i64 1264, !12, i64 1272, !12, i64 1280, !12, i64 1288, !12, i64 1296, !12, i64 1304, !12, i64 1312, !12, i64 1320, !12, i64 1328, !12, i64 1336, !12, i64 1344, !12, i64 1352, !12, i64 1360, !12, i64 1368, !12, i64 1376, !12, i64 1384, !12, i64 1392, !12, i64 1400, !12, i64 1408, !12, i64 1416, !12, i64 1424, !12, i64 1432, !12, i64 1440, !12, i64 1448, !12, i64 1456, !12, i64 1464, !12, i64 1472, !12, i64 1480, !12, i64 1488, !12, i64 1496, !12, i64 1504, !12, i64 1512, !12, i64 1520, !12, i64 1528, !12, i64 1536, !12, i64 1544, !12, i64 1552, !12, i64 1560, !12, i64 1568, !12, i64 1576, !12, i64 1584, !12, i64 1592, !12, i64 1600, !12, i64 1608, !12, i64 1616, !12, i64 1624, !12, i64 1632, !12, i64 1640, !12, i64 1648, !12, i64 1656, !12, i64 1664, !12, i64 1672, !12, i64 1680, !12, i64 1688, !12, i64 1696, !12, i64 1704, !12, i64 1712, !12, i64 1720, !12, i64 1728, !12, i64 1736, !12, i64 1744, !12, i64 1752, !12, i64 1760, !12, i64 1768, !12, i64 1776, !12, i64 1784, !12, i64 1792, !12, i64 1800, !12, i64 1808, !12, i64 1816, !12, i64 1824, !12, i64 1832, !12, i64 1840, !12, i64 1848, !12, i64 1856, !12, i64 1864, !12, i64 1872, !12, i64 1880, !12, i64 1888, !12, i64 1896, !12, i64 1904, !12, i64 1912, !12, i64 1920, !12, i64 1928, !12, i64 1936, !12, i64 1944, !12, i64 1952, !12, i64 1960, !12, i64 1968, !12, i64 1976, !12, i64 1984, !12, i64 1992, !12, i64 2000, !12, i64 2008, !12, i64 2016, !12, i64 2024, !12, i64 2032, !12, i64 2040, !12, i64 2048, !12, i64 2056, !12, i64 2064, !12, i64 2072, !12, i64 2080, !12, i64 2088, !12, i64 2096, !12, i64 2104, !12, i64 2112, !12, i64 2120, !12, i64 2128, !12, i64 2136, !12, i64 2144, !12, i64 2152, !12, i64 2160, !12, i64 2168, !12, i64 2176, !12, i64 2184, !12, i64 2192, !12, i64 2200, !12, i64 2208, !12, i64 2216, !12, i64 2224, !12, i64 2232, !12, i64 2240, !12, i64 2248, !12, i64 2256, !12, i64 2264, !12, i64 2272}
!34 = !{!"_ZTS9mjOption_", !35, i64 0, !35, i64 8, !35, i64 16, !35, i64 24, !35, i64 32, !35, i64 40, !35, i64 48, !11, i64 56, !11, i64 80, !11, i64 104, !35, i64 128, !35, i64 136, !35, i64 144, !11, i64 152, !11, i64 168, !11, i64 208, !13, i64 248, !13, i64 252, !13, i64 256, !13, i64 260, !13, i64 264, !13, i64 268, !13, i64 272, !13, i64 276, !13, i64 280, !13, i64 284, !13, i64 288, !13, i64 292, !13, i64 296}
!35 = !{!"double", !11, i64 0}
!36 = !{!"_ZTS9mjVisual_", !37, i64 0, !38, i64 44, !39, i64 64, !40, i64 104, !41, i64 156, !42, i64 224}
!37 = !{!"_ZTSN9mjVisual_Ut_E", !32, i64 0, !32, i64 4, !32, i64 8, !32, i64 12, !32, i64 16, !32, i64 20, !32, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40}
!38 = !{!"_ZTSN9mjVisual_Ut0_E", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16}
!39 = !{!"_ZTSN9mjVisual_Ut1_E", !11, i64 0, !11, i64 12, !11, i64 24, !13, i64 36}
!40 = !{!"_ZTSN9mjVisual_Ut2_E", !32, i64 0, !32, i64 4, !32, i64 8, !32, i64 12, !32, i64 16, !32, i64 20, !32, i64 24, !32, i64 28, !32, i64 32, !32, i64 36, !32, i64 40, !32, i64 44, !32, i64 48}
!41 = !{!"_ZTSN9mjVisual_Ut3_E", !32, i64 0, !32, i64 4, !32, i64 8, !32, i64 12, !32, i64 16, !32, i64 20, !32, i64 24, !32, i64 28, !32, i64 32, !32, i64 36, !32, i64 40, !32, i64 44, !32, i64 48, !32, i64 52, !32, i64 56, !32, i64 60, !32, i64 64}
!42 = !{!"_ZTSN9mjVisual_Ut4_E", !11, i64 0, !11, i64 16, !11, i64 32, !11, i64 48, !11, i64 64, !11, i64 80, !11, i64 96, !11, i64 112, !11, i64 128, !11, i64 144, !11, i64 160, !11, i64 176, !11, i64 192, !11, i64 208, !11, i64 224, !11, i64 240, !11, i64 256, !11, i64 272, !11, i64 288, !11, i64 304, !11, i64 320, !11, i64 336, !11, i64 352, !11, i64 368, !11, i64 384}
!43 = !{!"_ZTS12mjStatistic_", !35, i64 0, !35, i64 8, !35, i64 16, !35, i64 24, !11, i64 32}
!44 = !{!"_ZTSN14mjvSceneState_Ut0_E", !11, i64 0, !13, i64 64, !13, i64 68, !13, i64 72, !35, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !12, i64 232, !12, i64 240, !12, i64 248, !12, i64 256, !12, i64 264, !12, i64 272, !12, i64 280, !12, i64 288, !12, i64 296, !12, i64 304, !12, i64 312, !12, i64 320, !12, i64 328, !12, i64 336, !12, i64 344, !12, i64 352, !12, i64 360, !12, i64 368, !12, i64 376}
!45 = !{!"_ZTS10mjvOption_", !13, i64 0, !13, i64 4, !11, i64 8, !11, i64 14, !11, i64 20, !11, i64 26, !11, i64 32, !11, i64 38, !11, i64 44, !11, i64 50, !13, i64 84, !13, i64 88}
!46 = !{!"_ZTS10mjvCamera_", !13, i64 0, !13, i64 4, !13, i64 8, !11, i64 16, !35, i64 40, !35, i64 48, !35, i64 56}
!47 = !{!"_ZTSN6mujoco8SimulateUt_E", !48, i64 0, !48, i64 40, !48, i64 80, !48, i64 120, !10, i64 160, !10, i64 161, !10, i64 162, !10, i64 163, !10, i64 164, !10, i64 165, !10, i64 166, !13, i64 168, !10, i64 172, !53, i64 176, !10, i64 720, !10, i64 721, !10, i64 722, !10, i64 723, !10, i64 724, !10, i64 725}
!48 = !{!"_ZTSSt8optionalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE", !49, i64 0}
!49 = !{!"_ZTSSt14_Optional_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0ELb0EE", !50, i64 0}
!50 = !{!"_ZTSSt17_Optional_payloadINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0ELb0ELb0EE", !51, i64 0}
!51 = !{!"_ZTSSt17_Optional_payloadINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb0ELb0EE", !52, i64 0}
!52 = !{!"_ZTSSt22_Optional_payload_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE", !11, i64 0, !10, i64 32}
!53 = !{!"_ZTS10mjuiState_", !13, i64 0, !11, i64 4, !12, i64 408, !13, i64 416, !13, i64 420, !13, i64 424, !13, i64 428, !13, i64 432, !13, i64 436, !35, i64 440, !35, i64 448, !35, i64 456, !35, i64 464, !35, i64 472, !35, i64 480, !35, i64 488, !13, i64 496, !13, i64 500, !13, i64 504, !13, i64 508, !35, i64 512, !13, i64 520, !13, i64 524, !13, i64 528, !13, i64 532, !12, i64 536}
!54 = !{!"_ZTSN6mujoco13SimulateMutexE", !55, i64 0}
!55 = !{!"_ZTSSt15recursive_mutex", !56, i64 0}
!56 = !{!"_ZTSSt22__recursive_mutex_base", !11, i64 0}
!57 = !{!"_ZTSNSt3_V222condition_variable_anyE", !58, i64 0, !60, i64 48}
!58 = !{!"_ZTSSt18condition_variable", !59, i64 0}
!59 = !{!"_ZTSSt9__condvar", !11, i64 0}
!60 = !{!"_ZTSSt10shared_ptrISt5mutexE", !61, i64 0}
!61 = !{!"_ZTSSt12__shared_ptrISt5mutexLN9__gnu_cxx12_Lock_policyE2EE", !12, i64 0, !62, i64 8}
!62 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !12, i64 0}
!63 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !64, i64 0}
!64 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !65, i64 0}
!65 = !{!"long", !11, i64 0}
!66 = !{!"_ZTSSt6atomicIiE", !67, i64 0}
!67 = !{!"_ZTSSt13__atomic_baseIiE", !13, i64 0}
!68 = !{!"_ZTS10mjvFigure_", !13, i64 0, !11, i64 4, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !32, i64 28, !32, i64 32, !11, i64 36, !11, i64 44, !11, i64 56, !11, i64 72, !11, i64 88, !11, i64 104, !11, i64 116, !11, i64 1316, !11, i64 1332, !11, i64 1352, !11, i64 1372, !11, i64 1392, !11, i64 2392, !11, i64 2492, !13, i64 12492, !13, i64 12496, !11, i64 12500, !13, i64 12508, !32, i64 12512, !11, i64 12516, !11, i64 12916, !11, i64 812916, !11, i64 812924, !11, i64 812932, !11, i64 812940}
!69 = !{!"_ZTSSt10unique_ptrIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EE", !70, i64 0}
!70 = !{!"_ZTSSt15__uniq_ptr_dataIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_ELb1ELb1EE", !71, i64 0}
!71 = !{!"_ZTSSt15__uniq_ptr_implIN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EE", !72, i64 0}
!72 = !{!"_ZTSSt5tupleIJPN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEE", !73, i64 0}
!73 = !{!"_ZTSSt11_Tuple_implILm0EJPN6mujoco17PlatformUIAdapterESt14default_deleteIS1_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_Head_baseILm0EPN6mujoco17PlatformUIAdapterELb0EE", !12, i64 0}
!75 = !{!"_ZTS5mjUI_", !76, i64 0, !77, i64 44, !12, i64 296, !12, i64 304, !13, i64 312, !13, i64 316, !13, i64 320, !13, i64 324, !13, i64 328, !13, i64 332, !13, i64 336, !13, i64 340, !13, i64 344, !13, i64 348, !13, i64 352, !13, i64 356, !13, i64 360, !13, i64 364, !11, i64 368, !12, i64 672, !13, i64 680, !11, i64 688}
!76 = !{!"_ZTS17mjuiThemeSpacing_", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40}
!77 = !{!"_ZTS15mjuiThemeColor_", !11, i64 0, !11, i64 12, !11, i64 24, !11, i64 36, !11, i64 48, !11, i64 60, !11, i64 72, !11, i64 84, !11, i64 96, !11, i64 108, !11, i64 120, !11, i64 132, !11, i64 144, !11, i64 156, !11, i64 168, !11, i64 180, !11, i64 192, !11, i64 204, !11, i64 216, !11, i64 228, !11, i64 240}
!78 = !{!9, !13, i64 13220}
!79 = !{!9, !10, i64 0}
!80 = !{i8 0, i8 2}
!81 = !{}
!82 = !{!9, !13, i64 13272}
!83 = !{!11, !11, i64 0}
!84 = !{!9, !13, i64 13204}
!85 = !{!9, !13, i64 13208}
!86 = !{!9, !10, i64 13056}
!87 = !{!9, !10, i64 13057}
!88 = !{!9, !13, i64 12264}
!89 = !{!9, !12, i64 26488}
!90 = !{!46, !13, i64 0}
!91 = !{!9, !13, i64 12268}
!92 = !{!46, !13, i64 4}
!93 = !{!9, !13, i64 12272}
!94 = !{!46, !13, i64 8}
!95 = !{!9, !13, i64 12168}
!96 = !{!9, !12, i64 26496}
!97 = !{!45, !13, i64 0}
!98 = !{!9, !13, i64 12172}
!99 = !{!45, !13, i64 4}
!100 = !{!9, !10, i64 13058}
!101 = !{i64 0, i64 4, !102, i64 4, i64 4, !102, i64 8, i64 6, !83, i64 14, i64 6, !83, i64 20, i64 6, !83, i64 26, i64 6, !83, i64 32, i64 6, !83, i64 38, i64 6, !83, i64 44, i64 6, !83, i64 50, i64 32, !83, i64 84, i64 4, !102, i64 88, i64 4, !102}
!102 = !{!13, !13, i64 0}
!103 = !{i64 0, i64 4, !102, i64 4, i64 4, !102, i64 8, i64 4, !102, i64 16, i64 24, !83, i64 40, i64 8, !104, i64 48, i64 8, !104, i64 56, i64 8, !104}
!104 = !{!35, !35, i64 0}
!105 = !{!9, !10, i64 13059}
!106 = !{!9, !10, i64 13061}
!107 = !{!108, !13, i64 40}
!108 = !{!"_ZTS12mjuiSection_", !11, i64 0, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !11, i64 56, !109, i64 297656, !109, i64 297672}
!109 = !{!"_ZTS8mjrRect_", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12}
!110 = !{!9, !13, i64 7069560}
!111 = !{!9, !10, i64 13060}
!112 = !{!9, !13, i64 13252}
!113 = !{!9, !13, i64 13248}
!114 = !{!9, !13, i64 17276}
!115 = !{!32, !32, i64 0}
!116 = !{!9, !32, i64 17284}
!117 = !{!9, !13, i64 13212}
!118 = !{!9, !13, i64 13216}
!119 = !{!9, !13, i64 13224}
!120 = !{!109, !13, i64 12}
!121 = !{!109, !13, i64 8}
!122 = distinct !{!122, !123}
!123 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass