// File: gvaumour[P]cache-simulator/src/Cerebron.cc
// Function: CerebronPredictor::CerebronPredictor(int, int, int, int, std::vector<std::vector<CacheEntry*, std::allocator<CacheEntry*>>, std::allocator<std::vector<CacheEntry*, std::allocator<CacheEntry*>>>>&, std::vector<std::vector<CacheEntry*, std::allocator<CacheEntry*>>, std::allocator<std::vector<CacheEntry*, std::allocator<CacheEntry*>>>>&, HybridCache*)
CerebronPredictor::CerebronPredictor(int id, int nbAssoc , int nbSet, int nbNVMways, DataArray& SRAMtable, DataArray& NVMtable, HybridCache* cache) :\
	Predictor(id, nbAssoc , nbSet , nbNVMways , SRAMtable , NVMtable , cache)
{	
	m_tableSize = simu_parameters.perceptron_table_size;

	m_features.clear();

	m_criterias_names = simu_parameters.PHC_features;

	m_need_callee_file = false;
	
	m_enableAllocation = true;
	if(simu_parameters.nvm_assoc == 0 || simu_parameters.sram_assoc == 0)
		m_enableAllocation = false;
	
	initFeatures();
	
	cout <<  "\tFeatures used : ";
	for(auto p : simu_parameters.PHC_features)
		cout << p << ",";
	cout << endl;


	m_activation_function = simu_parameters.Cerebron_activation_function;
	if(m_activation_function != "linear" && m_activation_function != "max")
		assert(false && "Wrong Activation function for the Cerebron predictor");
	
	if(m_need_callee_file)
	{
		m_callee_map = map<uint64_t,int>();
		load_callee_file();
	}
		
	m_costAccess = vector< vector<int> >(NUM_RW_TYPE , vector<int>(NUM_RD_TYPE, 0));
	m_costAccess[true][RD_MEDIUM] = simu_parameters.PHC_cost_mediumWrite;
	m_costAccess[false][RD_MEDIUM] = simu_parameters.PHC_cost_mediumRead;
	m_costAccess[true][RD_SHORT] = simu_parameters.PHC_cost_shortWrite;
	m_costAccess[false][RD_SHORT] = simu_parameters.PHC_cost_shortRead;
	
	m_costParameters = simu_parameters.optTarget;
	
	miss_counter = 0;
	m_cpt = 0;


	if(simu_parameters.printDebug)
		debug_file.open(CEREBRON_DEBUG_FILE);
		
	stats_nbBPrequests = vector<uint64_t>(1, 0);
	stats_nbDeadLine = vector<uint64_t>(1, 0);
	stats_missCounter = vector<int>();
	stats_access_class = vector<vector<int> >(NUM_RD_TYPE ,  vector<int>(2, 0));
	
	
	if(simu_parameters.perceptron_drawFeatureMaps)
	{
		stats_local_error = vector< vector< pair<int,int> > >(simu_parameters.PHC_features.size() \
		 , vector< pair<int,int> >(m_tableSize, pair<int,int>(0,0)));
		stats_global_error = vector< vector< pair<int,int> > >(m_tableSize , \
			vector< pair<int,int> >(m_tableSize , pair<int,int>(0,0)));
	}
	
	if(simu_parameters.perceptron_compute_variance)
	{
		stats_variances_buffer = vector<double>();
		stats_variances = vector<double>();
	}	


	stats_nbMigrations = vector<int>(2,0);
	
	stats_allocate = 0;
	stats_nbMiss = 0;
	stats_nbHits = 0;

	stats_good_alloc = 0, stats_wrong_alloc = 0;

	stats_update_learning = 0, stats_update = 0;
	stats_allocate = 0, stats_allocate_learning = 0;
	stats_prediction_preemptive = 0 , stats_prediction_confident = 0;
	stats_cptLearningSRAMerror = 0, stats_cptSRAMerror = 0;
}

// Assembly:
subq $0x3e8, %rsp            # imm = 0x3E8
movq 0x3f8(%rsp), %rax
movq 0x3f0(%rsp), %rax
movq %rdi, 0x3e0(%rsp)
movl %esi, 0x3dc(%rsp)
movl %edx, 0x3d8(%rsp)
movl %ecx, 0x3d4(%rsp)
movl %r8d, 0x3d0(%rsp)
movq %r9, 0x3c8(%rsp)
movq 0x3e0(%rsp), %rdi
movq %rdi, 0x188(%rsp)
movl 0x3dc(%rsp), %esi
movl 0x3d8(%rsp), %edx
movl 0x3d4(%rsp), %ecx
movl 0x3d0(%rsp), %r8d
movq 0x3c8(%rsp), %r9
movq 0x3f0(%rsp), %r10
movq 0x3f8(%rsp), %r11
movq %rsp, %rax
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x537e0
movq 0x188(%rsp), %rdi
leaq 0x8c111(%rip), %rax     # 0x925a8
movq %rax, (%rdi)
addq $0x270, %rdi            # imm = 0x270
movq %rdi, 0x158(%rsp)
callq 0xe830
movq 0x188(%rsp), %rdi
addq $0x288, %rdi            # imm = 0x288
movq %rdi, 0x160(%rsp)
callq 0xe840
movq 0x188(%rsp), %rdi
addq $0x2a0, %rdi            # imm = 0x2A0
movq %rdi, 0x168(%rsp)
callq 0xe850
movq 0x188(%rsp), %rdi
addq $0x2b8, %rdi            # imm = 0x2B8
movq %rdi, 0x170(%rsp)
callq 0x5540
movq 0x188(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movq %rdi, 0x178(%rsp)
callq 0xe860
movq 0x188(%rsp), %rdi
addq $0x308, %rdi            # imm = 0x308
movq %rdi, 0x180(%rsp)
callq 0xe870
movq 0x188(%rsp), %rdi
addq $0x340, %rdi            # imm = 0x340
movq %rdi, 0x190(%rsp)
callq 0xe880
jmp 0x6558
movq 0x188(%rsp), %rdi
addq $0x388, %rdi            # imm = 0x388
movq %rdi, 0x100(%rsp)
callq 0xe8c0
movq 0x188(%rsp), %rdi
addq $0x3a0, %rdi            # imm = 0x3A0
movq %rdi, 0x108(%rsp)
callq 0xe8c0
movq 0x188(%rsp), %rdi
addq $0x3b8, %rdi            # imm = 0x3B8
movq %rdi, 0x110(%rsp)
callq 0xe8d0
movq 0x188(%rsp), %rdi
addq $0x3e0, %rdi            # imm = 0x3E0
movq %rdi, 0x118(%rsp)
callq 0xe8e0
movq 0x188(%rsp), %rdi
addq $0x3f8, %rdi            # imm = 0x3F8
movq %rdi, 0x120(%rsp)
callq 0xe8e0
movq 0x188(%rsp), %rdi
addq $0x460, %rdi            # imm = 0x460
movq %rdi, 0x128(%rsp)
callq 0xe8f0
movq 0x188(%rsp), %rdi
addq $0x478, %rdi            # imm = 0x478
movq %rdi, 0x130(%rsp)
callq 0xe900
movq 0x188(%rsp), %rdi
addq $0x490, %rdi            # imm = 0x490
movq %rdi, 0x138(%rsp)
callq 0xe900
movq 0x188(%rsp), %rdi
addq $0x4a8, %rdi            # imm = 0x4A8
movq %rdi, 0x140(%rsp)
callq 0xe860
movq 0x188(%rsp), %rdi
addq $0x4c0, %rdi            # imm = 0x4C0
movq %rdi, 0x148(%rsp)
callq 0xe8d0
movq 0x188(%rsp), %rdi
leaq 0x8d971(%rip), %rax     # 0x93ff0
movq %rax, 0x150(%rsp)
movl 0x1c8(%rax), %eax
movl %eax, 0x2f0(%rdi)
addq $0x270, %rdi            # imm = 0x270
callq 0xe910
movq 0x188(%rsp), %rdi
movq 0x150(%rsp), %rsi
addq $0x2a0, %rdi            # imm = 0x2A0
addq $0x1d0, %rsi            # imm = 0x1D0
callq 0xe930
jmp 0x66c4
movq 0x188(%rsp), %rax
movb $0x0, 0x300(%rax)
movb $0x1, 0x338(%rax)
leaq 0x8d90f(%rip), %rax     # 0x93ff0
cmpl $0x0, 0x40(%rax)
je 0x66f4
leaq 0x8d902(%rip), %rax     # 0x93ff0
cmpl $0x0, 0x38(%rax)
jne 0x6737
movq 0x188(%rsp), %rax
movb $0x0, 0x338(%rax)
jmp 0x6737
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x7455
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x73c6
movq 0x188(%rsp), %rdi
callq 0x74c0
jmp 0x6746
movq 0x8c883(%rip), %rdi     # 0x92fd0
leaq 0x6a8dc(%rip), %rsi     # 0x71030
callq 0x5380
jmp 0x675b
leaq 0x8d88e(%rip), %rax     # 0x93ff0
addq $0x1d0, %rax            # imm = 0x1D0
movq %rax, 0x3b0(%rsp)
leaq 0x8d879(%rip), %rdi     # 0x93ff0
addq $0x1d0, %rdi            # imm = 0x1D0
callq 0xebf0
movq %rax, 0x3a8(%rsp)
leaq 0x8d85e(%rip), %rdi     # 0x93ff0
addq $0x1d0, %rdi            # imm = 0x1D0
callq 0xec20
movq %rax, 0x3a0(%rsp)
leaq 0x3a8(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0xec50
testb $0x1, %al
jne 0x67c4
jmp 0x685c
leaq 0x3a8(%rsp), %rdi
callq 0xec90
movq %rax, %rsi
leaq 0x380(%rsp), %rdi
callq 0x51b0
jmp 0x67e3
movq 0x8c7e6(%rip), %rdi     # 0x92fd0
leaq 0x380(%rsp), %rsi
callq 0x5330
movq %rax, 0xf8(%rsp)
jmp 0x6801
movq 0xf8(%rsp), %rdi
leaq 0x6a832(%rip), %rsi     # 0x71042
callq 0x5380
jmp 0x6817
leaq 0x380(%rsp), %rdi
callq 0x5768
leaq 0x3a8(%rsp), %rdi
callq 0xeca0
jmp 0x67a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x380(%rsp), %rdi
callq 0x5768
jmp 0x73c6
movq 0x8c76d(%rip), %rdi     # 0x92fd0
movq 0x8c74e(%rip), %rsi     # 0x92fb8
callq 0x53d0
jmp 0x6871
movq 0x188(%rsp), %rdi
addq $0x2b8, %rdi            # imm = 0x2B8
leaq 0x8d769(%rip), %rsi     # 0x93ff0
addq $0x200, %rsi            # imm = 0x200
callq 0x5050
jmp 0x6895
movq 0x188(%rsp), %rdi
addq $0x2b8, %rdi            # imm = 0x2B8
leaq 0x6a799(%rip), %rsi     # 0x71044
callq 0xecc0
movb %al, 0xf7(%rsp)
jmp 0x68b9
movb 0xf7(%rsp), %al
testb $0x1, %al
jne 0x68c6
jmp 0x6916
movq 0x188(%rsp), %rdi
addq $0x2b8, %rdi            # imm = 0x2B8
leaq 0x6a76f(%rip), %rsi     # 0x7104b
callq 0xecc0
movb %al, 0xf6(%rsp)
jmp 0x68ea
movb 0xf6(%rsp), %al
testb $0x1, %al
jne 0x68f7
jmp 0x6916
leaq 0x6a751(%rip), %rdi     # 0x7104f
leaq 0x6a78a(%rip), %rsi     # 0x7108f
movl $0x25, %edx
leaq 0x6a78e(%rip), %rcx     # 0x7109f
callq 0x5260
movq 0x188(%rsp), %rax
testb $0x1, 0x300(%rax)
je 0x6991
xorps %xmm0, %xmm0
movaps %xmm0, 0x370(%rsp)
movaps %xmm0, 0x360(%rsp)
movaps %xmm0, 0x350(%rsp)
leaq 0x350(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0xe870
movq 0xe8(%rsp), %rsi
movq 0x188(%rsp), %rdi
addq $0x308, %rdi            # imm = 0x308
callq 0xecf0
movq 0xe8(%rsp), %rdi
callq 0xed20
movq 0x188(%rsp), %rdi
callq 0x7750
jmp 0x698f
jmp 0x6991
movl $0x0, 0x31c(%rsp)
leaq 0x31b(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0xed30
movq 0xe0(%rsp), %rcx
leaq 0x320(%rsp), %rdi
movl $0x3, %esi
leaq 0x31c(%rsp), %rdx
callq 0xed40
jmp 0x69d5
leaq 0x31a(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0xedc0
movq 0xd8(%rsp), %rcx
leaq 0x338(%rsp), %rdi
movl $0x5, %esi
leaq 0x320(%rsp), %rdx
callq 0xedd0
jmp 0x6a0e
movq 0x188(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movq %rdi, 0xb8(%rsp)
leaq 0x338(%rsp), %rsi
movq %rsi, 0x98(%rsp)
callq 0xee50
movq 0x98(%rsp), %rdi
callq 0xee90
leaq 0x31a(%rsp), %rdi
callq 0xeef0
leaq 0x320(%rsp), %rdi
callq 0xef00
leaq 0x31b(%rsp), %rdi
callq 0xef60
movq 0xb8(%rsp), %rdi
leaq 0x8d573(%rip), %rax     # 0x93ff0
movq %rax, 0xd0(%rsp)
movl 0x1f0(%rax), %eax
movl %eax, 0xa0(%rsp)
movl $0x1, %esi
movq %rsi, 0xa8(%rsp)
callq 0xef70
movq 0xa8(%rsp), %rsi
movq %rax, %rdi
callq 0xef90
movl 0xa0(%rsp), %edx
movq 0xb8(%rsp), %rdi
movq %rax, %rcx
movq 0xd0(%rsp), %rax
movl %edx, (%rcx)
movl 0x1ec(%rax), %eax
movl %eax, 0xa4(%rsp)
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0xc0(%rsp)
callq 0xef70
movq 0xa8(%rsp), %rsi
movq %rax, %rdi
callq 0xef90
movl 0xa4(%rsp), %edx
movq 0xa8(%rsp), %rsi
movq 0xb8(%rsp), %rdi
movq %rax, %rcx
movq 0xd0(%rsp), %rax
movl %edx, (%rcx)
movl 0x1f4(%rax), %eax
movl %eax, 0xb4(%rsp)
callq 0xef70
movq 0xc0(%rsp), %rsi
movq %rax, %rdi
callq 0xef90
movl 0xb4(%rsp), %edx
movq 0xb8(%rsp), %rdi
movq 0xc0(%rsp), %rsi
movq %rax, %rcx
movq 0xd0(%rsp), %rax
movl %edx, (%rcx)
movl 0x1f8(%rax), %eax
movl %eax, 0xcc(%rsp)
callq 0xef70
movq 0xc0(%rsp), %rsi
movq %rax, %rdi
callq 0xef90
movl 0xcc(%rsp), %ecx
movq 0x188(%rsp), %rdi
movq 0xd0(%rsp), %rsi
movl %ecx, (%rax)
addq $0x340, %rdi            # imm = 0x340
addq $0xe8, %rsi
callq 0xefb0
jmp 0x6bb8
movq 0x188(%rsp), %rax
leaq 0x8d679(%rip), %rcx     # 0x94240
movl $0x0, (%rcx)
movq $0x0, 0x2f8(%rax)
leaq 0x8d411(%rip), %rax     # 0x93ff0
testb $0x1, (%rax)
je 0x6c56
leaq 0x8c915(%rip), %rdi     # 0x93500
leaq 0x6a50f(%rip), %rsi     # 0x71101
movl $0x10, %edx
callq 0x5070
jmp 0x6bfe
jmp 0x6c56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x6c44
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x31a(%rsp), %rdi
callq 0xeef0
leaq 0x320(%rsp), %rdi
callq 0xef00
leaq 0x31b(%rsp), %rdi
callq 0xef60
jmp 0x73c6
movq $0x0, 0x2f8(%rsp)
leaq 0x2f7(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0xf010
movq 0x90(%rsp), %rcx
leaq 0x300(%rsp), %rdi
movl $0x1, %esi
leaq 0x2f8(%rsp), %rdx
callq 0xf020
jmp 0x6c9b
movq 0x188(%rsp), %rdi
addq $0x388, %rdi            # imm = 0x388
leaq 0x300(%rsp), %rsi
movq %rsi, 0x80(%rsp)
callq 0xf0a0
movq 0x80(%rsp), %rdi
callq 0xf0e0
leaq 0x2f7(%rsp), %rdi
callq 0xf140
movq $0x0, 0x2d0(%rsp)
leaq 0x2cf(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0xf010
movq 0x88(%rsp), %rcx
leaq 0x2d8(%rsp), %rdi
movl $0x1, %esi
leaq 0x2d0(%rsp), %rdx
callq 0xf020
jmp 0x6d1e
movq 0x188(%rsp), %rdi
addq $0x3a0, %rdi            # imm = 0x3A0
leaq 0x2d8(%rsp), %rsi
movq %rsi, 0x68(%rsp)
callq 0xf0a0
movq 0x68(%rsp), %rdi
callq 0xf0e0
leaq 0x2cf(%rsp), %rdi
callq 0xf140
xorps %xmm0, %xmm0
movaps %xmm0, 0x2b0(%rsp)
movq $0x0, 0x2c0(%rsp)
leaq 0x2b0(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0xe8d0
movq 0x188(%rsp), %rdi
movq 0x70(%rsp), %rsi
addq $0x3b8, %rdi            # imm = 0x3B8
callq 0xf150
movq 0x70(%rsp), %rdi
callq 0xef00
movl $0x0, 0x27c(%rsp)
leaq 0x27b(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0xed30
movq 0x78(%rsp), %rcx
leaq 0x280(%rsp), %rdi
movl $0x2, %esi
leaq 0x27c(%rsp), %rdx
callq 0xed40
jmp 0x6de0
leaq 0x27a(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0xedc0
movq 0x60(%rsp), %rcx
leaq 0x298(%rsp), %rdi
movl $0x3, %esi
leaq 0x280(%rsp), %rdx
callq 0xedd0
jmp 0x6e13
movq 0x188(%rsp), %rdi
addq $0x4a8, %rdi            # imm = 0x4A8
leaq 0x298(%rsp), %rsi
callq 0xee50
leaq 0x298(%rsp), %rdi
callq 0xee90
leaq 0x27a(%rsp), %rdi
callq 0xeef0
leaq 0x280(%rsp), %rdi
callq 0xef00
leaq 0x27b(%rsp), %rdi
callq 0xef60
leaq 0x8d186(%rip), %rax     # 0x93ff0
testb $0x1, 0x1cc(%rax)
je 0x71ea
leaq 0x8d172(%rip), %rdi     # 0x93ff0
addq $0x1d0, %rdi            # imm = 0x1D0
callq 0xf190
movq %rax, %rcx
movq 0x188(%rsp), %rax
movq %rcx, 0x50(%rsp)
movslq 0x2f0(%rax), %rax
movq %rax, 0x58(%rsp)
movl $0x0, 0x23c(%rsp)
movl $0x0, 0x238(%rsp)
leaq 0x240(%rsp), %rdi
leaq 0x23c(%rsp), %rsi
leaq 0x238(%rsp), %rdx
callq 0xf1b0
jmp 0x6edb
leaq 0x237(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0xf1e0
movq 0x58(%rsp), %rsi
movq 0x48(%rsp), %rcx
leaq 0x248(%rsp), %rdi
leaq 0x240(%rsp), %rdx
callq 0xf1f0
jmp 0x6f0e
leaq 0x236(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0xf270
movq 0x50(%rsp), %rsi
movq 0x40(%rsp), %rcx
leaq 0x260(%rsp), %rdi
leaq 0x248(%rsp), %rdx
callq 0xf280
jmp 0x6f41
movq 0x188(%rsp), %rdi
addq $0x478, %rdi            # imm = 0x478
leaq 0x260(%rsp), %rsi
movq %rsi, 0x28(%rsp)
callq 0xf300
movq 0x28(%rsp), %rdi
callq 0xf340
leaq 0x236(%rsp), %rdi
callq 0xf3a0
leaq 0x248(%rsp), %rdi
callq 0xf3b0
leaq 0x237(%rsp), %rdi
callq 0xf410
movq 0x188(%rsp), %rax
movslq 0x2f0(%rax), %rax
movq %rax, 0x30(%rsp)
movq %rax, 0x38(%rsp)
movl $0x0, 0x1f4(%rsp)
movl $0x0, 0x1f0(%rsp)
leaq 0x1f8(%rsp), %rdi
leaq 0x1f4(%rsp), %rsi
leaq 0x1f0(%rsp), %rdx
callq 0xf1b0
jmp 0x6fe1
leaq 0x1ef(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0xf1e0
movq 0x38(%rsp), %rsi
movq 0x20(%rsp), %rcx
leaq 0x200(%rsp), %rdi
leaq 0x1f8(%rsp), %rdx
callq 0xf1f0
jmp 0x7014
leaq 0x1ee(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0xf270
movq 0x30(%rsp), %rsi
movq 0x18(%rsp), %rcx
leaq 0x218(%rsp), %rdi
leaq 0x200(%rsp), %rdx
callq 0xf280
jmp 0x7047
movq 0x188(%rsp), %rdi
addq $0x490, %rdi            # imm = 0x490
leaq 0x218(%rsp), %rsi
callq 0xf300
leaq 0x218(%rsp), %rdi
callq 0xf340
leaq 0x1ee(%rsp), %rdi
callq 0xf3a0
leaq 0x200(%rsp), %rdi
callq 0xf3b0
leaq 0x1ef(%rsp), %rdi
callq 0xf410
jmp 0x71ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x2f7(%rsp), %rdi
callq 0xf140
jmp 0x73c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x2cf(%rsp), %rdi
callq 0xf140
jmp 0x73c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x712c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x27a(%rsp), %rdi
callq 0xeef0
leaq 0x280(%rsp), %rdi
callq 0xef00
leaq 0x27b(%rsp), %rdi
callq 0xef60
jmp 0x73c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x7182
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x236(%rsp), %rdi
callq 0xf3a0
leaq 0x248(%rsp), %rdi
callq 0xf3b0
leaq 0x237(%rsp), %rdi
callq 0xf410
jmp 0x73c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x71d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x1ee(%rsp), %rdi
callq 0xf3a0
leaq 0x200(%rsp), %rdi
callq 0xf3b0
leaq 0x1ef(%rsp), %rdi
callq 0xf410
jmp 0x73c6
leaq 0x8cdff(%rip), %rax     # 0x93ff0
testb $0x1, 0x1cd(%rax)
je 0x7292
leaq 0x1d0(%rsp), %rdi
xorl %esi, %esi
movl $0x18, %edx
callq 0x5210
leaq 0x1d0(%rsp), %rdi
callq 0xe8e0
movq 0x188(%rsp), %rdi
addq $0x3e0, %rdi            # imm = 0x3E0
leaq 0x1d0(%rsp), %rsi
callq 0xf420
leaq 0x1d0(%rsp), %rdi
callq 0xf460
leaq 0x1b8(%rsp), %rdi
xorl %esi, %esi
movl $0x18, %edx
callq 0x5210
leaq 0x1b8(%rsp), %rdi
callq 0xe8e0
movq 0x188(%rsp), %rdi
addq $0x3f8, %rdi            # imm = 0x3F8
leaq 0x1b8(%rsp), %rsi
callq 0xf420
leaq 0x1b8(%rsp), %rdi
callq 0xf460
movl $0x0, 0x19c(%rsp)
leaq 0x19b(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0xed30
movq 0x10(%rsp), %rcx
leaq 0x1a0(%rsp), %rdi
movl $0x2, %esi
leaq 0x19c(%rsp), %rdx
callq 0xed40
jmp 0x72d0
movq 0x188(%rsp), %rdi
addq $0x4c0, %rdi            # imm = 0x4C0
leaq 0x1a0(%rsp), %rsi
callq 0xf150
leaq 0x1a0(%rsp), %rdi
callq 0xef00
leaq 0x19b(%rsp), %rdi
callq 0xef60
movq 0x188(%rsp), %rax
movq $0x0, 0x420(%rax)
movq $0x0, 0x3d0(%rax)
movq $0x0, 0x3d8(%rax)
movq $0x0, 0x430(%rax)
movq $0x0, 0x438(%rax)
movq $0x0, 0x418(%rax)
movq $0x0, 0x410(%rax)
movq $0x0, 0x420(%rax)
movq $0x0, 0x428(%rax)
movq $0x0, 0x458(%rax)
movq $0x0, 0x450(%rax)
movq $0x0, 0x440(%rax)
movq $0x0, 0x448(%rax)
addq $0x3e8, %rsp            # imm = 0x3E8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x19b(%rsp), %rdi
callq 0xef60
movq 0x148(%rsp), %rdi
callq 0xef00
movq 0x140(%rsp), %rdi
callq 0xee90
movq 0x138(%rsp), %rdi
callq 0xf340
movq 0x130(%rsp), %rdi
callq 0xf340
movq 0x128(%rsp), %rdi
callq 0xf4c0
movq 0x120(%rsp), %rdi
callq 0xf460
movq 0x118(%rsp), %rdi
callq 0xf460
movq 0x110(%rsp), %rdi
callq 0xef00
movq 0x108(%rsp), %rdi
callq 0xf0e0
movq 0x100(%rsp), %rdi
callq 0xf0e0
movq 0x190(%rsp), %rdi
callq 0xf520
movq 0x180(%rsp), %rdi
callq 0xed20
movq 0x178(%rsp), %rdi
callq 0xee90
movq 0x170(%rsp), %rdi
callq 0x5768
movq 0x168(%rsp), %rdi
callq 0xf560
movq 0x160(%rsp), %rdi
callq 0xf5c0
movq 0x158(%rsp), %rdi
callq 0xf620
movq 0x188(%rsp), %rdi
callq 0x549b0
movq 0x3c0(%rsp), %rdi
callq 0x5690
nopl (%rax)