// File: /workspace/github_cpp_makefile_star2_O2/IdelCoder[P]PTransE-ag/Train_PTransE-pos.cpp
// Function: Train::bfgs()
void bfgs()
    {
        // margin是损失函数L(h,r,t)使用的，margin_rel是损失函数L(p,r)使用的
        double margin = 1,margin_rel = 1;
        cout<<"margin="<<' '<<margin<<"margin_rel="<<margin_rel<<endl;
        cout <<"positive_margin="<< " " << positive_margin <<endl;
        res=0;
        // mini-batch中每一批的样本量
        int nbatches=100;
        // 可能等同于nepoch，迭代的轮数
        int neval = 500;
        int batchsize = fb_h.size()/nbatches;
 		relation_tmp=relation_vec;
		entity_tmp = entity_vec;
		map<string, int> fb_count;
        for (int eval=0; eval<neval; eval++)
        {
            // 每轮迭代
        	res=0;
            positive_margin_count = 0;
         	for (int batch = 0; batch<nbatches; batch++)
         	{
                // 每一批次，都随机选择一个头结点（似乎没有使用）
				int e1 = rand_max(entity_num);
         		for (int k=0; k<batchsize; k++)
         		{
                    // 每个样本
					int j=rand_max(entity_num);
					int i=rand_max(fb_h.size());
                    // fb_h，fb_r，fb_l的索引都是三元组的索引，相同索引，就是同一个三元组
					int e1 = fb_h[i], rel = fb_r[i], e2  = fb_l[i];


					int rand_tmp = rand()%100;
					if (rand_tmp<25)
					{
                        // ok的类型是map<pair<int,int>, map<int,int> >
						while (ok[make_pair(e1,rel)].count(j)>0)
                            j=rand_max(entity_num);
                        train_kb(e1,e2,rel,e1,j,rel,margin);
                        // 替换尾实体
                        int candidate_size = givenHeadRel[to_string(e1) + "_" + to_string(rel)].size();
                        if(candidate_size > 1) {
                            j = givenHeadRel[to_string(e1) + "_" + to_string(rel)][rand() % candidate_size];
                            while (j == e2) {
                                j = givenHeadRel[to_string(e1) + "_" + to_string(rel)][rand() % candidate_size];
                            }

                            train_pos(e1, e2, rel, e1, j, rel, margin);
                        }


                        // 固定头结点和关系，随机出训练集中不存在的三元组来训练


					}
					else
					if (rand_tmp<50)
					{
						while (ok[make_pair(j,rel)].count(e2)>0)
                            j=rand_max(entity_num);
                        train_kb(e1,e2,rel,j,e2,rel,margin);
                        // 替换头实体
                        int candidate_size = givenTailRel[to_string(e2) + "_" + to_string(rel)].size();
                        if(candidate_size > 1) {
                            j = givenTailRel[to_string(e2) + "_" + to_string(rel)][rand() % candidate_size];
                            while (j == e1) {
                                j = givenTailRel[to_string(e2) + "_" + to_string(rel)][rand() % candidate_size];
                            }


                            train_pos(e1,e2,rel,j,e2,rel,margin);
                        }



					}
					else
					{
                        // rand_tmp [50, 100)
						int rel_neg = rand_max(relation_num);
						while (ok[make_pair(e1,rel_neg)].count(e2)>0)
                            rel_neg = rand_max(relation_num);
                        train_kb(e1,e2,rel,e1,e2,rel_neg,margin);

					}
                    // fb_path的类型vector<vector<pair<vector<int>,double> > >
					if (fb_path[i].size()>0)
					{
                        // 这个三元组存在其他路径
                        // relation_num包括了逆关系
						int rel_neg = rand_max(relation_num);
						while (ok[make_pair(e1,rel_neg)].count(e2)>0)
							rel_neg = rand_max(relation_num);
                        // 随机出一个不存在的三元组
						for (int path_id = 0; path_id<fb_path[i].size(); path_id++)
						{
                            // 遍历第i个三元组对应的每一条路径
                            // fb_path类型vector<vector<pair<vector<int>,double> > >
                            // rel_path 就是某条路径所组成的关系的数组
							vector<int> rel_path = fb_path[i][path_id].first;
							string  s = "";
                            // path2s的类型是map<vector<int>,string>
							if (path2s.count(rel_path)==0)
							{
							    ostringstream oss;//创建一个流
                                // 将这些数组组合成一个路径的字符串
								for (int ii=0; ii<rel_path.size(); ii++)
								{
									oss<<rel_path[ii]<<" ";
								}
							    s=oss.str();//
                                // path2s的key是路径的关系数组，value是关系数组转成的字符串
								path2s[rel_path] = s;
							}
                            // s是路径的字符串
							s = path2s[rel_path];
                            // pr是每条路径的概率
							double pr = fb_path[i][path_id].second;
                            // pr_path是路径的置信度
							double pr_path = 0;
							if (path_confidence.count(make_pair(s,rel))>0)
								pr_path = path_confidence[make_pair(s,rel)];
							pr_path = 0.99*pr_path + 0.01;
                            // rel是三元组实际存在的关系，rel_neg是这个三元组两个实体间不存在的关系
                            // rel_path是这个关系对应的一个路径
							train_path(rel,rel_neg,rel_path,2*margin,pr*pr_path);
						}
					}
                    // e1,e2,rel组成了这个三元组，j则是用来替换头或者尾的实体，构成一个corrupted triplets
					norm(relation_tmp[rel]);
            		norm(entity_tmp[e1]);
            		norm(entity_tmp[e2]);
            		norm(entity_tmp[j]);
                    // 这句话也没有效果
					e1 = e2;
         		}
                // 每一批迭代过后，更新relation_vec和entity_vec
	            relation_vec = relation_tmp;
	            entity_vec = entity_tmp;
         	}
            // 每一轮迭代过后，记录实体和关系的向量
            cout<<"eval:"<<eval<<' '<<res<<' '<<positive_margin_count<<endl;
            FILE* f2 = fopen(("relation2vec.txt"+version).c_str(),"w");
            FILE* f3 = fopen(("entity2vec.txt"+version).c_str(),"w");
            // 每一行对应一个关系的向量
            for (int i=0; i<relation_num; i++)
            {
                for (int ii=0; ii<n; ii++)
                    fprintf(f2,"%.6lf\t",relation_vec[i][ii]);
                fprintf(f2,"\n");
            }
            for (int i=0; i<entity_num; i++)
            {
                for (int ii=0; ii<n; ii++)
                    fprintf(f3,"%.6lf\t",entity_vec[i][ii]);
                fprintf(f3,"\n");
            }
            fclose(f2);
            fclose(f3);
        }//所有epoch结束
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x298, %rsp            # imm = 0x298
movq %rdi, %rbx
movq 0x9193(%rip), %r14      # 0xdfd8
leaq 0x4338(%rip), %rsi      # 0x9184
movq %r14, %rdi
callq 0x2190
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x21e0
movsd 0x41b1(%rip), %xmm0     # 0x9018
movq %rax, %rdi
callq 0x22c0
leaq 0x42f9(%rip), %rsi      # 0x916f
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
movsd 0x418f(%rip), %xmm0     # 0x9018
callq 0x22c0
movq %rax, %rdi
callq 0x20d0
leaq 0x42de(%rip), %rsi      # 0x917b
movq %r14, %rdi
callq 0x2190
leaq 0x4281(%rip), %rsi      # 0x912d
movq %rax, %rdi
callq 0x2190
movsd 0x945c(%rip), %xmm0     # 0xe318
movq %rax, %rdi
callq 0x22c0
movq %rax, %rdi
callq 0x20d0
andq $0x0, 0x38(%rbx)
movq 0x70(%rbx), %rax
subq 0x68(%rbx), %rax
sarq $0x2, %rax
xorl %r14d, %r14d
pushq $0x64
popq %rcx
xorl %edx, %edx
divq %rcx
movq %rax, %r15
leaq 0xe0(%rbx), %rsi
leaq 0x110(%rbx), %rdi
movq %rdi, 0xc0(%rsp)
movq %rsi, 0x88(%rsp)
callq 0x5f46
leaq 0xf8(%rbx), %rsi
leaq 0x128(%rbx), %rdi
movq %rdi, 0xb8(%rsp)
movq %rsi, 0x80(%rsp)
callq 0x5f46
leaq 0x270(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
testl %r15d, %r15d
cmovlel %r14d, %r15d
movq %r15, 0xc8(%rsp)
leaq 0x9394(%rip), %r15      # 0xe2f8
leaq 0xf0(%rsp), %r13
leaq 0x10(%rsp), %r12
movq %rbx, 0x28(%rsp)
cmpl $0x1f4, %r14d           # imm = 0x1F4
je 0x5a22
andq $0x0, 0x38(%rbx)
andl $0x0, 0x40(%rbx)
xorl %ebp, %ebp
movq %r14, 0x78(%rsp)
cmpl $0x64, %ebp
je 0x5876
movl 0x52762(%rip), %esi     # 0x57704
movq %rbx, %rdi
callq 0x600e
xorl %eax, %eax
movl %ebp, 0x70(%rsp)
cmpl 0xc8(%rsp), %eax
je 0x583d
movl %eax, 0x74(%rsp)
movl 0x5273d(%rip), %esi     # 0x57704
movq %rbx, %rdi
callq 0x600e
movl %eax, 0x10(%rsp)
movq 0x70(%rbx), %rsi
subq 0x68(%rbx), %rsi
shrq $0x2, %rsi
movq %rbx, %rdi
callq 0x600e
movslq %eax, %r14
movq 0x68(%rbx), %rax
movq 0x98(%rbx), %rcx
movl (%rax,%r14,4), %r13d
movl (%rcx,%r14,4), %ebp
movq 0x80(%rbx), %rax
movl (%rax,%r14,4), %eax
movl %eax, 0x14(%rsp)
callq 0x2070
cltd
pushq $0x64
popq %rcx
idivl %ecx
cmpl $0x18, %edx
movq %r13, 0x18(%rsp)
movq %rbp, 0x20(%rsp)
jg 0x506f
movq %rbp, %r15
shlq $0x20, %r15
orq %r13, %r15
leaq 0xf0(%rsp), %r13
movq %r15, 0xf0(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0x4534
movq %rax, %rdi
movq %r12, %rsi
callq 0x6052
testq %rax, %rax
je 0x50d5
movl 0x526a3(%rip), %esi     # 0x57704
movq %rbx, %rdi
callq 0x600e
movl %eax, 0x10(%rsp)
jmp 0x5038
cmpl $0x31, %edx
ja 0x5289
movq %rbp, %r15
shlq $0x20, %r15
movl 0x10(%rsp), %eax
leaq 0x98(%rsp), %r12
leaq 0xf0(%rsp), %r13
movl %eax, %eax
orq %r15, %rax
movq %rax, 0xf0(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0x4534
movq %rax, %rdi
leaq 0x14(%rsp), %rsi
callq 0x6052
testq %rax, %rax
je 0x52e8
movl 0x5263d(%rip), %esi     # 0x57704
movq %rbx, %rdi
callq 0x600e
movl %eax, 0x10(%rsp)
jmp 0x5093
movl 0x14(%rsp), %edx
movl 0x10(%rsp), %r9d
movl %ebp, (%rsp)
movq %rbx, %rdi
movq 0x18(%rsp), %r15
movl %r15d, %esi
movl %ebp, %ecx
movl %r15d, %r8d
movsd 0x3f1f(%rip), %xmm0     # 0x9018
callq 0x606c
leaq 0x98(%rsp), %r12
movq %r12, %rdi
movl %r15d, %esi
callq 0x3a1d
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
leaq 0x3fc5(%rip), %rdx      # 0x90e5
callq 0x381e
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movl %ebp, %esi
callq 0x3a1d
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %r15, %rdx
callq 0x39b6
leaq 0x90fd(%rip), %rdi      # 0xe248
movq %r13, %rsi
callq 0x612e
movq %r15, %rbp
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
movq %r13, %rdi
callq 0x2368
movq %rbp, %rdi
callq 0x2368
leaq 0x30(%rsp), %rdi
callq 0x2368
movq %r12, %rdi
callq 0x2368
cmpl $0x2, %r15d
jl 0x54e8
movq %r12, %rdi
movq 0x18(%rsp), %rsi
callq 0x3a1d
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
leaq 0x3f3c(%rip), %rdx      # 0x90e5
callq 0x381e
leaq 0x50(%rsp), %rbp
movq %rbp, %rdi
movq 0x20(%rsp), %rsi
callq 0x3a1d
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %rbp, %rdx
callq 0x39b6
leaq 0x9071(%rip), %rdi      # 0xe248
movq %r13, %rsi
callq 0x612e
movq %rax, %rbp
callq 0x2070
cltd
idivl %r15d
movslq %edx, %rax
movq (%rbp), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x10(%rsp)
movq %r13, %rdi
callq 0x2368
leaq 0x50(%rsp), %rdi
callq 0x2368
leaq 0x30(%rsp), %rdi
callq 0x2368
movq %r12, %rdi
callq 0x2368
movl 0x10(%rsp), %r9d
movl 0x14(%rsp), %edx
cmpl %edx, %r9d
movq 0x20(%rsp), %rbp
jne 0x54b5
movq %r12, %rdi
movq 0x18(%rsp), %rsi
callq 0x3a1d
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
leaq 0x3e95(%rip), %rdx      # 0x90e5
callq 0x381e
movq %rbp, %rsi
leaq 0x50(%rsp), %rbp
movq %rbp, %rdi
callq 0x3a1d
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %rbp, %rdx
callq 0x39b6
leaq 0x8fcc(%rip), %rdi      # 0xe248
movq %r13, %rsi
callq 0x612e
jmp 0x51df
movl 0x52471(%rip), %esi     # 0x57700
movq %rbx, %rdi
callq 0x600e
movl %eax, %ebp
movq 0x18(%rsp), %r15
movq %rbp, %rax
shlq $0x20, %rax
orq %r15, %rax
movq %rax, 0xf0(%rsp)
movq %rbx, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x4534
movq %rax, %rdi
leaq 0x14(%rsp), %rsi
callq 0x6052
testq %rax, %rax
je 0x548e
movl 0x52424(%rip), %esi     # 0x57700
movq %rbx, %rdi
callq 0x600e
movl %eax, %ebp
jmp 0x529e
movl 0x14(%rsp), %edx
movl 0x10(%rsp), %r8d
movl %ebp, (%rsp)
movq %rbx, %rdi
movq 0x18(%rsp), %rsi
movl %ebp, %ecx
movl %edx, %r9d
movsd 0x3d0f(%rip), %xmm0     # 0x9018
callq 0x606c
movl 0x14(%rsp), %esi
movq %r12, %rdi
callq 0x3a1d
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
leaq 0x3dbc(%rip), %rdx      # 0x90e5
callq 0x381e
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movl %ebp, %esi
callq 0x3a1d
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %r15, %rdx
callq 0x39b6
leaq 0x8f24(%rip), %rdi      # 0xe278
movq %r13, %rsi
callq 0x612e
movq %r15, %rbp
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
movq %r13, %rdi
callq 0x2368
movq %rbp, %rdi
callq 0x2368
leaq 0x30(%rsp), %rdi
callq 0x2368
movq %r12, %rdi
callq 0x2368
cmpl $0x2, %r15d
jl 0x54e8
movl 0x14(%rsp), %esi
movq %r12, %rdi
callq 0x3a1d
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
leaq 0x3d34(%rip), %rdx      # 0x90e5
callq 0x381e
leaq 0x50(%rsp), %rbp
movq %rbp, %rdi
movq 0x20(%rsp), %rsi
callq 0x3a1d
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %rbp, %rdx
callq 0x39b6
leaq 0x8e99(%rip), %rdi      # 0xe278
movq %r13, %rsi
callq 0x612e
movq %rax, %rbp
callq 0x2070
cltd
idivl %r15d
movslq %edx, %rax
movq (%rbp), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x10(%rsp)
movq %r13, %rdi
callq 0x2368
leaq 0x50(%rsp), %rdi
callq 0x2368
leaq 0x30(%rsp), %rdi
callq 0x2368
movq %r12, %rdi
callq 0x2368
movl 0x10(%rsp), %r8d
cmpl 0x18(%rsp), %r8d
movq 0x20(%rsp), %rbp
jne 0x54c7
movl 0x14(%rsp), %esi
movq %r12, %rdi
callq 0x3a1d
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
leaq 0x3c90(%rip), %rdx      # 0x90e5
callq 0x381e
movq %rbp, %rsi
leaq 0x50(%rsp), %rbp
movq %rbp, %rdi
callq 0x3a1d
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %rbp, %rdx
callq 0x39b6
leaq 0x8df7(%rip), %rdi      # 0xe278
movq %r13, %rsi
callq 0x612e
jmp 0x53e7
movl 0x14(%rsp), %edx
movl %ebp, (%rsp)
movq %rbx, %rdi
movl %r15d, %esi
movq 0x20(%rsp), %rcx
movl %r15d, %r8d
movl %edx, %r9d
movsd 0x3b6a(%rip), %xmm0     # 0x9018
callq 0x606c
jmp 0x54e8
movl %ebp, (%rsp)
movq %rbx, %rdi
movq 0x18(%rsp), %rsi
movl %ebp, %ecx
movl %esi, %r8d
jmp 0x54db
movl 0x14(%rsp), %edx
movl %ebp, (%rsp)
movq %rbx, %rdi
movq 0x18(%rsp), %rsi
movl %ebp, %ecx
movl %edx, %r9d
movsd 0x3b35(%rip), %xmm0     # 0x9018
callq 0x6194
movq 0xb0(%rbx), %rax
imulq $0x18, %r14, %r12
movq 0x8(%rax,%r12), %rcx
cmpq (%rax,%r12), %rcx
je 0x57b1
movl 0x521f8(%rip), %esi     # 0x57700
movq %rbx, %rdi
callq 0x600e
movl %eax, %ebp
leaq 0x14(%rsp), %r14
movq %rbp, %rax
shlq $0x20, %rax
addq 0x18(%rsp), %rax
movq %rax, 0xf0(%rsp)
movq %rbx, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x4534
movq %rax, %rdi
movq %r14, %rsi
callq 0x6052
testq %rax, %rax
je 0x555d
movl 0x521af(%rip), %esi     # 0x57700
movq %rbx, %rdi
callq 0x600e
movl %eax, %ebp
jmp 0x5517
xorl %r15d, %r15d
movq 0xb0(%rbx), %rax
movq (%rax,%r12), %rsi
movq 0x8(%rax,%r12), %rax
subq %rsi, %rax
sarq $0x5, %rax
cmpq %r15, %rax
jbe 0x57b1
movq %r15, %r14
shlq $0x5, %r14
addq %r14, %rsi
leaq 0x50(%rsp), %rdi
callq 0x444a
leaq 0x30(%rsp), %rdi
leaq 0x3c1a(%rip), %rsi      # 0x91ba
leaq 0xf0(%rsp), %rdx
callq 0x20a0
leaq 0x8c34(%rip), %rdi      # 0xe1e8
leaq 0x50(%rsp), %rsi
callq 0x6294
testq %rax, %rax
jne 0x566e
leaq 0xf0(%rsp), %rdi
callq 0x2240
xorl %ebx, %ebx
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbx, %rcx
jbe 0x5610
movl (%rax,%rbx,4), %esi
leaq 0xf0(%rsp), %rdi
callq 0x22f0
movq %rax, %rdi
leaq 0x3b27(%rip), %rsi      # 0x912d
callq 0x2190
incq %rbx
jmp 0x55d6
leaq 0x98(%rsp), %rbx
movq %rbx, %rdi
leaq 0xf8(%rsp), %rsi
callq 0x22a0
leaq 0x30(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2200
movq %rbx, %rdi
callq 0x2368
leaq 0x8ba1(%rip), %rdi      # 0xe1e8
leaq 0x50(%rsp), %rsi
callq 0x62ae
movq %rax, %rdi
movq %r13, %rsi
callq 0x20f0
leaq 0xf0(%rsp), %rdi
callq 0x2060
movq 0x28(%rsp), %rbx
leaq 0x8b73(%rip), %rdi      # 0xe1e8
leaq 0x50(%rsp), %rsi
callq 0x62ae
leaq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0x20f0
movq 0xb0(%rbx), %rax
movq (%rax,%r12), %rax
movsd 0x18(%rax,%r14), %xmm0
movsd %xmm0, 0xd0(%rsp)
leaq 0xf0(%rsp), %r13
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
callq 0x2250
movq 0x20(%rsp), %rax
movl %eax, 0x110(%rsp)
leaq 0x8b49(%rip), %rdi      # 0xe218
movq %r13, %rsi
callq 0x6314
movq %rax, %r14
movq %r13, %rdi
callq 0x2368
testq %r14, %r14
je 0x5729
movq %r13, %rdi
leaq 0x30(%rsp), %r14
movq %r14, %rsi
callq 0x2250
movq 0x20(%rsp), %rax
movl %eax, 0x110(%rsp)
leaq 0x8b0e(%rip), %rdi      # 0xe218
movq %r13, %rsi
callq 0x3c40
movsd (%rax), %xmm0
movsd %xmm0, 0x90(%rsp)
movq %r13, %rdi
callq 0x2368
jmp 0x573a
xorps %xmm0, %xmm0
movsd %xmm0, 0x90(%rsp)
leaq 0x30(%rsp), %r14
leaq 0xd8(%rsp), %r13
movq %r13, %rdi
leaq 0x50(%rsp), %rsi
callq 0x444a
movsd 0x90(%rsp), %xmm0
mulsd 0x38d8(%rip), %xmm0     # 0x9038
addsd 0x38d8(%rip), %xmm0     # 0x9040
movsd 0xd0(%rsp), %xmm1
mulsd %xmm0, %xmm1
movq %rbx, %rdi
movq 0x20(%rsp), %rsi
movl %ebp, %edx
movq %r13, %rcx
movsd 0x38be(%rip), %xmm0     # 0x9048
callq 0x632e
movq %r13, %rdi
callq 0x4498
movq %r14, %rdi
callq 0x2368
leaq 0x50(%rsp), %rdi
callq 0x4498
incq %r15
jmp 0x5560
movslq 0x18(%rsp), %rbx
movslq 0x20(%rsp), %rax
imulq $0x18, %rax, %rsi
movq 0x28(%rsp), %rax
addq 0x110(%rax), %rsi
movq 0x28(%rsp), %rdi
callq 0x4de6
imulq $0x18, %rbx, %rsi
movq 0x28(%rsp), %rbx
addq 0x128(%rbx), %rsi
movq %rbx, %rdi
callq 0x4de6
movslq 0x14(%rsp), %rax
imulq $0x18, %rax, %rsi
addq 0x128(%rbx), %rsi
movq %rbx, %rdi
callq 0x4de6
movslq 0x10(%rsp), %rax
imulq $0x18, %rax, %rsi
addq 0x128(%rbx), %rsi
movq %rbx, %rdi
callq 0x4de6
movl 0x74(%rsp), %eax
incl %eax
movq 0x78(%rsp), %r14
leaq 0x8ac9(%rip), %r15      # 0xe2f8
leaq 0x10(%rsp), %r12
movl 0x70(%rsp), %ebp
jmp 0x4fb0
movq 0x88(%rsp), %rdi
movq 0xc0(%rsp), %rsi
callq 0x5f46
movq 0x80(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x5f46
incl %ebp
leaq 0xf0(%rsp), %r13
jmp 0x4f93
movq 0x875b(%rip), %rdi      # 0xdfd8
leaq 0x3908(%rip), %rsi      # 0x918c
callq 0x2190
movq %rax, %rdi
movl %r14d, %esi
callq 0x22f0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21e0
movsd 0x38(%rbx), %xmm0
movq %rax, %rdi
callq 0x22c0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21e0
movl 0x40(%rbx), %esi
movq %rax, %rdi
callq 0x22f0
movq %rax, %rdi
callq 0x20d0
movq %r13, %rdi
leaq 0x38be(%rip), %rsi      # 0x9192
movq %r15, %rdx
callq 0x383d
movq 0xf0(%rsp), %rdi
leaq 0x38b8(%rip), %r14      # 0x91a3
movq %r14, %rsi
callq 0x21f0
movq %rax, %r12
movq %r13, %rdi
callq 0x2368
movq %r13, %rdi
leaq 0x389d(%rip), %rsi      # 0x91a5
movq %r15, %rdx
callq 0x383d
movq 0xf0(%rsp), %rdi
movq %r14, %rsi
callq 0x21f0
movq %rax, %rbp
movq %r13, %rdi
callq 0x2368
xorl %r14d, %r14d
movslq 0x51dcb(%rip), %rax     # 0x57700
cmpq %rax, %r14
jge 0x598f
imulq $0x18, %r14, %rbx
xorl %r15d, %r15d
movq 0x28(%rsp), %rax
movslq 0x30(%rax), %rax
cmpq %rax, %r15
jge 0x597a
movq 0x88(%rsp), %rax
movq (%rax), %rax
movq (%rax,%rbx), %rax
movsd (%rax,%r15,8), %xmm0
movq %r12, %rdi
leaq 0x3846(%rip), %rsi      # 0x91b4
movb $0x1, %al
callq 0x2260
incq %r15
jmp 0x5941
pushq $0xa
popq %rdi
movq %r12, %rsi
callq 0x2220
incq %r14
movq 0x28(%rsp), %rbx
jmp 0x592e
xorl %r14d, %r14d
movslq 0x51d6b(%rip), %rax     # 0x57704
cmpq %rax, %r14
jge 0x59f1
xorl %ebx, %ebx
movq 0x28(%rsp), %rax
movslq 0x30(%rax), %rax
cmpq %rax, %rbx
jge 0x59dc
movq 0x80(%rsp), %rax
movq (%rax), %rax
imulq $0x18, %r14, %rcx
movq (%rax,%rcx), %rax
movsd (%rax,%rbx,8), %xmm0
movq %rbp, %rdi
leaq 0x37e4(%rip), %rsi      # 0x91b4
movb $0x1, %al
callq 0x2260
incq %rbx
jmp 0x59a0
pushq $0xa
popq %rdi
movq %rbp, %rsi
callq 0x2220
incq %r14
movq 0x28(%rsp), %rbx
jmp 0x5992
movq %r12, %rdi
callq 0x21a0
movq %rbp, %rdi
callq 0x21a0
movq 0x78(%rsp), %r14
incl %r14d
leaq 0x88e8(%rip), %r15      # 0xe2f8
leaq 0x10(%rsp), %r12
leaq 0xf0(%rsp), %r13
jmp 0x4f76
leaq 0x268(%rsp), %rdi
callq 0x413a
addq $0x298, %rsp            # imm = 0x298
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5b29
jmp 0x5b29
jmp 0x5b29
jmp 0x5b29
jmp 0x5aaa
jmp 0x5abc
jmp 0x5ac3
jmp 0x5b29
jmp 0x5adc
jmp 0x5b29
jmp 0x5abc
jmp 0x5aaa
jmp 0x5ac3
jmp 0x5abc
jmp 0x5adc
jmp 0x5aaa
jmp 0x5ac3
jmp 0x5adc
jmp 0x5b29
jmp 0x5b29
jmp 0x5aaa
jmp 0x5adc
jmp 0x5ac3
jmp 0x5b29
jmp 0x5abc
jmp 0x5b29
jmp 0x5ac3
jmp 0x5aaa
jmp 0x5b29
jmp 0x5adc
jmp 0x5abc
jmp 0x5b33
jmp 0x5b2e
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x2368
jmp 0x5ac6
movq %rax, %rbx
jmp 0x5ad0
jmp 0x5b29
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x2368
leaq 0x30(%rsp), %rdi
callq 0x2368
jmp 0x5adf
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x2368
jmp 0x5b57
jmp 0x5b2e
jmp 0x5af8
jmp 0x5b33
jmp 0x5b29
jmp 0x5b29
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x2368
jmp 0x5b43
jmp 0x5b2e
jmp 0x5b2e
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
callq 0x4498
jmp 0x5b43
jmp 0x5b29
movq %rax, %rbx
jmp 0x5b4d
jmp 0x5b29
movq %rax, %rbx
jmp 0x5b57
movq %rax, %rbx
jmp 0x5b43
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x2060
leaq 0x30(%rsp), %rdi
callq 0x2368
leaq 0x50(%rsp), %rdi
callq 0x4498
leaq 0x268(%rsp), %rdi
callq 0x413a
movq %rbx, %rdi
callq 0x2300