let integer_time_start = Date.now();
let string_server_target = string_server_target_argument;
if (string_server_target_argument === "") {
string_server_target = string_get_server_rooted_hackable_with_score_biggest(ns);
}
// prepare the target if necessary
while (true) {
if (
ns.getServerSecurityLevel(string_server_target) === ns.getServerMinSecurityLevel(string_server_target) &&
ns.getServerMoneyAvailable(string_server_target) === ns.getServerMaxMoney(string_server_target)
) {
break;
}
const array_schedule_prepare = array_make_schedule(ns, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target, string_job_decider_prepare);
if (array_schedule_prepare.length > 0) {
await void_schedule_runner(ns, array_schedule_prepare);
await ns.sleep((array_schedule_prepare[array_schedule_prepare.length - 1].integer_time_job_finishes_seconds * 1000) - integer_time_start + Date.now());
}
}
// make and run actual hacking schedule
const array_schedule = array_make_schedule(ns, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target, string_job_decider);
await void_schedule_runner(ns, array_schedule);
return (array_schedule[array_schedule.length - 1].integer_time_job_finishes_seconds * 1000) - integer_time_start + Date.now();
};