// File: richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::generateTopology(unsigned int)
vector<vector<unsigned int> > Swarm::generateTopology(unsigned int populationSize) {
	Timer tmr;

	vector<vector<unsigned int> > allParticles (populationSize + 1);

	if (options.fitType == "pso" || options.fitType == "de") {

		if (options.verbosity >= 3) {
			cout << "Generating initial particles with a " << options.topology << " topology" << endl;
		}

		if (options.topology == "fullyconnected") {
			for (unsigned int p = 1; p <= populationSize; ++p) {
				vector<unsigned int> connections;
				for (unsigned int c = 1; c <= populationSize; ++c) {
					if (c != p) {
						connections.push_back(c);
					}
				}
				allParticles[p] = connections;
			}
		}
		else if (options.topology == "ring") {

			// Connect the first particle manually
			unsigned int firstConnection[] = {2, populationSize};
			allParticles[1] = vector<unsigned int> (firstConnection, firstConnection + sizeof(firstConnection) / sizeof(firstConnection[0]));

			vector<unsigned int> connections;
			for (unsigned int p = 2; p <= populationSize - 1; ++p) {

				connections.clear();
				// Connect to particle before, and particle after
				connections.push_back(p-1);
				connections.push_back(p+1);
				allParticles[p] = connections;

			}

			// Connect the last particle manually
			unsigned int lastConnection[] = {populationSize - 1, 1};
			allParticles[populationSize] = vector<unsigned int> (lastConnection, lastConnection + sizeof(lastConnection) / sizeof(lastConnection[0]));
		}
		else if (options.topology == "star") {
			vector<unsigned int> connections;

			// First connect the central particle to all others
			for (unsigned int c = 2; c <= populationSize; ++c) {
				connections.push_back(c);
			}
			allParticles[1] = connections;

			// Then connect all particles to the central particles
			for (unsigned int p = 2; p <= populationSize; ++p) {
				connections.clear();
				connections.push_back(1);
				allParticles[p] = connections;
			}
		}
		else if (options.topology == "mesh") {

			unsigned int desiredArea = populationSize;
			unsigned int divisor = ceil(sqrt(desiredArea));
			if (divisor != 0) {
			  while(desiredArea % divisor != 0) {
				  ++divisor;
			  }
			}
			unsigned int length = divisor;
			unsigned int width = desiredArea / divisor;

			// Construct a matrix of dimension length x width
			// and fill it with particles
			int p = 0;
			vector<vector<unsigned int> > matrix(length, vector<unsigned int>(width));
			for (unsigned int x = 0; x < length; ++x) {
				for (unsigned int y = 0; y < width; ++y) {
					matrix[x][y] = ++p;
				}
			}

			// Make our connections
			vector<unsigned int> connections;
			for (unsigned int x = 0; x < length; ++x) {
				for (unsigned int y = 0; y < width; ++y) {
					connections.clear();
					p = matrix[x][y];

					// If we're on the left bound
					if (x == 0) {
						// Add the particle to the right of us
						connections.push_back(matrix[x+1][y]);
					}
					// If we're on the right bound
					else if (x == length - 1) {
						// Add the particle to the left of us
						connections.push_back(matrix[x-1][y]);
					}
					// If we're in a center
					else {
						// Add the particles on either side of us
						connections.push_back(matrix[x-1][y]);
						connections.push_back(matrix[x+1][y]);
					}

					if (y == 0) {
						connections.push_back(matrix[x][y+1]);
					}
					else if (y == width - 1) {
						connections.push_back(matrix[x][y-1]);
					}
					else {
						connections.push_back(matrix[x][y-1]);
						connections.push_back(matrix[x][y+1]);
					}
					allParticles[p] = connections;
				}
			}
		}
		else if (options.topology == "toroidal") {
			unsigned int desiredArea = populationSize;
			unsigned int divisor = ceil(sqrt(desiredArea));
			if (divisor != 0) {
			  while(desiredArea % divisor != 0) {
				  ++divisor;
			  }
			}
			unsigned int length = divisor;
			unsigned int width = desiredArea / divisor;

			// Construct a matrix of dimensions length x width
			// and fill it with particles
			unsigned int p = 0;
			vector<vector<unsigned int> > matrix(length, vector<unsigned int>(width));
			for (unsigned int x = 0; x < length; ++x) {
				for (unsigned int y = 0; y < width; ++y) {
					matrix[x][y] = ++p;
				}
			}

			// Make our connections
			vector<unsigned int> connections;
			for (unsigned int x = 0; x < length; ++x) {
				for (unsigned int y = 0; y < width; ++y) {
					connections.clear();
					p = matrix[x][y];

					if (x == 0) {
						connections.push_back(matrix[x+1][y]);
						connections.push_back(matrix[length-1][y]);
					}
					else if (x == (length - 1)) {
						connections.push_back(matrix[x-1][y]);
						connections.push_back(matrix[0][y]);
					}
					else {
						connections.push_back(matrix[x-1][y]);
						connections.push_back(matrix[x+1][y]);
					}

					if (y == 0) {
						connections.push_back(matrix[x][y+1]);
						connections.push_back(matrix[x][width-1]);
					}
					else if (y == (width - 1)) {
						connections.push_back(matrix[x][y-1]);
						connections.push_back(matrix[x][0]);
					}
					else {
						connections.push_back(matrix[x][y-1]);
						connections.push_back(matrix[x][y+1]);
					}
					allParticles[p] = connections;
				}
			}
		}
		else if (options.topology == "tree") {
			unsigned int usedParticles = 1;
			unsigned int numLevels = 1;
			unsigned int previousLevel = 1;
			unsigned int currentLevel;

			// Determine number of levels in tree
			while (usedParticles < populationSize) {
				currentLevel = previousLevel*2;
				usedParticles += currentLevel;
				previousLevel = currentLevel;
				++numLevels;
			}

			vector<vector<unsigned int> > tree(numLevels, vector<unsigned int>());
			usedParticles = 1;
			currentLevel = 1;
			unsigned int currentParticle = 2;
			bool doneFilling = false;

			// Construct tree and fill it with particles
			tree[0].push_back(1);

			// For each level in tree
			for (unsigned int level = 1; level <= numLevels; ++level) {
				// Current level's particle count is double that of previous level
				currentLevel = currentLevel * 2;

				// For each slot in current level
				for (unsigned int i = 0; i < currentLevel; ++i) {
					// Fill slot with particle
					tree[level].push_back(currentParticle);
					++currentParticle;

					// Make sure we're not filling past our swarm size
					if (currentParticle == populationSize + 1) {
						doneFilling = true;
						break;
					}
				}
				if (doneFilling) {
					break;
				}
			}

			// For each level in tree
			for (unsigned int level = 1; level < numLevels; ++level) {
				int prevGroupCounter = 0;
				int particleCounter = 0;

				// For each particle in level
				for (unsigned int p = 0; p < tree[level].size(); ++p) {

					// Connect current particle (p) with proper particle in last level
					allParticles[tree[level][p]].push_back(tree[level-1][prevGroupCounter]);

					// Connect particle in last level to current particle (p)
					allParticles[tree[level-1][prevGroupCounter]].push_back(tree[level][p]);

					// If our particle counter reaches two, we're in a new pair in (or new particle
					// in previous level)
					if (++particleCounter == 2) {
						particleCounter = 0;
						++prevGroupCounter;
					}
				}
			}
		}
		else {
			outputError("Error: BioNetFit did not recognize your specified topology of: " + options.topology);
		}
	}

	/*
	int p = 0;
	for (auto o = allParticles.begin(); o != allParticles.end(); ++o) {
		cout << p << " is connected to:" << endl;
		for (auto i = (*o).begin(); i != (*o).end(); ++i) {
			cout << *i << endl;
		}
		++p;
	}
	 */

	double t = tmr.elapsed();
	if (options.verbosity >= 3) {
		cout << "Particle creation took " << t << " seconds" << endl;
	}

	return allParticles;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3c0, %rsp            # imm = 0x3C0
movq %rdi, -0x288(%rbp)
movq %rdi, %rax
movq %rax, -0x298(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x290(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x120e90
movb $0x0, -0x21(%rbp)
movl -0x14(%rbp), %eax
incl %eax
movq %rax, -0x280(%rbp)
leaq -0x22(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x122820
movq -0x288(%rbp), %rdi
movq -0x280(%rbp), %rsi
movq -0x278(%rbp), %rdx
callq 0x122840
jmp 0xfa457
leaq -0x22(%rbp), %rdi
callq 0x1228b0
movq -0x290(%rbp), %rdi
addq $0x14e0, %rdi           # imm = 0x14E0
leaq 0xe75cd(%rip), %rsi     # 0x1e1a42
callq 0x44930
movb %al, -0x299(%rbp)
jmp 0xfa482
movb -0x299(%rbp), %al
testb $0x1, %al
jne 0xfa4bf
jmp 0xfa48e
movq -0x290(%rbp), %rdi
addq $0x14e0, %rdi           # imm = 0x14E0
leaq 0x117058(%rip), %rsi    # 0x2114fb
callq 0x44930
movb %al, -0x29a(%rbp)
jmp 0xfa4b0
movb -0x29a(%rbp), %al
testb $0x1, %al
jne 0xfa4bf
jmp 0xfba38
movq -0x290(%rbp), %rax
cmpl $0x3, 0x1614(%rax)
jb 0xfa570
movq 0x1daa76(%rip), %rdi    # 0x2d4f50
leaq 0xe7417(%rip), %rsi     # 0x1e18f8
callq 0x2ff50
movq %rax, -0x2a8(%rbp)
jmp 0xfa4ef
movq -0x2a8(%rbp), %rdi
movq -0x290(%rbp), %rsi
addq $0x16b8, %rsi           # imm = 0x16B8
callq 0x2f780
movq %rax, -0x2b0(%rbp)
jmp 0xfa512
movq -0x2b0(%rbp), %rdi
leaq 0xe8f0e(%rip), %rsi     # 0x1e342e
callq 0x2ff50
movq %rax, -0x2b8(%rbp)
jmp 0xfa52e
movq -0x2b8(%rbp), %rdi
movq 0x1daa8c(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xfa543
jmp 0xfa570
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x22(%rbp), %rdi
callq 0x1228b0
jmp 0xfbb09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xfbafd
movq -0x290(%rbp), %rdi
addq $0x16b8, %rdi           # imm = 0x16B8
leaq 0xe6959(%rip), %rsi     # 0x1e0ede
callq 0x44930
movb %al, -0x2b9(%rbp)
jmp 0xfa592
movb -0x2b9(%rbp), %al
testb $0x1, %al
jne 0xfa5a1
jmp 0xfa647
movl $0x1, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x14(%rbp), %eax
ja 0xfa642
leaq -0x50(%rbp), %rdi
callq 0xb2010
movl $0x1, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl -0x14(%rbp), %eax
ja 0xfa60c
movl -0x54(%rbp), %eax
cmpl -0x38(%rbp), %eax
je 0xfa5ff
leaq -0x50(%rbp), %rdi
leaq -0x54(%rbp), %rsi
callq 0xb4640
jmp 0xfa5e3
jmp 0xfa5ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xb2400
jmp 0xfbafd
jmp 0xfa601
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0xfa5c4
movq -0x288(%rbp), %rdi
movl -0x38(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0x50(%rbp), %rsi
callq 0x1228f0
jmp 0xfa62b
leaq -0x50(%rbp), %rdi
callq 0xb2400
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0xfa5a8
jmp 0xfba36
movq -0x290(%rbp), %rdi
addq $0x16b8, %rdi           # imm = 0x16B8
leaq 0x117f7f(%rip), %rsi    # 0x2125db
callq 0x44930
movb %al, -0x2ba(%rbp)
jmp 0xfa669
movb -0x2ba(%rbp), %al
testb $0x1, %al
jne 0xfa678
jmp 0xfa8a0
movl $0x2, -0x5c(%rbp)
movl -0x14(%rbp), %eax
movl %eax, -0x58(%rbp)
leaq -0x54(%rbp), %rax
movq %rax, -0x2d0(%rbp)
leaq -0x79(%rbp), %rdi
movq %rdi, -0x2c8(%rbp)
callq 0xb4e90
movq -0x2d0(%rbp), %rdx
movq -0x2c8(%rbp), %rcx
leaq -0x78(%rbp), %rdi
leaq -0x5c(%rbp), %rsi
callq 0x122b40
jmp 0xfa6bd
movq -0x288(%rbp), %rdi
movl $0x1, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0x78(%rbp), %rsi
callq 0x122bc0
leaq -0x78(%rbp), %rdi
callq 0xb2400
leaq -0x79(%rbp), %rdi
callq 0xb8c40
leaq -0x98(%rbp), %rdi
callq 0xb2010
movl $0x2, -0x9c(%rbp)
movl -0x9c(%rbp), %eax
movl -0x14(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
ja 0xfa7d5
leaq -0x98(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
callq 0x122bf0
movq -0x2d8(%rbp), %rdi
movl -0x9c(%rbp), %eax
decl %eax
movl %eax, -0xa0(%rbp)
leaq -0xa0(%rbp), %rsi
callq 0x122310
jmp 0xfa74c
movl -0x9c(%rbp), %eax
incl %eax
movl %eax, -0xa4(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0xa4(%rbp), %rsi
callq 0x122310
jmp 0xfa76f
movq -0x288(%rbp), %rdi
movl -0x9c(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0x98(%rbp), %rsi
callq 0x1228f0
jmp 0xfa794
jmp 0xfa796
movl -0x9c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9c(%rbp)
jmp 0xfa702
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x79(%rbp), %rdi
callq 0xb8c40
jmp 0xfbafd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xfa88f
movl -0x14(%rbp), %eax
decl %eax
movl %eax, -0xac(%rbp)
movl $0x1, -0xa8(%rbp)
leaq -0xa4(%rbp), %rax
movq %rax, -0x2e8(%rbp)
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
callq 0xb4e90
movq -0x2e8(%rbp), %rdx
movq -0x2e0(%rbp), %rcx
leaq -0xc8(%rbp), %rdi
leaq -0xac(%rbp), %rsi
callq 0x122b40
jmp 0xfa82e
movq -0x288(%rbp), %rdi
movl -0x14(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0xc8(%rbp), %rsi
callq 0x122bc0
leaq -0xc8(%rbp), %rdi
callq 0xb2400
leaq -0xc9(%rbp), %rdi
callq 0xb8c40
leaq -0x98(%rbp), %rdi
callq 0xb2400
jmp 0xfba34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xc9(%rbp), %rdi
callq 0xb8c40
leaq -0x98(%rbp), %rdi
callq 0xb2400
jmp 0xfbafd
movq -0x290(%rbp), %rdi
addq $0x16b8, %rdi           # imm = 0x16B8
leaq 0xe7068(%rip), %rsi     # 0x1e191d
callq 0x44930
movb %al, -0x2e9(%rbp)
jmp 0xfa8c2
movb -0x2e9(%rbp), %al
testb $0x1, %al
jne 0xfa8d1
jmp 0xfa9e9
leaq -0xe8(%rbp), %rdi
callq 0xb2010
movl $0x2, -0xec(%rbp)
movl -0xec(%rbp), %eax
cmpl -0x14(%rbp), %eax
ja 0xfa937
leaq -0xe8(%rbp), %rdi
leaq -0xec(%rbp), %rsi
callq 0xb4640
jmp 0xfa907
jmp 0xfa909
movl -0xec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xec(%rbp)
jmp 0xfa8e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0xb2400
jmp 0xfbafd
movq -0x288(%rbp), %rdi
movl $0x1, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x1228f0
jmp 0xfa959
movl $0x2, -0xf0(%rbp)
movl -0xf0(%rbp), %eax
cmpl -0x14(%rbp), %eax
ja 0xfa9d8
leaq -0xe8(%rbp), %rdi
movq %rdi, -0x2f8(%rbp)
callq 0x122bf0
movq -0x2f8(%rbp), %rdi
movl $0x1, -0xf4(%rbp)
leaq -0xf4(%rbp), %rsi
callq 0x122310
jmp 0xfa9a0
movq -0x288(%rbp), %rdi
movl -0xf0(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x1228f0
jmp 0xfa9c5
jmp 0xfa9c7
movl -0xf0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf0(%rbp)
jmp 0xfa963
leaq -0xe8(%rbp), %rdi
callq 0xb2400
jmp 0xfba32
movq -0x290(%rbp), %rdi
addq $0x16b8, %rdi           # imm = 0x16B8
leaq 0xe6f24(%rip), %rsi     # 0x1e1922
callq 0x44930
movb %al, -0x2f9(%rbp)
jmp 0xfaa0b
movb -0x2f9(%rbp), %al
testb $0x1, %al
jne 0xfaa1a
jmp 0xfaf4b
movl -0x14(%rbp), %eax
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %edi
callq 0x122c10
movsd %xmm0, -0x308(%rbp)
jmp 0xfaa38
movsd -0x308(%rbp), %xmm0
callq 0x30e00
cvttsd2si %xmm0, %rax
movl %eax, -0xfc(%rbp)
cmpl $0x0, -0xfc(%rbp)
je 0xfaa81
jmp 0xfaa5b
movl -0xf8(%rbp), %eax
xorl %edx, %edx
divl -0xfc(%rbp)
cmpl $0x0, %edx
je 0xfaa7f
movl -0xfc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xfc(%rbp)
jmp 0xfaa5b
jmp 0xfaa81
movl -0xfc(%rbp), %eax
movl %eax, -0x100(%rbp)
movl -0xf8(%rbp), %eax
movl -0xfc(%rbp), %ecx
xorl %edx, %edx
divl %ecx
movl %eax, -0x104(%rbp)
movl $0x0, -0x108(%rbp)
movl -0x100(%rbp), %eax
movq %rax, -0x320(%rbp)
movl -0x104(%rbp), %eax
movq %rax, -0x318(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x310(%rbp)
callq 0xb4e90
movq -0x318(%rbp), %rsi
movq -0x310(%rbp), %rdx
leaq -0x138(%rbp), %rdi
callq 0x122c30
jmp 0xfaaf6
leaq -0x13a(%rbp), %rdi
movq %rdi, -0x328(%rbp)
callq 0x122820
movq -0x320(%rbp), %rsi
movq -0x328(%rbp), %rcx
leaq -0x120(%rbp), %rdi
leaq -0x138(%rbp), %rdx
callq 0x122ca0
jmp 0xfab2c
leaq -0x13a(%rbp), %rdi
callq 0x1228b0
leaq -0x138(%rbp), %rdi
callq 0xb2400
leaq -0x139(%rbp), %rdi
callq 0xb8c40
movl $0x0, -0x140(%rbp)
movl -0x140(%rbp), %eax
cmpl -0x100(%rbp), %eax
jae 0xfac33
movl $0x0, -0x144(%rbp)
movl -0x144(%rbp), %eax
cmpl -0x104(%rbp), %eax
jae 0xfac1d
movl -0x108(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x32c(%rbp)
movl %eax, -0x108(%rbp)
movl -0x140(%rbp), %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x144(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movl -0x32c(%rbp), %ecx
movl %ecx, (%rax)
movl -0x144(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x144(%rbp)
jmp 0xfab76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xfac0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x13a(%rbp), %rdi
callq 0x1228b0
leaq -0x138(%rbp), %rdi
callq 0xb2400
leaq -0x139(%rbp), %rdi
callq 0xb8c40
jmp 0xfbafd
jmp 0xfac1f
movl -0x140(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x140(%rbp)
jmp 0xfab5a
leaq -0x160(%rbp), %rdi
callq 0xb2010
movl $0x0, -0x164(%rbp)
movl -0x164(%rbp), %eax
cmpl -0x100(%rbp), %eax
jae 0xfaf2e
movl $0x0, -0x168(%rbp)
movl -0x168(%rbp), %eax
cmpl -0x104(%rbp), %eax
jae 0xfaf18
leaq -0x160(%rbp), %rdi
callq 0x122bf0
movl -0x164(%rbp), %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
movl %eax, -0x108(%rbp)
cmpl $0x0, -0x164(%rbp)
jne 0xfad1d
movl -0x164(%rbp), %eax
incl %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfacef
jmp 0xfaddb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x160(%rbp), %rdi
callq 0xb2400
leaq -0x120(%rbp), %rdi
callq 0x121030
jmp 0xfbafd
movl -0x164(%rbp), %eax
movl -0x100(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0xfad69
movl -0x164(%rbp), %eax
decl %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfad67
jmp 0xfadd9
movl -0x164(%rbp), %eax
decl %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfada0
movl -0x164(%rbp), %eax
incl %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfadd7
jmp 0xfadd9
jmp 0xfaddb
cmpl $0x0, -0x168(%rbp)
jne 0xfae20
movl -0x164(%rbp), %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
incl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfae1b
jmp 0xfaede
movl -0x168(%rbp), %eax
movl -0x104(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0xfae6c
movl -0x164(%rbp), %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
decl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfae6a
jmp 0xfaedc
movl -0x164(%rbp), %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
decl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfaea3
movl -0x164(%rbp), %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x168(%rbp), %eax
incl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x160(%rbp), %rdi
callq 0xb4640
jmp 0xfaeda
jmp 0xfaedc
jmp 0xfaede
movq -0x288(%rbp), %rdi
movslq -0x108(%rbp), %rsi
callq 0x1228d0
movq %rax, %rdi
leaq -0x160(%rbp), %rsi
callq 0x1228f0
jmp 0xfaf02
jmp 0xfaf04
movl -0x168(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x168(%rbp)
jmp 0xfac65
jmp 0xfaf1a
movl -0x164(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x164(%rbp)
jmp 0xfac49
leaq -0x160(%rbp), %rdi
callq 0xb2400
leaq -0x120(%rbp), %rdi
callq 0x121030
jmp 0xfba30
movq -0x290(%rbp), %rdi
addq $0x16b8, %rdi           # imm = 0x16B8
leaq 0xe69c7(%rip), %rsi     # 0x1e1927
callq 0x44930
movb %al, -0x32d(%rbp)
jmp 0xfaf6d
movb -0x32d(%rbp), %al
testb $0x1, %al
jne 0xfaf7c
jmp 0xfb582
movl -0x14(%rbp), %eax
movl %eax, -0x16c(%rbp)
movl -0x16c(%rbp), %edi
callq 0x122c10
movsd %xmm0, -0x338(%rbp)
jmp 0xfaf9a
movsd -0x338(%rbp), %xmm0
callq 0x30e00
cvttsd2si %xmm0, %rax
movl %eax, -0x170(%rbp)
cmpl $0x0, -0x170(%rbp)
je 0xfafe3
jmp 0xfafbd
movl -0x16c(%rbp), %eax
xorl %edx, %edx
divl -0x170(%rbp)
cmpl $0x0, %edx
je 0xfafe1
movl -0x170(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x170(%rbp)
jmp 0xfafbd
jmp 0xfafe3
movl -0x170(%rbp), %eax
movl %eax, -0x174(%rbp)
movl -0x16c(%rbp), %eax
movl -0x170(%rbp), %ecx
xorl %edx, %edx
divl %ecx
movl %eax, -0x178(%rbp)
movl $0x0, -0x17c(%rbp)
movl -0x174(%rbp), %eax
movq %rax, -0x350(%rbp)
movl -0x178(%rbp), %eax
movq %rax, -0x348(%rbp)
leaq -0x1b1(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0xb4e90
movq -0x348(%rbp), %rsi
movq -0x340(%rbp), %rdx
leaq -0x1b0(%rbp), %rdi
callq 0x122c30
jmp 0xfb058
leaq -0x1b2(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0x122820
movq -0x350(%rbp), %rsi
movq -0x358(%rbp), %rcx
leaq -0x198(%rbp), %rdi
leaq -0x1b0(%rbp), %rdx
callq 0x122ca0
jmp 0xfb08e
leaq -0x1b2(%rbp), %rdi
callq 0x1228b0
leaq -0x1b0(%rbp), %rdi
callq 0xb2400
leaq -0x1b1(%rbp), %rdi
callq 0xb8c40
movl $0x0, -0x1b8(%rbp)
movl -0x1b8(%rbp), %eax
cmpl -0x174(%rbp), %eax
jae 0xfb195
movl $0x0, -0x1bc(%rbp)
movl -0x1bc(%rbp), %eax
cmpl -0x178(%rbp), %eax
jae 0xfb17f
movl -0x17c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x35c(%rbp)
movl %eax, -0x17c(%rbp)
movl -0x1b8(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1bc(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movl -0x35c(%rbp), %ecx
movl %ecx, (%rax)
movl -0x1bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1bc(%rbp)
jmp 0xfb0d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xfb16e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1b2(%rbp), %rdi
callq 0x1228b0
leaq -0x1b0(%rbp), %rdi
callq 0xb2400
leaq -0x1b1(%rbp), %rdi
callq 0xb8c40
jmp 0xfbafd
jmp 0xfb181
movl -0x1b8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b8(%rbp)
jmp 0xfb0bc
leaq -0x1d8(%rbp), %rdi
callq 0xb2010
movl $0x0, -0x1dc(%rbp)
movl -0x1dc(%rbp), %eax
cmpl -0x174(%rbp), %eax
jae 0xfb565
movl $0x0, -0x1e0(%rbp)
movl -0x1e0(%rbp), %eax
cmpl -0x178(%rbp), %eax
jae 0xfb54f
leaq -0x1d8(%rbp), %rdi
callq 0x122bf0
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
movl %eax, -0x17c(%rbp)
cmpl $0x0, -0x1dc(%rbp)
jne 0xfb2ba
movl -0x1dc(%rbp), %eax
incl %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb255
movl -0x174(%rbp), %eax
decl %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb28c
jmp 0xfb3a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0xb2400
leaq -0x198(%rbp), %rdi
callq 0x121030
jmp 0xfbafd
movl -0x1dc(%rbp), %eax
movl -0x174(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0xfb337
movl -0x1dc(%rbp), %eax
decl %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb304
xorl %eax, %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb335
jmp 0xfb3a7
movl -0x1dc(%rbp), %eax
decl %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb36e
movl -0x1dc(%rbp), %eax
incl %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb3a5
jmp 0xfb3a7
jmp 0xfb3a9
cmpl $0x0, -0x1e0(%rbp)
jne 0xfb425
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
incl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb3e9
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x178(%rbp), %eax
decl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb420
jmp 0xfb514
movl -0x1e0(%rbp), %eax
movl -0x178(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0xfb4a2
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
decl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb46f
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb4a0
jmp 0xfb512
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
decl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb4d9
movl -0x1dc(%rbp), %eax
movl %eax, %esi
leaq -0x198(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl -0x1e0(%rbp), %eax
incl %eax
movl %eax, %esi
callq 0xccc10
movq %rax, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb4640
jmp 0xfb510
jmp 0xfb512
jmp 0xfb514
movq -0x288(%rbp), %rdi
movl -0x17c(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x1228f0
jmp 0xfb539
jmp 0xfb53b
movl -0x1e0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e0(%rbp)
jmp 0xfb1c7
jmp 0xfb551
movl -0x1dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1dc(%rbp)
jmp 0xfb1ab
leaq -0x1d8(%rbp), %rdi
callq 0xb2400
leaq -0x198(%rbp), %rdi
callq 0x121030
jmp 0xfba2e
movq -0x290(%rbp), %rdi
addq $0x16b8, %rdi           # imm = 0x16B8
leaq 0xe6399(%rip), %rsi     # 0x1e1930
callq 0x44930
movb %al, -0x35d(%rbp)
jmp 0xfb5a4
movb -0x35d(%rbp), %al
testb $0x1, %al
jne 0xfb5b3
jmp 0xfb9c9
movl $0x1, -0x1e4(%rbp)
movl $0x1, -0x1e8(%rbp)
movl $0x1, -0x1ec(%rbp)
movl -0x1e4(%rbp), %eax
cmpl -0x14(%rbp), %eax
jae 0xfb619
movl -0x1ec(%rbp), %eax
shll %eax
movl %eax, -0x1f0(%rbp)
movl -0x1f0(%rbp), %eax
addl -0x1e4(%rbp), %eax
movl %eax, -0x1e4(%rbp)
movl -0x1f0(%rbp), %eax
movl %eax, -0x1ec(%rbp)
movl -0x1e8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e8(%rbp)
jmp 0xfb5d1
movl -0x1e8(%rbp), %eax
movq %rax, -0x378(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x220(%rbp)
movq $0x0, -0x210(%rbp)
leaq -0x220(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0xb2010
leaq -0x221(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0x122820
movq -0x378(%rbp), %rsi
movq -0x370(%rbp), %rdx
movq -0x368(%rbp), %rcx
leaq -0x208(%rbp), %rdi
callq 0x122ca0
jmp 0xfb684
leaq -0x221(%rbp), %rdi
callq 0x1228b0
leaq -0x220(%rbp), %rdi
callq 0xb2400
movl $0x1, -0x1e4(%rbp)
movl $0x1, -0x1f0(%rbp)
movl $0x2, -0x228(%rbp)
movb $0x0, -0x229(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x208(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
movl $0x1, -0x230(%rbp)
leaq -0x230(%rbp), %rsi
callq 0x122310
jmp 0xfb6ec
movl $0x1, -0x234(%rbp)
movl -0x234(%rbp), %eax
cmpl -0x1e8(%rbp), %eax
ja 0xfb7fc
movl -0x1f0(%rbp), %eax
shll %eax
movl %eax, -0x1f0(%rbp)
movl $0x0, -0x238(%rbp)
movl -0x238(%rbp), %eax
cmpl -0x1f0(%rbp), %eax
jae 0xfb7db
movl -0x234(%rbp), %eax
movl %eax, %esi
leaq -0x208(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
leaq -0x228(%rbp), %rsi
callq 0xb4640
jmp 0xfb757
movl -0x228(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x228(%rbp)
movl -0x228(%rbp), %eax
movl -0x14(%rbp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0xfb7c5
movb $0x1, -0x229(%rbp)
jmp 0xfb7db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x221(%rbp), %rdi
callq 0x1228b0
leaq -0x220(%rbp), %rdi
callq 0xb2400
jmp 0xfbafd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x121030
jmp 0xfbafd
jmp 0xfb7c7
movl -0x238(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x238(%rbp)
jmp 0xfb720
testb $0x1, -0x229(%rbp)
je 0xfb7e6
jmp 0xfb7fc
jmp 0xfb7e8
movl -0x234(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x234(%rbp)
jmp 0xfb6f6
movl $0x1, -0x23c(%rbp)
movl -0x23c(%rbp), %eax
cmpl -0x1e8(%rbp), %eax
jae 0xfb9bb
movl $0x0, -0x240(%rbp)
movl $0x0, -0x244(%rbp)
movl $0x0, -0x248(%rbp)
movl -0x248(%rbp), %eax
movq %rax, -0x380(%rbp)
movl -0x23c(%rbp), %eax
movl %eax, %esi
leaq -0x208(%rbp), %rdi
callq 0x1228d0
movq %rax, %rdi
callq 0xb46f0
movq %rax, %rcx
movq -0x380(%rbp), %rax
cmpq %rcx, %rax
jae 0xfb9a5
movl -0x23c(%rbp), %eax
movl %eax, %esi
leaq -0x208(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0x1228d0
movq %rax, %rdi
movl -0x248(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq -0x288(%rbp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0x1228d0
movq -0x390(%rbp), %rdi
movq %rax, -0x388(%rbp)
movl -0x23c(%rbp), %eax
decl %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x240(%rbp), %rsi
callq 0xccc10
movq -0x388(%rbp), %rdi
movq %rax, %rsi
callq 0xb4640
jmp 0xfb8ea
movl -0x23c(%rbp), %eax
decl %eax
movl %eax, %esi
leaq -0x208(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0x1228d0
movq %rax, %rdi
movslq -0x240(%rbp), %rsi
callq 0xccc10
movq -0x288(%rbp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0x1228d0
movq -0x3a0(%rbp), %rdi
movq %rax, -0x398(%rbp)
movl -0x23c(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movl -0x248(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq -0x398(%rbp), %rdi
movq %rax, %rsi
callq 0xb4640
jmp 0xfb962
movl -0x244(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x244(%rbp)
cmpl $0x2, %eax
jne 0xfb98f
movl $0x0, -0x244(%rbp)
movl -0x240(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x240(%rbp)
jmp 0xfb991
movl -0x248(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x248(%rbp)
jmp 0xfb836
jmp 0xfb9a7
movl -0x23c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x23c(%rbp)
jmp 0xfb806
leaq -0x208(%rbp), %rdi
callq 0x121030
jmp 0xfba2c
movq -0x290(%rbp), %rdx
addq $0x16b8, %rdx           # imm = 0x16B8
leaq 0xe5f57(%rip), %rsi     # 0x1e1935
leaq -0x268(%rbp), %rdi
callq 0x44240
jmp 0xfb9ec
movq -0x290(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0xeada0
jmp 0xfba01
leaq -0x268(%rbp), %rdi
callq 0x311e8
jmp 0xfba2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x311e8
jmp 0xfbafd
jmp 0xfba2e
jmp 0xfba30
jmp 0xfba32
jmp 0xfba34
jmp 0xfba36
jmp 0xfba38
leaq -0x20(%rbp), %rdi
callq 0x122d20
movsd %xmm0, -0x3a8(%rbp)
jmp 0xfba4b
movq -0x290(%rbp), %rax
movsd -0x3a8(%rbp), %xmm0
movsd %xmm0, -0x270(%rbp)
cmpl $0x3, 0x1614(%rax)
jb 0xfbad7
movq 0x1d94de(%rip), %rdi    # 0x2d4f50
leaq 0xe5efc(%rip), %rsi     # 0x1e1975
callq 0x2ff50
movq %rax, -0x3b0(%rbp)
jmp 0xfba87
movq -0x3b0(%rbp), %rdi
movsd -0x270(%rbp), %xmm0
callq 0x30710
movq %rax, -0x3b8(%rbp)
jmp 0xfbaa4
movq -0x3b8(%rbp), %rdi
leaq 0xe5edb(%rip), %rsi     # 0x1e198d
callq 0x2ff50
movq %rax, -0x3c0(%rbp)
jmp 0xfbac0
movq -0x3c0(%rbp), %rdi
movq 0x1d94fa(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xfbad5
jmp 0xfbad7
movb $0x1, -0x21(%rbp)
testb $0x1, -0x21(%rbp)
jne 0xfbaed
movq -0x288(%rbp), %rdi
callq 0x121030
movq -0x298(%rbp), %rax
addq $0x3c0, %rsp            # imm = 0x3C0
popq %rbp
retq
movq -0x288(%rbp), %rdi
callq 0x121030
movq -0x30(%rbp), %rdi
callq 0x30170
nopw %cs:(%rax,%rax)