// File: DaCasBe[P]Gestion-de-asignaturas-mediante-listas-doblemente-enlazadas-ordenadas/funcionesAuxiliares.cpp
// Function: ed::modificarEstudianteDeAsignatura(ed::Asignatura&)
void ed::modificarEstudianteDeAsignatura(ed::Asignatura &asignatura){
	if(asignatura.estaVacia()){ //La asignatura esta vacia
		std::cout << std::endl << ONIRED << "Error: no hay ningun estudiante cargado" << RESET << std::endl;
	}
	
	else{ //La asignatura no esta vacia
		int opcion;
		bool control;

		std::string nombre, apellidos;
		float nota;

		ed::Estudiante estudiante;
  		ed::Estudiante nuevoEstudiante;

		//Pedimos al usuario la informacion del estudiante a modificar
		std::cout << CYAN << "Nombre: " << RESET;
		std::getline(std::cin,nombre);

  		std::cout << CYAN << "Apellidos: " << RESET;
  		std::getline(std::cin,apellidos);

		control = asignatura.existeEstudiante(nombre,apellidos);

		if (control == true){ //Existe el estudiante
			estudiante = asignatura.getEstudiante(nombre,apellidos);

				 do{
					std::cout << std::endl << BLUE << "Datos actuales del estudiante: " << std::endl;
					estudiante.escribirEstudiante();
	
					std::cout << RESET << std::endl;
					std::cout << BBLUE << "Indique qué dato desea modificar: " << std::endl;
					std::cout << "(1) nombre" << std::endl;
					std::cout << "(2) apelllidos" << std::endl;
					std::cout << "(3) nota de teoría " << std::endl;
					std::cout << "(4) nota prácticas" << std::endl;

					std::cout << "(0) salir" << RESET << std::endl << std::endl;
					std::cin >> opcion;	
					// Se elimina el salto de línea del flujo de entrada
					  std::cin.ignore();
			
					switch(opcion){
						case 0: 
							// Fin de las modificaciones
							break;
						case 1:
							nuevoEstudiante = estudiante;

							std::cout << IPURPLE << "Nuevo nombre: " << RESET;
							std::getline(std::cin,nombre);
							nuevoEstudiante.setNombre(nombre);

							// Se comprueba que no existe otro estudiante con la misma clave
							if (not asignatura.existeEstudiante(nuevoEstudiante.getNombre(),nuevoEstudiante.getApellidos())){
								// Como se ha modificado un campo de la clave, se borra el antiguo estudiante 
								// y se inserta el estudiante modficado de forma ordenada
								asignatura.borrarEstudiante(estudiante.getNombre(),estudiante.getApellidos());									
								asignatura.insertarEstudiante(nuevoEstudiante.getNombre(),nuevoEstudiante.getApellidos(),nuevoEstudiante.getTeoria(),nuevoEstudiante.getPractica());	

								estudiante = nuevoEstudiante;
							}
							// Se indica que ya existe un estudiante con la misma clave
							else{
								std::cout << std::endl << ONIRED << "Error: no se puede modificar el nombre porque tendría la misma clave que otro estudiante" << RESET << std::endl;
							}
							break;

						case 2:
							nuevoEstudiante = estudiante;

							std::cout << IPURPLE << "Nuevos apellidos: " << RESET;
							std::getline(std::cin,apellidos);
							nuevoEstudiante.setApellidos(apellidos);

							// Se comprueba que no existe otro estudiante con la misma clave
							if (not asignatura.existeEstudiante(nuevoEstudiante.getNombre(),nuevoEstudiante.getApellidos())){
								// Como se ha modificado un campo de la clave, se borra el antiguo estudiante 
								// y se inserta el estudiante modficado de forma ordenada
								asignatura.borrarEstudiante(estudiante.getNombre(),estudiante.getApellidos());									
								asignatura.insertarEstudiante(nuevoEstudiante.getNombre(),nuevoEstudiante.getApellidos(),nuevoEstudiante.getTeoria(),nuevoEstudiante.getPractica());	

								estudiante = nuevoEstudiante;
							}
							// Se indica que ya existe un estudiante con la misma clave
							else{
								std::cout << std::endl << ONIRED << "Error: no se puede modificar el nombre porque tendría la misma clave que otro estudiante" << RESET << std::endl;
											}
								break;

						case 3:
							std::cout << IPURPLE << "Nueva nota de teoría " << RESET;
							std::cin >> nota;
							estudiante.setTeoria(nota);

							// Se modifica su nota
							asignatura.setEstudiante(estudiante);
							break;

						case 4:
							std::cout << IPURPLE << "Nueva nota de prácticas " << RESET;
							std::cin >> nota;
							estudiante.setPractica(nota);

							// Se modifica su nota
							asignatura.setEstudiante(estudiante);
							break;

						default:
							std::cout<< std::endl << ONIRED << "Error: opción incorrecta" << RESET << std::endl;
					}
				}while (opcion != 0);
		}	
		else{ //No existe el estudiante
			std::cout << std::endl << ONIRED << "Error: el estudiante " << nombre << " " << apellidos << " ";
			std::cout << "no pertenece a la asignatura" << RESET;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3f0, %rsp            # imm = 0x3F0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
testb $0x1, %al
jne 0x845f
jmp 0x84b3
movq 0x7b6a(%rip), %rdi      # 0xffd0
movq 0x7b53(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, %rdi
leaq 0x3888(%rip), %rsi      # 0xbd04
callq 0x31a0
movq %rax, %rdi
leaq 0x3c8b(%rip), %rsi      # 0xc116
callq 0x31a0
movq %rax, %rdi
leaq 0x2b94(%rip), %rsi      # 0xb02e
callq 0x31a0
movq %rax, %rdi
movq 0x7b17(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x92cb
leaq -0x30(%rbp), %rdi
callq 0x3220
leaq -0x50(%rbp), %rdi
callq 0x3220
jmp 0x84c7
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x1a8(%rbp)
callq 0x32c0
movq -0x1a8(%rbp), %rdx
leaq 0x3991(%rip), %rsi      # 0xbe79
leaq -0xd0(%rbp), %rdi
callq 0x3210
jmp 0x84f6
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x1b0(%rbp)
callq 0x32c0
movq -0x1b0(%rbp), %rdx
leaq 0x3962(%rip), %rsi      # 0xbe79
leaq -0xf8(%rbp), %rdi
callq 0x3210
jmp 0x8525
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0xf8(%rbp), %rdx
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x53c0
jmp 0x8547
leaq -0xf8(%rbp), %rdi
callq 0x3120
jmp 0x8555
leaq -0xf9(%rbp), %rdi
callq 0x31d0
leaq -0xd0(%rbp), %rdi
callq 0x3120
jmp 0x856f
leaq -0xd1(%rbp), %rdi
callq 0x31d0
leaq -0x171(%rbp), %rdi
movq %rdi, -0x1b8(%rbp)
callq 0x32c0
movq -0x1b8(%rbp), %rdx
leaq 0x38dd(%rip), %rsi      # 0xbe79
leaq -0x170(%rbp), %rdi
callq 0x3210
jmp 0x85aa
leaq -0x199(%rbp), %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x32c0
movq -0x1c0(%rbp), %rdx
leaq 0x38ae(%rip), %rsi      # 0xbe79
leaq -0x198(%rbp), %rdi
callq 0x3210
jmp 0x85d9
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
leaq -0x198(%rbp), %rdx
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x53c0
jmp 0x85fb
leaq -0x198(%rbp), %rdi
callq 0x3120
jmp 0x8609
leaq -0x199(%rbp), %rdi
callq 0x31d0
leaq -0x170(%rbp), %rdi
callq 0x3120
jmp 0x8623
leaq -0x171(%rbp), %rdi
callq 0x31d0
movq 0x799a(%rip), %rdi      # 0xffd0
leaq 0x3d53(%rip), %rsi      # 0xc390
callq 0x31a0
movq %rax, -0x1c8(%rbp)
jmp 0x864b
movq -0x1c8(%rbp), %rdi
leaq 0x3b73(%rip), %rsi      # 0xc1cc
callq 0x31a0
movq %rax, -0x1d0(%rbp)
jmp 0x8667
movq -0x1d0(%rbp), %rdi
leaq 0x29b9(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x867c
movq 0x795d(%rip), %rdi      # 0xffe0
leaq -0x30(%rbp), %rsi
callq 0x3070
jmp 0x868e
movq 0x793b(%rip), %rdi      # 0xffd0
leaq 0x3cf4(%rip), %rsi      # 0xc390
callq 0x31a0
movq %rax, -0x1d8(%rbp)
jmp 0x86aa
movq -0x1d8(%rbp), %rdi
leaq 0x3bfe(%rip), %rsi      # 0xc2b6
callq 0x31a0
movq %rax, -0x1e0(%rbp)
jmp 0x86c6
movq -0x1e0(%rbp), %rdi
leaq 0x295a(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x86db
movq 0x78fe(%rip), %rdi      # 0xffe0
leaq -0x50(%rbp), %rsi
callq 0x3070
jmp 0x86ed
movq -0x8(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
leaq -0x30(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq *%rax
movb %al, -0x1e1(%rbp)
jmp 0x870a
movb -0x1e1(%rbp), %al
andb $0x1, %al
movb %al, -0xd(%rbp)
movb -0xd(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x9167
movq -0x8(%rbp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
leaq -0x30(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq *%rax
movq %rax, -0x1f0(%rbp)
jmp 0x8744
movq -0x1f0(%rbp), %rsi
leaq -0xb0(%rbp), %rdi
callq 0x3840
jmp 0x8759
jmp 0x875b
movq 0x786e(%rip), %rdi      # 0xffd0
movq 0x7857(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, -0x1f8(%rbp)
jmp 0x8777
movq -0x1f8(%rbp), %rdi
leaq 0x3c13(%rip), %rsi      # 0xc398
callq 0x31a0
movq %rax, -0x200(%rbp)
jmp 0x8793
movq -0x200(%rbp), %rdi
leaq 0x3bff(%rip), %rsi      # 0xc3a0
callq 0x31a0
movq %rax, -0x208(%rbp)
jmp 0x87af
movq -0x208(%rbp), %rdi
movq 0x7803(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x87c4
leaq -0xb0(%rbp), %rdi
callq 0x3660
jmp 0x87d2
movq 0x77f7(%rip), %rdi      # 0xffd0
leaq 0x284e(%rip), %rsi      # 0xb02e
callq 0x31a0
movq %rax, -0x210(%rbp)
jmp 0x87ee
movq -0x210(%rbp), %rdi
movq 0x77c4(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x8803
movq 0x77c6(%rip), %rdi      # 0xffd0
leaq 0x3635(%rip), %rsi      # 0xbe46
callq 0x31a0
movq %rax, -0x218(%rbp)
jmp 0x881f
movq -0x218(%rbp), %rdi
leaq 0x3b93(%rip), %rsi      # 0xc3c0
callq 0x31a0
movq %rax, -0x220(%rbp)
jmp 0x883b
movq -0x220(%rbp), %rdi
movq 0x7777(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x8850
movq 0x7779(%rip), %rdi      # 0xffd0
leaq 0x3b86(%rip), %rsi      # 0xc3e4
callq 0x31a0
movq %rax, -0x228(%rbp)
jmp 0x886c
movq -0x228(%rbp), %rdi
movq 0x7746(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x8881
movq 0x7748(%rip), %rdi      # 0xffd0
leaq 0x3b60(%rip), %rsi      # 0xc3ef
callq 0x31a0
movq %rax, -0x230(%rbp)
jmp 0x889d
movq -0x230(%rbp), %rdi
movq 0x7715(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x88b2
movq 0x7717(%rip), %rdi      # 0xffd0
leaq 0x3b3e(%rip), %rsi      # 0xc3fe
callq 0x31a0
movq %rax, -0x238(%rbp)
jmp 0x88ce
movq -0x238(%rbp), %rdi
movq 0x76e4(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x88e3
movq 0x76e6(%rip), %rdi      # 0xffd0
leaq 0x3b22(%rip), %rsi      # 0xc413
callq 0x31a0
movq %rax, -0x240(%rbp)
jmp 0x88ff
movq -0x240(%rbp), %rdi
movq 0x76b3(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x8914
movq 0x76b5(%rip), %rdi      # 0xffd0
leaq 0x38f3(%rip), %rsi      # 0xc215
callq 0x31a0
movq %rax, -0x248(%rbp)
jmp 0x8930
movq -0x248(%rbp), %rdi
leaq 0x26f0(%rip), %rsi      # 0xb02e
callq 0x31a0
movq %rax, -0x250(%rbp)
jmp 0x894c
movq -0x250(%rbp), %rdi
movq 0x7666(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, -0x258(%rbp)
jmp 0x8968
movq -0x258(%rbp), %rdi
movq 0x764a(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x897d
movq 0x765c(%rip), %rdi      # 0xffe0
leaq -0xc(%rbp), %rsi
callq 0x3110
jmp 0x898f
movq 0x764a(%rip), %rdi      # 0xffe0
callq 0x32d0
jmp 0x899d
movl -0xc(%rbp), %eax
movq %rax, -0x260(%rbp)
subq $0x4, %rax
ja 0x90cf
movq -0x260(%rbp), %rax
leaq 0x3465(%rip), %rcx      # 0xbe24
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x92be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x8a2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x8a11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x3120
jmp 0x8a0f
jmp 0x8a11
leaq -0xf9(%rbp), %rdi
callq 0x31d0
leaq -0xd0(%rbp), %rdi
callq 0x3120
jmp 0x8a2b
jmp 0x8a2d
leaq -0xd1(%rbp), %rdi
callq 0x31d0
jmp 0x92b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x8a92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x8a76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x3120
jmp 0x8a74
jmp 0x8a76
leaq -0x199(%rbp), %rdi
callq 0x31d0
leaq -0x170(%rbp), %rdi
callq 0x3120
jmp 0x8a90
jmp 0x8a92
leaq -0x171(%rbp), %rdi
callq 0x31d0
jmp 0x92a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x4fd0
jmp 0x9291
jmp 0x9156
leaq -0x150(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x3840
jmp 0x8ada
movq 0x74ef(%rip), %rdi      # 0xffd0
leaq 0x393f(%rip), %rsi      # 0xc427
callq 0x31a0
movq %rax, -0x268(%rbp)
jmp 0x8af6
movq -0x268(%rbp), %rdi
leaq 0x392b(%rip), %rsi      # 0xc42f
callq 0x31a0
movq %rax, -0x270(%rbp)
jmp 0x8b12
movq -0x270(%rbp), %rdi
leaq 0x250e(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x8b27
movq 0x74b2(%rip), %rdi      # 0xffe0
leaq -0x30(%rbp), %rsi
callq 0x3070
jmp 0x8b39
leaq -0x150(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x5300
jmp 0x8b4b
movq -0x8(%rbp), %rax
movq %rax, -0x280(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x4f90
movq %rax, -0x278(%rbp)
jmp 0x8b6b
leaq -0x150(%rbp), %rdi
callq 0x4fb0
movq %rax, -0x288(%rbp)
jmp 0x8b80
movq -0x288(%rbp), %rdx
movq -0x278(%rbp), %rsi
movq -0x280(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, -0x289(%rbp)
jmp 0x8ba6
movb -0x289(%rbp), %al
testb $0x1, %al
jne 0x8cb6
jmp 0x8bb6
movq -0x8(%rbp), %rax
movq %rax, -0x2a0(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x4f90
movq %rax, -0x298(%rbp)
jmp 0x8bd6
leaq -0xb0(%rbp), %rdi
callq 0x4fb0
movq %rax, -0x2a8(%rbp)
jmp 0x8beb
movq -0x2a8(%rbp), %rdx
movq -0x298(%rbp), %rsi
movq -0x2a0(%rbp), %rdi
movq (%rdi), %rax
movq 0x50(%rax), %rax
callq *%rax
jmp 0x8c0b
movq -0x8(%rbp), %rax
movq %rax, -0x2b8(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x4f90
movq %rax, -0x2b0(%rbp)
jmp 0x8c2b
leaq -0x150(%rbp), %rdi
callq 0x4fb0
movq %rax, -0x2c0(%rbp)
jmp 0x8c40
leaq -0x150(%rbp), %rdi
callq 0x52c0
movss %xmm0, -0x2c4(%rbp)
jmp 0x8c56
leaq -0x150(%rbp), %rdi
callq 0x52e0
movss %xmm0, -0x2c8(%rbp)
jmp 0x8c6c
movss -0x2c8(%rbp), %xmm1
movss -0x2c4(%rbp), %xmm0
movq -0x2c0(%rbp), %rdx
movq -0x2b0(%rbp), %rsi
movq -0x2b8(%rbp), %rdi
movq (%rdi), %rax
movq 0x48(%rax), %rax
callq *%rax
jmp 0x8c9c
leaq -0xb0(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3840
jmp 0x8cb1
jmp 0x8d3d
movq 0x7313(%rip), %rdi      # 0xffd0
movq 0x72fc(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, -0x2d0(%rbp)
jmp 0x8cd2
movq -0x2d0(%rbp), %rdi
leaq 0x3024(%rip), %rsi      # 0xbd04
callq 0x31a0
movq %rax, -0x2d8(%rbp)
jmp 0x8cee
movq -0x2d8(%rbp), %rdi
leaq 0x3742(%rip), %rsi      # 0xc43e
callq 0x31a0
movq %rax, -0x2e0(%rbp)
jmp 0x8d0a
movq -0x2e0(%rbp), %rdi
leaq 0x2316(%rip), %rsi      # 0xb02e
callq 0x31a0
movq %rax, -0x2e8(%rbp)
jmp 0x8d26
movq -0x2e8(%rbp), %rdi
movq 0x728c(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x8d3b
jmp 0x8d3d
jmp 0x9156
leaq -0x150(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x3840
jmp 0x8d57
movq 0x7272(%rip), %rdi      # 0xffd0
leaq 0x36c2(%rip), %rsi      # 0xc427
callq 0x31a0
movq %rax, -0x2f0(%rbp)
jmp 0x8d73
movq -0x2f0(%rbp), %rdi
leaq 0x3717(%rip), %rsi      # 0xc498
callq 0x31a0
movq %rax, -0x2f8(%rbp)
jmp 0x8d8f
movq -0x2f8(%rbp), %rdi
leaq 0x2291(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x8da4
movq 0x7235(%rip), %rdi      # 0xffe0
leaq -0x50(%rbp), %rsi
callq 0x3070
jmp 0x8db6
leaq -0x150(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x5330
jmp 0x8dc8
movq -0x8(%rbp), %rax
movq %rax, -0x308(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x4f90
movq %rax, -0x300(%rbp)
jmp 0x8de8
leaq -0x150(%rbp), %rdi
callq 0x4fb0
movq %rax, -0x310(%rbp)
jmp 0x8dfd
movq -0x310(%rbp), %rdx
movq -0x300(%rbp), %rsi
movq -0x308(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, -0x311(%rbp)
jmp 0x8e23
movb -0x311(%rbp), %al
testb $0x1, %al
jne 0x8f33
jmp 0x8e33
movq -0x8(%rbp), %rax
movq %rax, -0x328(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x4f90
movq %rax, -0x320(%rbp)
jmp 0x8e53
leaq -0xb0(%rbp), %rdi
callq 0x4fb0
movq %rax, -0x330(%rbp)
jmp 0x8e68
movq -0x330(%rbp), %rdx
movq -0x320(%rbp), %rsi
movq -0x328(%rbp), %rdi
movq (%rdi), %rax
movq 0x50(%rax), %rax
callq *%rax
jmp 0x8e88
movq -0x8(%rbp), %rax
movq %rax, -0x340(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x4f90
movq %rax, -0x338(%rbp)
jmp 0x8ea8
leaq -0x150(%rbp), %rdi
callq 0x4fb0
movq %rax, -0x348(%rbp)
jmp 0x8ebd
leaq -0x150(%rbp), %rdi
callq 0x52c0
movss %xmm0, -0x34c(%rbp)
jmp 0x8ed3
leaq -0x150(%rbp), %rdi
callq 0x52e0
movss %xmm0, -0x350(%rbp)
jmp 0x8ee9
movss -0x350(%rbp), %xmm1
movss -0x34c(%rbp), %xmm0
movq -0x348(%rbp), %rdx
movq -0x338(%rbp), %rsi
movq -0x340(%rbp), %rdi
movq (%rdi), %rax
movq 0x48(%rax), %rax
callq *%rax
jmp 0x8f19
leaq -0xb0(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3840
jmp 0x8f2e
jmp 0x8fba
movq 0x7096(%rip), %rdi      # 0xffd0
movq 0x707f(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, -0x358(%rbp)
jmp 0x8f4f
movq -0x358(%rbp), %rdi
leaq 0x2da7(%rip), %rsi      # 0xbd04
callq 0x31a0
movq %rax, -0x360(%rbp)
jmp 0x8f6b
movq -0x360(%rbp), %rdi
leaq 0x34c5(%rip), %rsi      # 0xc43e
callq 0x31a0
movq %rax, -0x368(%rbp)
jmp 0x8f87
movq -0x368(%rbp), %rdi
leaq 0x2099(%rip), %rsi      # 0xb02e
callq 0x31a0
movq %rax, -0x370(%rbp)
jmp 0x8fa3
movq -0x370(%rbp), %rdi
movq 0x700f(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x8fb8
jmp 0x8fba
jmp 0x9156
movq 0x700a(%rip), %rdi      # 0xffd0
leaq 0x345a(%rip), %rsi      # 0xc427
callq 0x31a0
movq %rax, -0x378(%rbp)
jmp 0x8fdb
movq -0x378(%rbp), %rdi
leaq 0x34c2(%rip), %rsi      # 0xc4ab
callq 0x31a0
movq %rax, -0x380(%rbp)
jmp 0x8ff7
movq -0x380(%rbp), %rdi
leaq 0x2029(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x900c
movq 0x6fcd(%rip), %rdi      # 0xffe0
leaq -0x60(%rbp), %rsi
callq 0x3080
jmp 0x901e
leaq -0xb0(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x5360
jmp 0x9030
movq -0x8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x5730
jmp 0x9042
jmp 0x9156
movq 0x6f82(%rip), %rdi      # 0xffd0
leaq 0x33d2(%rip), %rsi      # 0xc427
callq 0x31a0
movq %rax, -0x388(%rbp)
jmp 0x9063
movq -0x388(%rbp), %rdi
leaq 0x3451(%rip), %rsi      # 0xc4c2
callq 0x31a0
movq %rax, -0x390(%rbp)
jmp 0x907f
movq -0x390(%rbp), %rdi
leaq 0x1fa1(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x9094
movq 0x6f45(%rip), %rdi      # 0xffe0
leaq -0x60(%rbp), %rsi
callq 0x3080
jmp 0x90a6
leaq -0xb0(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x5380
jmp 0x90b8
movq -0x8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x5730
jmp 0x90ca
jmp 0x9156
movq 0x6efa(%rip), %rdi      # 0xffd0
movq 0x6ee3(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, -0x398(%rbp)
jmp 0x90eb
movq -0x398(%rbp), %rdi
leaq 0x2c0b(%rip), %rsi      # 0xbd04
callq 0x31a0
movq %rax, -0x3a0(%rbp)
jmp 0x9107
movq -0x3a0(%rbp), %rdi
leaq 0x33c7(%rip), %rsi      # 0xc4dc
callq 0x31a0
movq %rax, -0x3a8(%rbp)
jmp 0x9123
movq -0x3a8(%rbp), %rdi
leaq 0x1efd(%rip), %rsi      # 0xb02e
callq 0x31a0
movq %rax, -0x3b0(%rbp)
jmp 0x913f
movq -0x3b0(%rbp), %rdi
movq 0x6e73(%rip), %rsi      # 0xffc0
callq 0x31c0
jmp 0x9154
jmp 0x9156
jmp 0x9158
cmpl $0x0, -0xc(%rbp)
jne 0x875b
jmp 0x9251
movq 0x6e62(%rip), %rdi      # 0xffd0
movq 0x6e4b(%rip), %rsi      # 0xffc0
callq 0x31c0
movq %rax, -0x3b8(%rbp)
jmp 0x9183
movq -0x3b8(%rbp), %rdi
leaq 0x2b73(%rip), %rsi      # 0xbd04
callq 0x31a0
movq %rax, -0x3c0(%rbp)
jmp 0x919f
movq -0x3c0(%rbp), %rdi
leaq 0x3349(%rip), %rsi      # 0xc4f6
callq 0x31a0
movq %rax, -0x3c8(%rbp)
jmp 0x91bb
movq -0x3c8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x3180
movq %rax, -0x3d0(%rbp)
jmp 0x91d4
movq -0x3d0(%rbp), %rdi
leaq 0x2c96(%rip), %rsi      # 0xbe78
callq 0x31a0
movq %rax, -0x3d8(%rbp)
jmp 0x91f0
movq -0x3d8(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x3180
movq %rax, -0x3e0(%rbp)
jmp 0x9209
movq -0x3e0(%rbp), %rdi
leaq 0x2c61(%rip), %rsi      # 0xbe78
callq 0x31a0
jmp 0x921e
movq 0x6dab(%rip), %rdi      # 0xffd0
leaq 0x32e0(%rip), %rsi      # 0xc50c
callq 0x31a0
movq %rax, -0x3e8(%rbp)
jmp 0x923a
movq -0x3e8(%rbp), %rdi
leaq 0x1de6(%rip), %rsi      # 0xb02e
callq 0x31a0
jmp 0x924f
jmp 0x9251
leaq -0x150(%rbp), %rdi
callq 0x4fd0
jmp 0x925f
leaq -0xb0(%rbp), %rdi
callq 0x4fd0
jmp 0x926d
leaq -0x50(%rbp), %rdi
callq 0x3120
jmp 0x9278
leaq -0x30(%rbp), %rdi
callq 0x3120
jmp 0x92cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x92a1
jmp 0x92a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x92b1
leaq -0xb0(%rbp), %rdi
callq 0x4fd0
jmp 0x92af
jmp 0x92b1
leaq -0x50(%rbp), %rdi
callq 0x3120
jmp 0x92bc
jmp 0x92be
leaq -0x30(%rbp), %rdi
callq 0x3120
jmp 0x92c9
jmp 0x92d4
addq $0x3f0, %rsp            # imm = 0x3F0
popq %rbp
retq
movq -0x58(%rbp), %rdi
callq 0x32b0
movq %rax, %rdi
callq 0x5040
nopw %cs:(%rax,%rax)