Flawfinder version 2.0.10, (C) 2001-2019 David A. Wheeler. Number of rules (primarily dangerous function names) in C/C++ ruleset: 223 Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/samRead.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/empdist.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/readSeqFile.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/seqRead.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/seqRead.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/empdist.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/readSeqFile.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/samRead.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_qual_scale.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/samRead.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/read_SOLiD.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/readSeqFile.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/utility.hpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/readSeqFile.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD_jason.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/read_SOLiD.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/samRead.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/samRead.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/read_profile.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/readSeqFile.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/read_profile.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/seqRead.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/seqRead.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/readSeqFile.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art.cpp Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/samRead.h Examining data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp FINAL RESULTS: data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:166:5: [3] (random) srand: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srand(rand_seed); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:216:5: [3] (random) srand: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srand(rand_seed); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:418:5: [3] (random) srand: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srand (rand_seed); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:415:5: [3] (random) srand: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srand (rand_seed); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:93:38: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). if(i<argc) num_flow_cycles = atoi(argv[++i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:98:21: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). rand_seed =atoi(argv[++i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:181:17: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). fsize_mean=abs(atoi(argv[i+3])); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:203:14: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). SAMFILE.open(samfile.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:212:14: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). ALNFILE.open(alnfasta.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/art_454.cpp:279:19: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). ALNFILE2.open(alnfasta2.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/readSeqFile.cpp:45:12: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). infile.open(fileName); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/readSeqFile.cpp:139:12: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). infile.open(file_name); data/art-nextgen-simulation-tools-20160605+dfsg/art_454_src/read_profile.h:122:5: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char cyc_base[4]; data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:127:21: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). rand_seed =atoi(argv[++i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:229:21: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). int read_len = atoi(argv[i+2]); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:244:25: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). fsize_mean=abs(atoi(argv[i+4])); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:250:25: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_len_R3F5 =atoi(argv[i+3]); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:255:25: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). fsize_mean=abs(atoi(argv[i+5])); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:273:25: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_len_R3F5 =atoi(argv[i+3]); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD.cpp:318:14: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). SAMFILE.open(samfile.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD_jason.cpp:99:28: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_len = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/art_SOLiD_jason.cpp:135:24: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). mean = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/readSeqFile.cpp:45:12: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). infile.open(fileName); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/readSeqFile.cpp:137:12: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). infile.open(file_name); data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/read_SOLiD.cpp:86:5: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char base_type[4]={'0','1','2','3'}; //color space data/art-nextgen-simulation-tools-20160605+dfsg/art_SOLiD_src/utility.hpp:36:2: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char error_color[3]; //error color data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:135:15: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). max_num_n = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:161:14: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_len = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:170:17: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). maxNumIndel = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:197:15: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_count= atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:205:10: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). mean = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:213:16: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). min_qual_s = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:220:16: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). max_qual_s = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:227:16: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). q_shift_up = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:231:18: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). q_shift_up_2 = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:260:19: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). rand_seed = abs(atoi(argv[i])); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:430:14: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). SAMFILE.open(samfile.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:433:18: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). SAMFILE_EF.open(samfile_ef.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:442:18: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). ALNFILE.open(alnfasta.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina.cpp:662:19: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). ALNFILE2.open(alnfasta2.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:135:15: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). max_num_n = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:161:14: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_len = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:194:15: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). read_count= atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:202:10: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). mean = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:210:16: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). min_qual_s = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:217:16: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). max_qual_s = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:224:16: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). q_shift_up = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:228:18: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). q_shift_up_2 = atoi(argv[i]); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:257:19: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). rand_seed = abs(atoi(argv[i])); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:427:14: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). SAMFILE.open(samfile.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:430:18: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). SAMFILE_EF.open(samfile_ef.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:439:18: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). ALNFILE.open(alnfasta.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/art_illumina_m.cpp:672:19: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). ALNFILE2.open(alnfasta2.c_str(),ios::binary); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/readSeqFile.cpp:45:12: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). infile.open(fileName); data/art-nextgen-simulation-tools-20160605+dfsg/art_illumina_src/readSeqFile.cpp:139:12: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). infile.open(file_name); ANALYSIS SUMMARY: Hits = 55 Lines analyzed = 10418 in approximately 5.86 seconds (1778 lines/second) Physical Source Lines of Code (SLOC) = 7952 Hits@level = [0] 0 [1] 0 [2] 51 [3] 4 [4] 0 [5] 0 Hits@level+ = [0+] 55 [1+] 55 [2+] 55 [3+] 4 [4+] 0 [5+] 0 Hits/KSLOC@level+ = [0+] 6.9165 [1+] 6.9165 [2+] 6.9165 [3+] 0.503018 [4+] 0 [5+] 0 Dot directories skipped = 1 (--followdotdir overrides) Minimum risk level = 1 Not every hit is necessarily a security vulnerability. There may be other security vulnerabilities; review your code! See 'Secure Programming HOWTO' (https://dwheeler.com/secure-programs) for more information.