#!/usr/bin/perl
#/* ========================================
# * ███╗   ███╗██████╗ ██╗ █████╗ ██╗
# * ████╗ ████║██╔══██╗██║██╔══██╗██║
# * ██╔████╔██║██║  ██║██║███████║██║
# * ██║╚██╔╝██║██║  ██║██║██╔══██║██║
# * ██║ ╚═╝ ██║██████╔╝██║██║  ██║███████╗
# * ╚═╝     ╚═╝╚═════╝ ╚═╝╚═╝  ╚═╝╚══════╝
# * ========================================
# * mDial - Omni-Channel Contact Centre Suite.
# * Initially Written by Martin McCarthy.
# * Contributions welcome.
# * Active: 2020 - 2023.
# *
# * This software is licensed under AGPLv2.
# * You can find more information here;
# * https://www.gnu.org/licenses/agpl-3.0.en.html
# * A copy of the license is also shipped with this build.
# *
# * Important note: this software is provided to you free of charge.
# * If you paid for this software, you were ripped off.
# *
# * This project is a fork of the awesome FOSS project, ViCiDial.
# * ViCiDial is copyrighted by Matt Florell and the ViCiDial Group
# * under the AGPLv2 license.
# *
# * You can find out more about ViCiDial;
# * Web: https://www.vicidial.com/
# * Email: Matt Florell <vicidial@gmail.com>
# * IRC: Libera.Chat - ##vicidial
# *
# * Bug reports, feature requests and patches welcome!
# * ======================================== */
$build  = '230428-2017';
$script = 'AST_VDhopper';
$DB     = 0
  ; # Debug flag, set to 0 for no debug messages. Can be overriden with CLI --debug flag
$US                       = '__';
$MT[0]                    = '';
$vicidial_hopper          = 'vicidial_hopper';
$count_only               = 0;
$run_check                = 0;
$insert_auto_CB_to_hopper = 1
  ; # set to 1 to automatically insert ANYONE callbacks into the hopper, default = 1
$VLforce_index = 'FORCE INDEX(list_id)';    # to disable, set to ''
$secT          = time();
$secX          = time();
( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
  localtime(time);
$year = ( $year + 1900 );
$mon++;
$wtoday = $wday;
if ( $mon < 10 )  { $mon  = "0$mon"; }
if ( $mday < 10 ) { $mday = "0$mday"; }
if ( $hour < 10 ) { $hour = "0$hour"; }
if ( $min < 10 )  { $min  = "0$min"; }
if ( $sec < 10 )  { $sec  = "0$sec"; }
$file_date = "$year-$mon-$mday";
$now_date  = "$year-$mon-$mday $hour:$min:$sec";
$VDL_date  = "$year-$mon-$mday 00:00:01";
$YMD       = "$year-$mon-$mday";
$VDL_hour  = ( $secX - ( 60 * 60 ) );
( $Vsec, $Vmin, $Vhour, $Vmday, $Vmon, $Vyear, $Vwday, $Vyday, $Visdst ) =
  localtime($VDL_hour);
$Vyear = ( $Vyear + 1900 );
$Vmon++;
if ( $Vmon < 10 )  { $Vmon  = "0$Vmon"; }
if ( $Vmday < 10 ) { $Vmday = "0$Vmday"; }
$VDL_hour     = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";
$VDL_halfhour = ( $secX - ( 30 * 60 ) );
( $Vsec, $Vmin, $Vhour, $Vmday, $Vmon, $Vyear, $Vwday, $Vyday, $Visdst ) =
  localtime($VDL_halfhour);
$Vyear = ( $Vyear + 1900 );
$Vmon++;
if ( $Vmon < 10 )  { $Vmon  = "0$Vmon"; }
if ( $Vmday < 10 ) { $Vmday = "0$Vmday"; }
$VDL_halfhour = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";
$VDL_five     = ( $secX - ( 5 * 60 ) );
( $Vsec, $Vmin, $Vhour, $Vmday, $Vmon, $Vyear, $Vwday, $Vyday, $Visdst ) =
  localtime($VDL_five);
$Vyear = ( $Vyear + 1900 );
$Vmon++;
if ( $Vmon < 10 )  { $Vmon  = "0$Vmon"; }
if ( $Vmday < 10 ) { $Vmday = "0$Vmday"; }
$VDL_five = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";
$VDL_one  = ( $secX - ( 1 * 60 ) );
( $Vsec, $Vmin, $Vhour, $Vmday, $Vmon, $Vyear, $Vwday, $Vyday, $Visdst ) =
  localtime($VDL_one);
$Vyear = ( $Vyear + 1900 );
$Vmon++;
if ( $Vmon < 10 )  { $Vmon  = "0$Vmon"; }
if ( $Vmday < 10 ) { $Vmday = "0$Vmday"; }
$VDL_one    = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";
$VDL_tensec = ( $secX - 10 );
( $Vsec, $Vmin, $Vhour, $Vmday, $Vmon, $Vyear, $Vwday, $Vyday, $Visdst ) =
  localtime($VDL_tensec);
$Vyear = ( $Vyear + 1900 );
$Vmon++;
if ( $Vmon < 10 )  { $Vmon  = "0$Vmon"; }
if ( $Vmday < 10 ) { $Vmday = "0$Vmday"; }
$VDL_tensec = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";

if ( length( $ARGV[0] ) > 1 ) {
    $i                         = 0;
    $allow_inactive_list_leads = 0;
    while ( $#ARGV >= $i ) {
        $args = "$args $ARGV[$i]";
        $i++;
    }
    if ( $args =~ /--help/i ) {
        print "allowed run time options(must stay in this order):\n";
        print "  [--test] = test\n";
        print "  [--help] = this screen\n";
        print "  [--version] = print version of this script, then exit\n";
        print
"  [--count-only] = only display the number of leads in the hopper, then exit\n";
        print "  [--run-check] = concurrency check, exit if already running\n";
        print "  [--debug] = debug\n";
        print "  [--debugX] = super debug\n";
        print
"  [--dbgmt] = show GMT offset of records as they are inserted into hopper\n";
        print
"  [--dbdetail] = additional level of logging the leads that are inserted into the hopper\n";
        print
"  [--allow-inactive-list-leads] = do not delete inactive list leads\n";
        print "  [--level=XXX] = force a hopper_level of XXX\n";
        print
"  [--campaign=XXX] = run for campaign XXX only(or more campaigns if separated by triple dash ---)\n";
        print
"  [--wipe-hopper-clean] = deletes everything from the hopper    USE WITH CAUTION!!!\n";
        print "\n";
        exit;
    }
    else {
        if ( $args =~ /--version/i ) {
            print "version: $build\n";
            exit;
        }
        if ( $args =~ /--campaign=/i ) {
            @data_in     = split( /--campaign=/, $args );
            $CLIcampaign = $data_in[1];
            $CLIcampaign =~ s/ .*$//gi;
            if ( $CLIcampaign =~ /---/ ) {
                $CLIcampaign =~ s/---/','/gi;
            }
        }
        else { $CLIcampaign = ''; }
        if ( $args =~ /--level=/i ) {
            @data_in  = split( /--level=/, $args );
            $CLIlevel = $data_in[1];
            $CLIlevel =~ s/ .*$//gi;
            $CLIlevel =~ s/\D//gi;
            print "\n-----HOPPER LEVEL OVERRIDE: $CLIlevel -----\n\n";
        }
        else { $CLIlevel = ''; }
        if ( $args =~ /--debug/i ) {
            $DB = 1;
            print "\n----- DEBUG -----\n\n";
        }
        if ( $args =~ /--debugX/i ) {
            $DBX = 1;
            print "\n----- SUPER DEBUG -----\n\n";
        }
        if ( $args =~ /--dbgmt/i ) {
            $DB_show_offset = 1;
            print "\n-----DEBUG GMT -----\n\n";
        }
        if ( $args =~ /--dbdetail/i ) {
            $DB_detail = 1;
        }
        if ( $args =~ /--allow-inactive-list-leads/i ) {
            $allow_inactive_list_leads = 1;
        }
        if ( $args =~ /--test/i ) {
            $T    = 1;
            $TEST = 1;
            print "\n-----TESTING -----\n\n";
        }
        if ( $args =~ /--wipe-hopper-clean/i ) {
            $wipe_hopper_clean = 1;
        }
        if ( $args =~ /--count-only/i ) {
            $count_only = 1;
        }
        if ( $args =~ /--run-check/i ) {
            $run_check = 1;
            if ($DB) { print "\n----- CONCURRENCY CHECK -----\n\n"; }
        }
    }
}
else {
    print "no command line options set\n";
}
if ( $run_check > 0 ) {
    my $grepout = `/bin/ps ax | grep $0 | grep -v grep | grep -v '/bin/sh'`;
    my $grepnum = 0;
    $grepnum++ while ( $grepout =~ m/\n/g );
    if ( $grepnum > 1 ) {
        if ($DB) {
            print "I am not alone! Another $0 is running! Exiting...\n";
        }
        $event_string = "I am not alone! Another $0 is running! Exiting...";
        &event_logger;
        exit 1;
    }
}
$PATHconf = '/etc/astguiclient.conf';
open( conf, "$PATHconf" ) || die "can't open $PATHconf: $!\n";
@conf = <conf>;
close(conf);
$i = 0;
foreach (@conf) {
    $line = $conf[$i];
    $line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
    if ( ( $line =~ /^PATHhome/ ) && ( $CLIhome < 1 ) ) {
        $PATHhome = $line;
        $PATHhome =~ s/.*=//gi;
    }
    if ( ( $line =~ /^PATHlogs/ ) && ( $CLIlogs < 1 ) ) {
        $PATHlogs = $line;
        $PATHlogs =~ s/.*=//gi;
    }
    if ( ( $line =~ /^PATHagi/ ) && ( $CLIagi < 1 ) ) {
        $PATHagi = $line;
        $PATHagi =~ s/.*=//gi;
    }
    if ( ( $line =~ /^PATHweb/ ) && ( $CLIweb < 1 ) ) {
        $PATHweb = $line;
        $PATHweb =~ s/.*=//gi;
    }
    if ( ( $line =~ /^PATHsounds/ ) && ( $CLIsounds < 1 ) ) {
        $PATHsounds = $line;
        $PATHsounds =~ s/.*=//gi;
    }
    if ( ( $line =~ /^PATHmonitor/ ) && ( $CLImonitor < 1 ) ) {
        $PATHmonitor = $line;
        $PATHmonitor =~ s/.*=//gi;
    }
    if ( ( $line =~ /^VARserver_ip/ ) && ( $CLIserver_ip < 1 ) ) {
        $VARserver_ip = $line;
        $VARserver_ip =~ s/.*=//gi;
    }
    if ( ( $line =~ /^VARDB_server/ ) && ( $CLIDB_server < 1 ) ) {
        $VARDB_server = $line;
        $VARDB_server =~ s/.*=//gi;
    }
    if ( ( $line =~ /^VARDB_database/ ) && ( $CLIDB_database < 1 ) ) {
        $VARDB_database = $line;
        $VARDB_database =~ s/.*=//gi;
    }
    if ( ( $line =~ /^VARDB_user/ ) && ( $CLIDB_user < 1 ) ) {
        $VARDB_user = $line;
        $VARDB_user =~ s/.*=//gi;
    }
    if ( ( $line =~ /^VARDB_pass/ ) && ( $CLIDB_pass < 1 ) ) {
        $VARDB_pass = $line;
        $VARDB_pass =~ s/.*=//gi;
    }
    if ( ( $line =~ /^VARDB_port/ ) && ( $CLIDB_port < 1 ) ) {
        $VARDB_port = $line;
        $VARDB_port =~ s/.*=//gi;
    }
    $i++;
}
if ( !$VDHLOGfile ) { $VDHLOGfile = "$PATHlogs/hopper.$year-$mon-$mday"; }
if ( !$VDHDLOGfile ) {
    $VDHDLOGfile = "$PATHlogs/hopper-detail.$year-$mon-$mday";
}
if ( !$AADLOGfile ) {
    $AADLOGfile = "$PATHlogs/auto-alt-dial.$year-$mon-$mday";
}
if ( !$VARDB_port ) { $VARDB_port = '3306'; }
use DBI;
$dbhA = DBI->connect( "DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port",
    "$VARDB_user", "$VARDB_pass" )
  or die "Couldn't connect to database: " . DBI->errstr;
$anyone_callback_inactive_lists = 'default';
$stmtA =
"SELECT anyone_callback_inactive_lists,enable_international_dncs,daily_call_count_limit,use_non_latin,call_limit_24hour,UNIX_TIMESTAMP(call_limit_24hour_reset),UNIX_TIMESTAMP(NOW()) FROM system_settings;";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthArows = $sthA->rows;

if ( $sthArows > 0 ) {
    @aryA                           = $sthA->fetchrow_array;
    $anyone_callback_inactive_lists = $aryA[0];
    $enable_international_dncs      = $aryA[1];
    $SSdaily_call_count_limit       = $aryA[2];
    $non_latin                      = $aryA[3];
    $SScall_limit_24hour            = $aryA[4];
    $SScall_limit_24hour_reset      = $aryA[5];
    $SScall_limit_24hour_now        = $aryA[6];
}
$sthA->finish();
$stmtA =
"SELECT vd_server_logs,local_gmt FROM servers where server_ip = '$VARserver_ip';";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthArows = $sthA->rows;
if ( $sthArows == 0 ) {
    die
      "Server IP $VARserver_ip does not have an entry in the servers table\n\n";
}
if ( $sthArows > 0 ) {
    @aryA             = $sthA->fetchrow_array;
    $DBvd_server_logs = $aryA[0];
    $DBSERVER_GMT     = $aryA[1];
    if   ( $DBvd_server_logs =~ /Y/ ) { $SYSLOG = '1'; }
    else                              { $SYSLOG = '0'; }
    if ( length($DBSERVER_GMT) > 0 ) { $SERVER_GMT = $DBSERVER_GMT; }
}
$sthA->finish();
if ( $non_latin > 0 ) {
    $stmtA = "SET NAMES 'UTF8';";
    $sthA  = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
    $sthA->finish();
}
$stmtA =
"INSERT IGNORE into vicidial_campaign_stats_debug (campaign_id,server_ip) select campaign_id,'HOPPER' from vicidial_campaigns;";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthA->finish();
if ($enable_international_dncs) {
    $dnc_list_stmt =
"select container_entry from vicidial_settings_containers where container_id='DNC_CURRENT_BLOCKED_LISTS' and container_entry!=''";
    if ($DBX) { print "$dnc_list_stmt\n"; }
    $dnc_list_rslt = $dbhA->prepare($dnc_list_stmt);
    $dnc_list_rslt->execute();
    if ( $dnc_list_rslt->rows > 0 ) {
        $dnc_blocked_lists = "";
        @dnc_list_row      = $dnc_list_rslt->fetchrow_array;
        @blocked_dnc_lists = split( /\n/, $dnc_list_row[0] );
        for ( $i = 0 ; $i < scalar(@blocked_dnc_lists) ; $i++ ) {
            @current_scrub = split( /\=\>/, $blocked_dnc_lists[$i] );
            $dnc_list_id   = $current_scrub[0];
            $dnc_list_id =~ s/[^0-9]//g;
            $dnc_blocked_lists .= "'$dnc_list_id', ";
        }
        $dnc_blocked_lists =~ s/, $//;
    }
    if ($DBX) { print "BLOCKED LISTS: $dnc_blocked_lists\n"; }
    if ( length($dnc_blocked_lists) > 0 ) {
        $dnc_blocked_lists_SQL = "and list_id not in ($dnc_blocked_lists)";
    }
    $dnc_list_rslt->finish;
}
$secX = time();
( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
  localtime($secX);
$LOCAL_GMT_OFF     = $SERVER_GMT;
$LOCAL_GMT_OFF_STD = $SERVER_GMT;
if ($isdst) { $LOCAL_GMT_OFF++; }
$GMT_now = ( $secX - ( $LOCAL_GMT_OFF * 3600 ) );
( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
  localtime($GMT_now);
$mon++;
$year = ( $year + 1900 );
if ( $mon < 10 )  { $mon  = "0$mon"; }
if ( $mday < 10 ) { $mday = "0$mday"; }
if ( $hour < 10 ) { $hour = "0$hour"; }
if ( $min < 10 )  { $min  = "0$min"; }
if ( $sec < 10 )  { $sec  = "0$sec"; }

if ($DB) {
    print
"TIME DEBUG: $LOCAL_GMT_OFF_STD|$LOCAL_GMT_OFF|$isdst|   GMT: $hour:$min\n";
}
if ($wipe_hopper_clean) {
    if ( length($CLIcampaign) > 0 ) {
        $stmtA =
          "DELETE from $vicidial_hopper where campaign_id IN('$CLIcampaign');";
    }
    else {
        $stmtA = "DELETE from $vicidial_hopper;";
    }
    $affected_rows = $dbhA->do($stmtA);
    if ($DB) { print "Hopper Wiped Clean:  $affected_rows\n"; }
    $event_string = "|HOPPER WIPE CLEAN|";
    &event_logger;
    exit;
}
if ($count_only) {
    if ( length($CLIcampaign) > 0 ) {
        $stmtA =
"SELECT count(*) from $vicidial_hopper where campaign_id IN('$CLIcampaign');";
    }
    else {
        $stmtA = "SELECT count(*) from $vicidial_hopper;";
    }
    $hopper_count_only = 0;
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows = $sthA->rows;
    if ( $sthArows > 0 ) {
        @aryA              = $sthA->fetchrow_array;
        $hopper_count_only = $aryA[0];
    }
    $sthA->finish();
    if   ($DB) { print "Hopper count: $hopper_count_only|$stmtA|\n"; }
    else       { print "Hopper count: $hopper_count_only\n"; }
    $event_string = "|HOPPER COUNT: $hopper_count_only|";
    &event_logger;
    exit;
}
if ( length($CLIcampaign) > 0 ) {
    $stmtA =
"SELECT list_id FROM vicidial_lists where ( ( (active='N') or ( (active='Y') and (expiration_date < \"$file_date\") ) ) and (campaign_id IN('$CLIcampaign') ) );";
}
else {
    $stmtA =
"SELECT list_id FROM vicidial_lists where ( (active='N') or ( (active='Y') and (expiration_date < \"$file_date\") ) );";
}
if ($DB) { print $stmtA; }
$inactive_lists       = '';
$inactive_lists_count = 0;
$sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows = $sthA->rows;
while ( $sthArows > $inactive_lists_count ) {
    @aryA          = $sthA->fetchrow_array;
    $inactive_list = $aryA[0];
    $inactive_lists .= "'$inactive_list',";
    $inactive_lists_count++;
}
$sthA->finish();
if ($DB) { print "Inactive Lists:  $inactive_lists_count\n"; }
if ( $inactive_lists_count > 0 ) {
    chop($inactive_lists);
    if ( $allow_inactive_list_leads < 1 ) {
        $KEEPanyone_callback_inactive_listsSQL = '';
        if ( $anyone_callback_inactive_lists =~ /KEEP_IN_HOPPER/i ) {
            $KEEPanyone_callback_inactive_listsSQL = "and source!='C'";
        }
        $stmtA =
"DELETE from $vicidial_hopper where list_id IN($inactive_lists) $KEEPanyone_callback_inactive_listsSQL;";
        $affected_rows = $dbhA->do($stmtA);
        if ($DB) {
            print
"Inactive and Expired List Leads Deleted:  $affected_rows |$stmtA|\n";
        }
        $event_string = "|INACTIVE LIST DEL|$affected_rows|";
        &event_logger;
    }
}
$vcNOanyone_callback_inactive_listsSQL = '';
$vlNOanyone_callback_inactive_listsSQL = '';
if ( $anyone_callback_inactive_lists =~ /NO_ADD_TO_HOPPER/i ) {
    $vcNOanyone_callback_inactive_listsSQL =
      "and vicidial_callbacks.list_id NOT IN($inactive_lists)";
    $vlNOanyone_callback_inactive_listsSQL =
      "and vicidial_list.list_id NOT IN($inactive_lists)";
}
if ( length($CLIcampaign) > 0 ) {
    $stmtA =
"SELECT count(*) FROM vicidial_callbacks where callback_time <= '$now_date' and status IN('ACTIVE','TFHCCL') and campaign_id IN('$CLIcampaign') $vcNOanyone_callback_inactive_listsSQL;";
}
else {
    $stmtA =
"SELECT count(*) FROM vicidial_callbacks where callback_time <= '$now_date' and status IN('ACTIVE','TFHCCL') $vcNOanyone_callback_inactive_listsSQL;";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
@aryA         = $sthA->fetchrow_array;
$CBHOLD_count = $aryA[0];
if ($DB) { print "CALLBACK HOLD: $CBHOLD_count|$stmtA|\n"; }
$sthA->finish();
if ( $CBHOLD_count > 0 ) {
    $update_leads = '';
    $cbc          = 0;
    $cba          = 0;
    if ( length($CLIcampaign) > 0 ) {
        $stmtA =
"SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state,vicidial_callbacks.lead_status,vendor_lead_code,phone_number,phone_code,postal_code FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status IN('ACTIVE','TFHCCL') and vicidial_callbacks.lead_id=vicidial_list.lead_id and vicidial_callbacks.campaign_id IN('$CLIcampaign') $vlNOanyone_callback_inactive_listsSQL;";
    }
    else {
        $stmtA =
"SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state,vicidial_callbacks.lead_status,vendor_lead_code,phone_number,phone_code,postal_code FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status IN('ACTIVE','TFHCCL') and vicidial_callbacks.lead_id=vicidial_list.lead_id $vlNOanyone_callback_inactive_listsSQL;";
    }
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows = $sthA->rows;
    while ( $sthArows > $cbc ) {
        @aryA           = $sthA->fetchrow_array;
        $lead_ids[$cbc] = $aryA[0];
        $recipient      = $aryA[1];
        $update_leads .= "'$lead_ids[$cbc]',";
        if ( $recipient =~ /ANYONE/ ) {
            $CA_lead_id[$cba]          = $aryA[0];
            $CA_campaign_id[$cba]      = $aryA[2];
            $CA_list_id[$cba]          = $aryA[3];
            $CA_gmt_offset_now[$cba]   = $aryA[4];
            $CA_state[$cba]            = $aryA[5];
            $CA_status[$cba]           = $aryA[6];
            $CA_vendor_lead_code[$cba] = $aryA[7];
            $CA_phone_number[$cba]     = $aryA[8];
            $CA_phone_code[$cba]       = $aryA[9];
            $CA_postal_code[$cba]      = $aryA[10];
            $cba++;
        }
        $cbc++;
    }
    $sthA->finish();
    if ( $cbc > 0 ) {
        chop($update_leads);
        $stmtA =
"UPDATE vicidial_callbacks set status='LIVE' where lead_id IN($update_leads) and status NOT IN('INACTIVE','DEAD','ARCHIVE');";
        $affected_rows = $dbhA->do($stmtA);
        if ($DB) { print "Scheduled Callbacks Activated:  $affected_rows\n"; }
        $event_string = "|CALLBACKS CB ACT |$affected_rows|";
        &event_logger;
    }
    if ( ( $cba > 0 ) && ($insert_auto_CB_to_hopper) ) {
        if ($DB) {
            print "ANYONE Scheduled Callbacks to Insert into hopper:  $cba\n";
        }
        $event_string = "|ANYONE CB HOPPER |$cba|";
        &event_logger;
        $CAu = 0;
        foreach (@CA_lead_id) {
            $DNClead = 0;
            $DNCC    = 0;
            $DNCL    = 0;
            $stmtA =
"SELECT callback_dnc,use_internal_dnc,use_campaign_dnc,use_other_campaign_dnc,call_limit_24hour_method,call_limit_24hour_scope,call_limit_24hour,call_limit_24hour_override FROM vicidial_campaigns where campaign_id='$CA_campaign_id[$CAu]';";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows = $sthA->rows;
            if ( $sthArows > 0 ) {
                @aryA                          = $sthA->fetchrow_array;
                $VD_callback_dnc               = $aryA[0];
                $VD_use_internal_dnc           = $aryA[1];
                $VD_use_campaign_dnc           = $aryA[2];
                $VD_use_other_campaign_dnc     = $aryA[3];
                $VD_call_limit_24hour_method   = $aryA[4];
                $VD_call_limit_24hour_scope    = $aryA[5];
                $VD_call_limit_24hour          = $aryA[6];
                $VD_call_limit_24hour_override = $aryA[7];
            }
            $sthA->finish();
            if ( $VD_callback_dnc =~ /ENABLED/i ) {
                $VD_phone_number = $CA_phone_number[$CAu];
                if (   ( $VD_use_internal_dnc =~ /Y/ )
                    || ( $VD_use_internal_dnc =~ /AREACODE/ ) )
                {
                    if ( $VD_use_internal_dnc =~ /AREACODE/ ) {
                        $pth_areacode = substr( $VD_phone_number, 0, 3 );
                        $pth_areacode .= "XXXXXXX";
                        $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number IN('$VD_phone_number','$pth_areacode');";
                    }
                    else {
                        $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number=\"$VD_phone_number\";";
                    }
                    if ($DB) {
                        print
"     Doing DNC Check: $VD_phone_number - $VD_use_internal_dnc\n";
                    }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA    = $sthA->fetchrow_array;
                        $DNClead = $aryA[0];
                    }
                    $sthA->finish();
                    if ( $DNClead != '0' ) {
                        $DNCL++;
                        $stmtA =
"UPDATE vicidial_list SET status='DNCL' where lead_id='$CA_lead_id[$CAu]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DBX) {
                            print
"Flagging DNC lead:     $affected_rows  $VD_phone_number\n";
                        }
                        $stmtA =
"UPDATE vicidial_callbacks SET status='DEAD' where lead_id='$CA_lead_id[$CAu]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DBX) {
                            print
"Setting Callback entry to DEAD:     $affected_rows  $CA_lead_id[$CAu]\n";
                        }
                    }
                }
                if (
                    (
                           ( $VD_use_campaign_dnc =~ /Y/ )
                        || ( $VD_use_campaign_dnc =~ /AREACODE/ )
                    )
                    && ( $DNClead == '0' )
                  )
                {
                    $temp_campaign_id = $CA_campaign_id[$CAu];
                    if ( length($VD_use_other_campaign_dnc) > 0 ) {
                        $temp_campaign_id = $VD_use_other_campaign_dnc;
                    }
                    if ( $VD_use_campaign_dnc =~ /AREACODE/ ) {
                        $pth_areacode = substr( $VD_phone_number, 0, 3 );
                        $pth_areacode .= "XXXXXXX";
                        $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number IN('$VD_phone_number','$pth_areacode') and campaign_id='$temp_campaign_id';";
                    }
                    else {
                        $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number=\"$VD_phone_number\" and campaign_id='$temp_campaign_id';";
                    }
                    if ($DBX) { print "$VD_use_other_campaign_dnc|$stmtA\n"; }
                    if ($DB) {
                        print
"Doing CAMP DNC Check: $VD_phone_number - $VD_use_campaign_dnc - $temp_campaign_id\n";
                    }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA    = $sthA->fetchrow_array;
                        $DNClead = ( $DNClead + $aryA[0] );
                    }
                    $sthA->finish();
                    if ( $aryA[0] != '0' ) {
                        $DNCC++;
                        $stmtA =
"UPDATE vicidial_list SET status='DNCC' where lead_id='$CA_lead_id[$CAu]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DBX) {
                            print
"Flagging DNC lead:     $affected_rows  $VD_phone_number $CA_campaign_id[$CAu]\n";
                        }
                        $stmtA =
"UPDATE vicidial_callbacks SET status='DEAD' where lead_id='$CA_lead_id[$CAu]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DBX) {
                            print
"Setting Callback entry to DEAD:     $affected_rows  $CA_lead_id[$CAu]\n";
                        }
                    }
                }
            }
            if ( $DNClead < 1 ) {
                $passed_24hour_call_count = 1;
                if (   ( $SScall_limit_24hour > 0 )
                    && ( $VD_call_limit_24hour_method =~ /PHONE_NUMBER|LEAD/ ) )
                {
                    $temp_24hour_phone       = $CA_phone_number[$CAu];
                    $temp_24hour_phone_code  = $CA_phone_code[$CAu];
                    $temp_24hour_state       = $CA_state[$CAu];
                    $temp_24hour_postal_code = $CA_postal_code[$CAu];
                    $TEMPlead_id             = $CA_lead_id[$CAu];
                    $TEMPcampaign_id         = $CA_campaign_id[$CAu];
                    $TEMPcall_limit_24hour_method =
                      $VD_call_limit_24hour_method;
                    $TEMPcall_limit_24hour_scope = $VD_call_limit_24hour_scope;
                    $TEMPcall_limit_24hour       = $VD_call_limit_24hour;
                    $TEMPcall_limit_24hour_override =
                      $VD_call_limit_24hour_override;
                    $TFHCCLalt = 0;

                    if ( $DB > 0 ) {
                        print
"24-Hour Call Count Check: $SScall_limit_24hour|$TEMPcall_limit_24hour_method|$TEMPlead_id|\n";
                    }
                    &check_24hour_call_count;
                }
                if ( $passed_24hour_call_count > 0 ) {
                    $stmtA =
"UPDATE vicidial_list set status='$CA_status[$CAu]', called_since_last_reset='N' where lead_id='$CA_lead_id[$CAu]';";
                    $affected_rows = $dbhA->do($stmtA);
                    if ($DB) {
                        print
                          "Scheduled Callbacks Activated:  $affected_rows\n";
                    }
                    $event_string = "|CALLBACKS LISTACT|$affected_rows|";
                    &event_logger;
                    $stmtA =
"INSERT INTO $vicidial_hopper SET lead_id='$CA_lead_id[$CAu]',campaign_id='$CA_campaign_id[$CAu]',list_id='$CA_list_id[$CAu]',gmt_offset_now='$CA_gmt_offset_now[$CAu]',user='',state=\"$CA_state[$CAu]\",priority='50',source='C',vendor_lead_code=\"$CA_vendor_lead_code[$CAu]\";";
                    $affected_rows = $dbhA->do($stmtA);
                    if ($DB) {
                        print
"ANYONE Scheduled Callback Inserted into hopper:  $affected_rows|$CA_lead_id[$CAu]\n";
                    }
                }
                else {
                    $stmtA =
"UPDATE vicidial_callbacks SET status='TFHCCL' where lead_id='$CA_lead_id[$CAu]';";
                    $affected_rows = $dbhA->do($stmtA);
                    if ($DB) {
                        print
"ANYONE Scheduled Callback NOT Inserted into hopper:  24-Hour deferred|$affected_rows|$passed_24hour_call_count|$CA_lead_id[$CAu]\n";
                    }
                }
            }
            $CAu++;
        }
    }
}
$hopper_dnc_count = 0;
if ( length($CLIcampaign) > 0 ) {
    $stmtA =
"SELECT count(*) from $vicidial_hopper where status='DNC' and campaign_id IN('$CLIcampaign');";
}
else {
    $stmtA = "SELECT count(*) from $vicidial_hopper where status='DNC';";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthArows = $sthA->rows;
if ( $sthArows > 0 ) {
    @aryA             = $sthA->fetchrow_array;
    $hopper_dnc_count = $aryA[0];
    if ($DB)  { print "     hopper DNC count:   $hopper_dnc_count\n"; }
    if ($DBX) { print "     |$stmtA|\n"; }
}
$sthA->finish();
if ( $hopper_dnc_count > 0 ) {
    $event_string = "|hopper DNC count: $hopper_dnc_count||";
    &event_logger;
    if ( length($CLIcampaign) > 0 ) {
        $stmtA =
"SELECT hopper_id,lead_id,alt_dial,campaign_id FROM $vicidial_hopper where status='DNC' and campaign_id IN('$CLIcampaign');";
    }
    else {
        $stmtA =
"SELECT hopper_id,lead_id,alt_dial,campaign_id FROM $vicidial_hopper where status='DNC';";
    }
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArowsVHdnc = $sthA->rows;
    $aad           = 0;
    while ( $sthArowsVHdnc > $aad ) {
        @aryA                  = $sthA->fetchrow_array;
        $AAD_hopper_id[$aad]   = $aryA[0];
        $AAD_lead_id[$aad]     = $aryA[1];
        $AAD_alt_dial[$aad]    = $aryA[2];
        $AAD_campaign_id[$aad] = $aryA[3];
        $aad++;
    }
    $sthA->finish();
    $aad = 0;
    while ( $sthArowsVHdnc > $aad ) {
        $VD_auto_alt_dial          = '';
        $VD_use_internal_dnc       = '';
        $VD_use_campaign_dnc       = '';
        $VD_use_other_campaign_dnc = '';
        $alt_skip_reason           = '';
        $addr3_skip_reason         = '';
        $VD_alt_dial               = $AAD_alt_dial[$aad];
        $VD_campaign_id            = $AAD_campaign_id[$aad];
        $VD_lead_id                = $AAD_lead_id[$aad];
        $stmtA =
"SELECT auto_alt_dial,use_internal_dnc,use_campaign_dnc,use_other_campaign_dnc,call_limit_24hour_method,call_limit_24hour_scope,call_limit_24hour,call_limit_24hour_override FROM vicidial_campaigns where campaign_id='$AAD_campaign_id[$aad]';";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows = $sthA->rows;

        if ( $sthArows > 0 ) {
            @aryA                          = $sthA->fetchrow_array;
            $VD_auto_alt_dial              = $aryA[0];
            $VD_use_internal_dnc           = $aryA[1];
            $VD_use_campaign_dnc           = $aryA[2];
            $VD_use_other_campaign_dnc     = $aryA[3];
            $VD_call_limit_24hour_method   = $aryA[4];
            $VD_call_limit_24hour_scope    = $aryA[5];
            $VD_call_limit_24hour          = $aryA[6];
            $VD_call_limit_24hour_override = $aryA[7];
        }
        $sthA->finish();
        $event_string =
"|DNC record: $AAD_lead_id[$aad]|$AAD_campaign_id[$aad]|$VD_auto_alt_dial|$AAD_alt_dial[$aad]";
        &event_logger;
        if (
            (
                $VD_auto_alt_dial =~ /(ALT_ONLY|ALT_AND_ADDR3|ALT_AND_EXTENDED)/
            )
            && ( $VD_alt_dial =~ /NONE|MAIN/ )
          )
        {
            $alt_dial_skip = 0;
            $VD_alt_phone  = '';
            $stmtA =
"SELECT alt_phone,gmt_offset_now,state,list_id,phone_code,postal_code FROM vicidial_list where lead_id='$AAD_lead_id[$aad]';";
            if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows = $sthA->rows;
            if ( $sthArows > 0 ) {
                @aryA         = $sthA->fetchrow_array;
                $VD_alt_phone = $aryA[0];
                $VD_alt_phone =~ s/\D//gi;
                $VD_gmt_offset_now = $aryA[1];
                $VD_state          = $aryA[2];
                $VD_list_id        = $aryA[3];
                $VD_phone_code     = $aryA[4];
                $VD_postal_code    = $aryA[5];
            }
            $sthA->finish();
            if ( length($VD_alt_phone) > 5 ) {
                if (   ( $VD_use_internal_dnc =~ /Y/ )
                    || ( $VD_use_internal_dnc =~ /AREACODE/ ) )
                {
                    if ( $VD_use_internal_dnc =~ /AREACODE/ ) {
                        $alt_areacode = substr( $VD_alt_phone, 0, 3 );
                        $alt_areacode .= "XXXXXXX";
                        $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number IN('$VD_alt_phone','$alt_areacode');";
                    }
                    else {
                        $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number=\"$VD_alt_phone\";";
                    }
                    if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA             = $sthA->fetchrow_array;
                        $VD_alt_dnc_count = $aryA[0];
                    }
                    $sthA->finish();
                }
                else { $VD_alt_dnc_count = 0; }
                if (   ( $VD_use_campaign_dnc =~ /Y/ )
                    || ( $VD_use_campaign_dnc =~ /AREACODE/ ) )
                {
                    $temp_VD_campaign_id = $VD_campaign_id;
                    if ( length($VD_use_other_campaign_dnc) > 0 ) {
                        $temp_VD_campaign_id = $VD_use_other_campaign_dnc;
                    }
                    if ( $VD_use_campaign_dnc =~ /AREACODE/ ) {
                        $alt_areacode = substr( $VD_alt_phone, 0, 3 );
                        $alt_areacode .= "XXXXXXX";
                        $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number IN('$VD_alt_phone','$alt_areacode') and campaign_id='$temp_VD_campaign_id';";
                    }
                    else {
                        $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number=\"$VD_alt_phone\" and campaign_id='$temp_VD_campaign_id';";
                    }
                    if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA             = $sthA->fetchrow_array;
                        $VD_alt_dnc_count = ( $VD_alt_dnc_count + $aryA[0] );
                    }
                    $sthA->finish();
                }
                if ( $VD_alt_dnc_count < 1 ) {
                    $passed_24hour_call_count = 1;
                    if (
                        ( $SScall_limit_24hour > 0 )
                        && ( $VD_call_limit_24hour_method =~
                            /PHONE_NUMBER|LEAD/ )
                      )
                    {
                        $temp_24hour_phone       = $VD_alt_phone;
                        $temp_24hour_phone_code  = $VD_phone_code;
                        $temp_24hour_state       = $VD_state;
                        $temp_24hour_postal_code = $VD_postal_code;
                        $TEMPlead_id             = $AAD_lead_id[$aad];
                        $TEMPcampaign_id         = $AAD_campaign_id[$aad];
                        $TEMPcall_limit_24hour_method =
                          $VD_call_limit_24hour_method;
                        $TEMPcall_limit_24hour_scope =
                          $VD_call_limit_24hour_scope;
                        $TEMPcall_limit_24hour = $VD_call_limit_24hour;
                        $TEMPcall_limit_24hour_override =
                          $VD_call_limit_24hour_override;
                        $TFHCCLalt = 1;

                        if ( $DB > 0 ) {
                            print
"24-Hour Call Count Check: $SScall_limit_24hour|$TEMPcall_limit_24hour_method|$TEMPlead_id|\n";
                        }
                        &check_24hour_call_count;
                    }
                    if ( $passed_24hour_call_count > 0 ) {
                        $stmtA =
"UPDATE $vicidial_hopper SET status='READY',list_id='$VD_list_id',gmt_offset_now='$VD_gmt_offset_now',state='$VD_state',alt_dial='ALT',user='',priority='25' where hopper_id='$AAD_hopper_id[$aad]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DB) {
                            $event_string =
"--    VDH record updated: |$affected_rows|   |$stmtA|";
                            &event_logger;
                        }
                        $aad_string =
"$AAD_lead_id[$aad]|$VD_alt_phone|$AAD_campaign_id[$aad]|ALT|25|hopper insert|";
                        &aad_output;
                    }
                    else {
                        $alt_dial_skip   = 1;
                        $alt_skip_reason = '24-hour call count limit failed';
                    }
                }
                else {
                    $alt_dial_skip   = 1;
                    $alt_skip_reason = 'DNC check failed';
                }
            }
            else { $alt_dial_skip = 1; $alt_skip_reason = 'ALT phone invalid'; }
            if ( $alt_dial_skip > 0 ) {
                $VD_alt_dial = 'ALT';
                $aad_string =
"$AAD_lead_id[$aad]|$VD_alt_phone|$AAD_campaign_id[$aad]|ALT|0|hopper skip|$alt_skip_reason|";
                &aad_output;
            }
        }
        if (
            (
                   ( $VD_auto_alt_dial =~ /(ADDR3_ONLY)/ )
                && ( $VD_alt_dial =~ /NONE|MAIN/ )
            )
            || (   ( $VD_auto_alt_dial =~ /(ALT_AND_ADDR3)/ )
                && ( $VD_alt_dial =~ /ALT/ ) )
          )
        {
            $addr3_dial_skip = 0;
            $VD_address3     = '';
            $stmtA =
"SELECT address3,gmt_offset_now,state,list_id,phone_code,postal_code FROM vicidial_list where lead_id='$AAD_lead_id[$aad]';";
            if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows = $sthA->rows;
            if ( $sthArows > 0 ) {
                @aryA        = $sthA->fetchrow_array;
                $VD_address3 = $aryA[0];
                $VD_address3 =~ s/\D//gi;
                $VD_gmt_offset_now = $aryA[1];
                $VD_state          = $aryA[2];
                $VD_list_id        = $aryA[3];
                $VD_phone_code     = $aryA[4];
                $VD_postal_code    = $aryA[5];
            }
            $sthA->finish();
            if ( length($VD_address3) > 5 ) {
                if (   ( $VD_use_internal_dnc =~ /Y/ )
                    || ( $VD_use_internal_dnc =~ /AREACODE/ ) )
                {
                    if ( $VD_use_internal_dnc =~ /AREACODE/ ) {
                        $addr3_areacode = substr( $VD_address3, 0, 3 );
                        $addr3_areacode .= "XXXXXXX";
                        $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number IN('$VD_address3','$addr3_areacode');";
                    }
                    else {
                        $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number=\"$VD_address3\";";
                    }
                    if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA             = $sthA->fetchrow_array;
                        $VD_alt_dnc_count = $aryA[0];
                    }
                    $sthA->finish();
                }
                else { $VD_alt_dnc_count = 0; }
                if (   ( $VD_use_campaign_dnc =~ /Y/ )
                    || ( $VD_use_campaign_dnc =~ /AREACODE/ ) )
                {
                    $temp_VD_campaign_id = $VD_campaign_id;
                    if ( length($VD_use_other_campaign_dnc) > 0 ) {
                        $temp_VD_campaign_id = $VD_use_other_campaign_dnc;
                    }
                    if ( $VD_use_campaign_dnc =~ /AREACODE/ ) {
                        $addr3_areacode = substr( $VD_address3, 0, 3 );
                        $addr3_areacode .= "XXXXXXX";
                        $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number IN('$VD_address3','$addr3_areacode') and campaign_id='$temp_VD_campaign_id';";
                    }
                    else {
                        $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number=\"$VD_address3\" and campaign_id='$temp_VD_campaign_id';";
                    }
                    if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA             = $sthA->fetchrow_array;
                        $VD_alt_dnc_count = ( $VD_alt_dnc_count + $aryA[0] );
                    }
                    $sthA->finish();
                }
                if ( $VD_alt_dnc_count < 1 ) {
                    $passed_24hour_call_count = 1;
                    if (
                        ( $SScall_limit_24hour > 0 )
                        && ( $VD_call_limit_24hour_method =~
                            /PHONE_NUMBER|LEAD/ )
                      )
                    {
                        $temp_24hour_phone       = $VD_address3;
                        $temp_24hour_phone_code  = $VD_phone_code;
                        $temp_24hour_state       = $VD_state;
                        $temp_24hour_postal_code = $VD_postal_code;
                        $TEMPlead_id             = $AAD_lead_id[$aad];
                        $TEMPcampaign_id         = $VD_campaign_id;
                        $TEMPcall_limit_24hour_method =
                          $VD_call_limit_24hour_method;
                        $TEMPcall_limit_24hour_scope =
                          $VD_call_limit_24hour_scope;
                        $TEMPcall_limit_24hour = $VD_call_limit_24hour;
                        $TEMPcall_limit_24hour_override =
                          $VD_call_limit_24hour_override;
                        $TFHCCLalt = 1;

                        if ( $DB > 0 ) {
                            print
"24-Hour Call Count Check: $SScall_limit_24hour|$TEMPcall_limit_24hour_method|$TEMPlead_id|\n";
                        }
                        &check_24hour_call_count;
                    }
                    if ( $passed_24hour_call_count > 0 ) {
                        $stmtA =
"UPDATE $vicidial_hopper SET status='READY',list_id='$VD_list_id',gmt_offset_now='$VD_gmt_offset_now',state='$VD_state',alt_dial='ADDR3',user='',priority='20' where hopper_id='$AAD_hopper_id[$aad]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DB) {
                            $event_string =
"--    VDH record updated: |$affected_rows|   |$stmtA|";
                            &event_logger;
                        }
                        $aad_string =
"$AAD_lead_id[$aad]|$VD_address3|$AAD_campaign_id[$aad]|ADDR3|20|hopper insert|";
                        &aad_output;
                    }
                    else {
                        $addr3_dial_skip   = 1;
                        $addr3_skip_reason = '24-hour call count limit failed';
                    }
                }
                else {
                    $addr3_dial_skip   = 1;
                    $addr3_skip_reason = 'DNC check failed';
                }
            }
            else {
                $addr3_dial_skip   = 1;
                $addr3_skip_reason = 'ADDR3 phone invalid';
            }
            if ( $addr3_dial_skip > 0 ) {
                $VD_alt_dial = 'ADDR3';
                $aad_string =
"$AAD_lead_id[$aad]|$VD_address3|$AAD_campaign_id[$aad]|ADDR3|0|hopper skip|$addr3_skip_reason|";
                &aad_output;
            }
        }
        if (
            (
                   ( $VD_auto_alt_dial =~ /(EXTENDED_ONLY)/ )
                && ( $VD_alt_dial =~ /NONE|MAIN/ )
            )
            || (   ( $VD_auto_alt_dial =~ /(ALT_AND_EXTENDED)/ )
                && ( $VD_alt_dial =~ /ALT/ ) )
            || (
                (
                    $VD_auto_alt_dial =~
                    /ADDR3_AND_EXTENDED|ALT_AND_ADDR3_AND_EXTENDED/
                )
                && ( $VD_alt_dial =~ /ADDR3/ )
            )
            || (   ( $VD_auto_alt_dial =~ /(EXTENDED)/ )
                && ( $VD_alt_dial =~ /X/ )
                && ( $VD_alt_dial !~ /XLAST/ ) )
          )
        {
            if   ( $VD_alt_dial =~ /ADDR3/ ) { $Xlast = 0; }
            else                             { $Xlast = $VD_alt_dial; }
            $Xlast =~ s/\D//gi;
            if ( length($Xlast) < 1 ) { $Xlast = 0; }
            $VD_altdialx = '';
            $stmtA =
"SELECT gmt_offset_now,state,list_id,postal_code FROM vicidial_list where lead_id='$VD_lead_id';";
            if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows = $sthA->rows;

            if ( $sthArows > 0 ) {
                @aryA              = $sthA->fetchrow_array;
                $VD_gmt_offset_now = $aryA[0];
                $VD_state          = $aryA[1];
                $VD_list_id        = $aryA[2];
                $VD_postal_code    = $aryA[3];
            }
            $sthA->finish();
            $alt_dial_phones_count = 0;
            $stmtA =
"SELECT count(*) FROM vicidial_list_alt_phones where lead_id='$AAD_lead_id[$aad]';";
            if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows = $sthA->rows;

            if ( $sthArows > 0 ) {
                @aryA                  = $sthA->fetchrow_array;
                $alt_dial_phones_count = $aryA[0];
            }
            $sthA->finish();
            if ( $alt_dial_phones_count <= $Xlast ) {
                $stmtA =
"DELETE FROM $vicidial_hopper where hopper_id='$AAD_hopper_id[$aad]';";
                $affected_rows = $dbhA->do($stmtA);
                if ($DB) {
                    $event_string =
"--    VDH record DNC deleted: |$affected_rows|   |$stmtA|X$Xlast|$VD_altdial_id|";
                    &event_logger;
                }
            }
            while (( $alt_dial_phones_count > 0 )
                && ( $alt_dial_phones_count > $Xlast ) )
            {
                $Xlast++;
                $stmtA =
"SELECT alt_phone_id,phone_number,active,phone_code FROM vicidial_list_alt_phones where lead_id='$VD_lead_id' and alt_phone_count='$Xlast';";
                if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArows = $sthA->rows;
                if ( $sthArows > 0 ) {
                    @aryA                  = $sthA->fetchrow_array;
                    $VD_altdial_id         = $aryA[0];
                    $VD_altdial_phone      = $aryA[1];
                    $VD_altdial_active     = $aryA[2];
                    $VD_altdial_phone_code = $aryA[3];
                }
                else { $Xlast = 9999999999; }
                $sthA->finish();
                if ( $VD_altdial_active =~ /Y/ ) {
                    if (   ( $VD_use_internal_dnc =~ /Y/ )
                        || ( $VD_use_internal_dnc =~ /AREACODE/ ) )
                    {
                        if ( $VD_use_internal_dnc =~ /AREACODE/ ) {
                            $ad_areacode = substr( $VD_altdial_phone, 0, 3 );
                            $ad_areacode .= "XXXXXXX";
                            $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number IN('$VD_altdial_phone','$ad_areacode');";
                        }
                        else {
                            $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number=\"$VD_altdial_phone\";";
                        }
                        if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows = $sthA->rows;
                        if ( $sthArows > 0 ) {
                            @aryA             = $sthA->fetchrow_array;
                            $VD_alt_dnc_count = $aryA[0];
                        }
                        $sthA->finish();
                    }
                    else { $VD_alt_dnc_count = 0; }
                    if (   ( $VD_use_campaign_dnc =~ /Y/ )
                        || ( $VD_use_campaign_dnc =~ /AREACODE/ ) )
                    {
                        $temp_VD_campaign_id = $VD_campaign_id;
                        if ( length($VD_use_other_campaign_dnc) > 0 ) {
                            $temp_VD_campaign_id = $VD_use_other_campaign_dnc;
                        }
                        if ( $VD_use_campaign_dnc =~ /AREACODE/ ) {
                            $ad_areacode = substr( $VD_altdial_phone, 0, 3 );
                            $ad_areacode .= "XXXXXXX";
                            $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number IN('$VD_altdial_phone','$ad_areacode') and campaign_id='$temp_VD_campaign_id';";
                        }
                        else {
                            $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number=\"$VD_altdial_phone\" and campaign_id='$temp_VD_campaign_id';";
                        }
                        if ($DB) { $event_string = "|$stmtA|"; &event_logger; }
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows = $sthA->rows;
                        if ( $sthArows > 0 ) {
                            @aryA = $sthA->fetchrow_array;
                            $VD_alt_dnc_count =
                              ( $VD_alt_dnc_count + $aryA[0] );
                        }
                        $sthA->finish();
                    }
                    if ( $VD_alt_dnc_count < 1 ) {
                        if ( $alt_dial_phones_count eq '$Xlast' ) {
                            $Xlast = 'LAST';
                        }
                        $passed_24hour_call_count = 1;
                        if (
                            ( $SScall_limit_24hour > 0 )
                            && ( $VD_call_limit_24hour_method =~
                                /PHONE_NUMBER|LEAD/ )
                          )
                        {
                            $temp_24hour_phone       = $VD_altdial_phone;
                            $temp_24hour_phone_code  = $VD_altdial_phone_code;
                            $temp_24hour_state       = $VD_state;
                            $temp_24hour_postal_code = $VD_postal_code;
                            $TEMPlead_id             = $AAD_lead_id[$aad];
                            $TEMPcampaign_id         = $VD_campaign_id;
                            $TEMPcall_limit_24hour_method =
                              $VD_call_limit_24hour_method;
                            $TEMPcall_limit_24hour_scope =
                              $VD_call_limit_24hour_scope;
                            $TEMPcall_limit_24hour = $VD_call_limit_24hour;
                            $TEMPcall_limit_24hour_override =
                              $VD_call_limit_24hour_override;
                            $TFHCCLalt = 1;

                            if ( $DB > 0 ) {
                                print
"24-Hour Call Count Check: $SScall_limit_24hour|$TEMPcall_limit_24hour_method|$TEMPlead_id|\n";
                            }
                            &check_24hour_call_count;
                        }
                        if ( $passed_24hour_call_count > 0 ) {
                            $stmtA =
"UPDATE $vicidial_hopper SET status='READY',list_id='$VD_list_id',gmt_offset_now='$VD_gmt_offset_now',state='$VD_state',alt_dial='X$Xlast',user='',priority='15' where hopper_id='$AAD_hopper_id[$aad]';";
                            $affected_rows = $dbhA->do($stmtA);
                            if ($DB) {
                                $event_string =
"--    VDH record updated: |$affected_rows|   |$stmtA|X$Xlast|$VD_altdial_id|";
                                &event_logger;
                            }
                            $aad_string =
"$AAD_lead_id[$aad]|$VD_altdial_phone|$AAD_campaign_id[$aad]|X$Xlast|15|hopper insert|";
                            &aad_output;
                            $Xlast              = 9999999999;
                            $DNC_hopper_trigger = 0;
                        }
                        else { $DNC_hopper_trigger = 1; }
                    }
                    else { $DNC_hopper_trigger = 1; }
                    if ( $DNC_hopper_trigger > 0 ) {
                        if ( $alt_dial_phones_count eq '$Xlast' ) {
                            $Xlast = 'LAST';
                        }
                        $stmtA =
"UPDATE $vicidial_hopper SET status='DNC',list_id='$VD_list_id',gmt_offset_now='$VD_gmt_offset_now',state='$VD_state',alt_dial='X$Xlast',user='',priority='15' where hopper_id='$AAD_hopper_id[$aad]';";
                        $affected_rows = $dbhA->do($stmtA);
                        if ($DB) {
                            $event_string =
"--    VDH record DNC updated: |$affected_rows|   |$stmtA|X$Xlast|$VD_altdial_id|";
                            &event_logger;
                        }
                        $Xlast = 9999999999;
                        if ($DB) {
                            $event_string =
"--    VDH alt dial is DNC|X$Xlast|$VD_altdial_phone|";
                            &event_logger;
                        }
                        $aad_string =
"$AAD_lead_id[$aad]|$VD_altdial_phone|$AAD_campaign_id[$aad]|DNC|15|hopper insert|";
                        &aad_output;
                    }
                }
            }
        }
        if ( $VD_alt_dial =~ /XLAST/ ) {
            $stmtA =
"DELETE FROM $vicidial_hopper where hopper_id='$AAD_hopper_id[$aad]';";
            $affected_rows = $dbhA->do($stmtA);
            if ($DB) {
                $event_string =
"--    VDH record DNC deleted: |$affected_rows|   |$stmtA|X$Xlast|$VD_altdial_id|";
                &event_logger;
            }
        }
        $aad++;
    }
}
if ( $SScall_limit_24hour > 0 ) {
    $TEMPtime_since_reset =
      ( $SScall_limit_24hour_now - $SScall_limit_24hour_reset );
    if ($DBX) {
        $event_string =
"Checking for 24-Hour Call Limit skipped leads reset: |$TEMPtime_since_reset = ($SScall_limit_24hour_now - $SScall_limit_24hour_reset)|";
        print "$event_string\n";
        &event_logger;
    }
    if ( $TEMPtime_since_reset > 3600 ) {
        $stmtA =
"UPDATE vicidial_list SET called_since_last_reset='N' where called_since_last_reset='D' and (modify_date <= (NOW() - INTERVAL 1 HOUR));";
        $affected_rows = $dbhA->do($stmtA);
        $stmtB = "UPDATE system_settings SET call_limit_24hour_reset=NOW();";
        $affected_rowsB = $dbhA->do($stmtB);
        if ($DB) {
            $event_string =
"24-Hour Call Limit skipped leads reset: |$affected_rows|$affected_rowsB|   |$stmtA|$stmtB|";
            print "$event_string\n";
            &event_logger;
        }
    }
}
@campaign_id              = @MT;
$ANY_hopper_vlc_dup_check = 'N';
if ( length($CLIcampaign) > 1 ) {
    $stmtA =
"SELECT campaign_id,lead_order,hopper_level,auto_dial_level,local_call_time,lead_filter_id,use_internal_dnc,dial_method,available_only_ratio_tally,adaptive_dropped_percentage,adaptive_maximum_level,dial_statuses,list_order_mix,use_campaign_dnc,drop_lockout_time,no_hopper_dialing,auto_alt_dial_statuses,dial_timeout,auto_hopper_multi,use_auto_hopper,auto_trim_hopper,lead_order_randomize,lead_order_secondary,call_count_limit,hopper_vlc_dup_check,use_other_campaign_dnc,callback_dnc,hopper_drop_run_trigger,daily_call_count_limit,daily_limit_manual,call_limit_24hour_method,call_limit_24hour_scope,call_limit_24hour,call_limit_24hour_override,demographic_quotas,demographic_quotas_container from vicidial_campaigns where campaign_id IN('$CLIcampaign');";
}
else {
    $stmtA =
"SELECT campaign_id,lead_order,hopper_level,auto_dial_level,local_call_time,lead_filter_id,use_internal_dnc,dial_method,available_only_ratio_tally,adaptive_dropped_percentage,adaptive_maximum_level,dial_statuses,list_order_mix,use_campaign_dnc,drop_lockout_time,no_hopper_dialing,auto_alt_dial_statuses,dial_timeout,auto_hopper_multi,use_auto_hopper,auto_trim_hopper,lead_order_randomize,lead_order_secondary,call_count_limit,hopper_vlc_dup_check,use_other_campaign_dnc,callback_dnc,hopper_drop_run_trigger,daily_call_count_limit,daily_limit_manual,call_limit_24hour_method,call_limit_24hour_scope,call_limit_24hour,call_limit_24hour_override,demographic_quotas,demographic_quotas_container from vicidial_campaigns where active='Y';";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthArows  = $sthA->rows;
$rec_count = 0;
while ( $sthArows > $rec_count ) {
    @aryA                    = $sthA->fetchrow_array;
    $campaign_id[$rec_count] = $aryA[0];
    $lead_order[$rec_count]  = $aryA[1];
    if   ( !$CLIlevel ) { $hopper_level[$rec_count] = $aryA[2]; }
    else                { $hopper_level[$rec_count] = "$CLIlevel"; }
    $auto_dial_level[$rec_count]              = $aryA[3];
    $local_call_time[$rec_count]              = $aryA[4];
    $lead_filter_id[$rec_count]               = $aryA[5];
    $use_internal_dnc[$rec_count]             = $aryA[6];
    $dial_method[$rec_count]                  = $aryA[7];
    $available_only_ratio_tally[$rec_count]   = $aryA[8];
    $adaptive_dropped_percentage[$rec_count]  = $aryA[9];
    $adaptive_maximum_level[$rec_count]       = $aryA[10];
    $dial_statuses[$rec_count]                = $aryA[11];
    $list_order_mix[$rec_count]               = $aryA[12];
    $use_campaign_dnc[$rec_count]             = $aryA[13];
    $drop_lockout_time[$rec_count]            = $aryA[14];
    $no_hopper_dialing[$rec_count]            = $aryA[15];
    $auto_alt_dial_statuses[$rec_count]       = $aryA[16];
    $dial_timeout[$rec_count]                 = $aryA[17];
    $auto_hopper_multi[$rec_count]            = $aryA[18];
    $use_auto_hopper[$rec_count]              = $aryA[19];
    $auto_trim_hopper[$rec_count]             = $aryA[20];
    $lead_order_randomize[$rec_count]         = $aryA[21];
    $lead_order_secondary[$rec_count]         = $aryA[22];
    $call_count_limit[$rec_count]             = $aryA[23];
    $hopper_vlc_dup_check[$rec_count]         = $aryA[24];
    $use_other_campaign_dnc[$rec_count]       = $aryA[25];
    $callback_dnc[$rec_count]                 = $aryA[26];
    $hopper_drop_run_trigger[$rec_count]      = $aryA[27];
    $daily_call_count_limit[$rec_count]       = $aryA[28];
    $daily_limit_manual[$rec_count]           = $aryA[29];
    $call_limit_24hour_method[$rec_count]     = $aryA[30];
    $call_limit_24hour_scope[$rec_count]      = $aryA[31];
    $call_limit_24hour[$rec_count]            = $aryA[32];
    $call_limit_24hour_override[$rec_count]   = $aryA[33];
    $demographic_quotas[$rec_count]           = $aryA[34];
    $demographic_quotas_container[$rec_count] = $aryA[35];
    $demographic_quotasSQL[$rec_count]        = '';

    if (
        ( $demographic_quotas[$rec_count] =~ /ENABLED|COMPLETE/ )
        && (   ( length( $demographic_quotas_container[$rec_count] ) > 0 )
            && ( $demographic_quotas_container[$rec_count] !~ /DISABLED/ ) )
      )
    {
        $demographic_quotasSQL[$rec_count] = "and rank!='-9999'";
    }
    if ( $hopper_vlc_dup_check[$rec_count] =~ /Y/ ) {
        $ANY_hopper_vlc_dup_check = 'Y';
    }
    if ( $use_auto_hopper[$rec_count] =~ /Y/ ) {
        $stmtB =
"SELECT COUNT(*) FROM vicidial_live_agents WHERE ( (campaign_id='$campaign_id[$rec_count]') or (dial_campaign_id='$campaign_id[$rec_count]') ) and status IN ('READY','QUEUE','INCALL','CLOSER') and last_update_time >= '$VDL_tensec'";
        $sthB = $dbhA->prepare($stmtB) or die "preparing: ", $dbhA->errstr;
        $sthB->execute or die "executing: $stmtB ",          $dbhA->errstr;
        @aryAgent   = $sthB->fetchrow_array;
        $num_agents = $aryAgent[0];
        $sthB->finish();
        $stmtB =
"SELECT COUNT(*) FROM vicidial_live_agents WHERE ( (campaign_id='$campaign_id[$rec_count]') or (dial_campaign_id='$campaign_id[$rec_count]') ) and status IN ('PAUSED') and last_update_time >= '$VDL_tensec' and last_state_change >= '$VDL_one'";
        $sthB = $dbhA->prepare($stmtB) or die "preparing: ", $dbhA->errstr;
        $sthB->execute or die "executing: $stmtB ",          $dbhA->errstr;
        @aryAgent          = $sthB->fetchrow_array;
        $num_paused_agents = $aryAgent[0];
        $sthB->finish();

        if ( $auto_hopper_multi[$rec_count] <= 0 ) {
            $auto_hopper_multi[$rec_count] = 0.1;
        }
        $minimum_hopper_level = $hopper_level[$rec_count];
        $dial_timeout_mult    = 60 / $dial_timeout[$rec_count];
        $auto_hopper_level =
          roundup( $auto_hopper_multi[$rec_count] *
              ( $num_agents + $num_paused_agents ) *
              $auto_dial_level[$rec_count] *
              $dial_timeout_mult );
        if ( $auto_hopper_level >= $minimum_hopper_level ) {
            $hopper_level[$rec_count] = $auto_hopper_level;
        }
        else {
            $hopper_level[$rec_count] = $minimum_hopper_level;
        }
        if ($DB) {
            print
"---------------Auto Hopper Level Enabled For $campaign_id[$rec_count]---------------------\n";
            print "Number of Agents = $num_agents\n";
            print "Number of Paused Agents = $num_paused_agents\n";
            print "Auto Dial Level = $auto_dial_level[$rec_count]\n";
            print "Dial Timeout = $dial_timeout[$rec_count]\n";
            print "Dial Timeout Multiplier = $dial_timeout_mult\n";
            print "Auto Hopper Multipier = $auto_hopper_multi[$rec_count]\n";
            print "Minimum Hopper Level = $minimum_hopper_level\n";
            print "Auto Hopper Level Adjustment = $auto_hopper_level\n";
            print "Final Hopper Level = $hopper_level[$rec_count]\n\n";
        }
        $stmtB =
"UPDATE vicidial_campaigns set auto_hopper_level = '$auto_hopper_level' where campaign_id='$campaign_id[$rec_count]'";
        $affected_rows = $dbhA->do($stmtB);
    }
    if ( $auto_trim_hopper[$rec_count] =~ /Y/ ) {
        if ($DB) {
            print
"---------------Auto Trim Hopper Enabled For $campaign_id[$rec_count]---------------------\n";
        }
        $stmtB =
"SELECT COUNT(*) FROM $vicidial_hopper WHERE campaign_id='$campaign_id[$rec_count]' and status IN ('READY') and source IN('S','N');";
        $sthB = $dbhA->prepare($stmtB) or die "preparing: ", $dbhA->errstr;
        $sthB->execute or die "executing: $stmtB ",          $dbhA->errstr;
        @aryLead    = $sthB->fetchrow_array;
        $camp_leads = $aryLead[0];
        $sthB->finish();
        if ($DB) {
            print "Leads in Hopper for this Campaign = $camp_leads\n";
            print
              "Hopper Level for this Campaign = $hopper_level[$rec_count]\n";
        }
        if ( $camp_leads > ( 2 * $hopper_level[$rec_count] ) ) {
            $num_to_delete = $camp_leads - 2 * $hopper_level[$rec_count];
            $stmtB =
"DELETE FROM $vicidial_hopper WHERE campaign_id='$campaign_id[$rec_count]' AND source='S' AND status IN ('READY') LIMIT $num_to_delete";
            $affected_rows = $dbhA->do($stmtB);
            if ($DB) {
                print
"TOO MANY LEADS IN THE HOPPER ( $camp_leads > 2 * $hopper_level[$rec_count] ). \n";
                print
"DELETING $num_to_delete LEADS FROM THE HOPPER.  |$affected_rows|\n";
            }
        }
        if ($DB) { print "\n"; }
    }
    if ( length( $use_other_campaign_dnc[$rec_count] ) > 0 ) {
        if ($DB) {
            print
"OTHER CAMPAIGN DNC SELECTED: $use_other_campaign_dnc[$rec_count]\n";
        }
    }
    $rec_count++;
}
$sthA->finish();
if ($DB) {
    print "CAMPAIGNS TO PROCESS HOPPER FOR:  $rec_count|$#campaign_id\n";
}
if ( $ANY_hopper_vlc_dup_check =~ /Y/ ) {
    $live_leads = '';
    $live_vlc   = '';
    $vacLIVE    = 0;
    $vlaLIVE    = 0;
    $vlLIVE     = 0;
    $stmtA =
      "SELECT lead_id FROM vicidial_auto_calls where lead_id NOT IN('0');";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows = $sthA->rows;

    while ( $sthArows > $vacLIVE ) {
        @aryA = $sthA->fetchrow_array;
        $live_leads .= "'$aryA[0]',";
        $vacLIVE++;
    }
    chop($live_leads);
    if ( length($live_leads) < 2 ) { $live_leads = "''"; }
    $sthA->finish();
    $stmtA =
"SELECT lead_id FROM vicidial_live_agents where lead_id NOT IN('0',$live_leads);";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows = $sthA->rows;

    while ( $sthArows > $vlaLIVE ) {
        @aryA = $sthA->fetchrow_array;
        $live_leads .= ",'$aryA[0]'";
        $vlaLIVE++;
    }
    $sthA->finish();
    $stmtA =
"SELECT vendor_lead_code FROM vicidial_list where lead_id IN($live_leads) and vendor_lead_code!='';";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows = $sthA->rows;
    while ( $sthArows > $vlLIVE ) {
        @aryA = $sthA->fetchrow_array;
        if ( ( length( $aryA[0] ) > 0 ) && ( $aryA[0] !~ /^NULL/ ) ) {
            $live_vlc .= "\"$aryA[0]\",";
        }
        $vlLIVE++;
    }
    $sthA->finish();
    if ($DB)  { print "VLC Dup Check Live Calls: $vacLIVE|$vlaLIVE|$vlLIVE\n"; }
    if ($DBX) { print "     $live_leads|$live_vlc\n"; }
}
$i = 0;
foreach (@campaign_id) {
    $DNCskip              = 0;
    $DCCLskip             = 0;
    $TFHCCLskip           = 0;
    $hopper_begin_output  = '';
    $insert_end_outputSQL = '';
    if ( $no_hopper_dialing[$i] =~ /Y/ ) {
        if ($DB) {
            print
"Campaign $campaign_id[$i] set to no-hopper-dialing: $no_hopper_dialing[$i]\n";
        }
        $hopper_begin_output =
"Campaign $campaign_id[$i] set to no-hopper-dialing: $no_hopper_dialing[$i]\n";
        $stmtA =
"SELECT count(*) FROM $vicidial_hopper where campaign_id='$campaign_id[$i]' and status NOT IN('QUEUE','HOLD');";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        @aryA           = $sthA->fetchrow_array;
        $NOHOPPER_count = $aryA[0];
        if ($DBX) { print "NO HOPPER COUNT: $NOHOPPER_count|$stmtA|\n"; }
        $sthA->finish();

        if ( $NOHOPPER_count > 0 ) {
            $stmtA =
"DELETE from $vicidial_hopper where campaign_id='$campaign_id[$i]' and status NOT IN('QUEUE','HOLD');";
            $affected_rows = $dbhA->do($stmtA);
            if ($DB) { print "No Hopper delete:  $affected_rows\n"; }
            $event_string = "|NO HOPPER DELETE|$affected_rows|";
            &event_logger;
        }
    }
    else {
        $vicidial_log = 'vicidial_log';
        $VCSdialable_leads[$i] = 0;
        if ( $list_order_mix[$i] =~ /DISABLED/ ) {
            $dial_statuses[$i] =~ s/ -$//gi;
            @Dstatuses     = split( / /, $dial_statuses[$i] );
            $Ds_to_print   = ( ($#Dstatuses) + 0 );
            $STATUSsql[$i] = '';
            $o             = 0;
            while ( $Ds_to_print > $o ) {
                $o++;
                $STATUSsql[$i] .= "'$Dstatuses[$o]',";
            }
            if ( length( $STATUSsql[$i] ) < 3 ) { $STATUSsql[$i] = "''"; }
            else                                { chop( $STATUSsql[$i] ); }
        }
        $stmtA =
"SELECT dialable_leads from vicidial_campaign_stats where campaign_id='$campaign_id[$i]';";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows  = $sthA->rows;
        $rec_count = 0;
        while ( $sthArows > $rec_count ) {
            @aryA = $sthA->fetchrow_array;
            $VCSdialable_leads[$i] = $aryA[0];
            $rec_count++;
        }
        $sthA->finish();
        if ($DB) {
            print
"\nStarting hopper run for $campaign_id[$i] campaign- GMT: $local_call_time[$i]   HOPPER LEVEL: $hopper_level[$i]   ORDER: $lead_order[$i]|$lead_order_randomize[$i]|$lead_order_secondary[$i]\n";
        }
        $hopper_begin_output .=
"Starting hopper run for $campaign_id[$i] campaign- GMT: $local_call_time[$i]   HOPPER LEVEL: $hopper_level[$i]   ORDER: $lead_order[$i]|$lead_order_randomize[$i]|$lead_order_secondary[$i]\n";
        $g           = 0;
        $p           = '13';
        $GMT_gmt[0]  = '';
        $GMT_hour[0] = '';
        $GMT_day[0]  = '';
        if ($DBX) { print "\n   |GMT-DAY-HOUR|   "; }

        while ( $p > -13 ) {
            $pzone = ( $GMT_now + ( $p * 3600 ) );
            (
                $psec,  $pmin, $phour, $pmday, $pmon,
                $pyear, $pday, $pyday, $pisdst
            ) = localtime($pzone);
            $phour        = ( $phour * 100 );
            $tz           = sprintf( "%.2f", $p );
            $GMT_gmt[$g]  = "$tz";
            $GMT_day[$g]  = "$pday";
            $GMT_hour[$g] = ( $phour + $pmin );
            $p            = ( $p - 0.25 );
            if ($DBX) { print "|$GMT_gmt[$g]-$GMT_day[$g]-$GMT_hour[$g]|"; }
            $g++;
        }
        if ($DBX) { print "\n"; }
        $stmtA =
"SELECT call_time_id,call_time_name,call_time_comments,ct_default_start,ct_default_stop,ct_sunday_start,ct_sunday_stop,ct_monday_start,ct_monday_stop,ct_tuesday_start,ct_tuesday_stop,ct_wednesday_start,ct_wednesday_stop,ct_thursday_start,ct_thursday_stop,ct_friday_start,ct_friday_stop,ct_saturday_start,ct_saturday_stop,ct_state_call_times,ct_holidays FROM vicidial_call_times where call_time_id='$local_call_time[$i]';";
        if ($DBX) { print "   |$stmtA|\n"; }
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows  = $sthA->rows;
        $rec_count = 0;

        while ( $sthArows > $rec_count ) {
            @aryA                 = $sthA->fetchrow_array;
            $Gct_default_start    = $aryA[3];
            $Gct_default_stop     = $aryA[4];
            $Gct_sunday_start     = $aryA[5];
            $Gct_sunday_stop      = $aryA[6];
            $Gct_monday_start     = $aryA[7];
            $Gct_monday_stop      = $aryA[8];
            $Gct_tuesday_start    = $aryA[9];
            $Gct_tuesday_stop     = $aryA[10];
            $Gct_wednesday_start  = $aryA[11];
            $Gct_wednesday_stop   = $aryA[12];
            $Gct_thursday_start   = $aryA[13];
            $Gct_thursday_stop    = $aryA[14];
            $Gct_friday_start     = $aryA[15];
            $Gct_friday_stop      = $aryA[16];
            $Gct_saturday_start   = $aryA[17];
            $Gct_saturday_stop    = $aryA[18];
            $Gct_state_call_times = $aryA[19];
            $Gct_holidays         = $aryA[20];
            $rec_count++;
        }
        $sthA->finish();
        $holiday_id = '';
        if ( length($Gct_holidays) > 2 ) {
            $Gct_holidaysSQL = $Gct_holidays;
            $Gct_holidaysSQL =~ s/^\||\|$//gi;
            $Gct_holidaysSQL =~ s/\|/','/gi;
            $Gct_holidaysSQL = "'$Gct_holidaysSQL'";
            $stmtC =
"SELECT holiday_id,holiday_date,holiday_name,ct_default_start,ct_default_stop from vicidial_call_time_holidays where holiday_id IN($Gct_holidaysSQL) and holiday_status='ACTIVE' and holiday_date='$YMD' order by holiday_id;";
            if ($DBX) { print "   |$stmtC|\n"; }
            $sthC = $dbhA->prepare($stmtC) or die "preparing: ", $dbhA->errstr;
            $sthC->execute or die "executing: $stmtC ",          $dbhA->errstr;
            $sthCrows = $sthC->rows;

            if ( $sthCrows > 0 ) {
                @aryC         = $sthC->fetchrow_array;
                $holiday_id   = $aryC[0];
                $holiday_date = $aryC[1];
                $holiday_name = $aryC[2];
                if (   ( $Gct_default_start < $aryC[3] )
                    && ( $Gct_default_stop > 0 ) )
                {
                    $Gct_default_start = $aryC[3];
                }
                if (   ( $Gct_default_stop > $aryC[4] )
                    && ( $Gct_default_stop > 0 ) )
                {
                    $Gct_default_stop = $aryC[4];
                }
                if (   ( $Gct_sunday_start < $aryC[3] )
                    && ( $Gct_sunday_stop > 0 ) )
                {
                    $Gct_sunday_start = $aryC[3];
                }
                if (   ( $Gct_sunday_stop > $aryC[4] )
                    && ( $Gct_sunday_stop > 0 ) )
                {
                    $Gct_sunday_stop = $aryC[4];
                }
                if (   ( $Gct_monday_start < $aryC[3] )
                    && ( $Gct_monday_stop > 0 ) )
                {
                    $Gct_monday_start = $aryC[3];
                }
                if (   ( $Gct_monday_stop > $aryC[4] )
                    && ( $Gct_monday_stop > 0 ) )
                {
                    $Gct_monday_stop = $aryC[4];
                }
                if (   ( $Gct_tuesday_start < $aryC[3] )
                    && ( $Gct_tuesday_stop > 0 ) )
                {
                    $Gct_tuesday_start = $aryC[3];
                }
                if (   ( $Gct_tuesday_stop > $aryC[4] )
                    && ( $Gct_tuesday_stop > 0 ) )
                {
                    $Gct_tuesday_stop = $aryC[4];
                }
                if (   ( $Gct_wednesday_start < $aryC[3] )
                    && ( $Gct_wednesday_stop > 0 ) )
                {
                    $Gct_wednesday_start = $aryC[3];
                }
                if (   ( $Gct_wednesday_stop > $aryC[4] )
                    && ( $Gct_wednesday_stop > 0 ) )
                {
                    $Gct_wednesday_stop = $aryC[4];
                }
                if (   ( $Gct_thursday_start < $aryC[3] )
                    && ( $Gct_thursday_stop > 0 ) )
                {
                    $Gct_thursday_start = $aryC[3];
                }
                if (   ( $Gct_thursday_stop > $aryC[4] )
                    && ( $Gct_thursday_stop > 0 ) )
                {
                    $Gct_thursday_stop = $aryC[4];
                }
                if (   ( $Gct_friday_start < $aryC[3] )
                    && ( $Gct_friday_stop > 0 ) )
                {
                    $Gct_friday_start = $aryC[3];
                }
                if (   ( $Gct_friday_stop > $aryC[4] )
                    && ( $Gct_friday_stop > 0 ) )
                {
                    $Gct_friday_stop = $aryC[4];
                }
                if (   ( $Gct_saturday_start < $aryC[3] )
                    && ( $Gct_saturday_stop > 0 ) )
                {
                    $Gct_saturday_start = $aryC[3];
                }
                if (   ( $Gct_saturday_stop > $aryC[4] )
                    && ( $Gct_saturday_stop > 0 ) )
                {
                    $Gct_saturday_stop = $aryC[4];
                }
                if ($DB) {
                    print
"     CALL TIME HOLIDAY FOUND!   $local_call_time[$i]|$holiday_id|$holiday_date|$holiday_name|$Gct_default_start|$Gct_default_stop|\n";
                }
                $hopper_begin_output .=
"     CALL TIME HOLIDAY FOUND!   $local_call_time[$i]|$holiday_id|$holiday_date|$holiday_name|$Gct_default_start|$Gct_default_stop|\n";
            }
            $sthC->finish();
        }
        $lct_gap = 0
          ; # number of seconds from stopping of calling to starting of calling based on local call time
        $lct_begin =
          0;    # hour and minute of the begin time for the local call time
        $lct_end = 0;  # hour and minute of the end time for the local call time
        $secYESTERDAY = ( $secX - ( 24 * 3600 ) );
        (
            $ksec,  $kmin,       $khour, $kmday, $kmon,
            $kyear, $wyesterday, $kyday, $kisdst
        ) = localtime($secYESTERDAY);
        if ( $wtoday < 1 )    #### Sunday local time
        {
            if ( ( $Gct_sunday_start < 1 ) && ( $Gct_sunday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_sunday_start; }
        }
        if ( $wtoday == 1 )    #### Monday local time
        {
            if ( ( $Gct_monday_start < 1 ) && ( $Gct_monday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_monday_start; }
        }
        if ( $wtoday == 2 )    #### Tuesday local time
        {
            if ( ( $Gct_tuesday_start < 1 ) && ( $Gct_tuesday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_tuesday_start; }
        }
        if ( $wtoday == 3 )    #### Wednesday local time
        {
            if ( ( $Gct_wednesday_start < 1 ) && ( $Gct_wednesday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_wednesday_start; }
        }
        if ( $wtoday == 4 )    #### Thursday local time
        {
            if ( ( $Gct_thursday_start < 1 ) && ( $Gct_thursday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_thursday_start; }
        }
        if ( $wtoday == 5 )    #### Friday local time
        {
            if ( ( $Gct_friday_start < 1 ) && ( $Gct_friday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_friday_start; }
        }
        if ( $wtoday == 6 )    #### Saturday local time
        {
            if ( ( $Gct_saturday_start < 1 ) && ( $Gct_saturday_stop < 1 ) ) {
                $lct_begin = $Gct_default_start;
            }
            else { $lct_begin = $Gct_saturday_start; }
        }
        $dayBACKsec = 0;
        $weekBACK   = 0;
        while ( ( $lct_end < 1 ) && ( $weekBACK <= 1 ) ) {
            if ( $wyesterday == 6 )    #### Saturday local time
            {
                if ( $Gct_saturday_start > 2399 ) {
                    $wyesterday = 0;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if (   ( $Gct_saturday_start < 1 )
                        && ( $Gct_saturday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_saturday_stop; }
                }
            }
            if ( $wyesterday == 5 )    #### Friday local time
            {
                if ( $Gct_friday_start > 2399 ) {
                    $wyesterday = 1;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if ( ( $Gct_friday_start < 1 ) && ( $Gct_friday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_friday_stop; }
                }
            }
            if ( $wyesterday == 4 )    #### Thursday local time
            {
                if ( $Gct_thursday_start > 2399 ) {
                    $wyesterday = 2;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if (   ( $Gct_thursday_start < 1 )
                        && ( $Gct_thursday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_thursday_stop; }
                }
            }
            if ( $wyesterday == 3 )    #### Wednesday local time
            {
                if ( $Gct_wednesday_start > 2399 ) {
                    $wyesterday = 3;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if (   ( $Gct_wednesday_start < 1 )
                        && ( $Gct_wednesday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_wednesday_stop; }
                }
            }
            if ( $wyesterday == 2 )    #### Tuesday local time
            {
                if ( $Gct_tuesday_start > 2399 ) {
                    $wyesterday = 4;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if (   ( $Gct_tuesday_start < 1 )
                        && ( $Gct_tuesday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_tuesday_stop; }
                }
            }
            if ( $wyesterday == 1 )    #### Monday local time
            {
                if ( $Gct_monday_start > 2399 ) {
                    $wyesterday = 5;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if ( ( $Gct_monday_start < 1 ) && ( $Gct_monday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_monday_stop; }
                }
            }
            if ( $wyesterday == 0 )    #### Sunday local time
            {
                if ( $Gct_sunday_start > 2399 ) {
                    $wyesterday = 6;
                    $dayBACKsec = ( $dayBACKsec + 86400 );
                    if ($DBX) { print "DayBACK: $wyesterday\n"; }
                }
                else {
                    if ( ( $Gct_sunday_start < 1 ) && ( $Gct_sunday_stop < 1 ) )
                    {
                        $lct_end = $Gct_default_stop;
                    }
                    else { $lct_end = $Gct_sunday_stop; }
                }
            }
            $weekBACK++;
        }
        $lct_end        = sprintf( "%04d", $lct_end );
        $lct_end_hour   = substr( $lct_end, 0, 2 );
        $lct_end_min    = substr( $lct_end, 2, 2 );
        $lct_begin      = sprintf( "%04d", $lct_begin );
        $lct_begin_hour = substr( $lct_begin, 0, 2 );
        $lct_begin_min  = substr( $lct_begin, 2, 2 );
        $lct_gap        = (
            (
                (
                    ( ( ( 24 - $lct_end_hour ) + $lct_begin_hour ) * 3600 ) +
                      ( $lct_begin_min * 60 )
                ) - ( $lct_end_min * 60 )
            ) + $dayBACKsec
        );

        if ($DBX) {
            print
"LocalCallTime No-Call Gap: |$lct_gap|$lct_end($lct_end_hour $lct_end_min)|$lct_begin($lct_begin_hour $lct_begin_min)|$wtoday|$wyesterday|\n";
        }
        $ct_states         = '';
        $ct_state_gmt_SQL  = '';
        $del_state_gmt_SQL = '';
        $ct_srs            = 0;
        $b                 = 0;
        if ( length($Gct_state_call_times) > 2 ) {
            @state_rules = split( /\|/, $Gct_state_call_times );
            $ct_srs      = ( $#state_rules - 0 );
        }
        while ( $ct_srs >= $b ) {
            if ( length( $state_rules[$b] ) > 1 ) {
                if ($DBX) {
                    print "    Processing state rule $state_rules[$b]|";
                }
                $stmtA =
"SELECT state_call_time_id,state_call_time_state,state_call_time_name,state_call_time_comments,sct_default_start,sct_default_stop,sct_sunday_start,sct_sunday_stop,sct_monday_start,sct_monday_stop,sct_tuesday_start,sct_tuesday_stop,sct_wednesday_start,sct_wednesday_stop,sct_thursday_start,sct_thursday_stop,sct_friday_start,sct_friday_stop,sct_saturday_start,sct_saturday_stop,ct_holidays from vicidial_state_call_times where state_call_time_id='$state_rules[$b]';";
                if ($DBX) { print "   |$stmtA|\n"; }
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArows = $sthA->rows;
                if ( $sthArows > 0 ) {
                    @aryA                   = $sthA->fetchrow_array;
                    $Gstate_call_time_id    = $aryA[0];
                    $Gstate_call_time_state = $aryA[1];
                    $Gsct_default_start     = $aryA[4];
                    $Gsct_default_stop      = $aryA[5];
                    $Gsct_sunday_start      = $aryA[6];
                    $Gsct_sunday_stop       = $aryA[7];
                    $Gsct_monday_start      = $aryA[8];
                    $Gsct_monday_stop       = $aryA[9];
                    $Gsct_tuesday_start     = $aryA[10];
                    $Gsct_tuesday_stop      = $aryA[11];
                    $Gsct_wednesday_start   = $aryA[12];
                    $Gsct_wednesday_stop    = $aryA[13];
                    $Gsct_thursday_start    = $aryA[14];
                    $Gsct_thursday_stop     = $aryA[15];
                    $Gsct_friday_start      = $aryA[16];
                    $Gsct_friday_stop       = $aryA[17];
                    $Gsct_saturday_start    = $aryA[18];
                    $Gsct_saturday_stop     = $aryA[19];
                    $Sct_holidays           = $aryA[20];
                    $ct_states .= "'$Gstate_call_time_state',";
                }
                $sthA->finish();
                $Sholiday_id = '';
                if (
                    ( length($Sct_holidays) > 2 )
                    || (   ( length($holiday_id) > 2 )
                        && ( length($Sholiday_id) < 2 ) )
                  )
                {
                    if ( length($Sct_holidays) > 2 ) {
                        $Sct_holidaysSQL = $Sct_holidays;
                        $Sct_holidaysSQL =~ s/^\||\|$//gi;
                        $Sct_holidaysSQL =~ s/\|/','/gi;
                        $Sct_holidaysSQL = "'$Sct_holidaysSQL'";
                        $stmtA =
"SELECT holiday_id,holiday_date,holiday_name,ct_default_start,ct_default_stop from vicidial_call_time_holidays where holiday_id IN($Sct_holidaysSQL) and holiday_status='ACTIVE' and holiday_date='$YMD' order by holiday_id;";
                        $holidaytype = "     STATE CALL TIME HOLIDAY FOUND!   ";
                    }
                    elsif (( length($holiday_id) > 2 )
                        && ( length($Sholiday_id) < 2 ) )
                    {
                        $stmtA =
"SELECT holiday_id,holiday_date,holiday_name,ct_default_start,ct_default_stop from vicidial_call_time_holidays where holiday_id='$holiday_id' and holiday_status='ACTIVE' and holiday_date='$YMD' order by holiday_id;";
                        $holidaytype =
"     NO STATE HOLIDAY APPLYING CALL TIME HOLIDAY!   ";
                    }
                    if ($DBX) { print "   |$stmtA|\n"; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ( $sthArows > 0 ) {
                        @aryA          = $sthA->fetchrow_array;
                        $Sholiday_id   = $aryA[0];
                        $Sholiday_date = $aryA[1];
                        $Sholiday_name = $aryA[2];
                        if (   ( $Gsct_default_start < $aryA[3] )
                            && ( $Gsct_default_stop > 0 ) )
                        {
                            $Gsct_default_start = $aryA[3];
                        }
                        if (   ( $Gsct_default_stop > $aryA[4] )
                            && ( $Gsct_default_stop > 0 ) )
                        {
                            $Gsct_default_stop = $aryA[4];
                        }
                        if (   ( $Gsct_sunday_start < $aryA[3] )
                            && ( $Gsct_sunday_stop > 0 ) )
                        {
                            $Gsct_sunday_start = $aryA[3];
                        }
                        if (   ( $Gsct_sunday_stop > $aryA[4] )
                            && ( $Gsct_sunday_stop > 0 ) )
                        {
                            $Gsct_sunday_stop = $aryA[4];
                        }
                        if (   ( $Gsct_monday_start < $aryA[3] )
                            && ( $Gsct_monday_stop > 0 ) )
                        {
                            $Gsct_monday_start = $aryA[3];
                        }
                        if (   ( $Gsct_monday_stop > $aryA[4] )
                            && ( $Gsct_monday_stop > 0 ) )
                        {
                            $Gsct_monday_stop = $aryA[4];
                        }
                        if (   ( $Gsct_tuesday_start < $aryA[3] )
                            && ( $Gsct_tuesday_stop > 0 ) )
                        {
                            $Gsct_tuesday_start = $aryA[3];
                        }
                        if (   ( $Gsct_tuesday_stop > $aryA[4] )
                            && ( $Gsct_tuesday_stop > 0 ) )
                        {
                            $Gsct_tuesday_stop = $aryA[4];
                        }
                        if (   ( $Gsct_wednesday_start < $aryA[3] )
                            && ( $Gsct_wednesday_stop > 0 ) )
                        {
                            $Gsct_wednesday_start = $aryA[3];
                        }
                        if (   ( $Gsct_wednesday_stop > $aryA[4] )
                            && ( $Gsct_wednesday_stop > 0 ) )
                        {
                            $Gsct_wednesday_stop = $aryA[4];
                        }
                        if (   ( $Gsct_thursday_start < $aryA[3] )
                            && ( $Gsct_thursday_stop > 0 ) )
                        {
                            $Gsct_thursday_start = $aryA[3];
                        }
                        if (   ( $Gsct_thursday_stop > $aryA[4] )
                            && ( $Gsct_thursday_stop > 0 ) )
                        {
                            $Gsct_thursday_stop = $aryA[4];
                        }
                        if (   ( $Gsct_friday_start < $aryA[3] )
                            && ( $Gsct_friday_stop > 0 ) )
                        {
                            $Gsct_friday_start = $aryA[3];
                        }
                        if (   ( $Gsct_friday_stop > $aryA[4] )
                            && ( $Gsct_friday_stop > 0 ) )
                        {
                            $Gsct_friday_stop = $aryA[4];
                        }
                        if (   ( $Gsct_saturday_start < $aryA[3] )
                            && ( $Gsct_saturday_stop > 0 ) )
                        {
                            $Gsct_saturday_start = $aryA[3];
                        }
                        if (   ( $Gsct_saturday_stop > $aryA[4] )
                            && ( $Gsct_saturday_stop > 0 ) )
                        {
                            $Gsct_saturday_stop = $aryA[4];
                        }
                        if ($DB) {
                            print
"$holidaytype|$Gstate_call_time_id|$Gstate_call_time_state|$Sholiday_id|$Sholiday_date|$Sholiday_name|$Gsct_default_start|$Gsct_default_stop|\n";
                        }
                    }
                    $sthA->finish();
                }
                $r         = 0;
                $state_gmt = '';
                while ( $r < $g ) {
                    if ( $GMT_day[$r] == 0 )    #### Sunday local time
                    {
                        if (   ( $Gsct_sunday_start == 0 )
                            && ( $Gsct_sunday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_sunday_start )
                                && ( $GMT_hour[$r] < $Gsct_sunday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 1 )    #### Monday local time
                    {
                        if (   ( $Gsct_monday_start == 0 )
                            && ( $Gsct_monday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_monday_start )
                                && ( $GMT_hour[$r] < $Gsct_monday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 2 )    #### Tuesday local time
                    {
                        if (   ( $Gsct_tuesday_start == 0 )
                            && ( $Gsct_tuesday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_tuesday_start )
                                && ( $GMT_hour[$r] < $Gsct_tuesday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 3 )    #### Wednesday local time
                    {
                        if (   ( $Gsct_wednesday_start == 0 )
                            && ( $Gsct_wednesday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_wednesday_start )
                                && ( $GMT_hour[$r] < $Gsct_wednesday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 4 )    #### Thursday local time
                    {
                        if (   ( $Gsct_thursday_start == 0 )
                            && ( $Gsct_thursday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_thursday_start )
                                && ( $GMT_hour[$r] < $Gsct_thursday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 5 )    #### Friday local time
                    {
                        if (   ( $Gsct_friday_start == 0 )
                            && ( $Gsct_friday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_friday_start )
                                && ( $GMT_hour[$r] < $Gsct_friday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 6 )    #### Saturday local time
                    {
                        if (   ( $Gsct_saturday_start == 0 )
                            && ( $Gsct_saturday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gsct_default_start )
                                && ( $GMT_hour[$r] < $Gsct_default_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gsct_saturday_start )
                                && ( $GMT_hour[$r] < $Gsct_saturday_stop ) )
                            {
                                $state_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    $r++;
                }
                $state_gmt = "$state_gmt'99'";
                $ct_state_gmt_SQL .=
"or (state='$Gstate_call_time_state' && gmt_offset_now IN($state_gmt)) ";
                $del_state_gmt_SQL .=
"or (state='$Gstate_call_time_state' && gmt_offset_now NOT IN($state_gmt)) ";
            }
            $b++;
        }
        if ( length($ct_states) > 2 ) {
            $ct_states =~ s/,$//gi;
            $ct_statesSQL = "and state NOT IN($ct_states)";
        }
        else {
            $ct_statesSQL = "";
        }
        $r               = 0;
        @default_gmt_ARY = @MT;
        $dgA             = 0;
        $default_gmt     = '';
        while ( $r < $g ) {
            if ( $GMT_day[$r] == 0 )    #### Sunday local time
            {
                if ( ( $Gct_sunday_start == 0 ) && ( $Gct_sunday_stop == 0 ) ) {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_sunday_start )
                        && ( $GMT_hour[$r] < $Gct_sunday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            if ( $GMT_day[$r] == 1 )    #### Monday local time
            {
                if ( ( $Gct_monday_start == 0 ) && ( $Gct_monday_stop == 0 ) ) {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_monday_start )
                        && ( $GMT_hour[$r] < $Gct_monday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            if ( $GMT_day[$r] == 2 )    #### Tuesday local time
            {
                if ( ( $Gct_tuesday_start == 0 ) && ( $Gct_tuesday_stop == 0 ) )
                {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_tuesday_start )
                        && ( $GMT_hour[$r] < $Gct_tuesday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            if ( $GMT_day[$r] == 3 )    #### Wednesday local time
            {
                if (   ( $Gct_wednesday_start == 0 )
                    && ( $Gct_wednesday_stop == 0 ) )
                {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_wednesday_start )
                        && ( $GMT_hour[$r] < $Gct_wednesday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            if ( $GMT_day[$r] == 4 )    #### Thursday local time
            {
                if (   ( $Gct_thursday_start == 0 )
                    && ( $Gct_thursday_stop == 0 ) )
                {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_thursday_start )
                        && ( $GMT_hour[$r] < $Gct_thursday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            if ( $GMT_day[$r] == 5 )    #### Friday local time
            {
                if ( ( $Gct_friday_start == 0 ) && ( $Gct_friday_stop == 0 ) ) {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_friday_start )
                        && ( $GMT_hour[$r] < $Gct_friday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            if ( $GMT_day[$r] == 6 )    #### Saturday local time
            {
                if (   ( $Gct_saturday_start == 0 )
                    && ( $Gct_saturday_stop == 0 ) )
                {
                    if (   ( $GMT_hour[$r] >= $Gct_default_start )
                        && ( $GMT_hour[$r] < $Gct_default_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
                else {
                    if (   ( $GMT_hour[$r] >= $Gct_saturday_start )
                        && ( $GMT_hour[$r] < $Gct_saturday_stop ) )
                    {
                        $default_gmt .= "'$GMT_gmt[$r]',";
                        $default_gmt_ARY[$dgA] = "$GMT_gmt[$r]";
                        $dgA++;
                    }
                }
            }
            $r++;
        }
        $default_gmt = "$default_gmt'99'";
        $all_gmtSQL[$i] =
          "(gmt_offset_now IN($default_gmt) $ct_statesSQL) $ct_state_gmt_SQL";
        $del_gmtSQL[$i] =
"(gmt_offset_now NOT IN($default_gmt) $ct_statesSQL) $del_state_gmt_SQL";
        $stmtA =
"SELECT recycle_id,campaign_id,status,attempt_delay,attempt_maximum,active from vicidial_lead_recycle where campaign_id='$campaign_id[$i]' and active='Y';";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows        = $sthA->rows;
        @recycle_status  = @MT;
        @recycle_delay   = @MT;
        @recycle_maximum = @MT;
        @RSQLdate        = @MT;
        $r_ct            = 0;
        $rec_ct[$i]      = 0;

        while ( $sthArows > $r_ct ) {
            @aryA                   = $sthA->fetchrow_array;
            $recycle_status[$r_ct]  = $aryA[2];
            $recycle_delay[$r_ct]   = $aryA[3];
            $recycle_maximum[$r_ct] = $aryA[4];
            $r_ct++;
            $rec_ct[$i]++;
        }
        $sthA->finish();
        if ( $rec_ct[$i] > 0 ) {
            $rc = 0;
            $recycle_SQL[$i] = "( ";
            while ( $rc < $rec_ct[$i] ) {
                $Y         = 1;
                $recycle_Y = "'Y'";
                while ( $Y < $recycle_maximum[$rc] ) {
                    $recycle_Y .= ",'Y$Y'";
                    $Y++;
                }
                if ( $rc > 0 ) { $recycle_SQL[$i] .= " or "; }
                $recycle_SQL[$i] .=
"( (called_since_last_reset IN($recycle_Y)) and (status='$recycle_status[$rc]') and (";
                $dgA = 0;
                foreach (@default_gmt_ARY) {
                    $secX = time();
                    $LLCT_DATE_offset =
                      ( $LOCAL_GMT_OFF - $default_gmt_ARY[$dgA] );
                    $LLCT_DATE_offset_epoch =
                      ( $secX - ( $LLCT_DATE_offset * 3600 ) );
                    $Rtarget =
                      ( $LLCT_DATE_offset_epoch - $recycle_delay[$rc] );
                    (
                        $Rsec,  $Rmin,  $Rhour, $Rmday, $Rmon,
                        $Ryear, $Rwday, $Ryday, $Risdst
                    ) = localtime($Rtarget);
                    $Ryear = ( $Ryear + 1900 );
                    $Rmon++;
                    if ( $Rmon < 10 )  { $Rmon  = "0$Rmon"; }
                    if ( $Rmday < 10 ) { $Rmday = "0$Rmday"; }
                    if ( $Rhour < 10 ) { $Rhour = "0$Rhour"; }
                    if ( $Rmin < 10 )  { $Rmin  = "0$Rmin"; }
                    if ( $Rsec < 10 )  { $Rsec  = "0$Rsec"; }
                    $Rhourmin = "$Rhour$Rmin";

                    if (   ( $Rhourmin < $lct_begin )
                        || ( $Rhourmin > $lct_end ) )
                    {
                        $RGtarget = ( $Rtarget - $lct_gap );
                        (
                            $Rsec,  $Rmin,  $Rhour, $Rmday, $Rmon,
                            $Ryear, $Rwday, $Ryday, $Risdst
                        ) = localtime($RGtarget);
                        $Ryear = ( $Ryear + 1900 );
                        $Rmon++;
                        if ( $Rmon < 10 )  { $Rmon  = "0$Rmon"; }
                        if ( $Rmday < 10 ) { $Rmday = "0$Rmday"; }
                        if ( $Rhour < 10 ) { $Rhour = "0$Rhour"; }
                        if ( $Rmin < 10 )  { $Rmin  = "0$Rmin"; }
                        if ( $Rsec < 10 )  { $Rsec  = "0$Rsec"; }

                        if ($DBX) {
                            print
"RECYCLE DELAY GAP: |$campaign_id[$i]|$Rhourmin|$RGtarget|Rtarget|($recycle_delay[$rc] $lct_gap)\n";
                        }
                    }
                    $RSQLdate[$rc] = "$Ryear-$Rmon-$Rmday $Rhour:$Rmin:$Rsec";
                    if ( $dgA > 0 ) { $recycle_SQL[$i] .= " or "; }
                    $recycle_SQL[$i] .=
"( (gmt_offset_now='$default_gmt_ARY[$dgA]') and (last_local_call_time < \"$RSQLdate[$rc]\") )";
                    $dgA++;
                }
                if ($DBX) {
                    print
"RECYCLE: |$campaign_id[$i]|$recycle_status[$rc]|$recycle_delay[$rc]|$recycle_maximum[$rc]|$RSQLdate[$rc]|\n";
                }
                $recycle_SQL[$i] .= " ) )";
                $rc++;
            }
            $recycle_SQL[$i] .= " )";
            if ($DBX) { print "RECYCLE SQL: |$recycle_SQL[$i]|\n"; }
        }
        $hopper_ready_count = 0;
        $stmtA =
"SELECT count(*) from $vicidial_hopper where campaign_id='$campaign_id[$i]' and status='READY';";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows = $sthA->rows;
        if ( $sthArows > 0 ) {
            @aryA               = $sthA->fetchrow_array;
            $hopper_ready_count = $aryA[0];
            if ($DB) {
                print "     hopper READY count:   $hopper_ready_count\n";
            }
            if ($DBX) { print "     |$stmtA|\n"; }
        }
        $sthA->finish();
        $event_string =
"|$campaign_id[$i]|$hopper_level[$i]|$hopper_ready_count|$local_call_time[$i]||";
        &event_logger;
        $hopper_begin_output .=
"     Hopper Ready count: $hopper_ready_count     Local Call Time: $local_call_time[$i] \n";
        $stmtY =
"SELECT list_id,active FROM vicidial_lists where campaign_id='$campaign_id[$i]' and expiration_date >= \"$file_date\";";
        $sthY = $dbhA->prepare($stmtY) or die "preparing: ", $dbhA->errstr;
        $sthY->execute or die "executing: $stmtY",           $dbhA->errstr;
        $sthYrows           = $sthY->rows;
        $rec_countLISTS     = 0;
        $act_rec_countLISTS = 0;
        $list_id_act        = '';
        my %indv_list_gmt_sql = ();

        while ( $sthYrows > $rec_countLISTS ) {
            @aryY        = $sthY->fetchrow_array;
            $cur_list_id = $aryY[0];
            if ($DB) { print "   Processing GMT for list $cur_list_id\n"; }
            $list_id_act = $aryY[1];
            if (   ( $list_order_mix[$i] !~ /DISABLED/ )
                && ( $allow_inactive_list_leads > 0 ) )
            {
                $allow_inactive = "Y";
            }
            $stmtB =
"SELECT local_call_time FROM vicidial_lists where list_id = \"$cur_list_id\"";
            $sthB = $dbhA->prepare($stmtB) or die "preparing: ", $dbhA->errstr;
            $sthB->execute or die "executing: $stmtB",           $dbhA->errstr;
            @aryB          = $sthB->fetchrow_array;
            $cur_call_time = $aryB[0];
            if ( $cur_call_time !~ /^campaign$/ ) {
                $stmtB =
"SELECT count(*) from vicidial_call_times where call_time_id = \"$cur_call_time\"";
                $sthB = $dbhA->prepare($stmtB)
                  or die "preparing: ", $dbhA->errstr;
                $sthB->execute or die "executing: $stmtB", $dbhA->errstr;
                @aryB             = $sthB->fetchrow_array;
                $call_time_exists = $aryB[0];
                if ( $call_time_exists < 1 ) { $cur_call_time = 'campaign'; }
            }
            $sthB->finish();
            if ( $cur_call_time eq "campaign" ) {
                if ( ( $list_id_act eq "Y" ) || ( $allow_inactive eq "Y" ) ) {
                    if (
                        (
                               ( $act_rec_countLISTS == 0 )
                            && ( $allow_inactive ne "Y" )
                        )
                        || (   ( $rec_countLISTS == 0 )
                            && ( $allow_inactive eq "Y" ) )
                      )
                    {
                        $list_id_sql[$i] = "(list_id IN('$cur_list_id'";
                    }
                    else {
                        if ( length( $list_id_sql[$i] ) < 3 ) {
                            $list_id_sql[$i] = "(list_id IN('$cur_list_id'";
                        }
                        else {
                            $list_id_sql[$i] .= ",'$cur_list_id'";
                        }
                    }
                    $act_rec_countLISTS++;
                }
                $indv_list_gmt_sql{"$cur_list_id"} =
                  "(list_id=\"$cur_list_id\")";
            }
            else {
                $stmtC =
"SELECT call_time_id,call_time_name,call_time_comments,ct_default_start,ct_default_stop,ct_sunday_start,ct_sunday_stop,ct_monday_start,ct_monday_stop,ct_tuesday_start,ct_tuesday_stop,ct_wednesday_start,ct_wednesday_stop,ct_thursday_start,ct_thursday_stop,ct_friday_start,ct_friday_stop,ct_saturday_start,ct_saturday_stop,ct_state_call_times,ct_holidays FROM vicidial_call_times where call_time_id='$cur_call_time';";
                if ($DBX) { print "   |$stmtC|\n"; }
                $sthC = $dbhA->prepare($stmtC)
                  or die "preparing: ", $dbhA->errstr;
                $sthC->execute or die "executing: $stmtC ", $dbhA->errstr;
                $sthCrows  = $sthC->rows;
                $rec_count = 0;
                if ( $sthCrows > 0 ) {
                    @aryC                 = $sthC->fetchrow_array;
                    $Gct_default_start    = $aryC[3];
                    $Gct_default_stop     = $aryC[4];
                    $Gct_sunday_start     = $aryC[5];
                    $Gct_sunday_stop      = $aryC[6];
                    $Gct_monday_start     = $aryC[7];
                    $Gct_monday_stop      = $aryC[8];
                    $Gct_tuesday_start    = $aryC[9];
                    $Gct_tuesday_stop     = $aryC[10];
                    $Gct_wednesday_start  = $aryC[11];
                    $Gct_wednesday_stop   = $aryC[12];
                    $Gct_thursday_start   = $aryC[13];
                    $Gct_thursday_stop    = $aryC[14];
                    $Gct_friday_start     = $aryC[15];
                    $Gct_friday_stop      = $aryC[16];
                    $Gct_saturday_start   = $aryC[17];
                    $Gct_saturday_stop    = $aryC[18];
                    $Gct_state_call_times = $aryC[19];
                    $Gct_holidays         = $aryC[20];
                    $rec_count++;
                }
                $sthC->finish();
                $holiday_id = '';
                if ( length($Gct_holidays) > 2 ) {
                    $Gct_holidaysSQL = $Gct_holidays;
                    $Gct_holidaysSQL =~ s/^\||\|$//gi;
                    $Gct_holidaysSQL =~ s/\|/','/gi;
                    $Gct_holidaysSQL = "'$Gct_holidaysSQL'";
                    $stmtC =
"SELECT holiday_id,holiday_date,holiday_name,ct_default_start,ct_default_stop from vicidial_call_time_holidays where holiday_id IN($Gct_holidaysSQL) and holiday_status='ACTIVE' and holiday_date='$YMD' order by holiday_id;";
                    if ($DBX) { print "   |$stmtC|\n"; }
                    $sthC = $dbhA->prepare($stmtC)
                      or die "preparing: ", $dbhA->errstr;
                    $sthC->execute or die "executing: $stmtC ", $dbhA->errstr;
                    $sthCrows = $sthC->rows;

                    if ( $sthCrows > 0 ) {
                        @aryC         = $sthC->fetchrow_array;
                        $holiday_id   = $aryC[0];
                        $holiday_date = $aryC[1];
                        $holiday_name = $aryC[2];
                        if (   ( $Gct_default_start < $aryC[3] )
                            && ( $Gct_default_stop > 0 ) )
                        {
                            $Gct_default_start = $aryC[3];
                        }
                        if (   ( $Gct_default_stop > $aryC[4] )
                            && ( $Gct_default_stop > 0 ) )
                        {
                            $Gct_default_stop = $aryC[4];
                        }
                        if (   ( $Gct_sunday_start < $aryC[3] )
                            && ( $Gct_sunday_stop > 0 ) )
                        {
                            $Gct_sunday_start = $aryC[3];
                        }
                        if (   ( $Gct_sunday_stop > $aryC[4] )
                            && ( $Gct_sunday_stop > 0 ) )
                        {
                            $Gct_sunday_stop = $aryC[4];
                        }
                        if (   ( $Gct_monday_start < $aryC[3] )
                            && ( $Gct_monday_stop > 0 ) )
                        {
                            $Gct_monday_start = $aryC[3];
                        }
                        if (   ( $Gct_monday_stop > $aryC[4] )
                            && ( $Gct_monday_stop > 0 ) )
                        {
                            $Gct_monday_stop = $aryC[4];
                        }
                        if (   ( $Gct_tuesday_start < $aryC[3] )
                            && ( $Gct_tuesday_stop > 0 ) )
                        {
                            $Gct_tuesday_start = $aryC[3];
                        }
                        if (   ( $Gct_tuesday_stop > $aryC[4] )
                            && ( $Gct_tuesday_stop > 0 ) )
                        {
                            $Gct_tuesday_stop = $aryC[4];
                        }
                        if (   ( $Gct_wednesday_start < $aryC[3] )
                            && ( $Gct_wednesday_stop > 0 ) )
                        {
                            $Gct_wednesday_start = $aryC[3];
                        }
                        if (   ( $Gct_wednesday_stop > $aryC[4] )
                            && ( $Gct_wednesday_stop > 0 ) )
                        {
                            $Gct_wednesday_stop = $aryC[4];
                        }
                        if (   ( $Gct_thursday_start < $aryC[3] )
                            && ( $Gct_thursday_stop > 0 ) )
                        {
                            $Gct_thursday_start = $aryC[3];
                        }
                        if (   ( $Gct_thursday_stop > $aryC[4] )
                            && ( $Gct_thursday_stop > 0 ) )
                        {
                            $Gct_thursday_stop = $aryC[4];
                        }
                        if (   ( $Gct_friday_start < $aryC[3] )
                            && ( $Gct_friday_stop > 0 ) )
                        {
                            $Gct_friday_start = $aryC[3];
                        }
                        if (   ( $Gct_friday_stop > $aryC[4] )
                            && ( $Gct_friday_stop > 0 ) )
                        {
                            $Gct_friday_stop = $aryC[4];
                        }
                        if (   ( $Gct_saturday_start < $aryC[3] )
                            && ( $Gct_saturday_stop > 0 ) )
                        {
                            $Gct_saturday_start = $aryC[3];
                        }
                        if (   ( $Gct_saturday_stop > $aryC[4] )
                            && ( $Gct_saturday_stop > 0 ) )
                        {
                            $Gct_saturday_stop = $aryC[4];
                        }
                        if ($DB) {
                            print
"     LIST CALL TIME HOLIDAY FOUND!   $cur_call_time|$holiday_id|$holiday_date|$holiday_name|$Gct_default_start|$Gct_default_stop|\n";
                        }
                    }
                    $sthC->finish();
                }
                $ct_states          = '';
                $ct_state_gmt_SQL   = '';
                $list_state_gmt_SQL = '';
                $ct_srs             = 0;
                $b                  = 0;
                if ( length($Gct_state_call_times) > 2 ) {
                    @state_rules = split( /\|/, $Gct_state_call_times );
                    $ct_srs      = ( $#state_rules - 0 );
                }
                while ( $ct_srs >= $b ) {
                    if ( length( $state_rules[$b] ) > 1 ) {
                        if ($DBX) {
                            print
                              "    Processing state rule $state_rules[$b] | ";
                        }
                        $stmtC =
"SELECT state_call_time_id,state_call_time_state,state_call_time_name,state_call_time_comments,sct_default_start,sct_default_stop,sct_sunday_start,sct_sunday_stop,sct_monday_start,sct_monday_stop,sct_tuesday_start,sct_tuesday_stop,sct_wednesday_start,sct_wednesday_stop,sct_thursday_start,sct_thursday_stop,sct_friday_start,sct_friday_stop,sct_saturday_start,sct_saturday_stop,ct_holidays from vicidial_state_call_times where state_call_time_id='$state_rules[$b]';";
                        if ($DBX) { print "   |$stmtC|\n"; }
                        $sthC = $dbhA->prepare($stmtC)
                          or die "preparing: ", $dbhA->errstr;
                        $sthC->execute
                          or die "executing: $stmtC ", $dbhA->errstr;
                        $sthCrows = $sthC->rows;
                        if ( $sthCrows > 0 ) {
                            @aryC                   = $sthC->fetchrow_array;
                            $Gstate_call_time_id    = $aryC[0];
                            $Gstate_call_time_state = $aryC[1];
                            $Gsct_default_start     = $aryC[4];
                            $Gsct_default_stop      = $aryC[5];
                            $Gsct_sunday_start      = $aryC[6];
                            $Gsct_sunday_stop       = $aryC[7];
                            $Gsct_monday_start      = $aryC[8];
                            $Gsct_monday_stop       = $aryC[9];
                            $Gsct_tuesday_start     = $aryC[10];
                            $Gsct_tuesday_stop      = $aryC[11];
                            $Gsct_wednesday_start   = $aryC[12];
                            $Gsct_wednesday_stop    = $aryC[13];
                            $Gsct_thursday_start    = $aryC[14];
                            $Gsct_thursday_stop     = $aryC[15];
                            $Gsct_friday_start      = $aryC[16];
                            $Gsct_friday_stop       = $aryC[17];
                            $Gsct_saturday_start    = $aryC[18];
                            $Gsct_saturday_stop     = $aryC[19];
                            $Sct_holidays           = $aryC[20];
                            $ct_states .= "'$Gstate_call_time_state',";
                        }
                        $sthC->finish();
                        $Sholiday_id = '';
                        if (
                            ( length($Sct_holidays) > 2 )
                            || (   ( length($holiday_id) > 2 )
                                && ( length($Sholiday_id) < 2 ) )
                          )
                        {
                            if ( length($Sct_holidays) > 2 ) {
                                $Sct_holidaysSQL = $Sct_holidays;
                                $Sct_holidaysSQL =~ s/^\||\|$//gi;
                                $Sct_holidaysSQL =~ s/\|/','/gi;
                                $Sct_holidaysSQL = "'$Sct_holidaysSQL'";
                                $stmtA =
"SELECT holiday_id,holiday_date,holiday_name,ct_default_start,ct_default_stop from vicidial_call_time_holidays where holiday_id IN($Sct_holidaysSQL) and holiday_status='ACTIVE' and holiday_date='$YMD' order by holiday_id;";
                                $holidaytype =
                                  "     STATE CALL TIME HOLIDAY FOUND!   ";
                            }
                            elsif (( length($holiday_id) > 2 )
                                && ( length($Sholiday_id) < 2 ) )
                            {
                                $stmtA =
"SELECT holiday_id,holiday_date,holiday_name,ct_default_start,ct_default_stop from vicidial_call_time_holidays where holiday_id='$holiday_id' and holiday_status='ACTIVE' and holiday_date='$YMD' order by holiday_id;";
                                $holidaytype =
"     NO STATE HOLIDAY APPLYING CALL TIME HOLIDAY!   ";
                            }
                            if ($DBX) { print "   |$stmtA|\n"; }
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            if ( $sthArows > 0 ) {
                                @aryA          = $sthA->fetchrow_array;
                                $Sholiday_id   = $aryA[0];
                                $Sholiday_date = $aryA[1];
                                $Sholiday_name = $aryA[2];
                                if (   ( $Gsct_default_start < $aryC[3] )
                                    && ( $Gsct_default_stop > 0 ) )
                                {
                                    $Gsct_default_start = $aryC[3];
                                }
                                if (   ( $Gsct_default_stop > $aryC[4] )
                                    && ( $Gsct_default_stop > 0 ) )
                                {
                                    $Gsct_default_stop = $aryC[4];
                                }
                                if (   ( $Gsct_sunday_start < $aryC[3] )
                                    && ( $Gsct_sunday_stop > 0 ) )
                                {
                                    $Gsct_sunday_start = $aryC[3];
                                }
                                if (   ( $Gsct_sunday_stop > $aryC[4] )
                                    && ( $Gsct_sunday_stop > 0 ) )
                                {
                                    $Gsct_sunday_stop = $aryC[4];
                                }
                                if (   ( $Gsct_monday_start < $aryC[3] )
                                    && ( $Gsct_monday_stop > 0 ) )
                                {
                                    $Gsct_monday_start = $aryC[3];
                                }
                                if (   ( $Gsct_monday_stop > $aryC[4] )
                                    && ( $Gsct_monday_stop > 0 ) )
                                {
                                    $Gsct_monday_stop = $aryC[4];
                                }
                                if (   ( $Gsct_tuesday_start < $aryC[3] )
                                    && ( $Gsct_tuesday_stop > 0 ) )
                                {
                                    $Gsct_tuesday_start = $aryC[3];
                                }
                                if (   ( $Gsct_tuesday_stop > $aryC[4] )
                                    && ( $Gsct_tuesday_stop > 0 ) )
                                {
                                    $Gsct_tuesday_stop = $aryC[4];
                                }
                                if (   ( $Gsct_wednesday_start < $aryC[3] )
                                    && ( $Gsct_wednesday_stop > 0 ) )
                                {
                                    $Gsct_wednesday_start = $aryC[3];
                                }
                                if (   ( $Gsct_wednesday_stop > $aryC[4] )
                                    && ( $Gsct_wednesday_stop > 0 ) )
                                {
                                    $Gsct_wednesday_stop = $aryC[4];
                                }
                                if (   ( $Gsct_thursday_start < $aryC[3] )
                                    && ( $Gsct_thursday_stop > 0 ) )
                                {
                                    $Gsct_thursday_start = $aryC[3];
                                }
                                if (   ( $Gsct_thursday_stop > $aryC[4] )
                                    && ( $Gsct_thursday_stop > 0 ) )
                                {
                                    $Gsct_thursday_stop = $aryC[4];
                                }
                                if (   ( $Gsct_friday_start < $aryC[3] )
                                    && ( $Gsct_friday_stop > 0 ) )
                                {
                                    $Gsct_friday_start = $aryC[3];
                                }
                                if (   ( $Gsct_friday_stop > $aryC[4] )
                                    && ( $Gsct_friday_stop > 0 ) )
                                {
                                    $Gsct_friday_stop = $aryC[4];
                                }
                                if (   ( $Gsct_saturday_start < $aryC[3] )
                                    && ( $Gsct_saturday_stop > 0 ) )
                                {
                                    $Gsct_saturday_start = $aryC[3];
                                }
                                if (   ( $Gsct_saturday_stop > $aryC[4] )
                                    && ( $Gsct_saturday_stop > 0 ) )
                                {
                                    $Gsct_saturday_stop = $aryC[4];
                                }
                                if ($DB) {
                                    print
"$holidaytype|$Gstate_call_time_id|$Gstate_call_time_state|$Sholiday_id|$Sholiday_date|$Sholiday_name|$Gsct_default_start|$Gsct_default_stop|\n";
                                }
                            }
                            $sthA->finish();
                        }
                        $r         = 0;
                        $state_gmt = '';
                        while ( $r < $g ) {
                            if ( $GMT_day[$r] == 0 )    #### Sunday local time
                            {
                                if (   ( $Gsct_sunday_start == 0 )
                                    && ( $Gsct_sunday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        ( $GMT_hour[$r] >= $Gsct_sunday_start )
                                        && ( $GMT_hour[$r] < $Gsct_sunday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            if ( $GMT_day[$r] == 1 )    #### Monday local time
                            {
                                if (   ( $Gsct_monday_start == 0 )
                                    && ( $Gsct_monday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        ( $GMT_hour[$r] >= $Gsct_monday_start )
                                        && ( $GMT_hour[$r] < $Gsct_monday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            if ( $GMT_day[$r] == 2 )    #### Tuesday local time
                            {
                                if (   ( $Gsct_tuesday_start == 0 )
                                    && ( $Gsct_tuesday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_tuesday_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_tuesday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            if ( $GMT_day[$r] == 3 )   #### Wednesday local time
                            {
                                if (   ( $Gsct_wednesday_start == 0 )
                                    && ( $Gsct_wednesday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        (
                                            $GMT_hour[$r] >=
                                            $Gsct_wednesday_start
                                        )
                                        && ( $GMT_hour[$r] <
                                            $Gsct_wednesday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            if ( $GMT_day[$r] == 4 )    #### Thursday local time
                            {
                                if (   ( $Gsct_thursday_start == 0 )
                                    && ( $Gsct_thursday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        (
                                            $GMT_hour[$r] >=
                                            $Gsct_thursday_start
                                        )
                                        && ( $GMT_hour[$r] <
                                            $Gsct_thursday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            if ( $GMT_day[$r] == 5 )    #### Friday local time
                            {
                                if (   ( $Gsct_friday_start == 0 )
                                    && ( $Gsct_friday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        ( $GMT_hour[$r] >= $Gsct_friday_start )
                                        && ( $GMT_hour[$r] < $Gsct_friday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            if ( $GMT_day[$r] == 6 )    #### Saturday local time
                            {
                                if (   ( $Gsct_saturday_start == 0 )
                                    && ( $Gsct_saturday_stop == 0 ) )
                                {
                                    if (
                                        (
                                            $GMT_hour[$r] >= $Gsct_default_start
                                        )
                                        && (
                                            $GMT_hour[$r] < $Gsct_default_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                                else {
                                    if (
                                        (
                                            $GMT_hour[$r] >=
                                            $Gsct_saturday_start
                                        )
                                        && ( $GMT_hour[$r] <
                                            $Gsct_saturday_stop )
                                      )
                                    {
                                        $state_gmt .= "'$GMT_gmt[$r]',";
                                    }
                                }
                            }
                            $r++;
                        }
                        $state_gmt = "$state_gmt'99'";
                        $list_state_gmt_SQL .=
"or (list_id='$cur_list_id' and state='$Gstate_call_time_state' and gmt_offset_now IN($state_gmt)) ";
                        $del_list_state_gmt_SQL .=
"or (list_id='$cur_list_id' and state='$Gstate_call_time_state' && gmt_offset_now NOT IN($state_gmt)) ";
                    }
                    $b++;
                }
                if ( length($ct_states) > 2 ) {
                    $ct_states =~ s/,$//gi;
                    $ct_statesSQL = "and state NOT IN($ct_states)";
                }
                else {
                    $ct_statesSQL = "";
                }
                $r                = 0;
                @default_gmt_ARY  = @MT;
                $dgA              = 0;
                $list_default_gmt = '';
                while ( $r < $g ) {
                    if ( $GMT_day[$r] == 0 )    #### Sunday local time
                    {
                        if (   ( $Gct_sunday_start == 0 )
                            && ( $Gct_sunday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_sunday_start )
                                && ( $GMT_hour[$r] < $Gct_sunday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 1 )    #### Monday local time
                    {
                        if (   ( $Gct_monday_start == 0 )
                            && ( $Gct_monday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_monday_start )
                                && ( $GMT_hour[$r] < $Gct_monday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 2 )    #### Tuesday local time
                    {
                        if (   ( $Gct_tuesday_start == 0 )
                            && ( $Gct_tuesday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_tuesday_start )
                                && ( $GMT_hour[$r] < $Gct_tuesday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 3 )    #### Wednesday local time
                    {
                        if (   ( $Gct_wednesday_start == 0 )
                            && ( $Gct_wednesday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_wednesday_start )
                                && ( $GMT_hour[$r] < $Gct_wednesday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 4 )    #### Thursday local time
                    {
                        if (   ( $Gct_thursday_start == 0 )
                            && ( $Gct_thursday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_thursday_start )
                                && ( $GMT_hour[$r] < $Gct_thursday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 5 )    #### Friday local time
                    {
                        if (   ( $Gct_friday_start == 0 )
                            && ( $Gct_friday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_friday_start )
                                && ( $GMT_hour[$r] < $Gct_friday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    if ( $GMT_day[$r] == 6 )    #### Saturday local time
                    {
                        if (   ( $Gct_saturday_start == 0 )
                            && ( $Gct_saturday_stop == 0 ) )
                        {
                            if (   ( $GMT_hour[$r] >= $Gct_default_start )
                                && ( $GMT_hour[$r] < $Gct_default_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                        else {
                            if (   ( $GMT_hour[$r] >= $Gct_saturday_start )
                                && ( $GMT_hour[$r] < $Gct_saturday_stop ) )
                            {
                                $list_default_gmt .= "'$GMT_gmt[$r]',";
                            }
                        }
                    }
                    $r++;
                }
                $list_default_gmt = "$list_default_gmt'99'";
                $indv_list_gmt_sql{"$cur_list_id"} =
"((list_id=\"$cur_list_id\" and gmt_offset_now IN($list_default_gmt) $ct_statesSQL) $list_state_gmt_SQL)";
                if ( ( $list_id_act eq "Y" ) || ( $allow_inactive eq "Y" ) ) {
                    $LCTlist_id_sql[$i] .=
" or ((list_id='$cur_list_id' and gmt_offset_now IN($list_default_gmt) $ct_statesSQL) $list_state_gmt_SQL)";
                    $del_list_id_sql[$i] .=
"((list_id='$cur_list_id' and gmt_offset_now NOT IN($list_default_gmt) $ct_statesSQL) $del_list_state_gmt_SQL) or";
                    $act_rec_countLISTS++;
                }
            }
            $rec_countLISTS++;
        }
        $sthY->finish();
        if ( length( $list_id_sql[$i] ) < 1 ) {
            $list_id_sql[$i] = "list_id='999876543210'";
        }
        else { $list_id_sql[$i] .= "))"; }
        if ( length( $LCTlist_id_sql[$i] ) > 0 ) {
            $list_id_sql[$i] .= "$LCTlist_id_sql[$i]";
        }
        if ($DB) {
            print
"     campaign lists count ACTIVE:$act_rec_countLISTS | TOTAL:$rec_countLISTS \n";
        }
        if ($DBX) { print "     LIST ID SQL $list_id_sql[$i]"; }
        if ($DBX) { print "     |$stmtA|\n"; }
        $hopper_begin_output .=
"     campaign lists count ACTIVE: $act_rec_countLISTS | TOTAL: $rec_countLISTS \n";
        $stmtA =
"DELETE from $vicidial_hopper where campaign_id='$campaign_id[$i]' and status IN('DONE');";
        $affected_rows = $dbhA->do($stmtA);
        if ($DB)  { print "     hopper DONE cleared:  $affected_rows\n"; }
        if ($DBX) { print "     |$stmtA|\n"; }

        if ( $affected_rows ne "0E0" ) {
            $hopper_ready_pre_count = $hopper_ready_count;
            $hopper_ready_count     = $hopper_ready_count - $affected_rows;
            if ($DB) {
                if ( $hopper_ready_pre_count == $hopper_ready_count ) {
                    print
"     hopper READY count minus deleted DONE leads:   $hopper_ready_count\n";
                }
            }
        }
        $stmtA =
"DELETE from $vicidial_hopper where $del_list_id_sql[$i] (campaign_id='$campaign_id[$i]' and ($del_gmtSQL[$i]));";
        $affected_rows = $dbhA->do($stmtA);
        if ($DB)  { print "     hopper GMT BAD cleared:  $affected_rows\n"; }
        if ($DBX) { print "     |$stmtA|\n"; }
        if ( $affected_rows ne "0E0" ) {
            $hopper_ready_pre_count = $hopper_ready_count;
            $hopper_ready_count     = $hopper_ready_count - $affected_rows;
            if ($DB) {
                if ( $hopper_ready_pre_count == $hopper_ready_count ) {
                    print
"     hopper READY count minus deleted GMT leads:   $hopper_ready_count\n";
                }
            }
        }
        if ( $list_order_mix[$i] !~ /DISABLED/ ) {
            $stmtA =
"SELECT vcl_id,vcl_name,list_mix_container,mix_method FROM vicidial_campaigns_list_mix where campaign_id='$campaign_id[$i]' and status='ACTIVE';";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows  = $sthA->rows;
            $rec_count = 0;
            while ( $sthArows > $rec_count ) {
                @aryA                   = $sthA->fetchrow_array;
                $vcl_id[$i]             = $aryA[0];
                $vcl_name[$i]           = $aryA[1];
                $list_mix_container[$i] = $aryA[2];
                $mix_method[$i]         = $aryA[3];
                $rec_count++;
            }
            $sthA->finish();
            @list_mixARY          = @MT;
            $list_mix_dialableSQL = '';
            @list_mixARY          = split( /:/, $list_mix_container[$i] );
            $x                    = 0;
            foreach (@list_mixARY) {
                if ( $x > 0 ) { $list_mix_dialableSQL .= " or "; }
                @list_mix_stepARY = split( /\|/, $list_mixARY[$x] );
                $list_mix_stepARY[3] =~ s/ /\',\'/gi;
                $list_mix_stepARY[3] =~ s/^\',|,\'-//gi;
                if ( $list_mix_stepARY[3] !~ /\'$/ ) {
                    $list_mix_stepARY[3] = "$list_mix_stepARY[3]'";
                }
                if ($DBX) {
                    print
"     LM $x ++$list_mixARY[$x]++ |$list_mix_stepARY[0]|$list_mix_stepARY[2]|$list_mix_stepARY[3]|\n";
                }
                $list_mix_dialableSQL .=
"(($indv_list_gmt_sql{ \"$list_mix_stepARY[0]\" }) and status IN($list_mix_stepARY[3]))";
                $x++;
            }
            if ($DB) {
                print
"     campaign mix: $list_order_mix[$i] |$vcl_id[$i] - $vcl_name[$i]|$list_mix_container[$i]|$x|$mix_method[$i]|\n";
            }
            $hopper_begin_output .=
"     campaign mix: $list_order_mix[$i] |$vcl_id[$i] - $vcl_name[$i]|$list_mix_container[$i]|$x|$mix_method[$i]| \n";
        }
        if (   ( $lead_filter_id[$i] !~ /^NONE$/ )
            && ( length( $lead_filter_id[$i] ) > 0 ) )
        {
            $stmtA =
"SELECT lead_filter_sql FROM vicidial_lead_filters where lead_filter_id='$lead_filter_id[$i]';";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows  = $sthA->rows;
            $rec_count = 0;
            while ( $sthArows > $rec_count ) {
                @aryA = $sthA->fetchrow_array;
                $lead_filter_sql[$i] = $aryA[0];
                $lead_filter_sql[$i] =~ s/\\//gi;
                $rec_count++;
            }
            $sthA->finish();
            if ( $lead_filter_sql[$i] eq ''
                || !defined( $lead_filter_sql[$i] ) )
            {
                if ($DB) {
                    print
                      "     lead filter $lead_filter_id[$i] does not exist\n";
                }
                if ($DBX) { print "     |$lead_filter_id[$i]|\n"; }
            }
            else {
                $lead_filter_sql[$i] =~
                  s/^and|and$|^or|or$|^ and|and $|^ or|or $//gi;
                $lead_filter_sql[$i] =~ s/#.*\n//gi;
                $lead_filter_sql[$i] =~ s/\r|\n|\t/ /gi;
                $lead_filter_sql[$i] = "and ($lead_filter_sql[$i])";
                if ($DB) {
                    print
"     lead filter $lead_filter_id[$i] defined for $campaign_id[$i]\n";
                }
                if ($DBX) { print "     |$lead_filter_sql[$i]|\n"; }
                $hopper_begin_output .=
"     lead filter $lead_filter_id[$i] defined for $campaign_id[$i] \n";
            }
        }
        else {
            $lead_filter_sql[$i] = '';
            if ($DB) {
                print
"     no lead filter defined for campaign: $campaign_id[$i]\n";
            }
            if ($DBX) { print "     |$lead_filter_id[$i]|\n"; }
        }
        $DLTsql[$i] = '';
        if ( $drop_lockout_time[$i] > 0 ) {
            $DLseconds[$i] = ( $drop_lockout_time[$i] * 3600 );
            $DLTsql[$i] =
"and ( ( (status IN('DROP','XDROP')) and (last_local_call_time < CONCAT(DATE_ADD(NOW(), INTERVAL -$DLseconds[$i] SECOND),' ',CURTIME()) ) ) or (status NOT IN('DROP','XDROP')) )";
            if ($DB) {
                print
"     drop lockout time $drop_lockout_time[$i]($DLseconds[$i]) defined for $campaign_id[$i]\n";
            }
            if ($DBX) { print "     |$DLTsql[$i]|\n"; }
            $hopper_begin_output .=
"     drop lockout time $drop_lockout_time[$i]($DLseconds[$i]) defined for $campaign_id[$i] \n";
        }
        $CCLsql[$i] = '';
        if ( $call_count_limit[$i] > 0 ) {
            $CCLsql[$i] = "and (called_count < $call_count_limit[$i])";
            if ($DB) {
                print
"     total call count limit $call_count_limit[$i] defined for $campaign_id[$i]\n";
            }
            if ($DBX) { print "     |$CCLsql[$i]|\n"; }
            $hopper_begin_output .=
"     total call count limit $call_count_limit[$i] defined for $campaign_id[$i] \n";
        }
        $cslrSQL        = "called_since_last_reset='N' and";
        $hopperSOURCE   = 'S';
        $hopperPRIORITY = '0';
        if ( $hopper_drop_run_trigger[$i] =~ /Y|A/ ) {
            if ( $hopper_drop_run_trigger[$i] =~ /A/ ) {
                $ALL_drop_statuses = "'DROP','PDROP','XDROP'";
                $stmtA =
"SELECT status FROM vicidial_statuses where status LIKE \"%DROP%\" or status_name LIKE \"%DROP%\";";
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArowsA = $sthA->rows;
                $rec_count = 0;
                while ( $sthArowsA > $rec_count ) {
                    @aryA = $sthA->fetchrow_array;
                    $ALL_drop_statuses .= ",'$aryA[0]'";
                    $rec_count++;
                }
                $sthA->finish();
                $stmtA =
"SELECT status FROM vicidial_campaign_statuses where status LIKE \"%DROP%\" or status_name LIKE \"%DROP%\";";
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArowsA = $sthA->rows;
                $rec_count = 0;
                while ( $sthArowsA > $rec_count ) {
                    @aryA = $sthA->fetchrow_array;
                    $ALL_drop_statuses .= ",'$aryA[0]'";
                    $rec_count++;
                }
                $sthA->finish();
            }
            else { $ALL_drop_statuses = "'DROP'"; }
            $cslrSQL            = '';
            $STATUSsql[$i]      = $ALL_drop_statuses;
            $list_order_mix[$i] = 'DISABLED';
            $lead_order[$i]     = 'DOWN LAST CALL TIME';
            $hopper_level[$i]   = '20000';
            $hopperSOURCE       = 'D';
            $hopperPRIORITY     = '99';
            $HOPPER_leads       = '';
            $stmtA =
"SELECT lead_id FROM $vicidial_hopper where campaign_id='$campaign_id[$i]' and source!='D' and priority!='99';";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArowsL = $sthA->rows;

            if ($DBX) {
                print
"CAMPAIGN Hopper Drop-Run Existing Drops Check 1: $sthArowsL|$stmtA|\n";
            }
            $rec_count = 0;
            while ( $sthArowsL > $rec_count ) {
                @aryA = $sthA->fetchrow_array;
                if ( $rec_count > 0 ) { $HOPPER_leads .= ','; }
                $HOPPER_leads .= "'$aryA[0]'";
                $rec_count++;
            }
            if ( $rec_count > 0 ) {
                $HOPPER_DROP_leads = '';
                $stmtA =
"SELECT lead_id FROM vicidial_list where lead_id IN($HOPPER_leads) and status IN($STATUSsql[$i]);";
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArowsLD = $sthA->rows;
                if ($DBX) {
                    print
"CAMPAIGN Hopper Drop-Run Existing Drops Check 2: $sthArowsLD|$stmtA|\n";
                }
                $rec_count = 0;
                while ( $sthArowsLD > $rec_count ) {
                    @aryA = $sthA->fetchrow_array;
                    if ( $rec_count > 0 ) { $HOPPER_DROP_leads .= ','; }
                    $HOPPER_DROP_leads .= "'$aryA[0]'";
                    $rec_count++;
                }
                if ( $rec_count > 0 ) {
                    $stmtA =
"UPDATE $vicidial_hopper SET priority='99',source='D' where lead_id IN($HOPPER_DROP_leads);";
                    $affected_rowsU = $dbhA->do($stmtA);
                    if ($DBX) {
                        print
"CAMPAIGN Hopper Drop-Run UPDATE: $affected_rowsU|$stmtA|\n";
                    }
                }
            }
            $stmtA =
"UPDATE vicidial_campaigns SET hopper_drop_run_trigger='N' where campaign_id='$campaign_id[$i]';";
            $affected_rows = $dbhA->do($stmtA);
            if ($DBX) {
                print
                  "CAMPAIGN Hopper Drop-Run RESET: $affected_rows|$stmtA|\n";
            }
            if ($DB) {
                print
"Campaign Drop-Run triggered for $campaign_id[$i]($hopper_drop_run_trigger[$i]) |$STATUSsql[$i]|$list_order_mix[$i]|$affected_rows|$affected_rowsU|\n";
            }
            $hopper_begin_output .=
"Campaign Drop-Run triggered for $campaign_id[$i]($hopper_drop_run_trigger[$i]) |$STATUSsql[$i]|$list_order_mix[$i]|$affected_rows|$affected_rowsU| \n";
        }
        if ( $list_order_mix[$i] =~ /DISABLED/ ) {
            $stmtA =
"SELECT count(*) FROM vicidial_list $VLforce_index where $cslrSQL status IN($STATUSsql[$i]) and ($list_id_sql[$i]) and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $DLTsql[$i] $CCLsql[$i] $demographic_quotasSQL[$i];";
        }
        else {
            if ( length($list_mix_dialableSQL) < 3 ) {
                $list_mix_dialableSQL = "called_count < 0";
            }
            $stmtA =
"SELECT count(*) FROM vicidial_list $VLforce_index where $cslrSQL ($list_mix_dialableSQL) and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $DLTsql[$i] $CCLsql[$i] $demographic_quotasSQL[$i];";
        }
        if ($DBX) { print "     |$stmtA|\n"; }
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows = $sthA->rows;
        if ( $sthArows > 0 ) {
            @aryA = $sthA->fetchrow_array;
            $campaign_leads_to_call[$i] = $aryA[0];
            if ($DB) {
                print
                  "     leads to call count:  $campaign_leads_to_call[$i]\n";
            }
            if ($DBX) { print "     |$stmtA|\n"; }
            $hopper_begin_output .=
              "     leads to call count:  $campaign_leads_to_call[$i] \n";
        }
        $sthA->finish();
        if (
            (
                $lead_order[$i] =~
                / 2nd NEW$| 3rd NEW$| 4th NEW$| 5th NEW$| 6th NEW$/
            )
            && ( $list_order_mix[$i] =~ /DISABLED/ )
          )
        {
            $stmtA =
"SELECT count(*) FROM vicidial_list $VLforce_index where $cslrSQL status IN('NEW') and ($list_id_sql[$i]) and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $DLTsql[$i] $demographic_quotasSQL[$i];";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows = $sthA->rows;
            if ( $sthArows > 0 ) {
                @aryA = $sthA->fetchrow_array;
                $NEW_campaign_leads_to_call[$i] = $aryA[0];
                if ($DB) {
                    print
"     NEW leads to call count:  $NEW_campaign_leads_to_call[$i]\n";
                }
                if ($DBX) { print "     |$stmtA|\n"; }
                $hopper_begin_output .=
"     NEW leads to call count:  $NEW_campaign_leads_to_call[$i] \n";
            }
            $sthA->finish();
        }
        if (
            (
                $lead_order[$i] =~
                / 2nd NEW$| 3rd NEW$| 4th NEW$| 5th NEW$| 6th NEW$/
            )
            && ( $NEW_campaign_leads_to_call[$i] > 0 )
            && ( $list_order_mix[$i] =~ /DISABLED/ )
          )
        {
            $GOOD = 1;
        }
        else {
            if ( $lead_order[$i] !~
                / 2nd NEW$| 3rd NEW$| 4th NEW$| 5th NEW$| 6th NEW$/ )
            {
                if ($DB) {
                    print
"     NO SHUFFLE-NEW-LEADS INTO HOPPER DEFINED FOR LEAD ORDER\n";
                }
            }
            else {
                if ($DB) {
                    print "     ERROR CANNOT ADD ANY NEW LEADS TO HOPPER\n";
                }
            }
        }
        if ( ( $campaign_leads_to_call[$i] < 1 ) && ( $rec_ct[$i] < 1 ) ) {
            if ($DB) { print "     NO DIALABLE LEADS FOR THIS CAMPAIGN\n"; }
            if ( $VCSdialable_leads[$i] > 0 ) {
                $stmtA =
"UPDATE vicidial_campaign_stats SET dialable_leads='0' where campaign_id='$campaign_id[$i]';";
                $affected_rows = $dbhA->do($stmtA);
                if ($DBX) { print "CAMPAIGN STATS: $affected_rows|$stmtA|\n"; }
            }
        }
        else {
            if ( $VCSdialable_leads[$i] != $campaign_leads_to_call[$i] ) {
                $stmtA =
"UPDATE vicidial_campaign_stats SET dialable_leads='$campaign_leads_to_call[$i]' where campaign_id='$campaign_id[$i]';";
                $affected_rows = $dbhA->do($stmtA);
                if ($DBX) { print "CAMPAIGN STATS: $affected_rows|$stmtA|\n"; }
            }
        }
        $ENDoutput .=
"$campaign_id[$i]     $campaign_leads_to_call[$i]     $hopper_level[$i]     $hopper_ready_count\n";
        if ( $hopper_ready_count < $hopper_level[$i] ) {
            if ($DB) {
                print
"     hopper too low ($hopper_ready_count|$hopper_level[$i]) starting hopper dump\n";
            }
            $hopper_begin_output .=
"     hopper too low ($hopper_ready_count|$hopper_level[$i]) starting hopper dump \n";
            if ( ( $campaign_leads_to_call[$i] < 1 ) && ( $rec_ct[$i] < 1 ) ) {
                if ($DB) {
                    print "     ERROR CANNOT ADD ANY LEADS TO HOPPER\n";
                }
                $hopper_begin_output .=
                  "     ERROR CANNOT ADD ANY LEADS TO HOPPER \n";
            }
            else {
                if ($DB) { print "     Getting Leads to add to hopper\n"; }
                $stmtA =
"SELECT lead_id,vendor_lead_code FROM $vicidial_hopper where campaign_id='$campaign_id[$i]';";
                if ($DBX) { print "     |$stmtA|\n"; }
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArows       = $sthA->rows;
                $lead_id_lists  = '';
                $vlc_lists      = '';
                $rec_countLISTS = 0;

                while ( $sthArows > $rec_countLISTS ) {
                    @aryA = $sthA->fetchrow_array;
                    $lead_id_lists .= "'$aryA[0]',";
                    if ( length( $aryA[1] ) > 0 ) {
                        $vlc_lists .= "\"$aryA[1]\",";
                    }
                    $rec_countLISTS++;
                }
                $sthA->finish();
                $lead_id_lists .= "'0'";
                $vlc_lists     .= "\"--99999999987654321--\"";
                $order_stmt  = '';
                $NEW_count   = 0;
                $NEW_level   = 0;
                $OTHER_level = $hopper_level[$i];

                if ( $lead_order_randomize[$i] =~ /Y/ ) {
                    $last_order = "RAND()";
                }
                else {
                    $last_order = "lead_id asc";
                    if ( $lead_order_secondary[$i] =~ /LEAD_ASCEND/ ) {
                        $last_order = "lead_id asc";
                    }
                    if ( $lead_order_secondary[$i] =~ /LEAD_DESCEND/ ) {
                        $last_order = "lead_id desc";
                    }
                    if ( $lead_order_secondary[$i] =~ /CALLTIME_ASCEND/ ) {
                        $last_order = "last_local_call_time asc";
                    }
                    if ( $lead_order_secondary[$i] =~ /CALLTIME_DESCEND/ ) {
                        $last_order = "last_local_call_time desc";
                    }
                    if ( $lead_order_secondary[$i] =~ /VENDOR_ASCEND/ ) {
                        $last_order =
                          "vendor_lead_code+0 asc, vendor_lead_code asc";
                    }
                    if ( $lead_order_secondary[$i] =~ /VENDOR_DESCEND/ ) {
                        $last_order =
                          "vendor_lead_code+0 desc, vendor_lead_code desc";
                    }
                }
                if ( $lead_order[$i] =~ /^DOWN/ ) {
                    $order_stmt = "order by lead_id asc";
                }
                if ( $lead_order[$i] =~ /^UP/ ) {
                    $order_stmt = "order by lead_id desc";
                }
                if ( $lead_order[$i] =~ /^UP LAST NAME/ ) {
                    $order_stmt = "order by last_name desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN LAST NAME/ ) {
                    $order_stmt = "order by last_name, $last_order";
                }
                if ( $lead_order[$i] =~ /^UP PHONE/ ) {
                    $order_stmt = "order by phone_number desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN PHONE/ ) {
                    $order_stmt = "order by phone_number, $last_order";
                }
                if ( $lead_order[$i] =~ /^UP COUNT/ ) {
                    $order_stmt = "order by called_count desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN COUNT/ ) {
                    $order_stmt = "order by called_count, $last_order";
                }
                if ( $lead_order[$i] =~ /^UP LAST CALL TIME/ ) {
                    $order_stmt =
                      "order by last_local_call_time desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN LAST CALL TIME/ ) {
                    $order_stmt = "order by last_local_call_time, $last_order";
                }
                if ( $lead_order[$i] =~ /^RANDOM/ ) {
                    $order_stmt = "order by RAND()";
                }
                if ( $lead_order[$i] =~ /^UP RANK/ ) {
                    $order_stmt = "order by rank desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN RANK/ ) {
                    $order_stmt = "order by rank, $last_order";
                }
                if ( $lead_order[$i] =~ /^UP OWNER/ ) {
                    $order_stmt = "order by owner desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN OWNER/ ) {
                    $order_stmt = "order by owner, $last_order";
                }
                if ( $lead_order[$i] =~ /^UP TIMEZONE/ ) {
                    $order_stmt = "order by gmt_offset_now desc, $last_order";
                }
                if ( $lead_order[$i] =~ /^DOWN TIMEZONE/ ) {
                    $order_stmt = "order by gmt_offset_now, $last_order";
                }
                if ( $lead_order[$i] =~ / 2nd NEW$/ ) { $NEW_count = 2; }
                if ( $lead_order[$i] =~ / 3rd NEW$/ ) { $NEW_count = 3; }
                if ( $lead_order[$i] =~ / 4th NEW$/ ) { $NEW_count = 4; }
                if ( $lead_order[$i] =~ / 5th NEW$/ ) { $NEW_count = 5; }
                if ( $lead_order[$i] =~ / 6th NEW$/ ) { $NEW_count = 6; }
                $REC_rec_countLEADS        = 0;
                @REC_leads_to_hopper       = @MT;
                @REC_lists_to_hopper       = @MT;
                @REC_phone_to_hopper       = @MT;
                @REC_phone_code_to_hopper  = @MT;
                @REC_postal_code_to_hopper = @MT;
                @REC_gmt_to_hopper         = @MT;
                @REC_state_to_hopper       = @MT;
                @REC_status_to_hopper      = @MT;
                @REC_modify_to_hopper      = @MT;
                @REC_user_to_hopper        = @MT;
                @REC_vlc_to_hopper         = @MT;
                @REC_source_to_hopper      = @MT;

                if ( $rec_ct[$i] > 0 ) {
                    if ($DB) {
                        print
"     looking for RECYCLE leads, maximum of $hopper_level[$i]\n";
                    }
                    $vlc_dup_check_SQL = '';
                    if ( $hopper_vlc_dup_check[$i] =~ /Y/ ) {
                        $vlc_dup_check_SQL =
                          "and vendor_lead_code NOT IN($live_vlc$vlc_lists)";
                    }
                    $stmtA =
"SELECT lead_id,list_id,gmt_offset_now,phone_number,state,status,modify_date,user,vendor_lead_code,phone_code,postal_code FROM vicidial_list $VLforce_index where $recycle_SQL[$i] and ($list_id_sql[$i]) and lead_id NOT IN($lead_id_lists) $vlc_dup_check_SQL and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $CCLsql[$i] $DLTsql[$i] $demographic_quotasSQL[$i] $dnc_blocked_lists_SQL $order_stmt limit $hopper_level[$i];";
                    if ($DBX) { print "     |$stmtA|\n"; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    if ($DB) {
                        print "     RECYCLE leads to call count:  $sthArows\n";
                    }
                    if ($DBX) { print "     |$stmtA|\n"; }
                    while ( $sthArows > $REC_rec_countLEADS ) {
                        @aryA = $sthA->fetchrow_array;
                        $REC_leads_to_hopper[$REC_rec_countLEADS]  = $aryA[0];
                        $REC_lists_to_hopper[$REC_rec_countLEADS]  = $aryA[1];
                        $REC_gmt_to_hopper[$REC_rec_countLEADS]    = $aryA[2];
                        $REC_phone_to_hopper[$REC_rec_countLEADS]  = $aryA[3];
                        $REC_state_to_hopper[$REC_rec_countLEADS]  = $aryA[4];
                        $REC_status_to_hopper[$REC_rec_countLEADS] = $aryA[5];
                        $REC_modify_to_hopper[$REC_rec_countLEADS] = $aryA[6];
                        $REC_user_to_hopper[$REC_rec_countLEADS]   = $aryA[7];
                        $REC_vlc_to_hopper[$REC_rec_countLEADS]    = $aryA[8];
                        $REC_phone_code_to_hopper[$REC_rec_countLEADS] =
                          $aryA[9];
                        $REC_postal_code_to_hopper[$REC_rec_countLEADS] =
                          $aryA[10];
                        $REC_source_to_hopper[$REC_rec_countLEADS] = 'R';

                        if ($DB_show_offset) {
                            print "LEAD_ADD: $aryA[2] $aryA[3] $aryA[4]\n";
                        }
                        $REC_rec_countLEADS++;
                        if ( length( $aryA[8] ) > 0 ) {
                            $vlc_lists .= ",\"$aryA[8]\"";
                        }
                    }
                    $sthA->finish();
                }
                else {
                    if ($DB) {
                        print "     NO RECYCLE-LEADS INTO HOPPER DEFINED\n";
                    }
                }
                $hopper_begin_output .=
"     Recycle leads to insert into the hopper: $REC_rec_countLEADS \n";
                $NEW_rec_countLEADS        = 0;
                @NEW_leads_to_hopper       = @MT;
                @NEW_lists_to_hopper       = @MT;
                @NEW_phone_to_hopper       = @MT;
                @NEW_phone_code_to_hopper  = @MT;
                @NEW_postal_code_to_hopper = @MT;
                @NEW_gmt_to_hopper         = @MT;
                @NEW_state_to_hopper       = @MT;
                @NEW_status_to_hopper      = @MT;
                @NEW_modify_to_hopper      = @MT;
                @NEW_user_to_hopper        = @MT;
                @NEW_vlc_to_hopper         = @MT;
                @NEW_source_to_hopper      = @MT;

                if (   ( $NEW_count > 0 )
                    && ( $list_order_mix[$i] =~ /DISABLED/ ) )
                {
                    $NEW_level   = int( $hopper_level[$i] / $NEW_count );
                    $OTHER_level = ( $hopper_level[$i] - $NEW_level );
                    if ($DB) {
                        print
"     looking for $NEW_level NEW leads mixed in with $OTHER_level other leads\n";
                    }
                    $vlc_dup_check_SQL = '';
                    if ( $hopper_vlc_dup_check[$i] =~ /Y/ ) {
                        $vlc_dup_check_SQL =
                          "and vendor_lead_code NOT IN($live_vlc$vlc_lists)";
                    }
                    $stmtA =
"SELECT lead_id,list_id,gmt_offset_now,phone_number,state,status,modify_date,user,vendor_lead_code,phone_code,postal_code FROM vicidial_list $VLforce_index where $cslrSQL status IN('NEW') and ($list_id_sql[$i]) and lead_id NOT IN($lead_id_lists) $vlc_dup_check_SQL and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $CCLsql[$i] $DLTsql[$i] $demographic_quotasSQL[$i] $dnc_blocked_lists_SQL $order_stmt limit $NEW_level;";
                    if ($DBX) { print "     |$stmtA|\n"; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows = $sthA->rows;
                    while ( $sthArows > $NEW_rec_countLEADS ) {
                        @aryA = $sthA->fetchrow_array;
                        $NEW_leads_to_hopper[$NEW_rec_countLEADS]  = $aryA[0];
                        $NEW_lists_to_hopper[$NEW_rec_countLEADS]  = $aryA[1];
                        $NEW_gmt_to_hopper[$NEW_rec_countLEADS]    = $aryA[2];
                        $NEW_phone_to_hopper[$NEW_rec_countLEADS]  = $aryA[3];
                        $NEW_state_to_hopper[$NEW_rec_countLEADS]  = $aryA[4];
                        $NEW_status_to_hopper[$NEW_rec_countLEADS] = $aryA[5];
                        $NEW_modify_to_hopper[$NEW_rec_countLEADS] = $aryA[6];
                        $NEW_user_to_hopper[$NEW_rec_countLEADS]   = $aryA[7];
                        $NEW_vlc_to_hopper[$NEW_rec_countLEADS]    = $aryA[8];
                        $NEW_phone_code_to_hopper[$NEW_rec_countLEADS] =
                          $aryA[9];
                        $NEW_postal_code_to_hopper[$NEW_rec_countLEADS] =
                          $aryA[10];
                        $NEW_source_to_hopper[$NEW_rec_countLEADS] = 'N';

                        if ($DB_show_offset) {
                            print "LEAD_ADD: $aryA[2] $aryA[3] $aryA[4]\n";
                        }
                        $NEW_rec_countLEADS++;
                        if ( length( $aryA[8] ) > 0 ) {
                            $vlc_lists .= ",\"$aryA[8]\"";
                        }
                    }
                    $OTHER_level = ( $hopper_level[$i] - $NEW_rec_countLEADS );
                    $sthA->finish();
                    $hopper_begin_output .=
"     NEW leads to insert into the hopper: $NEW_rec_countLEADS \n";
                }
                $rec_countLEADS           = 0;
                $NEW_dec                  = 99;
                $NEW_in                   = 0;
                $rec_count                = 0;
                $REC_insert_count         = 0;
                $vlc_dup_check_SKIP_COUNT = 0;
                @leads_to_hopper          = @MT;
                @lists_to_hopper          = @MT;
                @gmt_to_hopper            = @MT;
                @state_to_hopper          = @MT;
                @phone_to_hopper          = @MT;
                @phone_code_to_hopper     = @MT;
                @postal_code_to_hopper    = @MT;
                @status_to_hopper         = @MT;
                @modify_to_hopper         = @MT;
                @user_to_hopper           = @MT;
                @vlc_to_hopper            = @MT;
                @source_to_hopper         = @MT;

                if ( $campaign_leads_to_call[$i] > 0 ) {
                    if ($DB) {
                        print "     lead call order:      $order_stmt\n";
                    }
                    $vlc_dup_check_SQL = '';
                    if ( $hopper_vlc_dup_check[$i] =~ /Y/ ) {
                        $vlc_dup_check_SQL =
                          "and vendor_lead_code NOT IN($live_vlc$vlc_lists)";
                    }
                    if ( $list_order_mix[$i] =~ /DISABLED/ ) {
                        $stmtA =
"SELECT lead_id,list_id,gmt_offset_now,phone_number,state,status,modify_date,user,vendor_lead_code,phone_code,postal_code FROM vicidial_list $VLforce_index where $cslrSQL status IN($STATUSsql[$i]) and ($list_id_sql[$i]) and lead_id NOT IN($lead_id_lists) $vlc_dup_check_SQL and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $CCLsql[$i] $DLTsql[$i] $demographic_quotasSQL[$i] $dnc_blocked_lists_SQL $order_stmt limit $OTHER_level;";
                        if ($DBX) { print "     |$stmtA|\n"; }
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows = $sthA->rows;
                        while ( $sthArows > $rec_count ) {
                            @aryA = $sthA->fetchrow_array;
                            if (   ( $NEW_count > 0 )
                                && ( $NEW_rec_countLEADS > $NEW_in ) )
                            {
                                if ($DB_show_offset) {
                                    print
"NEW_COUNT: $NEW_count|$NEW_dec|$NEW_in|$NEW_rec_countLEADS\n";
                                }
                                if ( $NEW_count > $NEW_dec ) {
                                    $NEW_dec++;
                                }
                                else {
                                    $leads_to_hopper[$rec_countLEADS] =
                                      $NEW_leads_to_hopper[$NEW_in];
                                    $lists_to_hopper[$rec_countLEADS] =
                                      $NEW_lists_to_hopper[$NEW_in];
                                    $gmt_to_hopper[$rec_countLEADS] =
                                      $NEW_gmt_to_hopper[$NEW_in];
                                    $state_to_hopper[$rec_countLEADS] =
                                      $NEW_state_to_hopper[$NEW_in];
                                    $phone_to_hopper[$rec_countLEADS] =
                                      $NEW_phone_to_hopper[$NEW_in];
                                    $phone_code_to_hopper[$rec_countLEADS] =
                                      $NEW_phone_code_to_hopper[$NEW_in];
                                    $postal_code_to_hopper[$rec_countLEADS] =
                                      $NEW_postal_code_to_hopper[$NEW_in];
                                    $status_to_hopper[$rec_countLEADS] =
                                      $NEW_status_to_hopper[$NEW_in];
                                    $modify_to_hopper[$rec_countLEADS] =
                                      $NEW_modify_to_hopper[$NEW_in];
                                    $user_to_hopper[$rec_countLEADS] =
                                      $NEW_user_to_hopper[$NEW_in];
                                    $vlc_to_hopper[$rec_countLEADS] =
                                      $NEW_vlc_to_hopper[$NEW_in];
                                    $source_to_hopper[$rec_countLEADS] =
                                      $NEW_source_to_hopper[$NEW_in];

                                    if ($DB_show_offset) {
                                        print
"LEAD_ADD:    $NEW_leads_to_hopper[$NEW_in]   $NEW_phone_to_hopper[$NEW_in]\n";
                                    }
                                    $rec_countLEADS++;
                                    $NEW_in++;
                                    $NEW_dec = 2;
                                }
                            }
                            if ( $REC_rec_countLEADS > $REC_insert_count ) {
                                $leads_to_hopper[$rec_countLEADS] =
                                  $REC_leads_to_hopper[$REC_insert_count];
                                $lists_to_hopper[$rec_countLEADS] =
                                  $REC_lists_to_hopper[$REC_insert_count];
                                $gmt_to_hopper[$rec_countLEADS] =
                                  $REC_gmt_to_hopper[$REC_insert_count];
                                $state_to_hopper[$rec_countLEADS] =
                                  $REC_state_to_hopper[$REC_insert_count];
                                $phone_to_hopper[$rec_countLEADS] =
                                  $REC_phone_to_hopper[$REC_insert_count];
                                $phone_code_to_hopper[$rec_countLEADS] =
                                  $REC_phone_code_to_hopper[$REC_insert_count];
                                $postal_code_to_hopper[$rec_countLEADS] =
                                  $REC_postal_code_to_hopper[$REC_insert_count];
                                $status_to_hopper[$rec_countLEADS] =
                                  $REC_status_to_hopper[$REC_insert_count];
                                $modify_to_hopper[$rec_countLEADS] =
                                  $REC_modify_to_hopper[$REC_insert_count];
                                $user_to_hopper[$rec_countLEADS] =
                                  $REC_user_to_hopper[$REC_insert_count];
                                $vlc_to_hopper[$rec_countLEADS] =
                                  $REC_vlc_to_hopper[$REC_insert_count];
                                $source_to_hopper[$rec_countLEADS] =
                                  $REC_source_to_hopper[$REC_insert_count];
                                $rec_countLEADS++;
                                $REC_insert_count++;
                            }
                            $leads_to_hopper[$rec_countLEADS]       = $aryA[0];
                            $lists_to_hopper[$rec_countLEADS]       = $aryA[1];
                            $gmt_to_hopper[$rec_countLEADS]         = $aryA[2];
                            $state_to_hopper[$rec_countLEADS]       = $aryA[4];
                            $phone_to_hopper[$rec_countLEADS]       = $aryA[3];
                            $status_to_hopper[$rec_countLEADS]      = $aryA[5];
                            $modify_to_hopper[$rec_countLEADS]      = $aryA[6];
                            $user_to_hopper[$rec_countLEADS]        = $aryA[7];
                            $vlc_to_hopper[$rec_countLEADS]         = $aryA[8];
                            $phone_code_to_hopper[$rec_countLEADS]  = $aryA[9];
                            $postal_code_to_hopper[$rec_countLEADS] = $aryA[10];
                            $source_to_hopper[$rec_countLEADS] = $hopperSOURCE;

                            if ($DB_show_offset) {
                                print "LEAD_ADD: $aryA[2] $aryA[3] $aryA[4]\n";
                            }
                            $rec_countLEADS++;
                            $rec_count++;
                            if ( length( $aryA[8] ) > 0 ) {
                                $vlc_lists .= ",\"$aryA[8]\"";
                            }
                        }
                        $sthA->finish();
                    }
                    else {
                        $USX        = '_____';
                        $x          = 0;
                        $z          = 0;
                        @LM_results = @MT;
                        foreach (@list_mixARY) {
                            $rec_count        = 0;
                            @list_mix_stepARY = @MT;
                            @list_mix_stepARY = split( /\|/, $list_mixARY[$x] );
                            if ( $list_mix_stepARY[2] > 0 ) {
                                $LM_step_goal[$x] =
                                  int( ( $list_mix_stepARY[2] / 100 ) *
                                      $hopper_level[$i] );
                                $LM_step_even[$x] = int(
                                    ( 100 / $list_mix_stepARY[2] ) * 100000 );
                                if ( $LM_step_goal[$x] < 1 ) {
                                    $LM_step_goal[$x] = 1;
                                }
                                if ( $LM_step_even[$x] < 1 ) {
                                    $LM_step_even[$x] = 1;
                                }
                            }
                            else {
                                $LM_step_goal[$x] = 0;
                                $LM_step_even[$x] = 0;
                            }
                            $list_mix_stepARY[3] =~ s/ /','/gi;
                            $list_mix_stepARY[3] =~ s/^',|,'-//gi;
                            if ( $list_mix_stepARY[3] !~ /\'$/ ) {
                                $list_mix_stepARY[3] = "$list_mix_stepARY[3]'";
                            }
                            if ($DBX) {
                                print
"  LM $x |$list_mix_stepARY[0]|$list_mix_stepARY[2]|$LM_step_goal[$x]|$list_mix_stepARY[3]|\n";
                            }
                            $list_mix_dialableSQL =
"(($indv_list_gmt_sql{ \"$list_mix_stepARY[0]\" }) and status IN($list_mix_stepARY[3]))";
                            $vlc_dup_check_SQL = '';
                            if ( $hopper_vlc_dup_check[$i] =~ /Y/ ) {
                                $vlc_dup_check_SQL =
"and vendor_lead_code NOT IN($live_vlc$vlc_lists)";
                            }
                            $stmtA =
"SELECT lead_id,list_id,gmt_offset_now,phone_number,state,status,modify_date,user,vendor_lead_code,phone_code,postal_code FROM vicidial_list $VLforce_index where $cslrSQL ($list_mix_dialableSQL) and lead_id NOT IN($lead_id_lists) $vlc_dup_check_SQL and ($all_gmtSQL[$i]) $lead_filter_sql[$i] $CCLsql[$i] $DLTsql[$i] $demographic_quotasSQL[$i] $dnc_blocked_lists_SQL $order_stmt limit $LM_step_goal[$x];";
                            if ($DBX) { print "     |$stmtA|\n"; }
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            while ( $sthArows > $rec_count ) {
                                @aryA = $sthA->fetchrow_array;
                                if ( $mix_method[$i] =~ /RANDOM/ ) {
                                    $order = int( rand(9999999) ) + 10000000;
                                }
                                else {
                                    if ( $mix_method[$i] =~ /EVEN_MIX/ ) {
                                        $order =
                                          ( ( $rec_count * $LM_step_even[$x] )
                                            + $x );
                                    }
                                    else {
                                        $order =
                                          ( ( $x * 1000000 ) + $rec_count );
                                    }
                                }
                                $LM_results[$z] =
"$order$USX$aryA[0]$USX$aryA[1]$USX$aryA[2]$USX$aryA[3]$USX$aryA[4]$USX$aryA[5]$USX$aryA[6]$USX$aryA[7]$USX$aryA[8]$USX$aryA[9]$USX$aryA[10]";
                                $rec_count++;
                                $z++;
                            }
                            $sthA->finish();
                            $x++;
                        }
                        @LM_results_SORT = sort { $a <=> $b } @LM_results;
                        $w               = 0;
                        while ( $z > $w ) {
                            @aryA = split( /_____/, $LM_results_SORT[$w] );
                            if ( $REC_rec_countLEADS > $REC_insert_count ) {
                                $leads_to_hopper[$rec_countLEADS] =
                                  $REC_leads_to_hopper[$REC_insert_count];
                                $lists_to_hopper[$rec_countLEADS] =
                                  $REC_lists_to_hopper[$REC_insert_count];
                                $gmt_to_hopper[$rec_countLEADS] =
                                  $REC_gmt_to_hopper[$REC_insert_count];
                                $state_to_hopper[$rec_countLEADS] =
                                  $REC_state_to_hopper[$REC_insert_count];
                                $phone_to_hopper[$rec_countLEADS] =
                                  $REC_phone_to_hopper[$REC_insert_count];
                                $phone_code_to_hopper[$rec_countLEADS] =
                                  $REC_phone_code_to_hopper[$REC_insert_count];
                                $postal_code_to_hopper[$rec_countLEADS] =
                                  $REC_postal_code_to_hopper[$REC_insert_count];
                                $status_to_hopper[$rec_countLEADS] =
                                  $REC_status_to_hopper[$REC_insert_count];
                                $modify_to_hopper[$rec_countLEADS] =
                                  $REC_modify_to_hopper[$REC_insert_count];
                                $user_to_hopper[$rec_countLEADS] =
                                  $REC_user_to_hopper[$REC_insert_count];
                                $vlc_to_hopper[$rec_countLEADS] =
                                  $REC_vlc_to_hopper[$REC_insert_count];
                                $source_to_hopper[$rec_countLEADS] =
                                  $REC_source_to_hopper[$REC_insert_count];
                                $rec_countLEADS++;
                                $REC_insert_count++;
                            }
                            $leads_to_hopper[$rec_countLEADS]       = $aryA[1];
                            $lists_to_hopper[$rec_countLEADS]       = $aryA[2];
                            $gmt_to_hopper[$rec_countLEADS]         = $aryA[3];
                            $phone_to_hopper[$rec_countLEADS]       = $aryA[4];
                            $state_to_hopper[$rec_countLEADS]       = $aryA[5];
                            $status_to_hopper[$rec_countLEADS]      = $aryA[6];
                            $modify_to_hopper[$rec_countLEADS]      = $aryA[7];
                            $user_to_hopper[$rec_countLEADS]        = $aryA[8];
                            $vlc_to_hopper[$rec_countLEADS]         = $aryA[9];
                            $phone_code_to_hopper[$rec_countLEADS]  = $aryA[10];
                            $postal_code_to_hopper[$rec_countLEADS] = $aryA[11];
                            $source_to_hopper[$rec_countLEADS] = $hopperSOURCE;

                            if ($DB_show_offset) {
                                print "LEAD_ADD: $aryA[3] $aryA[4] $aryA[5]\n";
                            }
                            if ($DBX) { print "     $w|$LM_results[$w]\n"; }
                            $rec_countLEADS++;
                            $w++;
                            if ( length( $aryA[9] ) > 0 ) {
                                $vlc_lists .= ",\"$aryA[9]\"";
                            }
                        }
                    }
                }
                while ( $REC_rec_countLEADS > $REC_insert_count ) {
                    $leads_to_hopper[$rec_countLEADS] =
                      $REC_leads_to_hopper[$REC_insert_count];
                    $lists_to_hopper[$rec_countLEADS] =
                      $REC_lists_to_hopper[$REC_insert_count];
                    $gmt_to_hopper[$rec_countLEADS] =
                      $REC_gmt_to_hopper[$REC_insert_count];
                    $state_to_hopper[$rec_countLEADS] =
                      $REC_state_to_hopper[$REC_insert_count];
                    $phone_to_hopper[$rec_countLEADS] =
                      $REC_phone_to_hopper[$REC_insert_count];
                    $phone_code_to_hopper[$rec_countLEADS] =
                      $REC_phone_code_to_hopper[$REC_insert_count];
                    $postal_code_to_hopper[$rec_countLEADS] =
                      $REC_postal_code_to_hopper[$REC_insert_count];
                    $status_to_hopper[$rec_countLEADS] =
                      $REC_status_to_hopper[$REC_insert_count];
                    $modify_to_hopper[$rec_countLEADS] =
                      $REC_modify_to_hopper[$REC_insert_count];
                    $user_to_hopper[$rec_countLEADS] =
                      $REC_user_to_hopper[$REC_insert_count];
                    $vlc_to_hopper[$rec_countLEADS] =
                      $REC_vlc_to_hopper[$REC_insert_count];
                    $source_to_hopper[$rec_countLEADS] =
                      $REC_source_to_hopper[$REC_insert_count];
                    $rec_countLEADS++;
                    $REC_insert_count++;
                }
                if ($DB) {
                    print "     Adding to hopper:     $rec_countLEADS\n";
                }
                $event_string =
                  "|$campaign_id[$i]|Added to hopper $rec_countLEADS|";
                &event_logger;
                $h           = 0;
                $h_attempted = 0;
                $DBinserted  = 0;
                foreach (@leads_to_hopper) {
                    if ( $leads_to_hopper[$h] != '0' ) {
                        $DNClead    = 0;
                        $DCCLlead   = 0;
                        $DNCC       = 0;
                        $DNCL       = 0;
                        $DCCL       = 0;
                        $TFHCCLlead = 0;
                        $TFHCCL     = 0;
                        if (   ( $use_internal_dnc[$i] =~ /Y/ )
                            || ( $use_internal_dnc[$i] =~ /AREACODE/ ) )
                        {
                            if ( $use_internal_dnc[$i] =~ /AREACODE/ ) {
                                $pth_areacode =
                                  substr( $phone_to_hopper[$h], 0, 3 );
                                $pth_areacode .= "XXXXXXX";
                                $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number IN('$phone_to_hopper[$h]','$pth_areacode');";
                            }
                            else {
                                $stmtA =
"SELECT count(*) FROM vicidial_dnc where phone_number=\"$phone_to_hopper[$h]\";";
                            }
                            if ($DB) {
                                print
"     Doing DNC Check: $phone_to_hopper[$h] - $use_internal_dnc[$i]\n";
                            }
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            if ( $sthArows > 0 ) {
                                @aryA    = $sthA->fetchrow_array;
                                $DNClead = $aryA[0];
                            }
                            $sthA->finish();
                            if ( $DNClead != '0' ) {
                                $DNCL++;
                                $stmtA =
"UPDATE vicidial_list SET status='DNCL' where lead_id='$leads_to_hopper[$h]';";
                                $affected_rows = $dbhA->do($stmtA);
                                if ($DBX) {
                                    print
"Flagging DNC lead:     $affected_rows  $phone_to_hopper[$h]\n";
                                }
                            }
                        }
                        if (
                            (
                                   ( $use_campaign_dnc[$i] =~ /Y/ )
                                || ( $use_campaign_dnc[$i] =~ /AREACODE/ )
                            )
                            && ( $DNClead == '0' )
                          )
                        {
                            $temp_campaign_id = $campaign_id[$i];
                            if ( length( $use_other_campaign_dnc[$i] ) > 0 ) {
                                $temp_campaign_id = $use_other_campaign_dnc[$i];
                            }
                            if ( $use_campaign_dnc[$i] =~ /AREACODE/ ) {
                                $pth_areacode =
                                  substr( $phone_to_hopper[$h], 0, 3 );
                                $pth_areacode .= "XXXXXXX";
                                $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number IN('$phone_to_hopper[$h]','$pth_areacode') and campaign_id='$temp_campaign_id';";
                            }
                            else {
                                $stmtA =
"SELECT count(*) FROM vicidial_campaign_dnc where phone_number=\"$phone_to_hopper[$h]\" and campaign_id='$temp_campaign_id';";
                            }
                            if ($DBX) {
                                print "$use_other_campaign_dnc[$i]|$stmtA\n";
                            }
                            if ($DB) {
                                print
"Doing CAMP DNC Check: $phone_to_hopper[$h] - $use_campaign_dnc[$i] - $temp_campaign_id\n";
                            }
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            if ( $sthArows > 0 ) {
                                @aryA    = $sthA->fetchrow_array;
                                $DNClead = ( $DNClead + $aryA[0] );
                            }
                            $sthA->finish();
                            if ( $aryA[0] != '0' ) {
                                $DNCC++;
                                $stmtA =
"UPDATE vicidial_list SET status='DNCC' where lead_id='$leads_to_hopper[$h]';";
                                $affected_rows = $dbhA->do($stmtA);
                                if ($DBX) {
                                    print
"Flagging DNC lead:     $affected_rows  $phone_to_hopper[$h] $campaign_id[$i]\n";
                                }
                            }
                        }
                        if (   ( $SSdaily_call_count_limit > 0 )
                            && ( $daily_call_count_limit[$i] > 0 ) )
                        {
                            if ( $daily_limit_manual[$i] =~ /COUNT/ ) {
                                $stmtA =
"SELECT count(*) FROM vicidial_lead_call_daily_counts where lead_id='$leads_to_hopper[$h]' and called_count_total >= '$daily_call_count_limit[$i]';";
                            }
                            else {
                                $stmtA =
"SELECT count(*) FROM vicidial_lead_call_daily_counts where lead_id='$leads_to_hopper[$h]' and called_count_auto >= '$daily_call_count_limit[$i]';";
                            }
                            if ($DB) {
                                print
"     Doing Daily Call Count Check: $leads_to_hopper[$h] - $daily_call_count_limit[$i]\n";
                            }
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            if ( $sthArows > 0 ) {
                                @aryA     = $sthA->fetchrow_array;
                                $DCCLlead = $aryA[0];
                            }
                            $sthA->finish();
                            if ( $DCCLlead != '0' ) {
                                $DCCL++;
                                $stmtA =
"UPDATE vicidial_list SET called_since_last_reset='Y' where lead_id='$leads_to_hopper[$h]';";
                                $affected_rows = $dbhA->do($stmtA);
                                if ($DBX) {
                                    print
"Flagging DCCL lead:     $affected_rows  $leads_to_hopper[$h]\n";
                                }
                            }
                        }
                        $passed_24hour_call_count = 1;
                        if (
                            ( $SScall_limit_24hour > 0 )
                            && ( $call_limit_24hour_method[$i] =~
                                /PHONE_NUMBER|LEAD/ )
                          )
                        {
                            $temp_24hour_phone      = $phone_to_hopper[$h];
                            $temp_24hour_phone_code = $phone_code_to_hopper[$h];
                            $temp_24hour_state      = $state_to_hopper[$h];
                            $temp_24hour_postal_code =
                              $postal_code_to_hopper[$h];
                            $TEMPlead_id     = $leads_to_hopper[$h];
                            $TEMPcampaign_id = $campaign_id[$i];
                            $TEMPcall_limit_24hour_method =
                              $call_limit_24hour_method[$i];
                            $TEMPcall_limit_24hour_scope =
                              $call_limit_24hour_scope[$i];
                            $TEMPcall_limit_24hour = $call_limit_24hour[$i];
                            $TEMPcall_limit_24hour_override =
                              $call_limit_24hour_override[$i];
                            $TFHCCLalt = 0;

                            if ( $DB > 0 ) {
                                print
"24-Hour Call Count Check: $SScall_limit_24hour|$TEMPcall_limit_24hour_method|$TEMPcall_limit_24hour_scope|$TEMPlead_id|\n";
                            }
                            &check_24hour_call_count;
                        }
                        $VAC_exist = 0;
                        $stmtA =
"SELECT count(*) FROM vicidial_auto_calls where lead_id='$leads_to_hopper[$h]';";
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows = $sthA->rows;
                        if ( $sthArows > 0 ) {
                            @aryA      = $sthA->fetchrow_array;
                            $VAC_exist = $aryA[0];
                        }
                        $sthA->finish();
                        $VLA_exist = 0;
                        $stmtA =
"SELECT count(*) FROM vicidial_live_agents where lead_id='$leads_to_hopper[$h]';";
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows = $sthA->rows;
                        if ( $sthArows > 0 ) {
                            @aryA      = $sthA->fetchrow_array;
                            $VLA_exist = $aryA[0];
                        }
                        $sthA->finish();
                        $VLC_exist = 0;
                        if (   ( $hopper_vlc_dup_check[$i] =~ /Y/ )
                            && ( length( $vlc_to_hopper[$h] ) > 0 ) )
                        {
                            $stmtA =
"SELECT count(*) FROM $vicidial_hopper where vendor_lead_code=\"$vlc_to_hopper[$h]\";";
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            if ( $sthArows > 0 ) {
                                @aryA      = $sthA->fetchrow_array;
                                $VLC_exist = $aryA[0];
                            }
                            $sthA->finish();
                        }
                        if ( ( $VAC_exist > 0 ) || ( $VLA_exist > 0 ) ) {
                            $detail_string =
"LIVE CALL SKIPPING     |$VAC_exist|$VLA_exist|     |$campaign_id[$i]|$leads_to_hopper[$h]|$phone_to_hopper[$h]|$state_to_hopper[$h]|$gmt_to_hopper[$h]|$status_to_hopper[$h]|$modify_to_hopper[$h]|$user_to_hopper[$h]|$vlc_to_hopper[$h]|$phone_code_to_hopper[$h]|$postal_code_to_hopper[$h]|";
                            &detail_logger;
                        }
                        else {
                            if (   ( $VLC_exist > 0 )
                                && ( $hopper_vlc_dup_check[$i] =~ /Y/ ) )
                            {
                                $detail_string =
"VLC CALL SKIPPING     |$VLC_exist|$hopper_vlc_dup_check[$i]|     |$campaign_id[$i]|$leads_to_hopper[$h]|$phone_to_hopper[$h]|$state_to_hopper[$h]|$gmt_to_hopper[$h]|$status_to_hopper[$h]|$modify_to_hopper[$h]|$user_to_hopper[$h]|$vlc_to_hopper[$h]|$phone_code_to_hopper[$h]|$postal_code_to_hopper[$h]|";
                                &detail_logger;
                                $vlc_dup_check_SKIP_COUNT++;
                            }
                            else {
                                if ( $DNClead == '0' ) {
                                    if (   ( $DCCLlead == '0' )
                                        && ( $TFHCCLlead == '0' ) )
                                    {
                                        $stmtA =
"INSERT INTO $vicidial_hopper (lead_id,campaign_id,status,user,list_id,gmt_offset_now,state,priority,source,vendor_lead_code) values('$leads_to_hopper[$h]','$campaign_id[$i]','READY','','$lists_to_hopper[$h]','$gmt_to_hopper[$h]',\"$state_to_hopper[$h]\",'$hopperPRIORITY','$source_to_hopper[$h]',\"$vlc_to_hopper[$h]\");";
                                        $affected_rows = $dbhA->do($stmtA);
                                        $DBinserted =
                                          ( $DBinserted + $affected_rows );
                                        if ($DBX) {
                                            print
"LEAD INSERTED: $affected_rows|$leads_to_hopper[$h]|\n";
                                        }
                                        if ($DB_detail) {
                                            $detail_string =
"|$campaign_id[$i]|$leads_to_hopper[$h]|$phone_to_hopper[$h]|$state_to_hopper[$h]|$gmt_to_hopper[$h]|$status_to_hopper[$h]|$modify_to_hopper[$h]|$user_to_hopper[$h]|$vlc_to_hopper[$h]|$source_to_hopper[$h]|$phone_code_to_hopper[$h]|$postal_code_to_hopper[$h]|";
                                            &detail_logger;
                                        }
                                    }
                                    else {
                                        if ( $DCCLlead > 0 ) { $DCCLskip++; }
                                        if ( $TFHCCLlead > 0 ) {
                                            $TFHCCLskip++;
                                        }
                                        $detail_string =
"DAILY/24-HOUR CALL COUNT LIMIT SKIPPING     |$DCCLlead|$TFHCCLlead|($TFhourCOUNT >= $TEMPcall_limit_24hour)|     |$campaign_id[$i]|$leads_to_hopper[$h]|$phone_to_hopper[$h]|$state_to_hopper[$h]|$gmt_to_hopper[$h]|$status_to_hopper[$h]|$modify_to_hopper[$h]|$user_to_hopper[$h]|$vlc_to_hopper[$h]|$source_to_hopper[$h]|$phone_code_to_hopper[$h]|$postal_code_to_hopper[$h]|";
                                        &detail_logger;
                                    }
                                }
                                else {
                                    if (
                                        (
                                            (
                                                $auto_alt_dial_statuses[$i] =~
                                                / DNCC /
                                            )
                                            && ( $DNCC > 0 )
                                        )
                                        || (
                                            (
                                                $auto_alt_dial_statuses[$i] =~
                                                / DNCL /
                                            )
                                            && ( $DNCL > 0 )
                                        )
                                        || (
                                            (
                                                $auto_alt_dial_statuses[$i] =~
                                                / TFHCCL /
                                            )
                                            && ( $TFHCCL > 0 )
                                        )
                                      )
                                    {
                                        $stmtA =
"INSERT INTO $vicidial_hopper (lead_id,campaign_id,status,user,list_id,gmt_offset_now,state,priority,source,vendor_lead_code) values('$leads_to_hopper[$h]','$campaign_id[$i]','DNC','','$lists_to_hopper[$h]','$gmt_to_hopper[$h]',\"$state_to_hopper[$h]\",'$hopperPRIORITY','$source_to_hopper[$h]',\"$vlc_to_hopper[$h]\");";
                                        $affected_rows = $dbhA->do($stmtA);
                                        $DBinserted =
                                          ( $DBinserted + $affected_rows );
                                        if ($DBX) {
                                            print
"LEAD INSERTED AS DNC: $affected_rows|$leads_to_hopper[$h]|\n";
                                        }
                                        if ($DB_detail) {
                                            $detail_string =
"|$campaign_id[$i]|$leads_to_hopper[$h]|$phone_to_hopper[$h]|$state_to_hopper[$h]|$gmt_to_hopper[$h]|$status_to_hopper[$h]|$modify_to_hopper[$h]|$user_to_hopper[$h]|$vlc_to_hopper[$h]|$source_to_hopper[$h]|$phone_code_to_hopper[$h]|$postal_code_to_hopper[$h]|";
                                            &detail_logger;
                                        }
                                    }
                                    else {
                                        $DNCskip++;
                                    }
                                }
                            }
                        }
                        $h_attempted++;
                    }
                    $h++;
                }
                if ( $h_attempted > 0 ) {
                    $insert_end_output = '';
                    $insert_end_output .=
"Attempted hopper inserts for this campaign:          $h_attempted    $now_date \n";
                    $insert_end_output .=
"     Leads inserted into the hopper:                 $DBinserted \n";
                    $insert_end_output .=
"     VLC Dup Check Rejected:                         $vlc_dup_check_SKIP_COUNT \n";
                    $insert_end_output .=
"     DNC lead skipped:                               $DNCskip \n";
                    $insert_end_output .=
"     Daily call count limit lead skipped:            $DCCLskip \n";
                    $insert_end_output .=
"     24-Hour call count limit lead skipped:          $TFHCCLskip \n";
                    if ($DB) { print "$insert_end_output"; }
                    $insert_end_outputSQL =
",adapt_output=\"$hopper_begin_output\n$insert_end_output\"";
                }
            }
        }
    }
    $stmtA =
"UPDATE vicidial_campaign_stats_debug SET entry_time='$now_date',debug_output=\"$hopper_begin_output\"$insert_end_outputSQL where campaign_id='$campaign_id[$i]' and server_ip='HOPPER';";
    $affected_rows = $dbhA->do($stmtA);
    if ($DBX) {
        print "vicidial_campaign_stats_debug UPDATE: $affected_rows|$stmtA|\n";
    }
    $i++;
}
$dbhA->disconnect();
if ($DB) {
    if ( length($ENDoutput) > 10 ) {
        print "\n";
        print "SUMMARY:     $i campaigns\n";
        print "$ENDoutput";
    }
    $secY = time();
    $secZ = ( $secY - $secT );
    if ( !$q ) { print "DONE. Script execution time in seconds: $secZ\n"; }
}
exit 0;

sub check_24hour_call_count {
    $passed_24hour_call_count = 0;
    $limit_scopeSQL           = '';
    if ( $TEMPcall_limit_24hour_scope =~ /CAMPAIGN_LISTS/ ) {
        $limit_scopeCAMP = '';
        $stmtY =
"SELECT list_id FROM vicidial_lists where campaign_id='$TEMPcampaign_id';";
        $sthY = $dbhA->prepare($stmtY) or die "preparing: ", $dbhA->errstr;
        $sthY->execute or die "executing: $stmtY",           $dbhA->errstr;
        $sthYrows      = $sthY->rows;
        $rec_campLISTS = 0;
        while ( $sthYrows > $rec_campLISTS ) {
            @aryY = $sthY->fetchrow_array;
            $limit_scopeCAMP .= "'$aryY[0]',";
            $rec_campLISTS++;
        }
        if ( length($limit_scopeCAMP) < 2 ) { $limit_scopeCAMP = "'1'"; }
        else                                { chop($limit_scopeCAMP); }
        $limit_scopeSQL = "and list_id IN($limit_scopeCAMP)";
    }
    if ( $TEMPcall_limit_24hour_method =~ /PHONE_NUMBER/ ) {
        $stmtA =
"SELECT count(*) FROM vicidial_lead_24hour_calls where phone_number=\"$temp_24hour_phone\" and phone_code=\"$temp_24hour_phone_code\" and (call_date >= NOW() - INTERVAL 1 DAY) $limit_scopeSQL;";
    }
    else {
        $stmtA =
"SELECT count(*) FROM vicidial_lead_24hour_calls where lead_id='$TEMPlead_id' and (call_date >= NOW() - INTERVAL 1 DAY) $limit_scopeSQL;";
    }
    if ($DB) {
        print
"     Doing 24-Hour Call Count Check: $TEMPlead_id|$temp_24hour_phone_code|$temp_24hour_phone|$temp_24hour_state|$temp_24hour_postal_code - $TEMPcall_limit_24hour_method - $TEMPcall_limit_24hour_scope - $TEMPcall_limit_24hour|$TEMPcall_limit_24hour_scope\n";
    }
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows      = $sthA->rows;
    $TFhourCOUNT   = 0;
    $TFhourSTATE   = '';
    $TFhourCOUNTRY = '';
    if ( $sthArows > 0 ) {
        @aryA        = $sthA->fetchrow_array;
        $TFhourCOUNT = ( $TFhourCOUNT + $aryA[0] );
    }
    $sthA->finish();
    if ($DBX) {
        print "     24-Hour Call Limit Count DEBUG:     $TFhourCOUNT|$stmtA|\n";
    }
    if (   ( $TEMPcall_limit_24hour_override !~ /^DISABLED$/ )
        && ( length($TEMPcall_limit_24hour_override) > 0 ) )
    {
        $TFH_areacode = substr( $temp_24hour_phone, 0, 3 );
        $stmtY =
"SELECT state,country FROM vicidial_phone_codes where country_code='$temp_24hour_phone_code' and areacode='$TFH_areacode';";
        $sthY = $dbhA->prepare($stmtY) or die "preparing: ", $dbhA->errstr;
        $sthY->execute or die "executing: $stmtY",           $dbhA->errstr;
        $sthYrows = $sthY->rows;
        if ( $sthYrows > 0 ) {
            @aryY          = $sthY->fetchrow_array;
            $TFhourSTATE   = $aryY[0];
            $TFhourCOUNTRY = $aryY[1];
        }
        $sthA->finish();
        $TEMP_TFhour_OR_entry        = '';
        $TFH_OR_method               = 'state_areacode';
        $TFH_OR_postcode_field_match = 0;
        $TFH_OR_state_field_match    = 0;
        $TFH_OR_postcode_state       = '';
        $stmtA =
"SELECT container_entry FROM vicidial_settings_containers where container_id='$TEMPcall_limit_24hour_override';";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows = $sthA->rows;
        if ($DBX) { print "$sthArows|$stmtA\n"; }

        if ( $sthArows > 0 ) {
            @aryA                 = $sthA->fetchrow_array;
            $TEMP_TFhour_OR_entry = $aryA[0];
        }
        $sthA->finish();
        if ( length($TEMP_TFhour_OR_entry) > 2 ) {
            @container_lines = split( /\n/, $TEMP_TFhour_OR_entry );
            $c               = 0;
            foreach (@container_lines) {
                $container_lines[$c] =~ s/;.*|\r|\t//gi;
                $container_lines[$c] =~ s/ => |=> | =>/=>/gi;
                if ( length( $container_lines[$c] ) > 3 ) {
                    if ( $container_lines[$c] =~ /^method/i ) {
                        $TFH_OR_method = $container_lines[$c];
                        if (   ( $TFH_OR_method =~ /state$/ )
                            && ( $TFhourSTATE ne $temp_24hour_state ) )
                        {
                            $TFH_OR_state_field_match = 1;
                        }
                        if (   ( $TFH_OR_method =~ /postcode/ )
                            && ( length($temp_24hour_postal_code) > 0 ) )
                        {
                            if ( $TFhourCOUNTRY == 'USA' ) {
                                $temp_24hour_postal_code =~ s/\D//gi;
                                $temp_24hour_postal_code =
                                  substr( $temp_24hour_postal_code, 0, 5 );
                            }
                            if ( $TFhourCOUNTRY == 'CAN' ) {
                                $temp_24hour_postal_code =~ s/[^a-zA-Z0-9]//gi;
                                $temp_24hour_postal_code =
                                  substr( $temp_24hour_postal_code, 0, 6 );
                            }
                            $stmtA =
"SELECT state FROM vicidial_postal_codes where postal_code='$temp_24hour_postal_code';";
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows = $sthA->rows;
                            if ($DBX) { print "$sthArows|$stmtA\n"; }
                            if ( $sthArows > 0 ) {
                                @aryA                  = $sthA->fetchrow_array;
                                $TFH_OR_postcode_state = $aryA[0];
                                $TFH_OR_postcode_field_match = 1;
                            }
                            $sthA->finish();
                        }
                    }
                    else {
                        if ( $container_lines[$c] =~ /^state/i ) {
                            $container_lines[$c] =~ s/state=>//gi;    # USA,GA,4
                            @TEMP_state_ARY =
                              split( /,/, $container_lines[$c] );
                            if ( $TFhourCOUNTRY eq $TEMP_state_ARY[0] ) {
                                $TEMP_state_ARY[2] =~ s/\D//gi;
                                if (   ( $TFhourSTATE eq $TEMP_state_ARY[1] )
                                    && ( length( $TEMP_state_ARY[2] ) > 0 ) )
                                {
                                    if ($DB) {
                                        print
"     24-Hour Call Count State Override Triggered: $TEMPcall_limit_24hour|$container_lines[$c]\n";
                                    }
                                    $TEMPcall_limit_24hour = $TEMP_state_ARY[2];
                                }
                                if (
                                    (
                                        $TFH_OR_postcode_state eq
                                        $TEMP_state_ARY[1]
                                    )
                                    && ( length( $TEMP_state_ARY[2] ) > 0 )
                                    && ( $TFH_OR_postcode_field_match > 0 )
                                  )
                                {
                                    if ($DBX) {
                                        print
"     24-Hour Call Count State Override Match(postcode $TFH_OR_postcode_state): $TEMPcall_limit_24hour|$container_lines[$c]\n";
                                    }
                                    if ( $TEMP_state_ARY[2] <
                                        $TEMPcall_limit_24hour )
                                    {
                                        if ($DBX) {
                                            print
"          POSTCODE field override of override triggered: ($TEMP_state_ARY[2] < $TEMPcall_limit_24hour)\n";
                                        }
                                        $TEMPcall_limit_24hour =
                                          $TEMP_state_ARY[2];
                                    }
                                }
                                if (
                                    (
                                        $temp_24hour_state eq $TEMP_state_ARY[1]
                                    )
                                    && ( length( $TEMP_state_ARY[2] ) > 0 )
                                    && ( $TFH_OR_state_field_match > 0 )
                                  )
                                {
                                    if ($DBX) {
                                        print
"     24-Hour Call Count State Override Match(state $temp_24hour_state): $TEMPcall_limit_24hour|$container_lines[$c]\n";
                                    }
                                    if ( $TEMP_state_ARY[2] <
                                        $TEMPcall_limit_24hour )
                                    {
                                        if ($DBX) {
                                            print
"          STATE field override of override triggered: ($TEMP_state_ARY[2] < $TEMPcall_limit_24hour)\n";
                                        }
                                        $TEMPcall_limit_24hour =
                                          $TEMP_state_ARY[2];
                                    }
                                }
                            }
                        }
                    }
                }
                if ($DBX) {
                    print
"     24-Hour Call Count State Override DEBUG: |$container_lines[$c]|\n";
                }
                $c++;
            }
        }
    }
    if ( ( $TFhourCOUNT > 0 ) && ( $TFhourCOUNT >= $TEMPcall_limit_24hour ) ) {
        $TFHCCLlead = 1;
        $TFHCCL++;
        $passed_24hour_call_count = 0;
        if ( $TFHCCLalt < 1 ) {
            $stmtA =
"UPDATE vicidial_list SET called_since_last_reset='D' where lead_id='$TEMPlead_id';";
            $affected_rows = $dbhA->do($stmtA);
        }
        if ($DBX) {
            print
"Flagging 24-Hour Call Limit lead:     $affected_rows  $TEMPlead_id ($TFhourCOUNT >= $TEMPcall_limit_24hour) $passed_24hour_call_count\n";
        }
    }
    else {
        $passed_24hour_call_count = 1;
        if ($DBX) {
            print
"     24-Hour Call Limit check passed:     $TEMPlead_id ($TFhourCOUNT < $TEMPcall_limit_24hour) $passed_24hour_call_count\n";
        }
    }
}

sub event_logger {
    if ($SYSLOG) {
        open( Lout, ">>$VDHLOGfile" )
          || die "Can't open $VDHLOGfile: $!\n";
        print Lout "$now_date|$event_string|\n";
        close(Lout);
    }
    $event_string = '';
}

sub detail_logger {
    if ($SYSLOG) {
        open( LDout, ">>$VDHDLOGfile" )
          || die "Can't open $VDHDLOGfile: $!\n";
        print LDout "$now_date|$detail_string|\n";
        close(LDout);
    }
    $detail_string = '';
}

sub aad_output {
    if ( $SYSLOG > 0 ) {
        open( Aout, ">>$AADLOGfile" ) || die "Can't open $AADLOGfile: $!\n";
        print Aout "$now_date|$script|$aad_string\n";
        close(Aout);
    }
    $aad_string = '';
}

sub roundup {
    my $n = shift;
    return ( ( $n == int($n) ) ? $n : int( $n + 1 ) );
}
