// File: /workspace/github_cpp_makefile_star2_O1/rishabh-battulwar[P]imageprocessing/./src/Main.cpp
// Function: usage(char const*)
void usage(const char *exename)
{
	std::cout << "\n General Usage: " << exename << " -prob {method_name} infile outfile [type] [-w width] [-h height] [-tw target_width] [-th target_height] [-ws window_size]" << std::endl;
	std::cout << " [Specific Usage]: \n" << std::endl;
	
	std::cout << " Problem 1.a1. Usage: " << exename << " -prob sobel -i <input file path> -o <output file path> [-w 'width'] [-h 'height']  [-perc 'percentage']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob sobel -i ../images/elaine.raw -o ../output_images/elaine_edge_map.raw -w 256 -h 256 -perc 10" << "\n" << std::endl;
	
	std::cout << " Problem 1.a2. Usage: " << exename << "  -prob LoG -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob LoG -i ../images/elaine.raw -o ../output_images/elaine_LoG_edge_map.raw -w 256 -h 256" << "\n" << std::endl;
	
	std::cout << " Problem 1.b. Usage: " << exename << " -prob art_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob art_effect -i ../images/Scarlett.raw -o ../output_images/Scarlett_out.raw -w 400 -h 300" << "\n" <<std::endl;
	
	std::cout << " Problem 2.1. Usage: " << exename << " -prob binary -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob binary -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_binary.raw -w 388 -h 374 " << "\n" << std::endl;
	
	std::cout << " Problem 2.2. Usage: " << exename << " -prob fingerprint -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob fingerprint -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_processed.raw -w 388 -h 374" << "\n" << std::endl;
	
	std::cout << " Problem 2.3. Usage: " << exename << " -prob minutiae -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] " << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob minutiae -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_extraction.raw -w 388 -h 374" << "\n" << std::endl;
	
	std::cout << " Problem 3.1. Usage: " << exename << " -prob halftone -i <input file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob halftone -i ../images/boat.raw -w 512 -h 512" << "\n" << std::endl;
	
	std::cout << " Problem 3.2. Usage: " << exename << " -prob color_halftone -i <input file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob color_halftone -i ../images/trees.raw -o ../output_images/color_halftone_trees.raw -w 350 -h 258" << "\n" << std::endl;
	
	// std::cout << " Problem 1.a. Usage: " << exename << " -prob color_to_bw -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob color_to_bw -i ../images/mandril.raw -o ../images/mandril_bw.raw -w 512 -h 512" << "\n" << std::endl;
	
	// std::cout << " Problem 1.b. Usage: " << exename << " -prob image_resize -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height]" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob image_resize -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -tw 700 -th 700" << "\n" << std::endl;
	
	// std::cout << " Problem 2.a1 Usage: " << exename << " -prob hist_eq_cum -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob hist_eq_cum -i ../images/Girl.raw -o ../images/Girl_hist_eq_cum.raw -w 256 -h 256" << "\n" <<std::endl;
	
	// std::cout << " Problem 2.a2 Usage: " << exename << " -prob hist_equal -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob hist_equal -i ../images/Girl.raw -o ../images/Girl_hist_eq.raw -w 256 -h 256" << "\n" << std::endl;
	
	// std::cout << " Problem 2.b. Usage: " << exename << " -prob oil_paint_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-ws 'window_size']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob oil_paint_effect -i ../images/Trojan_256.raw -o ../images/Trojan_256_oil.raw -w 384 -h 384 -ws 3" << "\n" << std::endl;
	
	// std::cout << " Problem 2.c. Usage: " << exename << " -prob special_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob special_effect -i ../images/chat.raw -o ../images/chat_effect.raw -w 481 -h 321" << "\n" << std::endl;
	
	// std::cout << " Problem 3.a. Usage: " << exename << " -prob denoising -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-sigma 'value'] [-thresh 'threshold_value']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob denoising -i ../images/Lena_mixed.raw -o ../images/Lena_clean.raw -w 512 -h 512 -sigma 3 -thresh 20.0" << "\n" << std::endl;
	
	// std::cout << " Problem 3.b. Usage: " << exename << " -prob bilateral_filter -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height] [-sigma 'value'] [-sigma_sim 'sigma_similarity'] [-iter '#iterations']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob bilateral_filter -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -ws 3 -sigma 2 -sigma_sim 20 -iter 5" << "\n" << std::endl;
	
	// std::cout << " Problem 3.c. Usage: " << exename << " -prob non_local_mean -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height] [-rs 'region_size'] [-sigma 'value'] [-h 'h_value']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob non_local_mean -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -rs 5 -sigma 3 -h 5" << "\n" << std::endl;

	std::cout << "\t type :'bw'||'color' ; default: 'color'" << std::endl;
	std::cout << "\t -w width : (default) 512" 				<< std::endl;
	std::cout << "\t -h height : (default) 512" 			<< std::endl;
	std::cout << "\t -tw target_width : (default) 700" 		<< std::endl;
	std::cout << "\t -th target_height : (default) 700\n" 	<< std::endl;
	std::cout << "\t -th target_height : (default) 700\n" 	<< std::endl;
	exit(1);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
movq 0x60f5(%rip), %rbx      # 0x15fd0
leaq 0x1b38(%rip), %rsi      # 0x11a1a
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1b30(%rip), %rsi      # 0x11a2c
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1b94(%rip), %rsi      # 0x11aa7
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1b92(%rip), %rsi      # 0x11abc
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1b8f(%rip), %rsi      # 0x11ad3
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1be1(%rip), %r15      # 0x11b3c
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1bda(%rip), %rsi      # 0x11b52
movq %rax, %rdi
callq 0x2170
leaq 0x1b33(%rip), %r12      # 0x11aba
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1c15(%rip), %rsi      # 0x11bb6
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1c12(%rip), %rsi      # 0x11bcd
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1c37(%rip), %rsi      # 0x11c1f
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1c72(%rip), %rsi      # 0x11c7c
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1c6e(%rip), %rsi      # 0x11c92
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1c99(%rip), %rsi      # 0x11cea
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1cd6(%rip), %rsi      # 0x11d49
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1cd2(%rip), %rsi      # 0x11d5f
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1cf9(%rip), %rsi      # 0x11db3
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1d46(%rip), %rsi      # 0x11e22
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1d42(%rip), %rsi      # 0x11e38
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1d6e(%rip), %rsi      # 0x11e91
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1dc2(%rip), %rsi      # 0x11f07
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1dbe(%rip), %rsi      # 0x11f1d
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1de8(%rip), %rsi      # 0x11f74
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1e3a(%rip), %rsi      # 0x11fe8
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1e36(%rip), %rsi      # 0x11ffe
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1e49(%rip), %rsi      # 0x1203e
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1e5b(%rip), %rsi      # 0x12072
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1e57(%rip), %rsi      # 0x12088
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2170
leaq 0x1e70(%rip), %rsi      # 0x120ce
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1eb6(%rip), %rsi      # 0x12136
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1ec8(%rip), %rsi      # 0x1215f
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1ecc(%rip), %rsi      # 0x1217a
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1ed1(%rip), %rsi      # 0x12196
movq %rbx, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
leaq 0x1edd(%rip), %r14      # 0x121b9
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2170
movq %rax, %rdi
callq 0x20a0
movl $0x1, %edi
callq 0x21d0