#!/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!
# * ======================================== */
$script = 'agi-VDAD_ALL_outboundBETA2.agi';
$AGILOG = '0';
$mel    = 1;                                  # Mysql Error Log enabled = 1
$mysql_log_count = 151;
$one_mysql_log   = 0;
use Time::HiRes ( 'gettimeofday', 'usleep', 'sleep' )
  ;    # necessary to have perl sleep command of less than one second
( $START_s_hires, $START_usec ) = gettimeofday();
$ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
$DROP_TIME =
  9;    ### default number of seconds to wait until you drop a waiting call
$at  = '@';
$US  = '_';
$wav = '.wav';
( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
  localtime(time);
$year  = ( $year + 1900 );
$Tyear = ( $year - 2000 );
$mon++;
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"; }
$now_date_epoch   = time();
$now_date         = "$year-$mon-$mday $hour:$min:$sec";
$CLInow_date      = "$year-$mon-$mday\\ $hour:$min:$sec";
$start_time_epoch = $now_date_epoch;
$start_time       = $now_date;
$YMD              = "$year-$mon-$mday";
$CIDdate          = "$mon$mday$hour$min$sec";
$tsSQLdate        = "$year$mon$mday$hour$min$sec";
$filedate         = "$US$year-$mon-$mday$US$hour$min$sec";
$recdate          = "$year$mon$mday-$hour$min$sec";
$tinydate         = "$Tyear$mon$mday$hour$min$sec";
$SQLdate          = "$year-$mon-$mday $hour:$min:$sec";
$SQLdateBEGIN     = $SQLdate;
$BDtarget         = ( $now_date_epoch - 5 );
( $Bsec, $Bmin, $Bhour, $Bmday, $Bmon, $Byear, $Bwday, $Byday, $Bisdst ) =
  localtime($BDtarget);
$Byear = ( $Byear + 1900 );
$Bmon++;
if ( $Bmon < 10 )  { $Bmon  = "0$Bmon"; }
if ( $Bmday < 10 ) { $Bmday = "0$Bmday"; }
if ( $Bhour < 10 ) { $Bhour = "0$Bhour"; }
if ( $Bmin < 10 )  { $Bmin  = "0$Bmin"; }
if ( $Bsec < 10 )  { $Bsec  = "0$Bsec"; }
$BDtsSQLdate = "$Byear$Bmon$Bmday$Bhour$Bmin$Bsec";
$FDtarget    = ( $now_date_epoch + 120 );
( $Fsec, $Fmin, $Fhour, $Fmday, $Fmon, $Fyear, $Fwday, $Fyday, $Fisdst ) =
  localtime($FDtarget);
$Fyear = ( $Fyear + 1900 );
$Fmon++;
if ( $Fmon < 10 )  { $Fmon  = "0$Fmon"; }
if ( $Fmday < 10 ) { $Fmday = "0$Fmday"; }
if ( $Fhour < 10 ) { $Fhour = "0$Fhour"; }
if ( $Fmin < 10 )  { $Fmin  = "0$Fmin"; }
if ( $Fsec < 10 )  { $Fsec  = "0$Fsec"; }
$FDtsSQLdate = "$Fyear$Fmon$Fmday$Fhour$Fmin$Fsec";
$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 ( !$VARDB_port )  { $VARDB_port  = '3306'; }
if ( !$AGILOGfile )  { $AGILOGfile  = "$PATHlogs/agiout.$year-$mon-$mday"; }
if ( !$PRSLOGfile )  { $PRSLOGfile  = "$PATHlogs/prsout.$year-$mon-$mday"; }
if ( !$PRSTESTfile ) { $PRSTESTfile = "$PATHlogs/prstest.$year-$mon-$mday"; }
if ( !$ERRLOGfile )  { $ERRLOGfile  = "$PATHlogs/MySQLerror.$year-$mon-$mday"; }
if ( !$CEPLOGfile )  { $CEPLOGfile  = "$PATHlogs/Cepstral.$year-$mon-$mday"; }
use DBI;
use Asterisk::AGI;
$AGI  = new Asterisk::AGI;
$dbhA = DBI->connect( "DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port",
    "$VARDB_user", "$VARDB_pass" )
  or die "Couldn't connect to database: " . DBI->errstr;
$stmtA =
"SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks,agi_output,voicemail_dump_exten_no_inst 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;
$dbhP         = $dbhA;
$mysql_count  = '01001';
$MEL_aff_rows = $sthArows;
&mysql_error_logging;
$rec_count = 0;

while ( $sthArows > $rec_count ) {
    @aryA                         = $sthA->fetchrow_array;
    $DBvoicemail_dump_exten       = $aryA[0];
    $DBext_context                = $aryA[1];
    $DBanswer_transfer_agent      = $aryA[2];
    $DBSERVER_GMT                 = $aryA[3];
    $asterisk_version             = $aryA[4];
    $DBmax_vicidial_trunks        = $aryA[5];
    $DBagi_output                 = $aryA[6];
    $voicemail_dump_exten_no_inst = $aryA[7];

    if ($DBvoicemail_dump_exten) {
        $voicemail_dump_exten = $DBvoicemail_dump_exten;
    }
    if ($DBext_context) { $ext_context = $DBext_context; }
    if ($DBanswer_transfer_agent) {
        $answer_transfer_agent = $DBanswer_transfer_agent;
    }
    if ($DBSERVER_GMT)     { $SERVER_GMT = $DBSERVER_GMT; }
    if ($asterisk_version) { $AST_ver    = $asterisk_version; }
    if ($DBmax_vicidial_trunks) {
        $max_vicidial_trunks = $DBmax_vicidial_trunks;
    }
    if ( $DBagi_output =~ /STDERR/ ) { $AGILOG = '1'; }
    if ( $DBagi_output =~ /FILE/ )   { $AGILOG = '2'; }
    if ( $DBagi_output =~ /BOTH/ )   { $AGILOG = '3'; }
    $rec_count++;
}
$sthA->finish();
$stmtA = "SELECT vdad_debug_logging FROM system_settings;";
$sthA  = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows     = $sthA->rows;
$dbhP         = $dbhA;
$mysql_count  = '01151';
$MEL_aff_rows = $sthArows;
&mysql_error_logging;

if ( $sthArows > 0 ) {
    @aryA               = $sthA->fetchrow_array;
    $vdad_debug_logging = $aryA[0];
}
$sthA->finish();
if ( length( $ARGV[0] ) > 1 ) {
    if ($AGILOG) { $agi_string = "Perl Environment Dump:"; &agi_output; }
    $i = 0;
    while ( $#ARGV >= $i ) {
        $args = "$args $ARGV[$i]";
        if ($AGILOG) { $agi_string = "$i|$ARGV[$i]"; &agi_output; }
        $i++;
    }
    @ARGV_vars                 = split( /-----/, $ARGV[0] );
    $call_handle_method        = $ARGV_vars[0];
    $agent_search_method       = $ARGV_vars[1];
    $survey_first_audio_file   = $ARGV_vars[2];
    $survey_dtmf_digits        = $ARGV_vars[3];
    $survey_ni_digit           = $ARGV_vars[4];
    $survey_opt_in_audio_file  = $ARGV_vars[5];
    $survey_ni_audio_file      = $ARGV_vars[6];
    $survey_no_response_action = $ARGV_vars[7];
    $survey_ni_status          = $ARGV_vars[8];
}
if ( $call_handle_method !~ /NORMAL|TEST|BROADCAST|SURVEY|REMIND/ ) {
    $call_handle_method = 'NORMAL';
}
if ( $agent_search_method !~ /LB|LO|SO/ ) { $agent_search_method = 'LB'; }
if ( $call_handle_method  =~ /BROADCAST|SURVEY|REMIND/ ) {
    $vdlog_status = 'PU';
}
else { $vdlog_status = 'QUEUE'; }
$| = 1;
while (<STDIN>) {
    chomp;
    last unless length($_);
    if ($AGILOG) {
        if (/^agi_(\w+)\:\s+(.*)$/) {
            $AGI{$1} = $2;
        }
    }
    if (/^agi_uniqueid\:\s+(.*)$/)  { $unique_id = $1; $uniqueid = $unique_id; }
    if (/^agi_priority\:\s+(.*)$/)  { $priority  = $1; }
    if (/^agi_channel\:\s+(.*)$/)   { $channel   = $1; }
    if (/^agi_extension\:\s+(.*)$/) { $extension = $1; }
    if (/^agi_type\:\s+(.*)$/)      { $type      = $1; }
    if (/^agi_callerid\:\s+(.*)$/)  { $callerid  = $1; }
    if (/^agi_calleridname\:\s+(.*)$/) { $calleridname = $1; }
}
if (   ( length($callerid) > 20 )
    && ( $callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S/ ) )
{
    $callerid =~ s/^\"//gi;
    $callerid =~ s/\".*$//gi;
    $callerid =~ s/ .*//gi;
    print "SET CALLERID $callerid\n";
    $result = <STDIN>;
    checkresult($result);
    if ($AGILOG) { $agi_string = "callerID changed: $callerid"; &agi_output; }
}
if (
    (
        ( length($calleridname) > 5 )
        && (   ( !$callerid )
            or ( $callerid =~ /unknown|private|00000000/i )
            or ( $callerid =~ /5551212/ ) )
    )
    or (   ( length($calleridname) > 17 )
        && ( $calleridname =~ /\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d/ ) )
  )
{
    $calleridname =~ s/ .*//gi;
    $callerid = $calleridname;
    print "SET CALLERID $callerid\n";
    $result = <STDIN>;
    checkresult($result);
    if ($AGILOG) { $agi_string = "callerID changed: $callerid"; &agi_output; }
}
if ($AGILOG) { $agi_string = "AGI Environment Dump:"; &agi_output; }
foreach $i ( sort keys %AGI ) {
    if ($AGILOG) { $agi_string = " -- $i = $AGI{$i}"; &agi_output; }
}
if ($AGILOG) {
    $agi_string =
"AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|";
    &agi_output;
}
$VDADcampaign   = '';
$VDADphone      = '';
$VDADphone_code = '';
$survey_drop    = 0;
$callerid =~ s/\"//gi;
$callerid =~ s/ .*//gi;
$CIDlead_id = $callerid;
$CIDlead_id = substr( $CIDlead_id, 10, 10 );
$CIDlead_id = ( $CIDlead_id + 0 );

if ($AGILOG) {
    $agi_string =
      "+++++ VDAD START : |$CIDlead_id|$now_date|$AST_ver|$priority|";
    &agi_output;
}
if ( ( $channel =~ /Local/i ) && ( $AST_ver !~ /^1\.0\.8|^1\.0\.9/ ) ) {
    $LRct   = $AGI->get_variable('LRct');
    $LRct_p = sprintf( "%03d", $LRct );
    if ( $vdad_debug_logging > 0 ) {
        &duration_calc;
        $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='LocalEXIT-$priority',lead_id='$CIDlead_id',step='$LRct';";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01120';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
    }
    if ($AGILOG) {
        $agi_string =
          "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority $LRct_p";
        &agi_output;
    }
    if ( ( $priority > 2 ) && ( $priority <= 7 ) ) {
        usleep( 1 * 10 * 1000 );
    }    # sleep for 1 hundredth of a second
    if ( $priority >= 8 ) {
        $SCstatuses = "'CBHOLD'";
        $stmtA =
"select status from vicidial_statuses where scheduled_callback='Y' limit 10000000;";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArowsSCS = $sthA->rows;
        $rec_count   = 0;
        while ( $sthArowsSCS > $rec_count ) {
            @aryA = $sthA->fetchrow_array;
            $SCstatuses .= ",'$aryA[0]'";
            $rec_count++;
        }
        $sthA->finish();
        if ($AGILOG) {
            $agi_string =
"LLLLLLLLL   LOCAL CHANNEL PRIORITY 4 LOGGING: (this is usually caused by carrier issues) LRERR $priority";
            &agi_output;
        }
        $stmtA =
"UPDATE vicidial_list set status='LRERR' where lead_id='$CIDlead_id' and status NOT IN($SCstatuses);";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01100';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    LRERR vicidial_list LRERR update: |$affected_rows|$uniqueid|$CIDlead_id|";
            &agi_output;
        }
        $xCLlist_id   = 0;
        $called_count = 0;
        $stmtA =
"SELECT list_id,security_phrase,called_count,phone_number,phone_code from vicidial_list where lead_id='$CIDlead_id' limit 1;";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArowsLI   = $sthA->rows;
        $dbhP         = $dbhA;
        $mysql_count  = '01101';
        $MEL_aff_rows = $sthArowsLI;
        &mysql_error_logging;

        if ( $sthArowsLI > 0 ) {
            @aryA            = $sthA->fetchrow_array;
            $xCLlist_id      = $aryA[0];
            $security_phrase = $aryA[1];
            $called_count    = $aryA[2];
            $VDADphone       = $aryA[3];
            $VDADphone_code  = $aryA[4];
        }
        $sthA->finish();
        $stmtA =
"SELECT campaign_id,phone_number,phone_code,lead_id,call_time,alt_dial,queue_priority FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows     = $sthA->rows;
        $dbhP         = $dbhA;
        $mysql_count  = '01102';
        $MEL_aff_rows = $sthArows;
        &mysql_error_logging;

        if ( $sthArows > 0 ) {
            @aryA               = $sthA->fetchrow_array;
            $VDADcampaign       = $aryA[0];
            $VDADphone          = $aryA[1];
            $VDADphone_code     = $aryA[2];
            $VDADlead_id        = $aryA[3];
            $VDADcall_time      = $aryA[4];
            $VDADalt_dial       = $aryA[5];
            $VDADqueue_priority = $aryA[6];
        }
        $sthA->finish();
        if ( $sthArows < 1 ) {
            $stmtA =
"SELECT campaign_id FROM vicidial_lists where list_id='$xCLlist_id' limit 1;";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01121';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;

            if ( $sthArows > 0 ) {
                @aryA         = $sthA->fetchrow_array;
                $VDADcampaign = $aryA[0];
            }
            $sthA->finish();
        }
        $stmtA =
"INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed,alt_dial,list_id,called_count) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','LRERR','$VDADphone_code','$VDADphone','VDAD','N','$VDADalt_dial','$xCLlist_id','$called_count')";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01103';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    LRERR : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid";
            &agi_output;
        }
        $stmtA =
"INSERT INTO vicidial_log_extended set uniqueid='$uniqueid',server_ip='$VARserver_ip',call_date='$SQLdate',lead_id = '$CIDlead_id',caller_code='$callerid',custom_call_id='';";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01104';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string = "--  LRERR VLE insert: |$affected_rows|\n|$stmtA|";
            &agi_output;
        }
    }
    exit;
}
$stmtA =
  "SELECT count(*) FROM vicidial_live_agents where callerid='$callerid';";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthArows     = $sthA->rows;
$dbhP         = $dbhA;
$mysql_count  = '01002';
$MEL_aff_rows = $sthArows;
&mysql_error_logging;
$rec_count = 0;

while ( $sthArows > $rec_count ) {
    @aryA                   = $sthA->fetchrow_array;
    $Pseudo_duplicate_count = $aryA[0];
    $rec_count++;
}
$sthA->finish();
if ($AGILOG) { $agi_string = "$Pseudo_duplicate_count|$stmtA|"; &agi_output; }
if ( $Pseudo_duplicate_count > 0 ) {
    if ($AGILOG) {
        $agi_string = "+++++ VDAD START PSEUDO DUPLICATE: EXITING- $priority";
        &agi_output;
    }
    exit;
}
$stmtA =
"SELECT count(*) FROM vicidial_auto_calls where callerid='$callerid' and status IN('LIVE','XFER');";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
$sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
$sthArows     = $sthA->rows;
$dbhP         = $dbhA;
$mysql_count  = '01003';
$MEL_aff_rows = $sthArows;
&mysql_error_logging;
$rec_count = 0;

while ( $sthArows > $rec_count ) {
    @aryA                     = $sthA->fetchrow_array;
    $dialplan_duplicate_count = $aryA[0];
    $rec_count++;
}
$sthA->finish();
if ($AGILOG) { $agi_string = "$dialplan_duplicate_count|$stmtA|"; &agi_output; }
if ( $dialplan_duplicate_count > 0 ) {
    if ($AGILOG) {
        $agi_string = "+++++ VDAD START DIALPLAN DUPLICATE: EXITING- $priority";
        &agi_output;
    }
    exit;
}
$stmtA =
"UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE',stage='LIVE-0' where callerid='$callerid' order by call_time desc limit 1;";
$VDACaffected_rows = $dbhA->do($stmtA);
$dbhP              = $dbhA;
$mysql_count       = '01004';
$MEL_aff_rows      = $VDACaffected_rows;
&mysql_error_logging;
if ($AGILOG) {
    $agi_string =
"--    VDAD : |$VDACaffected_rows|update of vac table: $callerid\n|$stmtA|";
    &agi_output;
}
if ( $VDACaffected_rows < 1 ) {
    if ($AGILOG) {
        $agi_string = "--    NO VDAC FOUND!!!!!: $callerid";
        &agi_output;
    }
    $stmtA =
"SELECT cmd_line_k,entry_date,cmd_line_j FROM vicidial_manager where callerid='$callerid' and action='Originate' order by entry_date,cmd_line_k desc limit 1;";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows     = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '01070';
    $MEL_aff_rows = $sthArows;
    &mysql_error_logging;

    if ( $sthArows > 0 ) {
        @aryA = $sthA->fetchrow_array;
        if ($AGILOG) {
            $agi_string = "VDAC-data|$aryA[0]|$aryA[1]|$aryA[2]|";
            &agi_output;
        }
        $VDADnotes = $aryA[0];
        $VDADnotes =~ s/VDACnote: //gi;
        @VDAC_ARY           = split( /\|/, $VDADnotes );
        $VDADcampaign       = $VDAC_ARY[0];
        $VDADlead_id        = $VDAC_ARY[1];
        $VDADphone_code     = $VDAC_ARY[2];
        $VDADphone          = $VDAC_ARY[3];
        $VDADorigin         = $VDAC_ARY[4];
        $VDADcall_time      = $aryA[1];
        $VDADalt_dial       = $VDAC_ARY[5];
        $VDADqueue_priority = $VDAC_ARY[6];
        $sthA->finish();
        $VDACaffected_rows = 1;
        $stmtA =
"INSERT INTO vicidial_auto_calls (server_ip,campaign_id,status,lead_id,uniqueid,callerid,channel,phone_code,phone_number,call_time,call_type,stage,queue_priority)  values('$VARserver_ip','$VDADcampaign','LIVE','$VDADlead_id','$uniqueid','$callerid','$channel','$VDADphone_code','$VDADphone','$VDADcall_time','$VDADorigin','LIVE-0','$VDADqueue_priority')";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01071';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string = "$affected_rows|VDAC-reinsert|$stmtA|";
            &agi_output;
        }
    }
    else {
        if ($AGILOG) {
            $agi_string = "--    NO VDM FOUND!!!!!!!!!!: $callerid";
            &agi_output;
        }
    }
}
if ( $VDACaffected_rows > 0 ) {
    $SCstatuses = "'CBHOLD'";
    $stmtA =
"select status from vicidial_statuses where scheduled_callback='Y' limit 10000000;";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArowsSCS = $sthA->rows;
    $rec_count   = 0;
    while ( $sthArowsSCS > $rec_count ) {
        @aryA = $sthA->fetchrow_array;
        $SCstatuses .= ",'$aryA[0]'";
        $rec_count++;
    }
    $sthA->finish();
    $stmtA =
"select status from vicidial_campaign_statuses where scheduled_callback='Y' limit 10000000;";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArowsSCS = $sthA->rows;
    $rec_count   = 0;
    while ( $sthArowsSCS > $rec_count ) {
        @aryA = $sthA->fetchrow_array;
        $SCstatuses .= ",'$aryA[0]'";
        $rec_count++;
    }
    $sthA->finish();
    $stmtA =
"UPDATE vicidial_list set status='PU' where lead_id='$CIDlead_id' and status NOT IN($SCstatuses);";
    if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
    $affected_rows = $dbhA->do($stmtA);
    $dbhP          = $dbhA;
    $mysql_count   = '01005';
    $MEL_aff_rows  = $affected_rows;
    &mysql_error_logging;

    if ($AGILOG) {
        $agi_string =
          "--    VDAD vicidial_list PU update: |$affected_rows|$uniqueid|";
        &agi_output;
    }
    $stmtA =
"SELECT campaign_id,phone_number,phone_code,lead_id,call_time,alt_dial,queue_priority FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows     = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '01006';
    $MEL_aff_rows = $sthArows;
    &mysql_error_logging;

    if ( $sthArows > 0 ) {
        @aryA               = $sthA->fetchrow_array;
        $VDADcampaign       = $aryA[0];
        $VDADphone          = $aryA[1];
        $VDADphone_code     = $aryA[2];
        $VDADlead_id        = $aryA[3];
        $VDADcall_time      = $aryA[4];
        $VDADalt_dial       = $aryA[5];
        $VDADqueue_priority = $aryA[6];
    }
    $sthA->finish();
    $outcalls_count = 0;
    $stmtA =
"SELECT count(*) FROM vicidial_auto_calls where campaign_id='$VDADcampaign';";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows     = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '02093';
    $MEL_aff_rows = $sthArows;
    &mysql_error_logging;

    if ( $sthArows > 0 ) {
        @aryA           = $sthA->fetchrow_array;
        $outcalls_count = $aryA[0];
    }
    $sthA->finish();
    $STATSmax_outbound = 0;
    $stmtA =
"SELECT max_outbound from vicidial_daily_max_stats where campaign_id='$VDADcampaign' and stats_type='CAMPAIGN' and stats_flag='OPEN' order by update_time desc limit 1;";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows     = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '02094';
    $MEL_aff_rows = $sthArows;
    &mysql_error_logging;

    if ( $sthArows > 0 ) {
        @aryA              = $sthA->fetchrow_array;
        $STATSmax_outbound = $aryA[0];
        $sthA->finish();
        $update_SQL = '';
        if ( $STATSmax_outbound < $outcalls_count ) {
            $update_SQL .= ",max_outbound='$outcalls_count'";
        }
        if ( length($update_SQL) > 5 ) {
            $stmtA =
"UPDATE vicidial_daily_max_stats SET update_time=NOW()$update_SQL where campaign_id='$VDADcampaign' and stats_type='CAMPAIGN' and stats_flag='OPEN';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '02095';
            $MEL_aff_rows  = $sthArows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string =
                  "DAILY STATS UPDATE $VDADcampaign|$affected_rows|$stmtA|";
                &agi_output;
            }
        }
    }
    else {
        $stmtA =
"INSERT INTO vicidial_daily_max_stats SET stats_date='$YMD',update_time=NOW(),max_outbound='$outcalls_count',campaign_id='$VDADcampaign',stats_type='CAMPAIGN',stats_flag='OPEN';";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '02096';
        $MEL_aff_rows  = $sthArows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
              "DAILY STATS INSERT $VDADcampaign|$affected_rows|$stmtA|\n";
            &agi_output;
        }
    }
    $stmtA =
"SELECT drop_call_seconds,drop_action,safe_harbor_exten,concurrent_transfers,next_agent_call,voicemail_ext,drop_inbound_group,use_internal_dnc,use_campaign_dnc,cpd_amd_action,am_message_exten,three_way_call_cid,campaign_cid,survey_first_audio_file,survey_opt_in_audio_file,survey_ni_audio_file,survey_third_audio_file,survey_fourth_audio_file,extension_appended_cidname,queue_priority,closer_campaigns,queuemetrics_phone_environment,campaign_recording,campaign_rec_filename,safe_harbor_audio,safe_harbor_menu_id,survey_recording,safe_harbor_audio_field,use_other_campaign_dnc,cpd_unknown_action,routing_initiated_recordings,campaign_rec_exten FROM vicidial_campaigns where campaign_id = '$VDADcampaign';";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows     = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '01007';
    $MEL_aff_rows = $sthArows;
    &mysql_error_logging;

    if ( $sthArows > 0 ) {
        @aryA                   = $sthA->fetchrow_array;
        $DBdrop_call_seconds    = $aryA[0];
        $DBdrop_action          = $aryA[1];
        $DBsafe_harbor_exten    = $aryA[2];
        $DBconcurrent_transfers = $aryA[3];
        if ($DBdrop_call_seconds) { $DROP_TIME         = $DBdrop_call_seconds; }
        if ($DBdrop_action)       { $drop_action       = $DBdrop_action; }
        if ($DBsafe_harbor_exten) { $safe_harbor_exten = $DBsafe_harbor_exten; }
        $CAMP_callorder                 = $aryA[4];
        $VDADvoicemail_ext              = $aryA[5];
        $drop_inbound_group             = $aryA[6];
        $use_internal_dnc               = $aryA[7];
        $use_campaign_dnc               = $aryA[8];
        $cpd_amd_action                 = $aryA[9];
        $am_message_exten               = $aryA[10];
        $three_way_call_cid             = $aryA[11];
        $campaign_cid                   = $aryA[12];
        $survey_first_audio_file        = $aryA[13];
        $survey_opt_in_audio_file       = $aryA[14];
        $survey_ni_audio_file           = $aryA[15];
        $survey_third_audio_file        = $aryA[16];
        $survey_fourth_audio_file       = $aryA[17];
        $extension_appended_cidname     = $aryA[18];
        $VDADqueue_priority             = $aryA[19];
        $closer_campaigns               = $aryA[20];
        $queuemetrics_phone_environment = $aryA[21];
        $campaign_recording             = $aryA[22];
        $campaign_rec_filename          = $aryA[23];
        $safe_harbor_audio              = $aryA[24];
        $safe_harbor_menu_id            = $aryA[25];
        $survey_recording               = $aryA[26];
        $safe_harbor_audio_field        = $aryA[27];
        $use_other_campaign_dnc         = $aryA[28];
        $cpd_unknown_action             = $aryA[29];
        $routing_initiated_recordings   = $aryA[30];
        $campaign_rec_exten             = $aryA[31];

        if ( length($closer_campaigns) > 2 ) {
            $closer_campaigns =~ s/^ | -$//gi;
            $closer_campaigns =~ s/ /','/gi;
            $closer_campaigns = "'$closer_campaigns'";
        }
        else { $closer_campaigns = "''"; }
    }
    $sthA->finish();
    $xCLlist_id   = 0;
    $called_count = 0;
    $stmtA =
"SELECT list_id,security_phrase,called_count from vicidial_list where lead_id='$CIDlead_id' limit 1;";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArowsLI   = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '01105';
    $MEL_aff_rows = $sthArowsLI;
    &mysql_error_logging;

    if ( $sthArowsLI > 0 ) {
        @aryA            = $sthA->fetchrow_array;
        $xCLlist_id      = $aryA[0];
        $security_phrase = $aryA[1];
        $called_count    = $aryA[2];
    }
    $sthA->finish();
    ( $END_s_hires, $END_usec ) = gettimeofday();
    $net_microseconds = $END_usec - $START_usec;
    if ( $net_microseconds < 0 ) {
        $net_microseconds = ( $net_microseconds + 1000000 );
        $END_s_hires      = ( $END_s_hires - 1 );
    }
    $net_microseconds = sprintf( "%06d", $net_microseconds );
    $net_seconds      = $END_s_hires - $START_s_hires;
    $net_duration     = "$net_seconds.$net_microseconds";
    ( $START_s_hires, $START_usec ) = gettimeofday();
    $RUN_time = sprintf( "%.3f", $net_duration );
    if ($AGILOG) {
        $agi_string =
            "Preprocess time: |$RUN_time ("
          . $END_s_hires
          . $END_usec . " - "
          . $ORIG_time . ")|";
        &agi_output;
    }
    $stmtA =
"INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed,alt_dial,list_id,comments,called_count) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','$vdlog_status','$VDADphone_code','$VDADphone','VDAD','N','$VDADalt_dial','$xCLlist_id','$RUN_time','$called_count')";
    if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
    $affected_rows = $dbhA->do($stmtA);
    $dbhP          = $dbhA;
    $mysql_count   = '01008';
    $MEL_aff_rows  = $affected_rows;
    &mysql_error_logging;

    if ($AGILOG) {
        $agi_string =
"--    VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid";
        &agi_output;
    }
    $stmtA =
"INSERT INTO vicidial_log_extended set uniqueid='$uniqueid',server_ip='$VARserver_ip',call_date='$SQLdate',lead_id = '$CIDlead_id',caller_code='$callerid',custom_call_id='';";
    $affected_rows = $dbhA->do($stmtA);
    $dbhP          = $dbhA;
    $mysql_count   = '01067';
    $MEL_aff_rows  = $affected_rows;
    &mysql_error_logging;
    if ($AGILOG) {
        $agi_string = "--  VDAD VLE insert: |$affected_rows|\n|$stmtA|";
        &agi_output;
    }
    $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='preroute',lead_id='$CIDlead_id';";
    $affected_rows = $dbhA->do($stmtA);
    $dbhP          = $dbhA;
    $mysql_count   = '01122';
    $MEL_aff_rows  = $affected_rows;
    &mysql_error_logging;
    $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
}
if ( $call_handle_method =~ /SURVEY/ ) {
    $AGI->stream_file('sip-silence');
    $stmtA =
"UPDATE vicidial_auto_calls set last_update_time='$FDtsSQLdate',stage='SURVEY-0' where callerid='$callerid' order by call_time desc limit 1;";
    $affected_rows = $dbhA->do($stmtA);
    $dbhP          = $dbhA;
    $mysql_count   = '01014';
    $MEL_aff_rows  = $affected_rows;
    &mysql_error_logging;
    if ($AGILOG) {
        $agi_string =
"--    VDAC posttime record: |$affected_rows|$FDtsSQLdate|$callerid|SURVEY|";
        &agi_output;
    }
    if ( $call_handle_method =~ /SURVEYCAMP/ ) {
        $stmtA =
"SELECT survey_dtmf_digits,survey_ni_digit,survey_method,survey_no_response_action,survey_ni_status,survey_response_digit_map,survey_xfer_exten,survey_camp_record_dir,survey_third_digit,survey_third_status,survey_third_exten,survey_fourth_digit,survey_fourth_status,survey_fourth_exten,survey_menu_id,survey_wait_sec FROM vicidial_campaigns where campaign_id='$VDADcampaign';";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows     = $sthA->rows;
        $dbhP         = $dbhA;
        $mysql_count  = '01015';
        $MEL_aff_rows = $sthArows;
        &mysql_error_logging;

        if ( $sthArows > 0 ) {
            @aryA                      = $sthA->fetchrow_array;
            $survey_dtmf_digits        = $aryA[0];
            $survey_ni_digit           = $aryA[1];
            $survey_method             = $aryA[2];
            $survey_no_response_action = $aryA[3];
            $survey_ni_status          = $aryA[4];
            $survey_response_digit_map = $aryA[5];
            $survey_xfer_exten         = $aryA[6];
            $survey_camp_record_dir    = $aryA[7];
            $survey_third_digit        = $aryA[8];
            $survey_third_status       = $aryA[9];
            $survey_third_exten        = $aryA[10];
            $survey_fourth_digit       = $aryA[11];
            $survey_fourth_status      = $aryA[12];
            $survey_fourth_exten       = $aryA[13];
            $survey_menu_id            = $aryA[14];
            $survey_wait_sec           = $aryA[15];
            @digit_map = split( /\|/, $survey_response_digit_map );
            $rec_count++;
        }
        $sthA->finish();
    }
    $digits_to_collect = '1';
    $opt_code          = enter_pin_number(
        $survey_first_audio_file, $survey_dtmf_digits,
        $survey_method,           $survey_wait_sec
    );
    if ( length($opt_code) < 1 ) { $opt_code = 'X'; }
    $opt_description = $opt_code;
    $w               = 0;
    foreach (@digit_map) {
        if ( $digit_map[$w] =~ /^$opt_code/ ) {
            $opt_description = $digit_map[$w];
        }
        $w++;
    }
    $sec_phrase_SQL = '';
    if ( length($security_phrase) < 1 ) {
        $sec_phrase_SQL = "security_phrase='$opt_description',";
    }
    $stmtA =
"UPDATE vicidial_list set $sec_phrase_SQL status='PM' where lead_id = '$CIDlead_id';";
    if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
    $affected_rows = $dbhA->do($stmtA);
    $dbhP          = $dbhA;
    $mysql_count   = '01016';
    $MEL_aff_rows  = $affected_rows;
    &mysql_error_logging;

    if ($AGILOG) {
        $agi_string =
"--    VDAD vicidial_list OPT_CODE update: |$affected_rows|$CIDlead_id|$opt_code|";
        &agi_output;
    }
    if ( $opt_code =~ /$survey_ni_digit/ ) {
        if ( $survey_ni_audio_file ne "" ) {
            if ( $survey_ni_audio_file =~ /\|/ ) {
                @survey_ni_audio_file_array =
                  split( /\|/, $survey_ni_audio_file );
                $w = 0;
                foreach (@survey_ni_audio_file_array) {
                    if ( length( $survey_ni_audio_file_array[$w] ) > 0 ) {
                        $AGI->stream_file("$survey_ni_audio_file_array[$w]");
                    }
                    $w++;
                }
            }
            else { $AGI->stream_file("$survey_ni_audio_file"); }
        }
        $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01017';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
              "--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
            &agi_output;
        }
        $Euniqueid = $uniqueid;
        $Euniqueid =~ s/\.\d+//gi;
        $now_date_epoch = time();
        $drop_seconds   = $now_date_epoch - $start_time_epoch;
        $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$survey_ni_status', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01018';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_log update: $survey_ni_status|$affected_rows|$uniqueid|$drop_seconds|";
            &agi_output;
        }
        $stmtA =
"UPDATE vicidial_list set status='$survey_ni_status' where lead_id = '$CIDlead_id';";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01019';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_list update: $survey_ni_status|$affected_rows|$CIDlead_id";
            &agi_output;
        }
        if (   ( $use_internal_dnc =~ /Y|AREACODE/ )
            && ( $survey_ni_status eq "DNC" ) )
        {
            $stmtA = "INSERT INTO vicidial_dnc set phone_number='$VDADphone';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01020';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string =
                  "--    VDAD vicidial_dnc insert: $affected_rows|$VDADphone";
                &agi_output;
            }
            $stmtA =
"INSERT INTO vicidial_dnc_log SET phone_number='$VDADphone', campaign_id='-SYSINT-', action='add', action_date=NOW(), user='OUTAGI';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01112';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string = "$affected_rows|$stmtA|";
                &agi_output;
            }
        }
        if (   ( $use_campaign_dnc =~ /Y|AREACODE/ )
            && ( $survey_ni_status eq "DNC" ) )
        {
            $stmtA =
"SELECT use_other_campaign_dnc FROM vicidial_campaigns where campaign_id='$VDADcampaign';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01106';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;

            if ( $sthArows > 0 ) {
                @aryA                   = $sthA->fetchrow_array;
                $use_other_campaign_dnc = $aryA[0];
            }
            $sthA->finish();
            $temp_campaign_id = $VDADcampaign;
            if ( length($use_other_campaign_dnc) > 0 ) {
                $temp_campaign_id = $use_other_campaign_dnc;
            }
            $stmtA =
"INSERT INTO vicidial_campaign_dnc set phone_number='$VDADphone', campaign_id='$temp_campaign_id';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01021';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_campaign_dnc insert: $affected_rows|$VDADphone|$VDADcampaign|$temp_campaign_id";
                &agi_output;
            }
            $stmtA =
"INSERT INTO vicidial_dnc_log SET phone_number='$VDADphone', campaign_id='$temp_campaign_id', action='add', action_date=NOW(), user='OUTAGI';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01113';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string = "$affected_rows|$stmtA|";
                &agi_output;
            }
        }
        if ( $vdad_debug_logging > 0 ) {
            &duration_calc;
            $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-NI',lead_id='$CIDlead_id';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01124';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
        }
        $AGI->hangup();
        exit;
    }
    if ( $opt_code =~ /$survey_third_digit/ ) {
        if ( $survey_third_audio_file ne "" ) {
            if ( $survey_third_audio_file =~ /\|/ ) {
                @survey_third_audio_file_array =
                  split( /\|/, $survey_third_audio_file );
                $w = 0;
                foreach (@survey_third_audio_file_array) {
                    if ( length( $survey_third_audio_file_array[$w] ) > 0 ) {
                        $AGI->stream_file("$survey_third_audio_file_array[$w]");
                    }
                    $w++;
                }
            }
            else { $AGI->stream_file("$survey_third_audio_file"); }
        }
        $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01017';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
              "--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
            &agi_output;
        }
        $Euniqueid = $uniqueid;
        $Euniqueid =~ s/\.\d+//gi;
        $now_date_epoch = time();
        $drop_seconds   = $now_date_epoch - $start_time_epoch;
        $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$survey_third_status', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01018';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_log update: $survey_third_status|$affected_rows|$uniqueid|$drop_seconds|";
            &agi_output;
        }
        $stmtA =
"UPDATE vicidial_list set status='$survey_third_status' where lead_id = '$CIDlead_id';";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01019';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_list update: $survey_third_status|$affected_rows|$CIDlead_id";
            &agi_output;
        }
        if (   ( $use_internal_dnc =~ /Y|AREACODE/ )
            && ( $survey_third_status eq "DNC" ) )
        {
            $stmtA = "INSERT INTO vicidial_dnc set phone_number='$VDADphone';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01020';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string =
                  "--    VDAD vicidial_dnc insert: $affected_rows|$VDADphone";
                &agi_output;
            }
            $stmtA =
"INSERT INTO vicidial_dnc_log SET phone_number='$VDADphone', campaign_id='-SYSINT-', action='add', action_date=NOW(), user='OUTAGI';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01114';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string = "$affected_rows|$stmtA|";
                &agi_output;
            }
        }
        if (   ( $use_campaign_dnc =~ /Y|AREACODE/ )
            && ( $survey_third_status eq "DNC" ) )
        {
            $stmtA =
"SELECT use_other_campaign_dnc FROM vicidial_campaigns where campaign_id='$VDADcampaign';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01107';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;

            if ( $sthArows > 0 ) {
                @aryA                   = $sthA->fetchrow_array;
                $use_other_campaign_dnc = $aryA[0];
            }
            $sthA->finish();
            $temp_campaign_id = $VDADcampaign;
            if ( length($use_other_campaign_dnc) > 0 ) {
                $temp_campaign_id = $use_other_campaign_dnc;
            }
            $stmtA =
"INSERT INTO vicidial_campaign_dnc set phone_number='$VDADphone', campaign_id='$temp_campaign_id';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01021';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_campaign_dnc insert: $affected_rows|$VDADphone|$VDADcampaign|$temp_campaign_id";
                &agi_output;
            }
            $stmtA =
"INSERT INTO vicidial_dnc_log SET phone_number='$VDADphone', campaign_id='$temp_campaign_id', action='add', action_date=NOW(), user='OUTAGI';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01119';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string = "$affected_rows|$stmtA|";
                &agi_output;
            }
        }
        if ( $vdad_debug_logging > 0 ) {
            &duration_calc;
            $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-3rd',lead_id='$CIDlead_id';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01125';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
        }
        if ( length($survey_third_exten) > 0 ) {
            if ($AGILOG) {
                $agi_string =
"exiting the VDAD SURVEY app, transferring call to $survey_third_exten";
                &agi_output;
            }
            print "SET CONTEXT $ext_context\n";
            $result = <STDIN>;
            checkresult($result);
            print "SET EXTENSION $survey_third_exten\n";
            $result = <STDIN>;
            checkresult($result);
            print "SET PRIORITY 1\n";
            $result = <STDIN>;
            checkresult($result);
        }
        else { $AGI->hangup(); }
        exit;
    }
    if ( $opt_code =~ /$survey_fourth_digit/ ) {
        if ( $survey_fourth_audio_file ne "" ) {
            if ( $survey_fourth_audio_file =~ /\|/ ) {
                @survey_fourth_audio_file_array =
                  split( /\|/, $survey_fourth_audio_file );
                $w = 0;
                foreach (@survey_fourth_audio_file_array) {
                    if ( length( $survey_fourth_audio_file_array[$w] ) > 0 ) {
                        $AGI->stream_file(
                            "$survey_fourth_audio_file_array[$w]");
                    }
                    $w++;
                }
            }
            else { $AGI->stream_file("$survey_fourth_audio_file"); }
        }
        $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01017';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
              "--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
            &agi_output;
        }
        $Euniqueid = $uniqueid;
        $Euniqueid =~ s/\.\d+//gi;
        $now_date_epoch = time();
        $drop_seconds   = $now_date_epoch - $start_time_epoch;
        $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$survey_fourth_status', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01018';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_log update: $survey_fourth_status|$affected_rows|$uniqueid|$drop_seconds|";
            &agi_output;
        }
        $stmtA =
"UPDATE vicidial_list set status='$survey_fourth_status' where lead_id = '$CIDlead_id';";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01019';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_list update: $survey_fourth_status|$affected_rows|$CIDlead_id";
            &agi_output;
        }
        if (   ( $use_internal_dnc =~ /Y|AREACODE/ )
            && ( $survey_fourth_status eq "DNC" ) )
        {
            $stmtA = "INSERT INTO vicidial_dnc set phone_number='$VDADphone';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01020';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string =
                  "--    VDAD vicidial_dnc insert: $affected_rows|$VDADphone";
                &agi_output;
            }
            $stmtA =
"INSERT INTO vicidial_dnc_log SET phone_number='$VDADphone', campaign_id='-SYSINT-', action='add', action_date=NOW(), user='OUTAGI';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01115';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string = "$affected_rows|$stmtA|";
                &agi_output;
            }
        }
        if (   ( $use_campaign_dnc =~ /Y|AREACODE/ )
            && ( $survey_fourth_status eq "DNC" ) )
        {
            $stmtA =
"SELECT use_other_campaign_dnc FROM vicidial_campaigns where campaign_id='$VDADcampaign';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01108';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;

            if ( $sthArows > 0 ) {
                @aryA                   = $sthA->fetchrow_array;
                $use_other_campaign_dnc = $aryA[0];
            }
            $sthA->finish();
            $temp_campaign_id = $VDADcampaign;
            if ( length($use_other_campaign_dnc) > 0 ) {
                $temp_campaign_id = $use_other_campaign_dnc;
            }
            $stmtA =
"INSERT INTO vicidial_campaign_dnc set phone_number='$VDADphone', campaign_id='$temp_campaign_id';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01021';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_campaign_dnc insert: $affected_rows|$VDADphone|$VDADcampaign|$temp_campaign_id";
                &agi_output;
            }
            $stmtA =
"INSERT INTO vicidial_dnc_log SET phone_number='$VDADphone', campaign_id='$temp_campaign_id', action='add', action_date=NOW(), user='OUTAGI';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01116';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string = "$affected_rows|$stmtA|";
                &agi_output;
            }
        }
        if ( $vdad_debug_logging > 0 ) {
            &duration_calc;
            $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-4th',lead_id='$CIDlead_id';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01126';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
        }
        if ( length($survey_fourth_exten) > 0 ) {
            if ($AGILOG) {
                $agi_string =
"exiting the VDAD SURVEY app, transferring call to $survey_fourth_exten";
                &agi_output;
            }
            print "SET CONTEXT $ext_context\n";
            $result = <STDIN>;
            checkresult($result);
            print "SET EXTENSION $survey_fourth_exten\n";
            $result = <STDIN>;
            checkresult($result);
            print "SET PRIORITY 1\n";
            $result = <STDIN>;
            checkresult($result);
        }
        else { $AGI->hangup(); }
        exit;
    }
    if ( ( $opt_code =~ /\d/ ) || ( $survey_no_response_action =~ /OPTOUT/ ) ) {
        $now_date_epoch = time();
        $FDtarget       = ( $now_date_epoch + 60 );
        ( $Fsec, $Fmin, $Fhour, $Fmday, $Fmon, $Fyear, $Fwday, $Fyday, $Fisdst )
          = localtime($FDtarget);
        $Fyear = ( $Fyear + 1900 );
        $Fmon++;
        if ( $Fmon < 10 )  { $Fmon  = "0$Fmon"; }
        if ( $Fmday < 10 ) { $Fmday = "0$Fmday"; }
        if ( $Fhour < 10 ) { $Fhour = "0$Fhour"; }
        if ( $Fmin < 10 )  { $Fmin  = "0$Fmin"; }
        if ( $Fsec < 10 )  { $Fsec  = "0$Fsec"; }
        $FDtsSQLdate = "$Fyear$Fmon$Fmday$Fhour$Fmin$Fsec";
        $stmtA =
"UPDATE vicidial_auto_calls set last_update_time='$FDtsSQLdate' where callerid='$callerid' order by call_time desc limit 1;";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01022';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAC posttime record: |$affected_rows|$FDtsSQLdate|$callerid|";
            &agi_output;
        }
        if ( $survey_opt_in_audio_file ne "" ) {
            if ( $survey_opt_in_audio_file =~ /\|/ ) {
                @survey_opt_in_audio_file_array =
                  split( /\|/, $survey_opt_in_audio_file );
                $w = 0;
                foreach (@survey_opt_in_audio_file_array) {
                    if ( length( $survey_opt_in_audio_file_array[$w] ) > 0 ) {
                        $AGI->stream_file(
                            "$survey_opt_in_audio_file_array[$w]");
                    }
                    $w++;
                }
            }
            else { $AGI->stream_file("$survey_opt_in_audio_file"); }
        }
        if ( $survey_method =~
            /VOICEMAIL|EXTENSION|HANGUP|CALLMENU|VMAIL_NO_INST/ )
        {
            $DROPexten = '';
            if ( $survey_method =~ /VOICEMAIL|VMAIL_NO_INST/ ) {
                $newcallerid = "\"$callerid <$VDADphone>\"";
                $AGI->set_callerid($newcallerid);
                print STDERR "Setting CID \"$newcallerid\"\n";
                checkresult($result);
                if ($AGILOG) {
                    $agi_string = "callerID changed: $newcallerid";
                    &agi_output;
                }
                $survey_status = 'SVYVM';
                if ( $survey_method =~ /VMAIL_NO_INST/ ) {
                    $voicemail_dump_exten = $voicemail_dump_exten_no_inst;
                }
                if ( length($VDADvoicemail_ext) > 0 ) {
                    $DROPexten = "$voicemail_dump_exten$VDADvoicemail_ext";
                }
            }
            if ( $survey_method =~ /EXTENSION/ ) {
                $survey_status = 'SVYEXT';
                if ( length($survey_xfer_exten) > 0 ) {
                    $DROPexten = "$survey_xfer_exten";
                    if ( $three_way_call_cid !~ /CUSTOMER/ ) {
                        $newcallerid = "\"$campaign_cid <$campaign_cid>\"";
                        $AGI->set_callerid($newcallerid);
                        print STDERR "Setting CID \"$newcallerid\"\n";
                        checkresult($result);
                        if ($AGILOG) {
                            $agi_string = "callerID changed: $newcallerid";
                            &agi_output;
                        }
                    }
                }
            }
            if ( $survey_method =~ /CALLMENU/ ) {
                $newcallerid = "\"$callerid <$VDADphone>\"";
                $AGI->set_callerid($newcallerid);
                print STDERR "Setting CID \"$newcallerid\"\n";
                checkresult($result);
                if ($AGILOG) {
                    $agi_string = "callerID changed: $newcallerid";
                    &agi_output;
                }
                $survey_status = 'SVYCLM';
                if ( length($survey_menu_id) > 0 ) {
                    $DROPexten   = 's';
                    $ext_context = $survey_menu_id;
                }
            }
            if ( $survey_method =~ /HANGUP/ ) {
                $survey_status = 'SVYHU';
            }
            $Euniqueid = $uniqueid;
            $Euniqueid =~ s/\.\d+//gi;
            $now_date_epoch = time();
            $drop_seconds   = $now_date_epoch - $start_time_epoch;
            $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$survey_status', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01023';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_log update: $survey_status|$affected_rows|$uniqueid|$drop_seconds|";
                &agi_output;
            }
            $stmtA =
"UPDATE vicidial_list set status='$survey_status' where lead_id = '$CIDlead_id';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01024';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_list update: $survey_status|$affected_rows|$CIDlead_id";
                &agi_output;
            }
            if ( length($DROPexten) > 0 ) {
                $stmtA =
"UPDATE vicidial_auto_calls set status='XFER',stage='XFER-0' where callerid='$callerid' order by call_time desc limit 1;";
                $affected_rows = $dbhA->do($stmtA);
                $dbhP          = $dbhA;
                $mysql_count   = '01025';
                $MEL_aff_rows  = $affected_rows;
                &mysql_error_logging;
                if ($AGILOG) {
                    $agi_string =
"--    VDAC XFER status: |$affected_rows|$FDtsSQLdate|$callerid|";
                    &agi_output;
                }
                if ( $vdad_debug_logging > 0 ) {
                    &duration_calc;
                    $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-exten',lead_id='$CIDlead_id';";
                    $affected_rows = $dbhA->do($stmtA);
                    $dbhP          = $dbhA;
                    $mysql_count   = '01127';
                    $MEL_aff_rows  = $affected_rows;
                    &mysql_error_logging;
                    $ORIG_time =
                      $START_s_hires . '.' . sprintf( "%06d", $START_usec );
                }
                if ($AGILOG) {
                    $agi_string =
"exiting the VDAD SURVEY app, transferring call to $DROPexten $ext_context";
                    &agi_output;
                }
                print "SET CONTEXT $ext_context\n";
                $result = <STDIN>;
                checkresult($result);
                print "SET EXTENSION $DROPexten\n";
                $result = <STDIN>;
                checkresult($result);
                print "SET PRIORITY 1\n";
                $result = <STDIN>;
                checkresult($result);
                exit;
            }
            if ( $survey_method =~ /HANGUP/ ) {
                $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
                $affected_rows = $dbhA->do($stmtA);
                $dbhP          = $dbhA;
                $mysql_count   = '01026';
                $MEL_aff_rows  = $affected_rows;
                &mysql_error_logging;
                if ($AGILOG) {
                    $agi_string =
"--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
                    &agi_output;
                }
                if ( $vdad_debug_logging > 0 ) {
                    &duration_calc;
                    $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-Hangup',lead_id='$CIDlead_id';";
                    $affected_rows = $dbhA->do($stmtA);
                    $dbhP          = $dbhA;
                    $mysql_count   = '01128';
                    $MEL_aff_rows  = $affected_rows;
                    &mysql_error_logging;
                    $ORIG_time =
                      $START_s_hires . '.' . sprintf( "%06d", $START_usec );
                }
                $AGI->hangup();
                exit;
            }
        }
        if ( $survey_method =~ /CAMPREC/ ) {
            if ( $survey_method =~ /60/ )  { $timeout = 60000; }
            if ( $survey_method =~ /WAV/ ) { $format  = 'WAV'; }
            if ( $survey_method =~ /GSM/ ) { $format  = 'GSM'; }
            $survey_status = 'SVYREC';
            $Euniqueid     = $uniqueid;
            $Euniqueid =~ s/\.\d+//gi;
            $now_date_epoch = time();
            $drop_seconds   = $now_date_epoch - $start_time_epoch;
            $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$survey_status', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01027';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_log update: $survey_status|$affected_rows|$uniqueid|$drop_seconds|";
                &agi_output;
            }
            $stmtA =
"UPDATE vicidial_list set status='$survey_status' where lead_id = '$CIDlead_id';";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01028';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_list update: $survey_status|$affected_rows|$CIDlead_id";
                &agi_output;
            }
            if ( -e ('$survey_camp_record_dir/$VDADcampaign') ) {
                $do_nothing = 1;
            }
            else {
                `mkdir -p --mode=0666 $survey_camp_record_dir/$VDADcampaign`;
            }
            $AGI->stream_file('beep');
            $interrupt_digit = $AGI->record_file(
                "$survey_camp_record_dir/$VDADcampaign/$VDADphone$filedate",
                "$format", '123456789*#', "$timeout", '0', 1, '10' );
            if ($AGILOG) {
                $agi_string =
"RECORDING FINISHED: $interrupt_digit|$survey_camp_record_dir/$VDADcampaign/$VDADphone$filedate|";
                &agi_output;
            }
            $now_date_epoch = time();
            $drop_seconds   = $now_date_epoch - $start_time_epoch;
            $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$survey_status', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
            if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01029';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD vicidial_log update: $survey_status|$affected_rows|$uniqueid|$drop_seconds|";
                &agi_output;
            }
            $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01030';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string =
"--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
                &agi_output;
            }
            if ( $vdad_debug_logging > 0 ) {
                &duration_calc;
                $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-REC',lead_id='$CIDlead_id';";
                $affected_rows = $dbhA->do($stmtA);
                $dbhP          = $dbhA;
                $mysql_count   = '01129';
                $MEL_aff_rows  = $affected_rows;
                &mysql_error_logging;
                $ORIG_time =
                  $START_s_hires . '.' . sprintf( "%06d", $START_usec );
            }
            $AGI->hangup();
            exit;
        }
    }
    else {
        $Euniqueid = $uniqueid;
        $Euniqueid =~ s/\.\d+//gi;
        $now_date_epoch = time();
        $drop_seconds   = $now_date_epoch - $start_time_epoch;
        $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='PM', end_epoch='$now_date_epoch', length_in_sec='$drop_seconds', term_reason='CALLER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01031';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
"--    VDAD vicidial_log update: PM|$affected_rows|$uniqueid|$drop_seconds|";
            &agi_output;
        }
        if ( $survey_no_response_action !~ /DROP/ ) {
            $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01032';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
            if ($AGILOG) {
                $agi_string =
"--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
                &agi_output;
            }
            if ( $vdad_debug_logging > 0 ) {
                &duration_calc;
                $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-SURVEY-DROP',lead_id='$CIDlead_id';";
                $affected_rows = $dbhA->do($stmtA);
                $dbhP          = $dbhA;
                $mysql_count   = '01130';
                $MEL_aff_rows  = $affected_rows;
                &mysql_error_logging;
                $ORIG_time =
                  $START_s_hires . '.' . sprintf( "%06d", $START_usec );
            }
            $AGI->hangup();
            exit;
        }
        else {
            $survey_drop++;
            $drop_timer = ( ( $drop_timer + $DROP_TIME ) + 1 );
            $agi_string =
"--    VDAD survey no-response go to campaign DROP   |$drop_timer|$DROP_TIME|";
            &agi_output;
        }
    }
}
if ( $survey_drop < 1 ) { $drop_timer = 0; }
$drop_seconds         = 0;
$hold_message_counter = 25;
$hold_tone_counter    = 0;
while ( $drop_timer <= $DROP_TIME ) {
    $channel_status = $AGI->channel_status("$channel");
    if ( $channel_status < 1 ) {
        if ($AGILOG) {
            $agi_string =
"CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN";
            &agi_output;
        }
        usleep( 1 * 990 * 1000 );
        $channel_status_DC = $AGI->channel_status("$channel");
        if ( $channel_status_DC < 1 ) {
            if ($AGILOG) {
                $agi_string =
"CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer";
                &agi_output;
            }
            if ( $drop_timer < $DROP_TIME ) { $drop_seconds = $drop_timer; }
            $drop_timer = ( $drop_timer + $DROP_TIME );
        }
    }
    $rec_countCUSTDATA = 0;
    $rec_countWAIT     = 0;
    $cbc               = 0;
    $aco_sub           = 0;
    $agent_call_order  = 'order by last_call_finish';
    if ( $CAMP_callorder =~ /longest_wait_time/i ) {
        $agent_call_order = 'order by last_state_change';
    }
    if ( $CAMP_callorder =~ /overall_user_level/i ) {
        $agent_call_order = 'order by user_level desc,last_call_finish';
    }
    if ( $CAMP_callorder =~ /oldest_call_start/i ) {
        $agent_call_order = 'order by last_call_time';
    }
    if ( $CAMP_callorder =~ /oldest_call_finish/i ) {
        $agent_call_order = 'order by last_call_finish';
    }
    if ( $CAMP_callorder =~ /random/i ) {
        $agent_call_order = 'order by random_id';
    }
    if ( $CAMP_callorder =~ /campaign_rank/i ) {
        $agent_call_order = 'order by campaign_weight desc,last_call_finish';
    }
    if ( $CAMP_callorder =~ /fewest_calls/i ) {
        $aco_sub          = 1;
        $agent_call_order = 'order by calls_today';
    }
    if ( $CAMP_callorder =~ /campaign_grade_random/i ) {
        $aco_sub          = 1;
        $agent_call_order = 'order by random_id';
    }
    $concurrent_transfers      = 1000;
    $cbc                       = 0;
    $rec_countWAITremOUT       = 0;
    $rec_countWAITremIN        = 0;
    $rec_countWAITremINallowed = 0;
    $agentdirect_count         = 0;
    $READY_agent_closer_camps  = '';
    $READY_users               = '';
    $READY_users_count         = 0;
    $AGENTDIRECT_user_ids      = '';
    $stmtA =
"SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and lead_id != '$CIDlead_id' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\";";
    $sthA = $dbhA->prepare($stmtA) or die "preparing: ",        $dbhA->errstr;
    $sthA->execute                 or die "executing: $stmtA ", $dbhA->errstr;
    $sthArows     = $sthA->rows;
    $dbhP         = $dbhA;
    $mysql_count  = '01040';
    $MEL_aff_rows = $sthArows;
    &mysql_error_logging;

    if ( $sthArows > 0 ) {
        @aryA                = $sthA->fetchrow_array;
        $rec_countWAITremOUT = $aryA[0];
    }
    $sthA->finish();
    if ($AGILOG) { $agi_string = "$rec_countWAITremOUT|$stmtA|"; &agi_output; }
    if ( length($closer_campaigns) > 3 ) {
        $stmtA =
"SELECT count(*) FROM vicidial_auto_calls where ( (status = 'LIVE') and ( (queue_priority > $VDADqueue_priority) and (call_type='IN') and (campaign_id IN($closer_campaigns)) ) );";
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows     = $sthA->rows;
        $dbhP         = $dbhA;
        $mysql_count  = '01074';
        $MEL_aff_rows = $sthArows;
        &mysql_error_logging;

        if ( $sthArows > 0 ) {
            @aryA                      = $sthA->fetchrow_array;
            $rec_countWAITremIN        = $aryA[0];
            $rec_countWAITremINallowed = $aryA[0];
        }
        $sthA->finish();
        if ($AGILOG) {
            $agi_string = "$rec_countWAITremIN|$stmtA|";
            &agi_output;
        }
    }
    if ( $rec_countWAITremIN > 0 ) {
        $stmtA =
"SELECT closer_campaigns,user FROM vicidial_live_agents where status = 'READY' and lead_id<1 and ring_callerid='' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate';";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
        $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
        $sthArows     = $sthA->rows;
        $dbhP         = $dbhA;
        $mysql_count  = '01075';
        $MEL_aff_rows = $sthArows;
        &mysql_error_logging;
        $READY_users_count = 0;

        while ( $sthArows > $READY_users_count ) {
            @aryA = $sthA->fetchrow_array;
            $READY_users .= "'$aryA[1]',";
            @VLagent_camps = split( / /, $aryA[0] );
            $ki            = 0;
            foreach (@VLagent_camps) {
                if (   ( $VLagent_camps[$ki] !~ /AGENTDIRECT/ )
                    && ( length( $VLagent_camps[$ki] ) > 1 )
                    && ( $READY_agent_closer_camps !~ /'$VLagent_camps[$ki]'/ )
                  )
                {
                    $READY_agent_closer_camps .= "'$VLagent_camps[$ki]',";
                }
                $ki++;
            }
            $READY_users_count++;
        }
        $sthA->finish();
        $READY_agent_closer_camps =~ s/.$//gi;
        $READY_users              =~ s/.$//gi;
        if ( length($READY_agent_closer_camps) < 2 ) {
            $READY_agent_closer_camps = "''";
        }
        if ( length($READY_users) > 2 ) {
            if ( $closer_campaigns =~ /AGENTDIRECT/ ) {
                $stmtA =
"SELECT agent_only FROM vicidial_auto_calls where status = 'LIVE' and campaign_id LIKE \"%AGENTDIRECT%\" and last_update_time > '$BDtsSQLdate' and agent_only IN($READY_users) and agent_only != '';";
                if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArows     = $sthA->rows;
                $dbhP         = $dbhA;
                $mysql_count  = '01076';
                $MEL_aff_rows = $sthArows;
                &mysql_error_logging;
                $agentdirect_count = 0;

                while ( $sthArows > $agentdirect_count ) {
                    @aryA = $sthA->fetchrow_array;
                    $AGENTDIRECT_user_ids .= "'$aryA[0]',";
                    $agentdirect_count++;
                }
                $sthA->finish();
                $AGENTDIRECT_user_ids =~ s/.$//gi;
                if ( length($AGENTDIRECT_user_ids) > 2 ) {
                    $AGENTDIRECT_user_ids =
"or ( (campaign_id LIKE \"%AGENTDIRECT%\") and (agent_only IN($AGENTDIRECT_user_ids)) )";
                }
                else { $AGENTDIRECT_user_ids = ''; }
            }
            $stmtA =
"SELECT count(*) FROM vicidial_auto_calls where ( (status = 'LIVE') and ( ( (queue_priority > $VDADqueue_priority) and (call_type='IN') and (campaign_id IN($READY_agent_closer_camps)) ) ) $AGENTDIRECT_user_ids );";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01077';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;

            if ( $sthArows > 0 ) {
                @aryA               = $sthA->fetchrow_array;
                $rec_countWAITremIN = $aryA[0];
            }
            $sthA->finish();
            if ($AGILOG) {
                $agi_string = "$rec_countWAITremIN|$stmtA|";
                &agi_output;
            }
        }
    }
    $rec_countWAITrem = ( $rec_countWAITremOUT + $rec_countWAITremIN );
    if ( $rec_countWAITrem < $concurrent_transfers ) {
        if ( $CAMP_callorder =~ /grade/ ) {
            $stmtA = "LOCK TABLES vicidial_live_agents WRITE;";
            my $LOCKaffected_rows = $dbhA->do($stmtA);
            $dbhP         = $dbhA;
            $mysql_count  = '01089';
            $MEL_aff_rows = $LOCKaffected_rows;
            &mysql_error_logging;
            @GRADEuser      = @MT;
            @GRADEgrade     = @MT;
            @userGRADEarray = @MT;
            $stmtA =
"SELECT user,campaign_grade from vicidial_live_agents WHERE status='READY' and lead_id<1 and ring_callerid='' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' limit 1000;";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01090';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;
            $gg = 0;
            $ga = 0;

            while ( $gg < $sthArows ) {
                @aryA            = $sthA->fetchrow_array;
                $GRADEuser[$gg]  = $aryA[0];
                $GRADEgrade[$gg] = $aryA[1];
                if ( $GRADEgrade[$gg] < 1 ) { $GRADEgrade[$gg] = 1; }
                $gi = 0;
                while ( $gi < $GRADEgrade[$gg] ) {
                    $userGRADEarray[$ga] = $GRADEuser[$gg];
                    $gi++;
                    $ga++;
                }
                $gg++;
            }
            $sthA->finish();
            $sthArows      = 0;
            $affected_rows = 0;
            if ( $ga > 0 ) {
                $GRADErandom     = int( rand($ga) );
                $userGRADEchosen = $userGRADEarray[$GRADErandom];
                if ($AGILOG) {
                    $agi_string =
"GRADE RANDOM: $userGRADEchosen|$GRADErandom|$CAMP_callorder|$gg|$ga|$callerid";
                    &agi_output;
                }
                $stmtA =
"UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$VARserver_ip', callerid='$callerid',comments='AUTO' where status='READY' and lead_id<1 and ring_callerid='' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' and user='$userGRADEchosen' limit 1;";
                $affected_rows = $dbhA->do($stmtA);
                $dbhP          = $dbhA;
                $mysql_count   = '01091';
                $MEL_aff_rows  = $affected_rows;
                &mysql_error_logging;
            }
            if ($AGILOG) {
                $agi_string = "$VDADuser|$VDADgroup_weight|$stmtA|";
                &agi_output;
            }
            $stmtA = "UNLOCK TABLES;";
            my $LOCKaffected_rows = $dbhA->do($stmtA);
            $dbhP         = $dbhA;
            $mysql_count  = '01092';
            $MEL_aff_rows = $LOCKaffected_rows;
            &mysql_error_logging;
        }
        else {
            $stmtA =
"UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$VARserver_ip', callerid='$callerid',comments='AUTO' where status='READY' and lead_id<1 and ring_callerid='' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01042';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;
        }
        if ($AGILOG) {
            $agi_string =
"--    VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$VARserver_ip\n|$stmtA|";
            &agi_output;
        }
        if ( $affected_rows > 0 ) {
            $r        = 0;
            $VDADuser = '';
            while ( ( length($VDADuser) < 1 ) && ( $r < 3 ) ) {
                $stmtA =
"SELECT conf_exten,user,extension,server_ip,ra_user FROM vicidial_live_agents where status IN('QUEUE','INCALL') and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
                if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
                $sthA = $dbhA->prepare($stmtA)
                  or die "preparing: ", $dbhA->errstr;
                $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                $sthArows     = $sthA->rows;
                $dbhP         = $dbhA;
                $mysql_count  = '01043';
                $MEL_aff_rows = $sthArows;
                &mysql_error_logging;
                $rec_count = 0;

                while ( $sthArows > $rec_count ) {
                    @aryA           = $sthA->fetchrow_array;
                    $VDADconf_exten = $aryA[0];
                    $VDADuser       = $aryA[1];
                    $VDADextension  = $aryA[2];
                    $VDADserver_ip  = $aryA[3];
                    $ra_user        = $aryA[4];
                    $rec_count++;
                }
                $sthA->finish();
                $r++;
                if ( $r > 1 ) {
                    if ($AGILOG) {
                        $agi_string =
                          "EEEEEEEEEE vla UPDATE DELAY!!! |$callerid|$r|";
                        &agi_output;
                    }
                    usleep( 1 * 230 * 1000 );
                    $drop_timer = ( $drop_timer + 0.25 );
                }
                if ( $r > 2 ) {
                    $stmtA =
"SELECT conf_exten,user,extension,server_ip,ra_user FROM vicidial_live_agents where callerid='$callerid' order by last_call_time limit 1;";
                    if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows     = $sthA->rows;
                    $dbhP         = $dbhA;
                    $mysql_count  = '01044';
                    $MEL_aff_rows = $sthArows;
                    &mysql_error_logging;
                    $rec_count = 0;

                    while ( $sthArows > $rec_count ) {
                        @aryA           = $sthA->fetchrow_array;
                        $VDADconf_exten = $aryA[0];
                        $VDADuser       = $aryA[1];
                        $VDADextension  = $aryA[2];
                        $VDADserver_ip  = $aryA[3];
                        $ra_user        = $aryA[4];
                        $rec_count++;
                    }
                    $sthA->finish();
                    if ($AGILOG) {
                        $agi_string =
                          "FFFFFFFFFF vla OR SELECT |$callerid|$VDADuser|";
                        &agi_output;
                    }
                }
            }
            $S              = '*';
            $VDADremDIALstr = '';
            if ( $VDADserver_ip =~ m/(\S+)\.(\S+)\.(\S+)\.(\S+)/ ) {
                $a              = leading_zero($1);
                $b              = leading_zero($2);
                $c              = leading_zero($3);
                $d              = leading_zero($4);
                $VDADremDIALstr = "$a$S$b$S$c$S$d$S";
            }
            if ( $VDADextension =~ /^R\// ) {
                $newcallerid = "\"$calleridname <$VDADphone>\"";
                $AGI->set_callerid($newcallerid);
                if ( $VDADremDIALstr =~ /888888888888/ ) {
                    $stmtA =
"SELECT vendor_lead_code FROM vicidial_list where lead_id='$CIDlead_id';";
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows     = $sthA->rows;
                    $dbhP         = $dbhA;
                    $mysql_count  = '01057';
                    $MEL_aff_rows = $sthArows;
                    &mysql_error_logging;

                    if ( $sthArows > 0 ) {
                        @aryA      = $sthA->fetchrow_array;
                        $vendor_id = $aryA[0];
                    }
                    $sthA->finish();
                    $VDADremDIALstr = "$a$S$b$S$c$S$d$S$VDADphone$S$vendor_id";
                }
                if ( length($ra_user) > 0 ) {
                    $extension_group = '';
                    $stmtA =
"SELECT extension_group,extension_group_order FROM vicidial_remote_agents where user_start='$ra_user';";
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows     = $sthA->rows;
                    $dbhP         = $dbhA;
                    $mysql_count  = '01061';
                    $MEL_aff_rows = $sthArows;
                    &mysql_error_logging;

                    if ( $sthArows > 0 ) {
                        @aryA                  = $sthA->fetchrow_array;
                        $extension_group       = $aryA[0];
                        $extension_group_order = $aryA[1];
                    }
                    $sthA->finish();
                    if (    ( length($extension_group) > 0 )
                        and ( $extension_group !~ /^NONE/ ) )
                    {
                        $extension_group_orderSQL = 'order by last_call_time';
                        if ( $extension_group_order =~ /RANK/ ) {
                            $extension_group_orderSQL =
                              'order by rank desc, last_call_time';
                        }
                        if ( $extension_group_order =~ /CALL_COUNT/ ) {
                            $extension_group_orderSQL =
                              'order by call_count_today, last_call_time';
                        }
                        $stmtA =
"UPDATE vicidial_extension_groups set last_callerid='$callerid',last_call_time=NOW(),call_count_today=(call_count_today + 1) where extension_group_id='$extension_group' and ( (campaign_groups='') or (campaign_groups LIKE \"%|$VDADcampaign|%\") ) $extension_group_orderSQL limit 1;";
                        $VEGaffected_rows = $dbhA->do($stmtA);
                        $dbhP             = $dbhA;
                        $mysql_count      = '01062';
                        $MEL_aff_rows     = $VEGaffected_rows;
                        &mysql_error_logging;
                        if ($AGILOG) {
                            $agi_string =
"--    REMOTE EXTEN GROUP : |$VEGaffected_rows|update of veg table: $callerid\n|$stmtA|";
                            &agi_output;
                        }
                        if ( $VEGaffected_rows > 0 ) {
                            $stmtA =
"SELECT extension,extension_id,call_count_today FROM vicidial_extension_groups where last_callerid='$callerid' order by last_call_time desc limit 1;";
                            $sthA = $dbhA->prepare($stmtA)
                              or die "preparing: ", $dbhA->errstr;
                            $sthA->execute
                              or die "executing: $stmtA ", $dbhA->errstr;
                            $sthArows     = $sthA->rows;
                            $dbhP         = $dbhA;
                            $mysql_count  = '01063';
                            $MEL_aff_rows = $sthArows;
                            &mysql_error_logging;

                            if ( $sthArows > 0 ) {
                                @aryA           = $sthA->fetchrow_array;
                                $VDADconf_exten = $aryA[0];
                                if ($AGILOG) {
                                    $agi_string =
"--    REMOTE EXTEN SET : |$VDADconf_exten|$aryA[1]|$aryA[2]|";
                                    &agi_output;
                                }
                            }
                            $sthA->finish();
                        }
                    }
                }
                print STDERR "Setting CID \"$newcallerid\"\n";
                checkresult($result);
                $stmtA =
"UPDATE vicidial_live_agents set ra_extension='$VDADremDIALstr$VDADconf_exten' where extension='$VDADextension' and ra_user='$ra_user';";
                $RALaffected_rows = $dbhA->do($stmtA);
                $dbhP             = $dbhA;
                $mysql_count      = '01067';
                $MEL_aff_rows     = $RALaffected_rows;
                &mysql_error_logging;
                $stmtA =
"INSERT INTO vicidial_remote_agent_log set callerid='$callerid',uniqueid='$uniqueid',ra_user='$ra_user',user='$VDADuser',call_time=NOW(),extension='$VDADconf_exten',lead_id='$CIDlead_id',phone_number='$VDADphone',campaign_id='$VDADcampaign',processed='N';";
                $RALaffected_rows = $dbhA->do($stmtA);
                $dbhP             = $dbhA;
                $mysql_count      = '01065';
                $MEL_aff_rows     = $RALaffected_rows;
                &mysql_error_logging;

                if ($AGILOG) {
                    $agi_string =
"--    REMOTE EXTEN LOG : |$RALaffected_rows|CID changed: \"$callerid\" \<$VDADphone\>\n|$stmtA|";
                    &agi_output;
                }
                if ( length($ra_user) > 0 ) {
                    $stmtA =
"SELECT vicidial_recording_override,vicidial_recording FROM vicidial_users where user='$ra_user';";
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArowsVUrec = $sthA->rows;
                    $dbhP          = $dbhA;
                    $mysql_count   = '01072';
                    $MEL_aff_rows  = $sthArowsVUrec;
                    &mysql_error_logging;

                    if ( $sthArowsVUrec > 0 ) {
                        @aryA = $sthA->fetchrow_array;
                        if ( $aryA[0] !~ /DISABLED/ ) {
                            $campaign_recording = $aryA[0];
                        }
                        if ( $aryA[1] < 1 ) { $campaign_recording = 'NONE'; }
                    }
                    $sthA->finish();
                }
                if ( $campaign_recording =~ /ALLCALLS|ALLFORCE/ ) {
                    $stmtA =
"SELECT vendor_lead_code FROM vicidial_list where lead_id='$CIDlead_id';";
                    $sthA = $dbhA->prepare($stmtA)
                      or die "preparing: ", $dbhA->errstr;
                    $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
                    $sthArows     = $sthA->rows;
                    $dbhP         = $dbhA;
                    $mysql_count  = '01075';
                    $MEL_aff_rows = $sthArows;
                    &mysql_error_logging;

                    if ( $sthArows > 0 ) {
                        @aryA             = $sthA->fetchrow_array;
                        $vendor_lead_code = $aryA[0];
                    }
                    $sthA->finish();
                    (
                        $sec,  $min,  $hour, $mday, $mon,
                        $year, $wday, $yday, $isdst
                    ) = localtime(time);
                    $year  = ( $year + 1900 );
                    $Tyear = ( $year - 2000 );
                    $mon++;
                    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"; }
                    $now_date_epoch = time();
                    $now_date       = "$year-$mon-$mday $hour:$min:$sec";
                    $recdate        = "$year$mon$mday-$hour$min$sec";
                    $tinydate       = "$Tyear$mon$mday$hour$min$sec";
                    $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
                    $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
                    $campaign_rec_filename =~ s/FULLDATE/$recdate/gi;
                    $campaign_rec_filename =~ s/TINYDATE/$tinydate/gi;
                    $campaign_rec_filename =~ s/EPOCH/$now_date_epoch/gi;
                    $campaign_rec_filename =~ s/AGENT/$VDADuser/gi;
                    $campaign_rec_filename =~
                      s/VENDORLEADCODE/$vendor_lead_code/gi;
                    $campaign_rec_filename =~ s/LEADID/$CIDlead_id/gi;
                    $campaign_rec_filename =~ s/CALLID/$callerid/gi;
                    $campaign_rec_filename =~ s/\"|\'//gi;
                    %ast_ver_str = parse_asterisk_version($asterisk_version);

                    if (   ( $ast_ver_str{major} = 1 )
                        && ( $ast_ver_str{minor} < 6 ) )
                    {
                        $AGI->exec(
"Monitor wav|/var/spool/asterisk/monitor/MIX/$campaign_rec_filename"
                        );
                    }
                    else {
                        $AGI->exec( "Monitor",
"wav,/var/spool/asterisk/monitor/MIX/$campaign_rec_filename"
                        );
                    }
                    $stmtA =
"INSERT INTO recording_log (channel,server_ip,extension,start_time,start_epoch,length_in_sec,filename,lead_id,user,location,vicidial_id) values('$channel','$VARserver_ip','$VDADphone','$now_date','$now_date_epoch','0','$campaign_rec_filename','$CIDlead_id','$VDADuser','$campaign_rec_filename','$uniqueid');";
                    $RLRAaffected_rows = $dbhA->do($stmtA);
                    $dbhP              = $dbhA;
                    $mysql_count       = '01076';
                    $MEL_aff_rows      = $RLRAaffected_rows;
                    &mysql_error_logging;
                    if ($AGILOG) {
                        $agi_string =
"--    REMOTE RECORDING STARTED : |$RLRAaffected_rows|$campaign_rec_filename|$stmtA|";
                        &agi_output;
                    }
                }
            }
            else {
                if ( $routing_initiated_recordings =~ /Y/ ) {
                    if ( length($VDADuser) > 0 ) {
                        $stmtA =
"SELECT vicidial_recording_override,vicidial_recording FROM vicidial_users where user='$VDADuser';";
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArowsVUrec = $sthA->rows;
                        $dbhP          = $dbhA;
                        $mysql_count   = '01140';
                        $MEL_aff_rows  = $sthArowsVUrec;
                        &mysql_error_logging;

                        if ( $sthArowsVUrec > 0 ) {
                            @aryA = $sthA->fetchrow_array;
                            if ( $aryA[0] !~ /DISABLED/ ) {
                                $campaign_recording = $aryA[0];
                            }
                            if ( $aryA[1] < 1 ) {
                                $campaign_recording = 'NONE';
                            }
                        }
                        $sthA->finish();
                    }
                    if ( $campaign_recording =~ /ALLCALLS|ALLFORCE/ ) {
                        $stmtA =
"SELECT vendor_lead_code FROM vicidial_list where lead_id='$CIDlead_id';";
                        $sthA = $dbhA->prepare($stmtA)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows     = $sthA->rows;
                        $dbhP         = $dbhA;
                        $mysql_count  = '01141';
                        $MEL_aff_rows = $sthArows;
                        &mysql_error_logging;

                        if ( $sthArows > 0 ) {
                            @aryA             = $sthA->fetchrow_array;
                            $vendor_lead_code = $aryA[0];
                        }
                        $sthA->finish();
                        (
                            $sec,  $min,  $hour, $mday, $mon,
                            $year, $wday, $yday, $isdst
                        ) = localtime(time);
                        $year  = ( $year + 1900 );
                        $Tyear = ( $year - 2000 );
                        $mon++;
                        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"; }
                        $now_date_epoch = time();
                        $now_date       = "$year-$mon-$mday $hour:$min:$sec";
                        $recdate        = "$year$mon$mday-$hour$min$sec";
                        $tinydate       = "$Tyear$mon$mday$hour$min$sec";
                        $campaign_rec_filename =~ s/CAMPAIGN/$VDADcampaign/gi;
                        $campaign_rec_filename =~ s/CUSTPHONE/$VDADphone/gi;
                        $campaign_rec_filename =~ s/FULLDATE/$recdate/gi;
                        $campaign_rec_filename =~ s/TINYDATE/$tinydate/gi;
                        $campaign_rec_filename =~ s/EPOCH/$now_date_epoch/gi;
                        $campaign_rec_filename =~ s/AGENT/$VDADuser/gi;
                        $campaign_rec_filename =~
                          s/VENDORLEADCODE/$vendor_lead_code/gi;
                        $campaign_rec_filename =~ s/LEADID/$CIDlead_id/gi;
                        $campaign_rec_filename =~ s/CALLID/$callerid/gi;
                        $campaign_rec_filename =~ s/\"|\'//gi;
                        $conf_silent_prefix = '5';
                        $channelrec =
                            "Local/"
                          . $conf_silent_prefix . ''
                          . $VDADconf_exten . "@"
                          . $ext_context;
                        $stmtA =
"INSERT INTO recording_log (channel,server_ip,extension,start_time,start_epoch,filename,lead_id,user,vicidial_id) values('$channelrec','$VDADserver_ip','$campaign_rec_exten','$now_date','$now_date_epoch','$campaign_rec_filename','$CIDlead_id','$VDADuser','$uniqueid')";
                        $affected_rows = $dbhA->do($stmtA);
                        $dbhP          = $dbhA;
                        $mysql_count   = '02142';
                        $MEL_aff_rows  = $affected_rows;
                        &mysql_error_logging;
                        $stmtB = "SELECT LAST_INSERT_ID() LIMIT 1;";
                        $sthA  = $dbhA->prepare($stmtB)
                          or die "preparing: ", $dbhA->errstr;
                        $sthA->execute
                          or die "executing: $stmtA ", $dbhA->errstr;
                        $sthArows     = $sthA->rows;
                        $dbhP         = $dbhA;
                        $stmtA        = $stmtB;
                        $mysql_count  = '02143';
                        $MEL_aff_rows = $sthArows;
                        &mysql_error_logging;

                        if ( $sthArows > 0 ) {
                            @aryA         = $sthA->fetchrow_array;
                            $recording_id = $aryA[0];
                        }
                        $sthA->finish();
                        if ( $campaign_rec_filename =~ /RECID/ ) {
                            $campaign_rec_filename =~ s/RECID/$recording_id/gi;
                            $stmtA =
"UPDATE recording_log SET filename='$campaign_rec_filename' where recording_id='$recording_id';";
                            $affected_rows = $dbhA->do($stmtA);
                            $dbhP          = $dbhA;
                            $mysql_count   = '02144';
                            $MEL_aff_rows  = $affected_rows;
                            &mysql_error_logging;
                        }
                        $vmgr_callerid =
                          substr( $campaign_rec_filename, 0, 17 ) . '...';
                        $stmtA =
"INSERT INTO vicidial_manager values('','','$now_date','NEW','N','$VDADserver_ip','','Originate','$vmgr_callerid','Channel: $channelrec','Context: $ext_context','Exten: $campaign_rec_exten','Priority: 1','Callerid: $campaign_rec_filename','','','','','');";
                        $affected_rows = $dbhA->do($stmtA);
                        $dbhP          = $dbhA;
                        $mysql_count   = '02145';
                        $MEL_aff_rows  = $affected_rows;
                        &mysql_error_logging;
                        $stmtB =
"INSERT INTO routing_initiated_recordings (recording_id,filename,launch_time,lead_id,vicidial_id,user,processed) values('$recording_id','$campaign_rec_filename','$now_date','$CIDlead_id','$uniqueid','$VDADuser','0')";
                        $affected_rowsB = $dbhA->do($stmtB);
                        $dbhP           = $dbhA;
                        $mysql_count    = '02146';
                        $MEL_aff_rows   = $affected_rowsB;
                        &mysql_error_logging;
                        $stmtC =
"UPDATE vicidial_live_agents SET external_recording='$recording_id' where user='$VDADuser';";
                        $affected_rowsC = $dbhA->do($stmtC);
                        $dbhP           = $dbhA;
                        $mysql_count    = '02147';
                        $MEL_aff_rows   = $affected_rowsC;
                        &mysql_error_logging;

                        if ($AGILOG) {
                            $agi_string =
"--    ROUTING INITIATED RECORDING STARTED : |$affected_rows|$recording_id|$campaign_rec_filename|$stmtA|   |$affected_rowsB|$stmtB|   |$affected_rowsC|$stmtC|";
                            &agi_output;
                        }
                    }
                }
                $newcallerid = "\"$callerid <$phone_number>\"";
                $AGI->set_callerid($newcallerid);
            }
            $VDADremDIALstr .= "$VDADconf_exten";
            $stmtA =
"UPDATE vicidial_auto_calls set status='XFER', stage='XFER-$drop_timer', extension='$VDADremDIALstr' where callerid='$callerid';";
            $affected_rows = $dbhA->do($stmtA);
            $dbhP          = $dbhA;
            $mysql_count   = '01045';
            $MEL_aff_rows  = $affected_rows;
            &mysql_error_logging;

            if ($AGILOG) {
                $agi_string =
"--    VDAD XFER REMOTE: |$affected_rows|update of vac table: $callerid\n|$stmtA|";
                &agi_output;
            }
            if ( $vdad_debug_logging > 0 ) {
                &duration_calc;
                $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='post-route-AGENT-2',lead_id='$CIDlead_id';";
                $affected_rows = $dbhA->do($stmtA);
                $dbhP          = $dbhA;
                $mysql_count   = '01148';
                $MEL_aff_rows  = $affected_rows;
                &mysql_error_logging;
                $ORIG_time =
                  $START_s_hires . '.' . sprintf( "%06d", $START_usec );
            }
            $dbhA->disconnect();
            if ($AGILOG) {
                $agi_string =
                  "exiting the VDAD app, transferring call to $VDADremDIALstr";
                &agi_output;
            }
            print "SET CONTEXT $ext_context\n";
            $result = <STDIN>;
            checkresult($result);
            print "SET EXTENSION $VDADremDIALstr\n";
            $result = <STDIN>;
            checkresult($result);
            print "SET PRIORITY 1\n";
            $result = <STDIN>;
            checkresult($result);
            ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
              localtime(time);
            $year = ( $year + 1900 );
            $mon++;
            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"; }
            $now_date_epoch = time();
            $now_date       = "$year-$mon-$mday $hour:$min:$sec";

            if ($AGILOG) {
                $agi_string =
"XXXXXXXXXX VDAD transferred: start|stop      $start_time|$now_date";
                &agi_output;
            }
            exit;
        }
        else {
            if ($AGILOG) {
                $agi_string =
                  "NNNNNNNNNN No agent record found!!!   $drop_timer";
                &agi_output;
            }
        }
    }
    else {
        if ($AGILOG) {
            $agi_string =
"WWWWWWWW VDAD XFER BALANCE WAIT: |$rec_countWAITrem|$VDADcampaign|$channel|$callerid|$uniqueid|";
            &agi_output;
        }
    }
    if ( $drop_timer < 3 ) {
        usleep( 1 * 230 * 1000 );
        $drop_timer = ( $drop_timer + 0.25 );
    }
    else {
        usleep( 1 * 990 * 1000 );
        $drop_timer++;
    }
    $stmtA =
"UPDATE vicidial_auto_calls set stage='LIVE-$drop_timer' where callerid='$callerid';";
    $affected_rows = $dbhA->do($stmtA);
    if ( $affected_rows < 1 ) {
        $stmtA =
"INSERT INTO vicidial_auto_calls (server_ip,campaign_id,status,lead_id,uniqueid,callerid,channel,phone_code,phone_number,call_time,call_type,stage,queue_priority)  values('$VARserver_ip','$VDADcampaign','LIVE','$CIDlead_id','$uniqueid','$callerid','$channel','$VDADphone_code','$VDADphone','$SQLdate','OUT','LIVE-$drop_timer','$VDADqueue_priority')";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01047';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string = "$affected_rows|VDAC-reinsert|$stmtA|";
            &agi_output;
        }
    }
    if ( $vdad_debug_logging > 0 ) {
        &duration_calc;
        $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='waiting-for-agent-$drop_timer',lead_id='$CIDlead_id';";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01149';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
    }
}
if ( $drop_timer > $DROP_TIME ) {
    ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
      localtime(time);
    $year = ( $year + 1900 );
    $mon++;
    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"; }
    $now_date_epoch = time();
    $now_date       = "$year-$mon-$mday $hour:$min:$sec";
    $CIDdate        = "$mon$mday$hour$min$sec";
    $tsSQLdate      = "$year$mon$mday$hour$min$sec";
    $SQLdate        = "$year-$mon-$mday $hour:$min:$sec";
    $Euniqueid      = $uniqueid;
    $Euniqueid =~ s/\.\d+//gi;

    if ( $drop_seconds < 1 ) {
        $drop_seconds = $DROP_TIME;
    }
    $drop_status = 'DROP';
    if ( $survey_drop > 0 ) { $drop_status = 'PM'; }
    if ( $drop_action =~ /MESSAGE/ ) {
        $newcallerid = "\"$callerid <$VDADphone>\"";
        $AGI->set_callerid($newcallerid);
        print STDERR "Setting CID \"$newcallerid\"\n";
        checkresult($result);
        if ($AGILOG) {
            $agi_string = "callerID changed: $newcallerid";
            &agi_output;
        }
        if ( length($safe_harbor_exten) > 0 ) {
            $DROPexten = "$safe_harbor_exten";
        }
    }
    if ( $drop_action =~ /VOICEMAIL|VMAIL_NO_INST/ ) {
        $newcallerid = "\"$callerid <$VDADphone>\"";
        $AGI->set_callerid($newcallerid);
        print STDERR "Setting CID \"$newcallerid\"\n";
        checkresult($result);
        if ($AGILOG) {
            $agi_string = "callerID changed: $newcallerid";
            &agi_output;
        }
        if ( $drop_action =~ /VMAIL_NO_INST/ ) {
            $voicemail_dump_exten = $voicemail_dump_exten_no_inst;
        }
        if ( length($VDADvoicemail_ext) > 0 ) {
            $DROPexten = "$voicemail_dump_exten$VDADvoicemail_ext";
        }
    }
    if ( $drop_action =~ /IN_GROUP/ ) {
        $drop_inbound_group_override = '';
        if ( length($xCLlist_id) > 1 ) {
            $stmtA =
"SELECT drop_inbound_group_override FROM vicidial_lists where list_id='$xCLlist_id';";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArowsL = $sthA->rows;
            if ( $sthArowsL > 0 ) {
                @aryA                        = $sthA->fetchrow_array;
                $drop_inbound_group_override = $aryA[0];
                if ( length($drop_inbound_group_override) > 0 ) {
                    $drop_inbound_group = $drop_inbound_group_override;
                }
            }
            $sthA->finish();
        }
        $S = '*';
        $DROPexten =
          "90009*$drop_inbound_group$S$S$CIDlead_id$S$S$VDADphone$S$fronter$S";
    }
    if ( $drop_action =~ /CALLMENU/ ) {
        $newcallerid = "\"$callerid <$VDADphone>\"";
        $AGI->set_callerid($newcallerid);
        print STDERR "Setting CID \"$newcallerid\"\n";
        checkresult($result);
        if ($AGILOG) {
            $agi_string = "callerID changed: $newcallerid";
            &agi_output;
        }
        $DROPexten   = 's';
        $ext_context = $safe_harbor_menu_id;
        if ( length($ext_context) < 1 ) { $DROPexten = ''; }
        $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$drop_status',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds',term_reason='CALLMENUXFER' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01083';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
              "--    VDAD vicidial_log update: |$affected_rows|$uniqueid";
            &agi_output;
        }
        $stmtA =
"UPDATE vicidial_list set status='$drop_status' where lead_id = '$CIDlead_id';";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01084';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
              "--    VDAD vicidial_list update: |$affected_rows|$CIDlead_id";
            &agi_output;
        }
    }
    else {
        $stmtA =
"UPDATE vicidial_log FORCE INDEX(lead_id) set status='$drop_status',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds',term_reason='QUEUETIMEOUT' where lead_id = '$CIDlead_id' and uniqueid LIKE \"$Euniqueid%\";";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01050';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
              "--    VDAD vicidial_log update: |$affected_rows|$uniqueid";
            &agi_output;
        }
        $stmtA =
"UPDATE vicidial_list set status='$drop_status' where lead_id = '$CIDlead_id';";
        if ($AGILOG) { $agi_string = "|$stmtA|"; &agi_output; }
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01051';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;

        if ($AGILOG) {
            $agi_string =
              "--    VDAD vicidial_list update: |$affected_rows|$CIDlead_id";
            &agi_output;
        }
        $stmtA =
"DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01052';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
              "--    VDAD vac record deleted: |$affected_rows|$VDADcampaign|";
            &agi_output;
        }
    }
    if ( $drop_action =~ /AUDIO/ ) {
        if ( $safe_harbor_audio_field !~ /DISABLED/ ) {
            $stmtA =
"SELECT $safe_harbor_audio_field FROM vicidial_list where lead_id='$CIDlead_id';";
            $sthA = $dbhA->prepare($stmtA) or die "preparing: ", $dbhA->errstr;
            $sthA->execute or die "executing: $stmtA ",          $dbhA->errstr;
            $sthArows     = $sthA->rows;
            $dbhP         = $dbhA;
            $mysql_count  = '01097';
            $MEL_aff_rows = $sthArows;
            &mysql_error_logging;

            if ( $sthArows > 0 ) {
                @aryA                    = $sthA->fetchrow_array;
                $safe_harbor_audio_value = $aryA[0];
                if ( length($safe_harbor_audio_value) > 0 ) {
                    if ($AGILOG) {
                        $agi_string =
"playing drop message FIELD: $safe_harbor_audio_value|$safe_harbor_audio_field|$safe_harbor_audio";
                        &agi_output;
                    }
                    $safe_harbor_audio = $safe_harbor_audio_value;
                }
            }
            $sthA->finish();
        }
        $DROPexten = '';
        if ($AGILOG) {
            $agi_string = "playing drop message: $safe_harbor_audio";
            &agi_output;
        }
        if ( length($safe_harbor_audio) > 0 ) {
            $AGI->stream_file('sip-silence');
            $AGI->stream_file('sip-silence');
            if ( $safe_harbor_audio =~ /\|/ ) {
                @safe_harbor_audio_array = split( /\|/, $safe_harbor_audio );
                $w                       = 0;
                foreach (@safe_harbor_audio_array) {
                    if ( length( $safe_harbor_audio_array[$w] ) > 0 ) {
                        $AGI->stream_file("$safe_harbor_audio_array[$w]");
                    }
                    $w++;
                }
            }
            else { $AGI->stream_file("$safe_harbor_audio"); }
        }
    }
    if ( $vdad_debug_logging > 0 ) {
        &duration_calc;
        $stmtA =
"INSERT INTO vicidial_vdad_log set caller_code='$callerid',server_ip='$VARserver_ip',call_date='$SQLdate',epoch_micro='$ORIG_time',db_time=NOW(),run_time='$net_duration',vdad_script='$script',stage='end-drop-$drop_timer',lead_id='$CIDlead_id';";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01150';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        $ORIG_time = $START_s_hires . '.' . sprintf( "%06d", $START_usec );
    }
    if ( length($DROPexten) > 0 ) {
        $AGI->stream_file('ding');    # stop music-on-hold process
        sleep(1);
        if ($AGILOG) {
            $agi_string =
"exiting the VDAD app, transferring call to $DROPexten $ext_context";
            &agi_output;
        }
        print "SET CONTEXT $ext_context\n";
        $result = <STDIN>;
        checkresult($result);
        print "SET EXTENSION $DROPexten\n";
        $result = <STDIN>;
        checkresult($result);
        print "SET PRIORITY 1\n";
        $result = <STDIN>;
        checkresult($result);
    }
    else {
        $VHqueryCID = "VH$CIDdate$VDADconf_exten";
        $stmtA =
"INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
        $affected_rows = $dbhA->do($stmtA);
        $dbhP          = $dbhA;
        $mysql_count   = '01053';
        $MEL_aff_rows  = $affected_rows;
        &mysql_error_logging;
        if ($AGILOG) {
            $agi_string =
"--    VDCL call_hungup timout: |$CIDlead_id|$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager";
            &agi_output;
        }
        $AGI->hangup();
    }
}
$dbhA->disconnect();
exit;

sub enter_pin_number {
    $sound              = $_[0];
    $survey_dtmf_digits = $_[1];
    $survey_method_TEMP = $_[2];
    $survey_wait_sec    = $_[3];
    if ( length($survey_wait_sec) < 1 )    # 10 seconds if wait time not defined
    { $survey_wait_sec = 10; }
    $survey_wait_msec = ( $survey_wait_sec * 1000 );
    $digits_to_collect =~ s/DIGITID//gi;
    $digit = '';
    undef $digit;
    $interrupt_digit = '';
    undef $interrupt_digit;
    $interrupt_digit = $AGI->stream_file( "$sound", "$survey_dtmf_digits" );

    if ($AGILOG) {
        $agi_string =
"interrupt_digit |$interrupt_digit|   timeout |$survey_wait_sec|$survey_wait_msec|";
        &agi_output;
    }
    $digits_being_entered = 1;
    $totalDTMF            = '';
    if ( $interrupt_digit > 1 ) {
        $interrupt_digit = $interrupt_digit - 48;
        $totalDTMF       = $interrupt_digit;
    }
    $digit_loop_counter = length($totalDTMF);
    if ( $survey_method_TEMP !~ /HANGUP/ ) {
        while ( ( $digit_loop_counter < $digits_to_collect ) ) {
            $digit = chr( $AGI->wait_for_digit($survey_wait_msec) )
              ;    # wait X seconds for input or until the pound key is pressed
            if ( ( $digit =~ /\d/ ) && ( $survey_dtmf_digits =~ /$digit/ ) ) {
                $totalDTMF = "$totalDTMF$digit";
                if ($AGILOG) {
                    $agi_string = "digit |$digit|     TotalDTMF |$totalDTMF|";
                    &agi_output;
                }
                undef $digit;
            }
            else {
                $digit_loop_counter = $digits_to_collect;
            }
            $digit_loop_counter++;
        }
    }
    $totalDTMF =~ s/\D//gi;
    $pin = $totalDTMF;
    if ($totalDTMF) {
        if ($AGILOG) {
            $agi_string = "digit |$digit|     TotalDTMF |$totalDTMF|";
            &agi_output;
        }
    }
    return $pin;
}

sub checkresult {
    my ($res) = @_;
    my $retval;
    $tests++;
    chomp $res;
    if ( $res =~ /^200/ ) {
        $res =~ /result=(-?\d+)/;
        if ( !length($1) ) {
            $fail++;
        }
        else {
            $pass++;
        }
    }
    else {
        $fail++;
    }
}

sub leading_zero($) {
    $_ = $_[0];
    s/^(\d)$/0$1/;
    s/^(\d\d)$/0$1/;
    return $_;
}    # End of the leading_zero() routine.

sub agi_output {
    if ( $AGILOG >= 2 ) {
        open( Lout, ">>$AGILOGfile" )
          || die "Can't open $AGILOGfile: $!\n";
        print Lout "$now_date|$script|$agi_string\n";
        close(Lout);
    }
    if ( ( $AGILOG == '1' ) || ( $AGILOG == '3' ) ) {
        print STDERR "$now_date|$script|$agi_string\n";
    }
    $agi_string = '';
}

sub mysql_error_logging {
    $errno = '';
    $error = '';
    if ( ( $mel > 0 ) || ( $one_mysql_log > 0 ) ) {
        $errno = $dbhP->err();
        if ( ( $errno > 0 ) || ( $mel > 1 ) || ( $one_mysql_log > 0 ) ) {
            $error = $dbhP->errstr();
            open( Eout, ">>$ERRLOGfile" )
              || die "Can't open $ERRLOGfile: $!\n";
            print Eout
"$now_date|$script|$mysql_count|$MEL_aff_rows|$errno|$error|$stmtA|$callerid|$CIDlead_id|\n";
            close(Eout);
        }
    }
    $one_mysql_log = 0;
}

sub parse_asterisk_version {
    my $ast_ver_str     = $_[0];
    my @hyphen_parts    = split( /-/, $ast_ver_str );
    my $ast_ver_postfix = $hyphen_parts[1];
    my @dot_parts       = split( /\./, $hyphen_parts[0] );
    my %ast_ver_hash;
    if ( $dot_parts[0] <= 1 ) {
        %ast_ver_hash = (
            "major"    => $dot_parts[0],
            "minor"    => $dot_parts[1],
            "build"    => $dot_parts[2],
            "revision" => $dot_parts[3],
            "postfix"  => $ast_ver_postfix
        );
    }
    if ( $dot_parts[0] > 1 ) {
        %ast_ver_hash = (
            "major"    => 1,
            "minor"    => $dot_parts[0],
            "build"    => $dot_parts[1],
            "revision" => $dot_parts[2],
            "postfix"  => $ast_ver_postfix
        );
    }
    return (%ast_ver_hash);
}

sub tts_num_var_test {
    $_        = $_[0];
    $var_test = $_;
    if ( ( length($var_test) > 0 ) && ( length($var_test) < 2 ) ) {
        $var_test =~ s/0/zero /gi;
        $var_test =~ s/1/one /gi;
        $var_test =~ s/2/two /gi;
        $var_test =~ s/3/three /gi;
        $var_test =~ s/4/four /gi;
        $var_test =~ s/5/five /gi;
        $var_test =~ s/6/six /gi;
        $var_test =~ s/7/seven /gi;
        $var_test =~ s/8/eight /gi;
        $var_test =~ s/9/nine /gi;
    }
    return $var_test;
}

sub duration_calc {
    ( $END_s_hires, $END_usec ) = gettimeofday();
    $net_microseconds = $END_usec - $START_usec;
    if ( $net_microseconds < 0 ) {
        $net_microseconds = ( $net_microseconds + 1000000 );
        $END_s_hires      = ( $END_s_hires - 1 );
    }
    $net_microseconds = sprintf( "%06d", $net_microseconds );
    $net_seconds      = $END_s_hires - $START_s_hires;
    $net_duration     = "$net_seconds.$net_microseconds";
    ( $START_s_hires, $START_usec ) = gettimeofday();
}
