#! /usr/bin/perl
require '/usr/lib/news/innshellvars.pl';

##########################################################################
#
#   innreport: Perl script to summarize news log files
#              (with optional HTML output and graphs).
#
# version: 3.0.2
#
# Copyright (c) 1996-1999, Fabien Tassin (fta@sofaraway.org).
#
##########################################################################
#
# Usage: innreport -f config_file [-[no]options] logfile [logfile2 [...]]
#   where options are:
#     -h (or -help)      : this help page
#     -html              : HTML output
#     -v                 : display the version number of INNreport
#     -f config_file     : name of the configuration file
#     -config            : print INNreport configuration information
#     -g                 : want graphs [default]
#     -graph             : an alias for option -g
#     -d directory       : directory for Web pages
#     -dir directory     : an alias for option -d
#     -p directory       : pictures path (file space)
#     -path directory    : an alias for option -p
#     -w directory       : pictures path (web space)
#     -webpath directory : an alias for option -w
#     -i                 : name of index page
#     -index             : an alias for option -i
#     -a                 : want to archive HTML results
#     -archive           : an alias for option -a
#     -c number          : how many report files to keep (0 = all)
#     -cycle number      : an alias for option -c
#     -s char            : separator for filename
#     -separator char    : an alias for option -s
#     -unknown           : Unknown entries from news log file
#     -maxunrec          : Max number of unrecognized line to display
#     -casesensitive     : Case sensitive
#     -notdaily          : Never perform daily actions
#
# Use no in front of boolean options to unset them.
# For example, "-html" is set by default. Use "-nohtml" to remove this
# feature.
#
##########################################################################
#
# ABSOLUTELY NO WARRANTY WITH THIS PACKAGE. USE IT AT YOUR OWN RISKS.
#
# Note: You need the Perl graphic library GD.pm if you want the graphs.
#       GD is available on all good CPAN ftp sites:
#           ex: [CPAN_DIR]/authors/id/LDS/GD-1.1_.tar.gz (or greater)
#         or directly to:
#           <URL:http://www-genome.wi.mit.edu/pub/software/WWW/GD.html>
#       Note : innreport will create PNG or GIF files depending upon
#              the GD version.
#
# Documentation: for a short explaination of the different options, you
#        can read the usage (obtained with the -h or -help switch).
#
# Install: - check the Perl location (first line). Require Perl 5.002
#            or greater.
#          - look at the parameters in the configuration file (section
#            'default')
#          - copy the configuration file into ${PATHETC}/innreport.conf
#          - copy the INN module into ${PATHETC}/innreport_inn.pm
#          - copy this script into ${PATHETC}/innreport
#          - be sure that the news user can run it (chmod 755 or 750)
#          - in "scanlog", comment the line containing innlog and add:
#            ${PATHETC}/innreport -f ${PATHETC}/innreport.conf ${OLD_SYSLOG}
#            or, if you want to change some options:
#    ${PATHETC}/innreport -f ${PATHETC}/innreport.conf options ${OLD_SYSLOG}
#
# Report: please report bugs (preferably) to the innreport mailing list
#         (see below) or directly to the author (do not forget to
#         include the result of the "-config" switch, the parameters
#         passed on the command line and the INN version).
#         Please also report unknown entries.
#         Be sure your are using the latest version of this script before
#         any report.
#         (check <URL:ftp://ftp.sofaraway.org/pub/innreport/>)
#
##########################################################################

# remember to add '-w' on the first line and to uncomment the 'use strict'
# below before doing any changes to this file.

use strict;

## Do you want to create a Web page. Pick DO or DONT.
my $HTML = "DONT";

## Do you want the graphs (need $HTML too). Pick DO or DONT.
my $GRAPH = "DO";

## Directory for the Web pages (used only if the previous line is active)
my $HTML_dir = "/var/www/News/stats";

## Directory for the pictures (need HTML support) in the file space
my $IMG_dir = "$HTML_dir/pics";

## Directory for the pictures (need HTML support) in the Web space
## (can be relative or global)
my $IMG_pth = "pics";

## Do you want to archive HTML results (& pics) [ will add a date in each
## name ]. Pick DO or DONT.
my $ARCHIVE = "DO";

## index page will be called:
my $index = "index.html";

## How many report files to keep (0 = all) (need $ARCHIVE).
my $CYCLE = 30;

## separator between hours-minutes-seconds in filenames
## (normaly a ":" but some web-browsers (Lynx, MS-IE, Mosaic) can't read it)
## Warning: never use "/". Use only a _valid_ filename char.
my $SEPARATOR = ".";

## Do you want the "Unknown entries from news log file" report. Pick DO or
## DONT.
my $WANT_UNKNOWN = "DO";

## Max number of unrecognized lines to display (if $WANT_UNKNOWN)
## (-1 = no limit)
my $MAX_UNRECOGNIZED = 50;

## Do you want to be case sensitive. Pick DO or DONT.
my $CASE_SENSITIVE = "DO";

## Some actions must only be performed daily (once for a log file).
## (ex: unwanted.log with INN). Default value (DONT) means to perform
## these actions each . Pick DO or DONT.
my $NOT_DAILY = "DONT";

###############################################
## THERE'S NOTHING TO CHANGE AFTER THIS LINE ##
###############################################

my $version = "3.0.2";
my %output; # content of the configuration file.
my $DEBUG = 0; # set to 1 to verify the structure/content of the conf file.
my $start_time = time;

# Require Perl 5.002 or greater.
require 5.002;
use Getopt::Long;
use vars qw/$HAVE_GD $GD_FORMAT/;

my @old_argv = @ARGV;

# Convert DO/DONT into boolean values.
{
  my $i;
  foreach $i (\$HTML, \$GRAPH, \$ARCHIVE, \$WANT_UNKNOWN,
              \$CASE_SENSITIVE, \$NOT_DAILY) {
    $$i = $$i eq 'DO' ? 1 : 0 ;
  }
}

my %ref;
GetOptions (\%ref,
	   qw(-h -help
	      -html!
	      -config
	      -f=s
	      -g! -graph!
	      -d=s -dir=s
	      -p=s -path=s
	      -w=s -webpath=s
              -i=s -index=s
	      -a! -archive!
	      -c=i -cycle=i
	      -s=s -separator=s
	      -unknown!
	      -html-unknown!
	      -maxunrec=i
	      -casesensitive!
              -notdaily!
	      -v
	      ));

&Version if $ref{'v'};

&Decode_Config_File($ref{'f'}) if defined $ref{'f'};
&Usage if $ref{'h'} || $ref{'help'} || !defined $ref{'f'};

$HTML = 0 if defined $output{'default'}{'html'};
$HTML = 1 if $output{'default'}{'html'} eq 'true';
$HTML = 0 if defined $ref{'html'};
$HTML = 1 if $ref{'html'};

$GRAPH = 0 if defined $output{'default'}{'graph'};
$GRAPH = 1 if $HTML && ($output{'default'}{'graph'} eq 'true');
$GRAPH = 0 if defined $ref{'g'} || defined $ref{'graph'};
$GRAPH = 1 if $HTML && ($ref{'g'} || $ref{'graph'});

$HTML_dir = &GetValue ($output{'default'}{'html_dir'})
  if defined $output{'default'}{'html_dir'};
$HTML_dir = $ref{'d'} if defined $ref{'d'};
$HTML_dir = $ref{'dir'} if defined $ref{'dir'};

$IMG_pth = &GetValue ($output{'default'}{'img_dir'})
  if defined $output{'default'}{'img_dir'};
$IMG_pth = $ref{'w'} if defined $ref{'w'};
$IMG_pth = $ref{'webpath'} if defined $ref{'webpath'};

$IMG_dir = $HTML_dir . "/" . $IMG_pth
  if (defined $output{'default'}{'html_dir'} ||
       defined $ref{'w'} || defined $ref{'webpath'})
      &&
      (defined $output{'default'}{'html_dir'} ||
       defined $ref{'d'} || defined $ref{'dir'});

$IMG_dir = $ref{'p'} if defined $ref{'p'};
$IMG_dir = $ref{'path'} if defined $ref{'path'};

$index = &GetValue ($output{'default'}{'index'})
  if defined $output{'default'}{'index'};
$index = $ref{'i'} if defined $ref{'i'};
$index = $ref{'index'} if defined $ref{'index'};

$ARCHIVE = &GetValue ($output{'default'}{'archive'})
  if defined $output{'default'}{'archive'};
$ARCHIVE = $ARCHIVE eq 'true';
$ARCHIVE = 0 if defined $ref{'a'} || defined $ref{'archive'};
$ARCHIVE = 1 if ($ref{'a'} || $ref{'archive'}) && $HTML;
$ARCHIVE = 0 unless $HTML;

$CYCLE = &GetValue ($output{'default'}{'cycle'})
  if defined $output{'default'}{'cycle'};
$CYCLE = 0 if $CYCLE eq 'none';
$CYCLE = $ref{'c'} if defined $ref{'c'};
$CYCLE = $ref{'cycle'} if defined $ref{'cycle'};

$SEPARATOR = &GetValue ($output{'default'}{'separator'})
  if defined $output{'default'}{'separator'};
$SEPARATOR = $ref{'s'} if defined $ref{'s'};
$SEPARATOR = $ref{'separator'} if defined $ref{'separator'};

if (defined $output{'default'}{'unknown'}) {
  $WANT_UNKNOWN = &GetValue ($output{'default'}{'unknown'});
  $WANT_UNKNOWN = $WANT_UNKNOWN eq 'true' ? 1 : 0;
}
$WANT_UNKNOWN = 0 if defined $ref{'unknown'};
$WANT_UNKNOWN = 1 if $ref{'unknown'};

my $WANT_HTML_UNKNOWN = $WANT_UNKNOWN;
if (defined $output{'default'}{'html-unknown'}) {
  $WANT_HTML_UNKNOWN = &GetValue ($output{'default'}{'html-unknown'});
  $WANT_HTML_UNKNOWN = $WANT_HTML_UNKNOWN eq 'true' ? 1 : 0;
}
$WANT_HTML_UNKNOWN = 0 if defined $ref{'html-unknown'};
$WANT_HTML_UNKNOWN = 1 if $ref{'html-unknown'};

$NOT_DAILY = 0 if defined $ref{'notdaily'};
$NOT_DAILY = 1 if $ref{'notdaily'};

$MAX_UNRECOGNIZED = &GetValue ($output{'default'}{'max_unknown'})
  if defined $output{'default'}{'max_unknown'};
$MAX_UNRECOGNIZED = $ref{'maxunrec'} if defined ($ref{'maxunrec'});

$CASE_SENSITIVE = &GetValue ($output{'default'}{'casesensitive'})
  if defined $output{'default'}{'casesensitive'};
$CASE_SENSITIVE = 1 if $CASE_SENSITIVE eq 'true';
$CASE_SENSITIVE = 0 if defined $ref{'casesensitive'};
$CASE_SENSITIVE = 1 if $ref{'casesensitive'};

my $CLASS   = &GetValue ($output{'default'}{'module'});
my $LIBPATH = &GetValue ($output{'default'}{'libpath'});

umask 022;

BEGIN {
  eval "use GD;";
  $HAVE_GD = $@ eq '';
  if ($HAVE_GD) {
    my $gd = new GD::Image(1,1);
    $GD_FORMAT = "gif" if $gd->can('gif');
    $GD_FORMAT = "png" if $gd->can('png');
  }
  $HAVE_GD;
};
undef $GRAPH unless $HTML;
if ($GRAPH && !$::HAVE_GD) {
  print "WARNING: can't make graphs as required.\n" .
        "         Install GD.pm or disable this option.\n\n";
  undef $GRAPH;
}

if ($HTML) {
  if ($GRAPH) {
    $IMG_dir = "." if defined $IMG_dir && $IMG_dir eq '';
    $IMG_pth .= "/" if $IMG_pth;
    $IMG_pth =~ s|/+|/|g;
    $IMG_dir =~ s|/+|/|g;
    unless (-w $IMG_dir) {
      print "WARNING: can't write in \"$IMG_dir\" as required by -g " .
	"switch.\n         Option -g removed. Please see the -p switch.\n\n";
      undef $GRAPH;
    }
  }
  $HTML_dir = "." if defined $HTML_dir && $HTML_dir eq '';
  unless (-w $HTML_dir) {
    print "WARNING: can't write in \"$HTML_dir\" as required by -html " .
      "switch.\n         Option -html and -a removed. Please see the " .
      "-d switch.\n\n";
    undef $HTML;
    $ARCHIVE = 0;
  }
}

# Now, we are sure that HTML and graphs can be made if options are active.
&Summary if defined $ref{'config'};

my $unrecognize_max = 0;
my @unrecognize;
my ($total_line, $total_size) = (0, 0);
my ($suffix, $HTML_output, %config, $first_date, $last_date,
    %prog_type, %prog_size);

my $HTML_header = '';
my $HTML_footer = '';

my $MIN = 1E10;
my $MAX = -1;

my $xmax = &GetValue ($output{'default'}{'graph_width'})   # Graph size..
  if defined $output{'default'}{'graph_width'};
$xmax = 550 unless $xmax;

my $transparent = &GetValue ($output{'default'}{'transparent'})
  if defined $output{'default'}{'transparent'};
$transparent = (defined $transparent && $transparent eq 'true') ? 1 : 0;

my $repeated = 1;

my $first_date_cvt = $MIN;
my $last_date_cvt = $MAX;


#########################################################################
my $s = sprintf "use lib qw($LIBPATH); use $CLASS;";
eval $s;  # initialization
die "Can't find/load $CLASS.pm : $@\n" if $@;

my $save_line = <>;
$_ = $save_line;
local $^W = 0 if $] < 5.004; # to avoid a warning for each '+=' first use.
LINE: while (!eof ()) {
  $total_line++;
  my $size = length;
  $total_size += $size;

  # Syslog optimization
  if ($repeated) {
    $repeated--;
    $_ = $save_line;
  }
  else {
    $_ = <>;
    if ($_ =~ /last message repeated (\d+) times?$/o) {
       $repeated = $1;
       $_ = $save_line;
    }
    else {
       $save_line = $_;
    }
  }

  # skip empty lines
  next LINE if $_ eq '';

  my $res;
  my ($day, $hour, $prog, $left) =
    $_ =~ m/^(\S+\s+\S+) (\S+) \S+ (\S+): \[ID \d+ \S+\] (.*)$/o;
  ($day, $hour, $prog, $left) =
    $_ =~ m/^(\S+\s+\S+) (\S+) \S+ (\S+): (.*)$/o unless $day;
  ($day, $hour, $prog, $left) =
    $_ =~ m/^(\S+\s+\S+) (\S+) \d+ \S+ (\S+): (.*)$/o unless $day;

  unless ($day) {
    ($day, $hour, $res, $left) = $_ =~ m/^(\S+\s+\S+) (\S+)\.\d+ (\S+) (.*)$/o;
    if ($day) {
      my $cvtdate = &ConvDate ("$day $hour");
      if ($cvtdate < $first_date_cvt) {
	$first_date_cvt = $cvtdate;
	$first_date = "$day $hour";
      }
      elsif ($cvtdate > $last_date_cvt) {
	$last_date_cvt = $cvtdate;
	$last_date = "$day $hour";
      }
      $prog = "inn";
    }
    else {
      next if $_ =~ /^$/;
      # Unrecognize line... skip
      $unrecognize[$unrecognize_max] = $_
	unless $unrecognize_max > $MAX_UNRECOGNIZED
		&& $MAX_UNRECOGNIZED > 0;
      $unrecognize_max++;
      next LINE;
    }
  }
  else {
    my $cvtdate = &ConvDate ("$day $hour");
    if ($cvtdate < $first_date_cvt) {
      $first_date_cvt = $cvtdate;
      $first_date = "$day $hour";
    }
    elsif ($cvtdate > $last_date_cvt) {
      $last_date_cvt = $cvtdate;
      $last_date = "$day $hour";
    }
  }

  ########
  ## Program name
  # word[7164] -> word
  my ($pid) = $prog =~ s/\[(\d+)\]$//o;
  # word: -> word
  $prog =~ s/:$//o;
  # wordX -> word   (where X is a digit)
  $prog =~ s/\d+$//o;

  $prog_type{$prog}++;
  $prog_size{$prog} = 0 unless defined $prog_size{$prog}; # stupid warning :(
  $prog_size{$prog} += $size;

  # The "heart" of the tool.
  {
    no strict;
    next LINE if
      &{$CLASS."::collect"} ($day, $hour, $prog, $res, $left, $CASE_SENSITIVE);
  }

  $unrecognize[$unrecognize_max] = $_
    unless $unrecognize_max > $MAX_UNRECOGNIZED
	    && $MAX_UNRECOGNIZED > 0;
  $unrecognize_max++;
}

{
  no strict;
  &{$CLASS . "::adjust"} ($first_date, $last_date);
}

$| = 1;

die "no data. Abort.\n" unless $total_line;

my $sec_glob = &ConvDate ("$last_date") - &ConvDate ("$first_date");
unless ($sec_glob) {
  print "WARNING: bad date (\"$last_date\" or \"$first_date\")\n" .
        "         Please, contact the author of innreport.\n";
  $sec_glob = 24 * 60 * 60; # one day
}

$HTML_output = '';

if ($HTML) {
  # Create a new filename (unique and _sortable_)
  if ($ARCHIVE) {
    # The filename will contain the first date of the log or the current time.
    my ($ts, $tm, $th, $dd, $dm, $dy) = localtime;
    my ($m, $d, $h, $mn, $s) =
      $first_date =~ /^(\S+)\s+(\d+)\s+(\d+):(\d+):(\d+)$/;
    if ($m) {
      my $ddm = (index "JanFebMarAprMayJunJulAugSepOctNovDec", $m) / 3;
      # Adjust the year because syslog doesn't record it. We assume that
      # it's the current year unless the last date is in the future.
      my $ld = &ConvDate($last_date);
      $dy-- if $ld > $ts + 60 * ($tm + 60 * ($th + 24 * ($dd - 1 +
        substr("000031059090120151181212243273304334", $dm * 3, 3)))) ||
        $ld < &ConvDate($first_date);
      ($dm, $dd, $th, $tm, $ts) = ($ddm, $d, $h, $mn, $s);
    }
    $dm++; # because January = 0 and we prefer 1
    $dy += 100 if $dy < 90; # Try to pacify the year 2000 !
    $dy += 1900;
    $suffix = sprintf ".%02d.%02d.%02d-%02d$SEPARATOR%02d$SEPARATOR%02d",
		       $dy, $dm, $dd, $th, $tm, $ts;
  }
  else {
    $suffix = '';
  }
  $HTML_output = "$HTML_dir" . "/news-notice" . "$suffix" . ".html";
  $HTML_output =~ s|/+|/|g;
  if (defined $output{'default'}{'html_header_file'}) {
    my $file = &GetValue ($output{'default'}{'html_header_file'});
    $file = $HTML_dir . "/" . $file;
    open (F, $file) && do {
      local $/ = undef;
      $HTML_header = <F>;
      close F;
    };
  }
  if (defined $output{'default'}{'html_footer_file'}) {
    my $file = &GetValue ($output{'default'}{'html_footer_file'});
    $file = $HTML_dir . "/" . $file;
    open (F, $file) && do {
      local $/ = undef;
      $HTML_footer = <F>;
      close F;
    };
  }
}

&Write_all_results ($HTML_output, \%output);

&Make_Index ($HTML_dir, $index, "news-notice$suffix.html", \%output)
  if $HTML && $index;

#====================================================================

if ($ARCHIVE) {
  # rotate html files
  &Rotate ($CYCLE, $HTML_dir, "news-notice", ".html");

  # rotate pictures
  my $report;
  foreach $report (@{$output{'_order_'}}) {
    next if $report =~ m/^(default|index)$/;
    next unless defined $output{$report}{'graph'};

    my $i = 0;
    while ($GRAPH && defined ${${$output{$report}{'graph'}}[$i]}{'type'}) {
      my $name = $report . ($i ? $i : '');
      &Rotate ($CYCLE, $IMG_dir, $name, '.' . $GD_FORMAT);
      $i++;
    }
  }
}

# Code needed by INN only. It must be in innreport_inn.pm to keep things clean.
if (!$NOT_DAILY && defined $output{'default'}{'unwanted_log'}) {
  my $logfile = &GetValue ($output{'default'}{'unwanted_log'});
  my $logpath = &GetValue ($output{'default'}{'logpath'});
  {
    no strict;
    &{$CLASS . "::report_unwanted_ng"} ("$logpath/$logfile");
  }
}

################
# End of report.
###################################################################

######
# Misc...

# Compare 2 dates (+hour)
sub DateCompare {
  # ex: "May 12 06"   for May 12, 6:00am
  local $[ = 0;
  # The 2 dates are near. The range is less than a few days that's why we
  # can cheat to determine the order. It is only important if one date
  # is in January and the other in December.

  my $date1 = substr ($a, 4, 2) * 24;
  my $date2 = substr ($b, 4, 2) * 24;
  $date1 += index("JanFebMarAprMayJunJulAugSepOctNovDec",substr($a,0,3)) * 288;
  $date2 += index("JanFebMarAprMayJunJulAugSepOctNovDec",substr($b,0,3)) * 288;
  if ($date1 - $date2 > 300 * 24) {
    $date2 += 288 * 3 * 12;
  }
  elsif ($date2 - $date1 > 300 * 24) {
    $date1 += 288 * 3 * 12;
  }
  $date1 += substr($a, 7, 2);
  $date2 += substr($b, 7, 2);
  $date1 - $date2;
}


# Convert: seconds to hh:mm:ss
sub second2time {
  my $temp;
  my $t = shift;
  # Hours
  $temp = sprintf "%02d", $t / 3600;
  my $chaine = "$temp:";
  $t %= 3600;
  # Min
  $temp = sprintf "%02d", $t / 60;
  $chaine .= "$temp:";
  $t %= 60;
  # Sec
  $chaine .= sprintf "%02d", $t;
  return $chaine;
}

# Convert: milliseconds to hh:mm:ss:mm
sub ms2time {
  my $temp;
  my $t = shift;
  # Hours
  $temp = sprintf "%02d", $t / 3600000;
  my $chaine = "$temp:";
  $t %= 3600000;
  # Min
  $temp = sprintf "%02d", $t / 60000;
  $chaine .= "$temp:";
  $t %= 60000;
  # Sec
  $temp = sprintf "%02d", $t / 1000;
  $chaine .= "$temp.";
  $t %= 1000;
  # Millisec
  $chaine .= sprintf "%03d", $t;
  return $chaine;
}

# Rotate the archive files..
sub Rotate {
  # Usage: &Rotate ($max_files, "$directory", "prefix", "suffix");
  my ($max, $rep, $prefix, $suffix) = @_;
  my ($file, $num, %files);
  local ($a, $b);

  return 1 unless $max;
  opendir (DIR, "$rep") || die "Error: Cant open directory \"$rep\"\n";

  FILE : while (defined ($file = readdir (DIR))) {
    next FILE
      unless $file =~ /^           # e.g. news-notice.1997.05.14-01:34:29.html
                        $prefix          # Prefix : news-notice
                        \.               # dot    : .
	                (\d\d)?\d\d      # Year   : 1997 (or 97)
	                \.               # dot    : .
	                \d\d             # Month  : 05
	                \.               # dot    : .
                        \d\d             # Day    : 14
                        -                # Separator : -
                        \d\d             # Hour   : 01
                        $SEPARATOR       # Separator : ":"
                        \d\d             # Minute : 34
                        $SEPARATOR       # Separator : ":"
                        \d\d             # Second : 29
                        $suffix          # Suffix : ".html"
                        $/x;
    $files{$file}++;
  }
  closedir DIR;
  $num = 0;
  foreach $file (sort {$b cmp $a} (keys (%files))) {
    unlink "$rep/$file" if $num++ >= $max && -f "$rep/$file";
  }
  return 1;
}

# convert a date to a number of seconds
sub ConvDate {
  # usage: $num = &ConvDate ($date);
  # date format is Aug 22 01:49:40
  my $T = shift;
  my ($m, $d, $h, $mn, $s) = $T =~ /^(\S+)\s+(\d+)\s+(\d+):(\d+):(\d+)$/;
  my $out = $s + 60 * $mn + 3600 * $h + 86400 * ($d - 1);

  $m = substr("000031059090120151181212243273304334",
	      index ("JanFebMarAprMayJunJulAugSepOctNovDec", $m), 3);
  $out += $m * 86400;
  return $out;
}

# Compare 2 filenames
sub filenamecmp {
  local $[ = 0;
  my ($la, $lb) = ($a, $b);
  my ($ya) = $la =~ m/news-notice\.(\d+)\./o;
  $ya += 100  if $ya < 90; # Try to pacify the year 2000 !
  $ya += 1900 if $ya < 1900; # xx -> xxxx
  my ($yb) = $lb =~ m/news-notice\.(\d+)\./o;
  $yb += 100  if $yb < 90; # Try to pacify the year 2000 !
  $yb += 1900 if $yb < 1900; # xx -> xxxx

  $la =~ s/news-notice\.(\d+)\./$ya\./;
  $lb =~ s/news-notice\.(\d+)\./$yb\./;
  $la =~ s/[\.\-\:html]//g;
  $lb =~ s/[\.\-\:html]//g;

  $lb <=> $la;
}

sub ComputeTotal {
  my $h = shift;
  my $total = 0;
  my $key;
  foreach $key (keys (%$h)) {
    $total += $$h{$key};
  }
  $total;
}

sub ComputeTotalDouble {
  my $h = shift;
  my $total = 0;
  my ($key1, $key2);
  foreach $key1 (keys (%$h)) {
    foreach $key2 (keys (%{$$h{$key1}})) {
      $total += ${$$h{$key1}}{$key2};
    }
  }
  $total;
}

# make an index for archive pages
sub Make_Index {
  my ($rep, $index, $filename, $data) = @_;
  my %output = %$data;

  $index =~ s/^\"\s*(.*?)\s*\"$/$1/o;

  # add requested data at the end of the database.
  open (DATA, ">> $rep/innreport.db") || die "can't open $rep/innreport.db\n";
  my $i = 0;
  my $res = "$filename";
  while (defined ${${$output{'index'}{'column'}}[$i]}{'value'}) {
    my $data = &GetValue (${${$output{'index'}{'column'}}[$i]}{'value'});
    $data =~ s/\n//sog;
    my @list = split /\|/, $data;
    my $val;
    foreach $val (@list) {
      $res .= ($val eq 'date' ? "|$first_date -- $last_date"
	                      : "|" . &EvalExpr($val));
    }
    $i++;
  }
  print DATA "$res\n";
  close DATA;

  # sort the database (reverse order), remove duplicates.
  open (DATA, "$rep/innreport.db") || die "can't open $rep/innreport.db\n";
  my %data;
  while (<DATA>) {
    m/^([^\|]+)\|(.*)$/o;
    $data{$1} = $2;
  }
  close DATA;
  open (DATA, "> $rep/innreport.db") || die "can't open $rep/innreport.db\n";
  $i = 0;
  foreach (sort {$b cmp $a} (keys %data)) {
    print DATA "$_|$data{$_}\n" if $CYCLE == 0 || $i < $CYCLE;
    $i++;
  }
  close DATA;

  my $title = "Daily Usenet report";
  $title = &GetValue ($output{'default'}{'title'})
    if defined $output{'default'}{'title'};
  $title =~ s/\\\"/\"/g;
  my $Title = $title;
  $Title =~ s/<.*?>//g;
  my $body = '';
  $body = &GetValue ($output{'default'}{'html_body'})
    if defined $output{'default'}{'html_body'};
  $body =~ s/\\\"/\"/go;
  my $result = sprintf <<EOF;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD>
<TITLE>$Title: index</TITLE>
</HEAD><BODY $body>
$HTML_header
<HR ALIGN=CENTER SIZE=\"4\" WIDTH=\"100%%\">
<BR><CENTER><FONT SIZE=\"+2\">
<B>$title - archives</B>
</FONT></CENTER>
<BR CLEAR=ALL>
<HR ALIGN=CENTER SIZE=4 WIDTH=\"100%%\"><P>
<CENTER>
EOF

  if ($GRAPH) {
    my $i = 0;
    while (defined ${${$output{'index'}{'graph'}}[$i]}{'title'}) {
      my $title =  &GetValue (${${$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'}{$output{'index'}{'graph'}}[$i]}{'title'});
      my $'html_dir'