// File: toxaart[P]hierarchical_block_sparse_lib/source/HierarchicalBlockSparseMatrix.h
// Function: hbsm::HierarchicalBlockSparseMatrix<double>::assign_from_buffer(char const*, unsigned long)
void HierarchicalBlockSparseMatrix<Treal>::assign_from_buffer(const char * dataBuffer, size_t const bufferSize) {

			const char *p = dataBuffer;

			int n_bytes_left_to_read = bufferSize;

			if (bufferSize < 5 * sizeof(int) + 4 * sizeof(size_t))
			  throw std::runtime_error("Error in HierarchicalBlockSparseMatrix::assign_from_buffer(): buffer too small.");


			memcpy(&nRows, p, sizeof(int));
			p += sizeof(int);
			n_bytes_left_to_read -= sizeof(int);

			memcpy(&nCols, p, sizeof(int));
			p += sizeof(int);
			n_bytes_left_to_read -= sizeof(int);

			memcpy(&nRows_orig, p, sizeof(int));
			p += sizeof(int);
			n_bytes_left_to_read -= sizeof(int);

			memcpy(&nCols_orig, p, sizeof(int));
			p += sizeof(int);
			n_bytes_left_to_read -= sizeof(int);

			memcpy(&blocksize, p, sizeof(int));
			p += sizeof(int);
			n_bytes_left_to_read -= sizeof(int);

			memcpy(&frob_norm_squared_internal, p, sizeof(Treal));
			p += sizeof(Treal);
			n_bytes_left_to_read -= sizeof(Treal);

			memcpy(&n_block_multiplies, p, sizeof(size_t));
			p += sizeof(size_t);
			n_bytes_left_to_read -= sizeof(size_t);

			size_t child0_size, child1_size, child2_size, child3_size;

			memcpy(&child0_size, p, sizeof(size_t));
			p += sizeof(size_t);
			n_bytes_left_to_read -= sizeof(size_t);

			memcpy(&child1_size, p, sizeof(size_t));
			p += sizeof(size_t);
			n_bytes_left_to_read -= sizeof(size_t);

			memcpy(&child2_size, p, sizeof(size_t));
			p += sizeof(size_t);
			n_bytes_left_to_read -= sizeof(size_t);

			memcpy(&child3_size, p, sizeof(size_t));
			p += sizeof(size_t);
			n_bytes_left_to_read -= sizeof(size_t);

			this->resize(nRows_orig, nCols_orig);

			//check if buffer ended, if so, that was an empty matrix
			if(n_bytes_left_to_read == 0){
				return;
			}

			if(child0_size > 0){
				if(children[0] != NULL)
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix::assign_from_buffer(): non-null child exist!");

				std::vector<char> child0_buf(child0_size);
				memcpy(&child0_buf[0], p, child0_size);
				p += child0_size;
				n_bytes_left_to_read -= child0_size;

				children[0] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
				children[0]->assign_from_buffer(&child0_buf[0], child0_size);
				children[0]->parent = this;

			}


			if(child1_size > 0){
				if(children[1] != NULL)
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix::assign_from_buffer(): non-null child exist!");

				std::vector<char> child1_buf(child1_size);
				memcpy(&child1_buf[0], p, child1_size);
				p += child1_size;
				n_bytes_left_to_read -= child1_size;

				children[1] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
				children[1]->assign_from_buffer(&child1_buf[0], child1_size);
				children[1]->parent = this;

			}


			if(child2_size > 0){
				if(children[2] != NULL)
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix::assign_from_buffer(): non-null child exist!");

				std::vector<char> child2_buf(child2_size);
				memcpy(&child2_buf[0], p, child2_size);
				p += child2_size;
				n_bytes_left_to_read -= child2_size;

				children[2] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
				children[2]->assign_from_buffer(&child2_buf[0], child2_size);
				children[2]->parent = this;

			}


			if(child3_size > 0){
				if(children[3] != NULL)
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix::assign_from_buffer(): non-null child exist!");

				std::vector<char> child3_buf(child3_size);
				memcpy(&child3_buf[0], p, child3_size);
				p += child3_size;
				n_bytes_left_to_read -= child3_size;

				children[3] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
				children[3]->assign_from_buffer(&child3_buf[0], child3_size);
				children[3]->parent = this;

			}

			// at this point, if n_bytes_left_to_read is 0, then we are done, if not, then it was a leaf matrix!
			if(n_bytes_left_to_read == 0){
				return;
			}
			else{

				assert(n_bytes_left_to_read == nRows * nCols * sizeof(Treal));
				submatrix.resize(nRows * nCols);

				memcpy(&submatrix[0], p, nRows * nCols * sizeof(Treal));
				p += nRows * nCols * sizeof(Treal);
			}

		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1f0, %rsp            # imm = 0x1F0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movl %eax, -0x24(%rbp)
cmpq $0x34, -0x18(%rbp)
jae 0x6c24
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x128(%rbp)
leaq 0xb28d(%rip), %rsi      # 0x11e73
callq 0x2070
jmp 0x6bed
movq -0x128(%rbp), %rdi
movq 0x113f5(%rip), %rsi     # 0x17ff0
movq 0x113be(%rip), %rdx     # 0x17fc0
callq 0x22c0
movq -0x128(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0x2130
jmp 0x75d9
movq -0x120(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, (%rdi)
movq -0x20(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x4, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, 0x4(%rdi)
movq -0x20(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x4, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, 0x8(%rdi)
movq -0x20(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x4, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, 0xc(%rdi)
movq -0x20(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x4, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, 0x10(%rdi)
movq -0x20(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x4, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rdi)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x8, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, 0x20(%rdi)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x8, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x8, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x8, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x8, %rax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
movslq -0x24(%rbp), %rax
subq $0x8, %rax
movl %eax, -0x24(%rbp)
movl 0x8(%rdi), %esi
movl 0xc(%rdi), %edx
xorl %eax, %eax
movl %eax, %ecx
callq 0x49d0
cmpl $0x0, -0x24(%rbp)
jne 0x6db0
jmp 0x75d0
cmpq $0x0, -0x40(%rbp)
jbe 0x6f73
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x9800
testb $0x1, %al
jne 0x6dd5
jmp 0x6e31
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x130(%rbp)
leaq 0xb0d0(%rip), %rsi      # 0x11ec3
callq 0x2070
jmp 0x6dfa
movq -0x130(%rbp), %rdi
movq 0x111e8(%rip), %rsi     # 0x17ff0
movq 0x111b1(%rip), %rdx     # 0x17fc0
callq 0x22c0
movq -0x130(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0x2130
jmp 0x75d9
movq -0x40(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x138(%rbp)
callq 0x22f0
movq -0x140(%rbp), %rsi
movq -0x138(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x61f0
jmp 0x6e65
leaq -0x71(%rbp), %rdi
callq 0x21e0
xorl %eax, %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
callq 0x6b70
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0x2160
movq -0x40(%rbp), %rcx
movq -0x20(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movl -0x40(%rbp), %ecx
movl -0x24(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x24(%rbp)
leaq -0x88(%rbp), %rdi
callq 0xbc00
jmp 0x6eb3
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
movq %rdi, -0x150(%rbp)
leaq -0x88(%rbp), %rsi
movq %rsi, -0x158(%rbp)
callq 0x9870
movq -0x158(%rbp), %rdi
callq 0x98a0
movq -0x150(%rbp), %rdi
callq 0x9830
movq %rax, -0x148(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
callq 0x6b70
movq -0x148(%rbp), %rdi
movq %rax, %rsi
movq -0x40(%rbp), %rdx
callq 0x6b90
jmp 0x6f19
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
callq 0x9830
movq -0x120(%rbp), %rcx
movq %rcx, 0x68(%rax)
leaq -0x70(%rbp), %rdi
callq 0x7e10
jmp 0x6f73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x71(%rbp), %rdi
callq 0x21e0
jmp 0x75d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x7e10
jmp 0x75d9
cmpq $0x0, -0x48(%rbp)
jbe 0x7156
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x9800
testb $0x1, %al
jne 0x6f9c
jmp 0x6ff8
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x160(%rbp)
leaq 0xaf09(%rip), %rsi      # 0x11ec3
callq 0x2070
jmp 0x6fc1
movq -0x160(%rbp), %rdi
movq 0x11021(%rip), %rsi     # 0x17ff0
movq 0x10fea(%rip), %rdx     # 0x17fc0
callq 0x22c0
movq -0x160(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0x2130
jmp 0x75d9
movq -0x48(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0xa1(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0x22f0
movq -0x170(%rbp), %rsi
movq -0x168(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
callq 0x61f0
jmp 0x7032
leaq -0xa1(%rbp), %rdi
callq 0x21e0
xorl %eax, %eax
movl %eax, %esi
leaq -0xa0(%rbp), %rdi
callq 0x6b70
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x48(%rbp), %rdx
callq 0x2160
movq -0x48(%rbp), %rcx
movq -0x20(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movl -0x48(%rbp), %ecx
movl -0x24(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x24(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0xbc00
jmp 0x7086
movq -0x120(%rbp), %rdi
addq $0x38, %rdi
movq %rdi, -0x180(%rbp)
leaq -0xb8(%rbp), %rsi
movq %rsi, -0x188(%rbp)
callq 0x9870
movq -0x188(%rbp), %rdi
callq 0x98a0
movq -0x180(%rbp), %rdi
callq 0x9830
movq %rax, -0x178(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0xa0(%rbp), %rdi
callq 0x6b70
movq -0x178(%rbp), %rdi
movq %rax, %rsi
movq -0x48(%rbp), %rdx
callq 0x6b90
jmp 0x70ef
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
addq $0x10, %rdi
callq 0x9830
movq -0x120(%rbp), %rcx
movq %rcx, 0x68(%rax)
leaq -0xa0(%rbp), %rdi
callq 0x7e10
jmp 0x7156
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xa1(%rbp), %rdi
callq 0x21e0
jmp 0x75d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x7e10
jmp 0x75d9
cmpq $0x0, -0x50(%rbp)
jbe 0x7339
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
addq $0x20, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x9800
testb $0x1, %al
jne 0x717f
jmp 0x71db
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x190(%rbp)
leaq 0xad26(%rip), %rsi      # 0x11ec3
callq 0x2070
jmp 0x71a4
movq -0x190(%rbp), %rdi
movq 0x10e3e(%rip), %rsi     # 0x17ff0
movq 0x10e07(%rip), %rdx     # 0x17fc0
callq 0x22c0
movq -0x190(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0x2130
jmp 0x75d9
movq -0x50(%rbp), %rax
movq %rax, -0x1a0(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x198(%rbp)
callq 0x22f0
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0x61f0
jmp 0x7215
leaq -0xd1(%rbp), %rdi
callq 0x21e0
xorl %eax, %eax
movl %eax, %esi
leaq -0xd0(%rbp), %rdi
callq 0x6b70
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x50(%rbp), %rdx
callq 0x2160
movq -0x50(%rbp), %rcx
movq -0x20(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movl -0x50(%rbp), %ecx
movl -0x24(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x24(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0xbc00
jmp 0x7269
movq -0x120(%rbp), %rdi
addq $0x48, %rdi
movq %rdi, -0x1b0(%rbp)
leaq -0xe8(%rbp), %rsi
movq %rsi, -0x1b8(%rbp)
callq 0x9870
movq -0x1b8(%rbp), %rdi
callq 0x98a0
movq -0x1b0(%rbp), %rdi
callq 0x9830
movq %rax, -0x1a8(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0xd0(%rbp), %rdi
callq 0x6b70
movq -0x1a8(%rbp), %rdi
movq %rax, %rsi
movq -0x50(%rbp), %rdx
callq 0x6b90
jmp 0x72d2
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
addq $0x20, %rdi
callq 0x9830
movq -0x120(%rbp), %rcx
movq %rcx, 0x68(%rax)
leaq -0xd0(%rbp), %rdi
callq 0x7e10
jmp 0x7339
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xd1(%rbp), %rdi
callq 0x21e0
jmp 0x75d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x7e10
jmp 0x75d9
cmpq $0x0, -0x58(%rbp)
jbe 0x751c
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
addq $0x30, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x9800
testb $0x1, %al
jne 0x7362
jmp 0x73be
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1c0(%rbp)
leaq 0xab43(%rip), %rsi      # 0x11ec3
callq 0x2070
jmp 0x7387
movq -0x1c0(%rbp), %rdi
movq 0x10c5b(%rip), %rsi     # 0x17ff0
movq 0x10c24(%rip), %rdx     # 0x17fc0
callq 0x22c0
movq -0x1c0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0x2130
jmp 0x75d9
movq -0x58(%rbp), %rax
movq %rax, -0x1d0(%rbp)
leaq -0x101(%rbp), %rdi
movq %rdi, -0x1c8(%rbp)
callq 0x22f0
movq -0x1d0(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
leaq -0x100(%rbp), %rdi
callq 0x61f0
jmp 0x73f8
leaq -0x101(%rbp), %rdi
callq 0x21e0
xorl %eax, %eax
movl %eax, %esi
leaq -0x100(%rbp), %rdi
callq 0x6b70
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x58(%rbp), %rdx
callq 0x2160
movq -0x58(%rbp), %rcx
movq -0x20(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movl -0x58(%rbp), %ecx
movl -0x24(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x24(%rbp)
leaq -0x118(%rbp), %rdi
callq 0xbc00
jmp 0x744c
movq -0x120(%rbp), %rdi
addq $0x58, %rdi
movq %rdi, -0x1e0(%rbp)
leaq -0x118(%rbp), %rsi
movq %rsi, -0x1e8(%rbp)
callq 0x9870
movq -0x1e8(%rbp), %rdi
callq 0x98a0
movq -0x1e0(%rbp), %rdi
callq 0x9830
movq %rax, -0x1d8(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x100(%rbp), %rdi
callq 0x6b70
movq -0x1d8(%rbp), %rdi
movq %rax, %rsi
movq -0x58(%rbp), %rdx
callq 0x6b90
jmp 0x74b5
movq -0x120(%rbp), %rdi
addq $0x28, %rdi
addq $0x30, %rdi
callq 0x9830
movq -0x120(%rbp), %rcx
movq %rcx, 0x68(%rax)
leaq -0x100(%rbp), %rdi
callq 0x7e10
jmp 0x751c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x101(%rbp), %rdi
callq 0x21e0
jmp 0x75d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x7e10
jmp 0x75d9
cmpl $0x0, -0x24(%rbp)
jne 0x7527
jmp 0x75d0
movq -0x120(%rbp), %rdx
movslq -0x24(%rbp), %rax
movl (%rdx), %ecx
imull 0x4(%rdx), %ecx
movslq %ecx, %rcx
shlq $0x3, %rcx
cmpq %rcx, %rax
jne 0x7546
jmp 0x7565
leaq 0xa9ca(%rip), %rdi      # 0x11f17
leaq 0x9fe1(%rip), %rsi      # 0x11535
movl $0x5c8, %edx            # imm = 0x5C8
leaq 0xa9ed(%rip), %rcx      # 0x11f4d
callq 0x2100
movq -0x120(%rbp), %rcx
movq %rcx, %rdi
addq $0x70, %rdi
movl (%rcx), %eax
imull 0x4(%rcx), %eax
movslq %eax, %rsi
callq 0x8c60
movq -0x120(%rbp), %rdi
addq $0x70, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5070
movq -0x120(%rbp), %rcx
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movl (%rcx), %eax
imull 0x4(%rcx), %eax
movslq %eax, %rdx
shlq $0x3, %rdx
callq 0x2160
movq -0x120(%rbp), %rcx
movl (%rcx), %eax
imull 0x4(%rcx), %eax
cltq
shlq $0x3, %rax
addq -0x20(%rbp), %rax
movq %rax, -0x20(%rbp)
addq $0x1f0, %rsp            # imm = 0x1F0
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x22e0
nopw %cs:(%rax,%rax)
nopl (%rax)