Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

RiotJournal - Graphical LiveJournal Client

by #include (Curate)
on Nov 25, 2003 at 17:52 UTC ( #309984=sourcecode: print w/ replies, xml ) Need Help??

Category: Web Stuff
Author/Contact Info #include

http://www.riotmod.com/lj
Description: A small, simple graphical LiveJournal client. Based on ljer.pl by amoe. Uses Perl/Tk, LWP::UserAgent, and HTTP::Request::Common.

UPDATE: According to jsprat, RiotJournal works on Win2K, as well as Linux.
#!/usr/bin/perl
#
# ==============
# riotjournal.pl
# ==============
#
# Based on ljer.pl by amoe (http://perlmonks.thepen.com/120236.html)
#
# Description : Perl LiveJournal client
# Version     : 0.2
# Author      : Dan Hetrick
# Website     : http://www.riotmod.com/lj
#
use strict;
use warnings;
use Tk;
use LWP::UserAgent;
use HTTP::Request::Common;

#==========[ Settings ]=========

my $APP_NAME    = "RiotJournal";
my $APP_VERSION = "0.2";
my $APP_CONFIG  = "$ENV{HOME}/.riotjournal.rc";
my $APP_AGENT   = "$APP_NAME/$APP_VERSION";
my $APP_CGI     = 'http://www.livejournal.com/cgi-bin/log.cgi';
my %global_params;
my $mw;
my $GUI_LOGO_WIDTH  = 597;
my $GUI_LOGO_HEIGHT = 86;

#==========[ Post Settings ]====

my $LJ_SUBJECT;
my $LJ_ENTRY;
my $LJ_MUSIC;
my $LJ_MOOD;
my $LJ_POST_TYPE = 1;    # 1 = Public, 2 = Private, 3 = Friends
my $LJ_USERNAME;
my $LJ_PASSWORD;
my $GUI_POST_TEXT;

#==========[ Main Code ]========

if ( -e "$APP_CONFIG" ) { }
else { GUI_EnterUserInfo(); }
$LJ_USERNAME = GetSetting( "user",     $APP_CONFIG );
$LJ_PASSWORD = GetSetting( "password", $APP_CONFIG );
$APP_CGI     = GetSetting( "cgi",      $APP_CONFIG );
$APP_AGENT   = GetSetting( "agent",    $APP_CONFIG );
GUI_EnterPost();

#==========[ Support Code ]=====

# =============
# GetSetting()
# =============
# Arguments   : Setting, Config file
# Returns     : Setting value
# Description : Retrieves user settings from riotjournal.rc
#
sub GetSetting {
    my ( $myset, $myfile ) = @_;
    my $retval = "";
    open( CFGFILE, "<$myfile" ) or die "Error opening $myfile.";
    my @cfgfile = <CFGFILE>;
    close CFGFILE;
    foreach my $sln (@cfgfile) {
        if ( index( $sln, "#" ) == 0 ) { next; }
        if ( $sln eq "" ) { next; }
        my @ln = split( "=", $sln );
        if ( lc( $ln[0] ) =~ /$myset/i ) {
            chomp $ln[1];
            $retval = $ln[1];
            last;
        }
    }
    return $retval;
}

# ===============
# GUI_EnterPost()
# ===============
# Arguments   : None
# Returns     : None
# Description : Displays a Tk interface to the PostToLiveJournal() sub
+.
#
sub GUI_EnterPost {
    $mw = MainWindow->new();
    $mw->title("$APP_NAME $APP_VERSION");
    my $icon = $mw->Photo( 'image', -data => rj_icon(), format => 'gif
+' );
    $mw->iconimage($icon);
    my $canvas =
      $mw->Canvas( '-width' => $GUI_LOGO_WIDTH, '-height' => $GUI_LOGO
+_HEIGHT );
    $mw->Photo( 'logo', -data => rj_logo(), -format => 'gif' );
    $canvas->createImage( 0, 0, '-anchor' => 'nw', '-image' => 'logo' 
+);
    $canvas->pack;
    $mw->Label( -text => "Subject" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 75, -textvariable, \$LJ_SUBJECT )
      ->pack( -anchor => 'ne', -fill => 'x' );
    $mw->Label( -text => "Music" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 75, -textvariable, \$LJ_MUSIC )
      ->pack( -anchor => 'ne', -fill => 'x' );
    $mw->Label( -text => "Mood" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 75, -textvariable, \$LJ_MOOD )
      ->pack( -anchor => 'ne', -fill => 'x' );
    $GUI_POST_TEXT =
      $mw->Scrolled( 'Text', -scrollbars => 'e', -width => 80, -height
+ => 10 )
      ->pack( -anchor => 'nw', -fill => 'x' );
    $mw->Radiobutton(
        -text    => "Public",
        -command => sub { $LJ_POST_TYPE = 1; }
    )->pack( -anchor => 'nw' );
    $mw->Radiobutton(
        -text    => "Private",
        -value   => '0',
        -command => sub { $LJ_POST_TYPE = 2; }
    )->pack( -anchor => 'nw' );
    $mw->Radiobutton(
        -text    => "Friends Only",
        -value   => '1',
        -command => sub { $LJ_POST_TYPE = 3; }
    )->pack( -anchor => 'nw' );
    $mw->Button(
        -text    => "Post to LiveJournal",
        -command => sub {
            $LJ_ENTRY = $GUI_POST_TEXT->get( '1.0', 'end' );
            PostToLiveJournal();
        }
      )->pack(
        -side   => 'left',
        -anchor => 'nw',
        -fill   => 'x'
      );
    $mw->Button(
        -text    => "Exit",
        -command => sub { exit }
      )->pack(
        -side   => 'right',
        -anchor => 'nw',
        -fill   => 'x'
      );
    MainLoop;
}

# ===================
# GUI_EnterUserInfo()
# ===================
# Arguments   : None
# Returns     : None
# Description : Displays a Tk dialog to get the LiveJournal user
#               and password, and calls CreateUserInfoFile()
#
sub GUI_EnterUserInfo {
    my $username;
    my $password;
    $mw = MainWindow->new();
    $mw->title("$APP_NAME $APP_VERSION");
    my $icon = $mw->Photo( 'image', -data => rj_icon(), format => 'gif
+' );
    $mw->iconimage($icon);
    my $canvas = $mw->Canvas( '-width' => 317, '-height' => $GUI_LOGO_
+HEIGHT );
    $mw->Photo( 'logo', -data => rj_logo_small(), -format => 'gif' );
    $canvas->createImage( 0, 0, '-anchor' => 'nw', '-image' => 'logo' 
+);
    $canvas->pack;
    $mw->Label( -text => "Enter your LiveJournal Username/Password." )
      ->pack( -anchor => 'nw' );
    $mw->Label( -text => "Restart $APP_NAME for changes to take effect
+." )
      ->pack( -anchor => 'nw' );
    $mw->Label( -text => "Username:" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 20, -textvariable, \$username )
      ->pack( -anchor => 'nw', -fill => 'x' );
    $mw->Label( -text => "Password:" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 20, -textvariable, \$password )
      ->pack( -anchor => 'nw', -fill => 'x' );
    $mw->Button(
        -text    => "OK",
        -command => sub { CreateUserInfoFile( $username, $password ); 
+exit; }
      )->pack(
        -side   => 'top',
        -anchor => 'nw',
        -fill   => 'x'
      );
    $mw->Button(
        -text    => "Exit",
        -command => sub { exit }
      )->pack(
        -side   => 'top',
        -anchor => 'nw',
        -fill   => 'x'
      );
    MainLoop;
}

# ====================
# CreateUserInfoFile()
# ====================
# Arguments   : Username, password
# Returns     : None
# Description : Saves username/password to /home/<username>/.riotjourn
+al.rc
#
sub CreateUserInfoFile {
    my ( $username, $password ) = @_;
    open( CONFIGFILE, ">$APP_CONFIG" ) or die "Can't write configurati
+on file.";
    print CONFIGFILE "# riotjournal configuration file\n";
    print CONFIGFILE "user=$username\n";
    print CONFIGFILE "password=$password\n";
    print CONFIGFILE "cgi=http://www.livejournal.com/cgi-bin/log.cgi\n
+";
    print CONFIGFILE "agent=$APP_NAME/$APP_VERSION\n";
    close CONFIGFILE;
}

# ===================
# PostToLiveJournal()
# ===================
# Arguments   : None
# Returns     : None
# Description : Posts entered data to LiveJournal
#
sub PostToLiveJournal {
    my $journaller = LWP::UserAgent->new();
    $journaller->agent($APP_AGENT);

    $global_params{user}     = $LJ_USERNAME;
    $global_params{password} = $LJ_PASSWORD;

    my %login = &login;

    my $http_res = $journaller->request( POST $APP_CGI, \%login );
    die "Failed to login!" unless ( $http_res->is_success );
    my %lj_res = split( "\n", $http_res->content );
    $lj_res{success} eq 'OK'
      ? print "Logged in as $lj_res{name}!\n"
      : die "Failed to log in: $lj_res{errmsg}\n";
    print "Server: $lj_res{message}\n" unless ( !$lj_res{message} );

    my %postevent = &postevent;

    $http_res = $journaller->request( POST $APP_CGI, \%postevent );
    die "Failed to update journal!" unless ( $http_res->is_success );
    %lj_res = split( "\n", $http_res->content );
    $lj_res{success} eq 'OK'
      ? print "Updated journal successfully with entry $lj_res{itemid}
+\n"
      : print "Failed to update journal: $lj_res{errmsg}\n";
    exit;
}

# =======
# login()
# =======
# Arguments   : None
# Returns     : Parameter hash
# Description : Sets LiveJournal login parameters
#
sub login {
    my %params = %global_params;
    $params{mode}          = 'login';
    $params{clientversion} = $APP_AGENT;
    return %params;
}

# ===========
# postevent()
# ===========
# Arguments   : None
# Returns     : Parameter hash
# Description : Sets LiveJournal post parameters
#
sub postevent {
    my %params = %global_params;
    $params{mode}        = 'postevent';
    $params{lineendings} = 'unix';
    if ( $LJ_POST_TYPE == 1 ) {
        $params{security} = 'public';
    }
    elsif ( $LJ_POST_TYPE == 2 ) {
        $params{security} = 'private';
    }
    elsif ( $LJ_POST_TYPE == 3 ) {
        $params{security}  = 'usemask';
        $params{allowmask} = 1;
    }
    @params{ 'subject', 'event', 'prop_current_music', 'prop_current_m
+ood' } =
      ( $LJ_SUBJECT, $LJ_ENTRY, $LJ_MUSIC, $LJ_MOOD );
    @params{ 'min', 'hour', 'day', 'mon', 'year' } =
      ( localtime(time) )[ 1 .. 5 ];
    $params{year} += 1900;
    $params{mon}  += 1;
    return %params;
}

# ===================
# rj_logo()
# ===================
# Arguments   : None
# Returns     : Base64 encoded GIF image
# Description : The RiotJournal logo
#
sub rj_logo {
    my $binary_data = <<EOD;
R0lGODlhVQJWAOcAAGaazmaaymaWymKWxkp+ri5ekh5OggY2agY6bhpOgjpqnlqKvlqOwj
+5ypgo+
cgI2agIyZipeklKGukp+siZajg5CcjJmml6Owj5yoho+ckZSdnZifoJmgiZCbhJCdl6Swl
+aKulKC
tk5+skp6rkZ2qkZ6qmKSxj5uohZKfgI2Zg46bopqgppyhm5eflJWdi5GbjpuojpunjZqmm
+KWykZ6
rgo2al5aeg4+ckZqjmqGnl5+liJOdlaKvkJ2qjZqnjZmmiJShjZKchI+ckJminaSrr7K2u
+bu9tre
3nKKohpKfkJ2pk6CtlaGuhpGdlZ2mrrO5v7+/vLy8ra+xkJyplKGtl6Sxnpifh4+bsLGyu
+7u7vr6
/ubq7sbS3pKisjpihk6CsiZShn6Sps7OzsrW4hJGdgo6bhZCcsrKylKCpkJymhY6aqayui
+5Wgn6u
yo6+2pbG3oKu1kZ2njZafaKqtmqauoq61prK4nam0j5adm6evpLC2iZWii5SfoqarlaGqk
+ZmiipO
ch5Sgk5+ooa20j5ulmaWujJmjmKSsiJWhi5ikluLrjZiikp6onqqxn6iwipajl6OsnKiwj
+pmli5a
gjZWciJGbm52fpqSioKGhlZqeramksKukuLCmvbOnuzGnKqejlpuet6+mvLKnnqCgubCms
+qylta6
lhY+ap6Wiu7KnjJilmJyfpKOhhpCbk5memqazvb6/vL2+vb2+t7m6nKWumaOsu72+ipWgi
+ZOgiJO
gpK22rrS6sra7rLK5pq63nqm0jJaikZypm6ezoau1p6+3q7K5qbC4oqy2nKi0u7y+t7q8s
+LW6hI2
ZjZejrbO5tLi8uLu9ury9pa63nKizq7K4ury+vr+/uLq9q7G4nai0qrG4tbm8qLC4mqezr
+7S6n6q
1iJGdsba7o622qbG4s7e7lJ+st7q9pq+3tbi8trm8rLO5o6y2sre7oKq1kJuor7W6oqy1h
+5KdipW
iqq6zlZ6mh5Odqq+zo6muuLm7uLq7jpehnKOqo6iuv///////////ywAAAAAVQJWAAAI/g
+ABCBxI
sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihQYoKTJkyhTqlzJsqXLlzBjyp
+xJs6bN
mzhz6tzJs6fPn0CDCh1KtGhJAUiTKl3KtKnTp1CjSp1KtarVq1izat3KtatXqwC+ih1Ltq
+zZs2jT
Zh3Jtq3bt3DjykUYYK7du3jz6t3Lt6/fv4AbCghMuLDhwDGRDlg8QIDRx5AjS55M+SeAyp
+gza97M
ObHUAQQKGDiAIIGCBWpTq17NurXrtGHDvp5Nu7bt21gXMmiQwAGCBw8gPEAQQcLh48iT76
+1bV7nz
59A/TqBQITiE68IhOLBwIbr37+Af/g4eHL68eecrB2AwgABCBg0bOGjogN1DA8cxP4AIIW
+IEif8k
lCBCCCCYgF9nCCao4IIpXXYZgxBGKOGEKDl1AgopqKDBCiy04MILGaQAQQopJDBCVCYsEI
+J/GMAQ
gwwWxGiBDDHAgIGAC8yA24489ugjVLGN9+OQRBZp5FMH0YBhDS6wwIINGRxwAw456LADBA
+hQwMNB
MzAgwQQ9wBCjDzU2gEEMMSgQ4w8xwtCDCAycJ+ecHTHnIJ145slXABcAcQCTLKwQRApCDE
+FEEUYc
gUQS2lnwAUFdSkCCAj8o0IASJIwwwRJM8BDCEhOU0EMDPqypQA88zKDnqqwiNF5s/q3GKi
+tHKM3Q
QHtBsMBBBzU04cQTUAQbhRQ4tFfBFI4NcEEIPfgAQwMlLMFDnCQ5WJcAF4BAwwk+lPoDBl
+QMQOG4
5Jb7krUPmqvuuuzypBQAVSzJgRVX1LCDDlhkAYUWW3DRhRceCIeCBFVQoYQCMTTwBQOq3u
+nYw+Q5
BgADJcAAowUwMHHkxhx3XFWQQXos8sgkl0WQAFQE14EVL9QARhhYiCFGFGPkQAYENZTR3g
+MGcOtD
CQsMQFJzOs5gtNECzHBtAElL0MAPUMNA7axUm2ennVVnrfVDAcxAgIjz1WBGDlicIQYWSD
+gAAWkF
oJFGGWsnoATDssk2wwA8gDrq/hQlbDq1gwz0YAGbSmxtuHOvvnr44oebJMAAJZCoRg0I6C
+DFGWes
wQbcKqTRhhtvwBFHCsDRoCrRVSwxhQIyQM3mxZXCMMIHQjKBweA+aNzu7rxnhi5zvQcvfP
+BICSQA
A+1dJ0cXmM8hxwEpkEFHHW/YYf0dEVznAQiOFaxEDN02QMMEVFDBXwmkjgnu6TNIEMOMGO
+hY8vz0
2wZy4vXnr//+5MU2gAwIEJET1nCGOeBBBSlAgQfyoAfrWU8PdLhZCvYAKiWcYAojoAIDLl
+CFARxt
BlVgAAhEcDsLKIAAjxLAB2gwpu4w7oV+uRq6YEhDWQEPW3toDx/6sAYd+CYC/l8wTRscaD
+03+CGA
ZaBADGiwBAZ8QGlMIw/THvSBBYwARj4QgaoEsID3WWAJDVOILnbBizKa0Yy98MUvDsKERQ
+DjjcFQ
iDCGQYxinHEXxjgGMhJCjDP68YzjSIguzLiMYbxCIcPgRjGWYUZvcGMd01DIK4bByDLq4i
+BkLOM4
1igQYYTjj2UMxy7G8Y1DEmQa0jjjO9qRkHO8o4y7uKQk4WBGZ9yBIdyoJSsPkjiQ1fCXq2
+Ia8ALw
BQyp4A86AEQKAgGCAMQhAYIYBBHtUAdCkMgBP+DBYEpystgsDYRLUFMDtAmAD4xgcCQQl0
+uKkYxg
ufOdtlDGMnxxh5MAQAQd/mCGPpuxEmHowhnPgEY03hkLaDzjCdKYhkre8c6GvpMXLCmGO2
+Hhi26o
RBji6AU5jJAMa0zUCM/whi6m8QqVdOMcWnDnOFQy0GDxAg4mEYZD3wkLI/CCGqU0CTKw8U
+4tUCMb
K3lCFIJlhJW25A69cGcsdCEMlyzDnUYQx0p+Z63hWfWq5TLeNktCiIAJwQwPIEMJChGAAR
+gCCIdw
AxHf0AZEHOABgfhCww6ELsV1bQI++AEBqpA0JrSJr1AJADWqMdN3WuMa2MhGUu7ZCn0yAx
+hNgYM2
thGLwgZLFrPoxTGWAgCGWtadvHgKNSYqjVcs5RW/MMY2YPFZKKTDGYZc/koAXnEO1gbLGE
+0hrEvb
UTxheLS1ydhFO0wLgDtI9J3K0IVpObsLWxAVt08JwDCU8c5eKPYprwgHVNfRlPvdj3/gDW
+/HYKWU
DyTiBiQqQwS2qghELCIP1SNiIVAgnAhwz64RG8hRVKgEjBmnnO/7gQsVUoyWthYa3OiG8U
+ZwBccC
wyDD8EY7WxssWJCDqQMRgDcoDAVyJEQbSpWGggfSjXY8obIc7vA5snEyYfjCtlDQxkEMTI
+5hkGQa
KYaFM9YogGyMtqHv4CSknIHiasg4IcLghiyQewyFBOCpwYKGLAsiQxkC88p04iZKQLAH6N
+3AAmXF
DwGAQIg2xNeBjAiY/gN8UIVrSXGrsJJNCCz2hcFUob8/qIJCkMJOpRrhzxyFsRae8Q2BvC
+IEfGgC
OMAhiYJ8IxwoVmo1/hyNWPx2u6YMQDEAXY2UBksLkzbCNXZxkLocFwoUHbFAvrELGFc41E
+aIhafd
CQ1fCEO/J531kQuiWyiww8ZhkelEYW0EVxvhHBbNRlIbeo1zmJIgRA5WNAKZEDiww6HcuD
+VCsgvV
KWfYu4rDsrjL0xyslYQAgRhRILY0tDSAgRFqJaIbDNEeMighjK9amjcF8oEpWMB0AjDBCN
+j0gZYI
hBotjUU4xMFwcYyDHBOGghG4YWgTlOPiI1hAuqYRjiUHyxq2MIcz/s7BcF/0Ah22uLQ1nv
+GLkgLg
Gw0nBnWjPA6G66IdKgkLiC9bWpP8otUE3YY3iMFwYqjjGSl/569dLoBXvFilKRGAgV86RW
+RcmhxE
L7k3nOtOZyCjxz9u6DJ+YU8BPIHrRWWJ03vtzhqvxDFQhgI0pIoSql4Nq3jP+4KKN8xkYa
+ACEFCv
joRpVjAo4szWawQFDgABA4RAyw6y67dH8LM2z2ACMbpAdE094WT0wnglmcYybKuFcGi1Ch
+cwgeqT
8gpsCDodxPi6fgEgDGk849JQ8Do3SfKNZ7gTHcCOIlMuc2qKLvcV1Ij4YY2hUIIEwJ/bwP
+0umv98
lLoTuosFQK95/rHL579zGYXe5iukAWNyHCMAyp6pLbCx3Oac+LlOCcDPZwoLYsjmXQDgdr
+C2wN13
9fL/TCF8USGAVUGA0XUVBhh/BzgVCSgVDRiACEgVBPiAspUVFKgUFwiBDNhd97dYdvYDIl
+IGGBAW
wqQIFLAHjjBNdnAICSAciKBnUxRn+6Vl4dQDjzIAEjA4eqYQM4BwwWIL6lA8SBEAvnAN7n
+QNxYNP
jtUMhvYNuFdjEjOEl2Fa3xB3wbIOy1U8v4AO7pQOwyAxCSEAOwcFsYBsAqEL6fBO6XAHWb
+hNSSEM
vHBp0YBbU/h0wbJrJCF1bTcMR4EM7+QNv7BNU2iERHUOAIAM/mFHhr/FDpwkMc7AdUbmKu
+vge8Fi
Du/0BCxGZXBHa95md1Q1bqDoHc1hEM2xBIgQHBWQKt5EAI+wCNK0VoIAeDeQCHn4IHEmhQ
+EgASdg
g2EBAjGygwZRPADQZ1CQDOrQTcPAhVE2ECIADg7WScZwdevQDWAYhQ4yDLzwTkH2bb33e1
+/YP87H
HKcWCyJWEtTAdRL3DaNYNwPxCsIQfe4UDmsUALnmTng4EL32a9skbMGyDLu0VeHgac2Gfs
+vWj0YQ
LLFAatXyflAwbQghDAUZC9xgicGiDNKwbdpFVN72f94VjOBoPB4ZjCKZYR8ZZyQ5krxUki
+qpkiBZ
ECuJkt92/pIuGZIz6Sos6ZIfeZMno5MxqVUw6ZM1mZI/yY7dhDUOMwNLkAg3AwEJwABuph
+6BEAcN
RERtEAO/QQYksG/WOIpI4TQ0oHkDQAWDU3A5dxk92FKet3sCMQyUCAXXsGAZsISXMQ3b4E
+7JkGBS
5GaX4RjdIA29ZgR8qGVb6E7bEHwNMh5jaHy0F4fBYmTPppagN0kHGSzpoAuO4XQwZlRHwT
+RT949W
507eoI7jMVvhYFu1doiJqAvs8FvpsA5184hEpZn2NAzkYJfTwA0opgW90FSOI0xxN3f2VG
+W/0yDp
YhLFuXsNkpzGeZzDtJzKWZbP6Zx1p2XTWXfMeZ32hJ3W/hmd21md2emdxkmc3NmcQxOc3W
+me0Ame
yLmd6fIwADADTDABEtADaoMABfAowsQAMbADkKCCkZAII4ICzeRLXEkSSxADE6AqJiACFn
+ACBhKA
o0iMttAL+OEg3KBbsMAOg/EK5eCM+vRgAPALMPZrLTl7QfILGQkF1qBcexkA3Rgs2wBTTm
+EtxecL
rzBJaQij6oic6TI0wvAMnpYM1HAZ9Xhb2ScQvUYOMHUZ/AgFgBh5zzeZULAN60CQ7zQMuk
+CRsOAN
C4liRoB9SVEX2oCh5BAAyBBxz9B/4Kh/UMB/Hghu3xWmbiansjWnQziBwsdNdVqnHYgf8W
+enfoqB
gLpf/n26X3JaqHh6qHsqqIj6p43KqJy1qIoqqJKqp5QKqZcKoY86qXQaqZfBAEtABV3iA8
+HhAA0A
gyXBBBEABo0wTW7Agljygv0zg1gTTgRQEjPAQj0AjMHYNT5YjMc4hAIwibaVDM5gaCMQlx
+8qAP70
TollqXaSX7f5TtqgWAMxmMECfHumc0qFbAFgDJMJC8vQhm4orEkxph/nDZdphzGmXw8zdV
+8YFn7o
TqtkJ3fgDDAGfqj5TscgDPi6L9dwSYMBm1AQiS45De/wW8ngC4NBDkG6a8K0iVE2ZcIpnE
+PpKhNR
khgLERrLS2HoEB27ECEblCBbst0kGBlrsuKhsgtR/hcLugQm8J4gEAgiggIEIC7J8gU7IA
+l58Ip6
0AaQ0IJYIlfXQpLM4RgTAANLEBZ3ZgEJSpMCQYyyQA7ncA6+wA3qgA4e51qumX8j4KHMwI
+TZYAzv
5AskCHr7Zi3H8E7qEIgP8qJTCmxUdjXj2HO9wHWxcIw7mRDSIKWmR4/Wd4cHsX1wQBJN+g
+za4AvE
oEjhgI7JYAxNlX7uZEjwoIwZ2lQAwJAOaRC+MHPWkA5ABQDjwHVawAuFVhBsagSyxJEcub
+c4+bqw
K5NEKbtA6boxKYy2W7u0m7uzq7tEibu7C7y+GzEvybsm2bvCi7z9k7zCy7w56bvKS5OjSD
+Qg0ERH
/rEAFqA2EEABEnAgH6AEZTAJceAHfuA2iyAHlPAAB6AAjVG0XDkYMzAq5PQBMPAD3COejn
+GWH2cL
0NC/0TBrBVsM1IgU5dBgyzoNYwgFFzk0dSNMbjYM1cViU4StUIAOMHWYQZKYFQUA6jBh0Y
+AN5baO
Z/sg4gAN8biumbmZ7+pO+iivl1ZT0HANRgDA1rAMS4qI/Pp8o4uQNgoABJt29tQN7+Bxsf
+AOJPgN
hCh33BCxvklrdOeJVfadBxLCzjnF5bme5WbFx5mH32meXCydVdzFDozFyKnF5/nFZJzFYk
+ydaEzF
ZVx2a6zGYIzFbXzFcpzGttiic3zH5daeU8QA/jTABDryniKgJvVpAQzgpwzgAJVACZSAB5
+BsCZeA
CSNSAHxVLS3JNAuAQW3GRXkFWIxKEMT4WdUQmhlWDk0gl0n2TsRAjVQGklK0tu7UtlsFt8
+DXXXRL
WiWVfD/oDDwqnbKhC1IKUYA7a3TIa6DFh0zKYbKQpiVlpZN7Gdj4ceiQDa/AkF+KgQLQDj
+kKBbaw
C8cwDMMAD0ksC8uwRwTBpm4Kp6x7pyRZofenlocaz80Bz/SsVfY8z3Qqz+58z/i8e0LYz/
+Psz/rM
z/A80Pp8p/ks0P18zwm90Act0AYN0A390Jv5vhEN0RQthGGxBEuwgzMAAhhwsxTQHh5wAk
+rj/hhB
mwma0NKbwAmd4Amf4IKo6s6j+AUYwAR1MQNi2QBCw0vCpL+FBXLp0AunGxavwGAOxqy6EM
+GyEa0g
WRcuRq2RFBsU7IUYi5hKVVECQAyTWXpZuJfmKozGoFvW8A4obI8tusLBwg5wMB7zalk1FQ
+7D0A3E
hcPutFmzxQ3h2soEa7AgOVjupAXXsA3bkA7oUA2X5oUP08QTC8WeeDIxmGEi7J6S7ZJcOd
+loK9k5
KcKU3dmYDdrHC4afjdmmDXqiXdqXDdSpjdokO8KqTdmnTYKtTduzHdq3bdurrV98MgKJXB
+IUgwEm
EAALkAABZCImcQEJAAqhIAqd8NzPrQnt/oECtGO0LToDU9AD91sFlKdFsTsQo6wFuGcORs
+3PHcoM
EBC2q3ZpVHpIW1ktdfFog21IwGPLcjt7uVxhIvYK8ECRUGAOTda7ztcNvOBpX0qkgduuBk
+G4httT
ACwL3lDX1Cm5wdJkTPMNniV3rIZim2u45IB7n5UMxYC6Kaq6rAun0Nu8xSu7zvvdwyskUJ
+viHavi
Mf67Ky7jr9vixgu8NO7iuKvjuxu9QI7jrywQBAACQsM0cyYBJjECS7kHWxIADFAGo0AKnS
+AKzv3c
paBMNxAnggiUIh0C28QAMMBm+BvUv5oM7FCbXSea2ZfU+fShYZEN3QwF1NB8fFehSPEK/u
+KAjsrA
h69CwYUZdfczhrFgozOADGyOauHgcif7IJNkYNsgDmkdLOPQ2GzdYfEqAJ/Z1uwAY9AQfh
+yN18ES
ryWxDhH3BMuAdpp5GReaYhUJVI39m+IA2VGsxvA8xlyc63TVorv+xm/M687563dM7Ggs7M
+EO7Gps
7HqM68qOyUxc7GsN7GjM7Lru69Mu7dFe7Xey7c1u7QfS2FWwq/k5BVMwyGUlAw6QAvZpAq
+BxAJ/g
CdCN5aJQCpRwHU5ZoGKd3U6JFFTwLZpqEMSYDE8gDpGWDMSgbSQ5AnH+WJ3EDci1wA5DXs
+n4Ts4g
wW/bloXJWVVWfMjmGMXQa9GgC8PU/qOOcQfpcGnnjOCzpg4Kj4/JzBxN+g6+cG0VxgvaBj
+wUDgXn
Z2gI7E62gA5eCl3CVJqw3pD2144pugWWyc7gBpkkuI72DHpSD5mVDZlTH/WS3cdb3/Vej7
+ZTn/Vh
b/WYXfVXb/aYTNlo//Vjf/Zffydq//ZaH/dwT/VyH/aJMwGCLBAzIALjxMAMEAH1FgMMMA
+mVANPP
neWdYAqgICJibtMDwQMNIAENA8gxEAKuwsRCHQ0un8AW+W2HVA7Kqt6DMQ29pgWwh7n5VR
+LiUJdK
VbggQ8HaKhDIcAy6cPtMNRgQGWLu3Q6LrgVGQAxZKIDd8AuzcGnK4AtT9HwwxguA/s40r0
+AMkbYL
ssfpf9gOviClsKANCvUqpA4FX+jAw6D97mSwg/ENUgr86LD+7L/+6DhoTEzrtv6JtD3Zjf
+3Z9i9M
+F//y6v/qJ3/ACEgAACCAgEIREjwYACDBRkyVIhw4MGIDysmdNhwoUGJAi5O3AgxI0iODz
+2O/Hhy
48eULFF2dBlSpcSKMmPCRElw4IASH04yUEJigEiCIRBBSEEmERlMnjo9hSqK0ygIEErMOG
+jwYYAG
PXwO5AGjgQmFBVWWBVAsGRQoyZy9+rWNLRRry9oVLFgOHDO+wABMPAdrrhYjy9Yhmziwnb
+Z0guf2
Qvz3b4Bvz+aiG6bzlzoj1Tpz/hMmYBi7ubHg6RTGDdpcKNHCSUNWttsvbui0zJW1685fgQ
+GMzIXl
7RvBbu1+s4WlTXIAYazffctWzHHbYd0GBgiQrRfrY2eRcWM9N9o4nQG0xZq7Tdo39u2//d
+J2HIqR
4QRfhZt7TZdH/hT7/88KrQDLEuAss9AqUEAEDUxwQQcVHDAiAyM8sEEJBbTwQAg1vPDBDh
+XMkEIO
RQyRxAk9HDHFEj9MUUTJAJhhgSU8CmCGCTCgQkKGBughAQjKqKCSUkQhMqpOSLkkhRRgqI
+Ikj2w8
gQesADBBBBgmwC7LxDqqkZpo2EqmFwC60aWa0tSJzawRruCLGb8OegUZatAr/u0acpzBhh
+ptltkm
mtvYsoacb14B8Bd00hsGOwGQKYY1I7xxhhw655vmFYqywcbMOu+khppe3kmnGmtY42WYVy
+DyaJfp
YiGnF2p2UYa1dHTxD5lR2RKum2Hwm+uZb/qTk7XMtgrgF8vCM2KcgV4RRpk/tXBmmhmmpV
+aAV77h
FQotdjlVoGVKW6YYbMQtRhtuhrtuuRdNEoldnXByl7et4KVJXozindekdy2yt916T8KXXn
+7ZZRfg
egvet6F87z1YYIMHdnjLhf2FWN9+90X44n4f5tIEGi4oUAAGeugB5IgoYiCGG5A6xRJUQk
+mlyKc8
0aQqVRgYyOAFYAhhhod4/jgBAwZCLhC7DdViy5ZiPHpFnem2AI1pAfRqExj+CrzDGVvCg8
+KWzpL5
czByElUXu8oQpfEVXbaeyxZbwoZlF6MN+qUXTVlL5uvpkHtGHGF0Wuib1eayJopqJoUClm
+Jiu665
ubz5hTlfvmRr218m0447szwSxhfE5zMGO2F0mc4cabQ0GrtXpJvLiDTvI9yWaqKZ3TNypA
+GwP5DK
2h1wAXt/ccPgFQJ+eN8hBL745I8nXsHlhTc++uiLbx4t5a3/3fnsoX8ee++R3/57Ag+qoo
+QXQzhh
AqzSTRcECxxACgFKVrmkFKegKgUpCnBOV4APaCjBAE4yAALA4AsQ4pJA/mbgJbZEQx0L+Q
+UvHGMN
dIhDIa9YU5uaUb1fYAMat+JaeKrxjmNMpFCHYgtmypK1sHFNGXc5S7GwYY4QhjAW3lhHaM
+5SIGMM
roZaKFXODoIM59wlANPQxnSqYQxkeCRYcxmGRpzIDhBCoRraKJAwyMEayP2uaPDYIqB8EZ
+oAfKuG
bDGCL8qmrgTKJGcI45Ib4eiuNsZRInOkSR3pyB864tEiXPJjSWBix4nxMY+BdKMbDflHgg
+2yj448
ZG8gychJagVGPDjgX2ZAAwwwgV94EcAMqPADIHggBVUBBChYsYlQkGITmECKARZgyQtMoA
+c4U6AE
unIBFAkIaW15IABO/rUOGrJFFsvIRlao1pcXnSQbxGBHNKoYHlugAxu/WqPZjgUFzFjkWs
+v4XOLM
QY3rZEkh0zgHOeRjQ3Oo4xeWkldihDGObexNPOGAx6mW4zi2PIc/vyDNXMihi1Nlbi7HsF
+4AXrGO
tcylGuQBwDcmlQxfoK530ygGCLcRG9idEQrQIEbuKAI9kpbUpCdFaUpVulKWttSlL4VpTE
+v6gRAM
DTsj84pZ/jiZAYAgBoggAwKq0gpXsAIVmThAVcggAbNUQZe4JIjHMLCEyZhzYybhhjJiEQ
+tlaMOc
AegFNGwRC1uYI6SEotoVrrAIGglxIL8YBy/SAY2tjrUa5mBHL/yW/jORRnCrsWAHHK6Gna
+xtwwhu
SwY0eDHGhITMaK+4AzfIYQ4jJGOssjPHM9RB0Kr2hzcAGN0uzHE4sl5jG8aIHKqGSNooOO
+NyxBnG
YbdajWLsBhnj+GssBKulti6DtdvgBmh9MdatvkOwRGsQRHSRjlhEwRbJQNcucus2t9UVHd
+LI5mQS
WDBFcReQ3/VuIcPbyPBKsrzz2u557wje7Zq3vRNTb3ffm975ije+8XWvfMdbX4QIpAoiYI
+hAJHCC
EXzgZAbrLAEpgAIHnLIMpyhDVSCAAAkMcAk9qDBvZoC+EVQBuUbbUACOoQ11OEMb66DRX7
+JhDHW0
2BkQFcAC3CEJ/hqPIGTvEqYT26GLEreYG8eYhqKax74jEsPFxLiDCRv0DWL0whnUkMZr8U
+Kgdg1D
Gtgo8YuHgRgQA64hfBTGMLhR4mKsYxq8k4wAhNHiEutiGv3phi96kWVjtIM5x2CzM+5wY9
+54BD4u
HkdmpmFkFw/jbwntzy98kWVnmCoA0sizMyTtYmcYQ7D+wbRMNb1pTnfa058GdahLagIJgK
+SAVGXf
ZABnUSpYIAkIOCVSJHzAAAxgCSSgwu4+oAQl4AxE4cX03AxCKD5fkNgxzDRD4JmRkc4N0w
+xCM47h
2RshEs9CumP2TDK07S+njiMjHam1vMyRor0Rgc1e9kIiJG4M/qWYJEKeSaYlmV39vhe/9c
+Y3e89L
XnvzV1H0va++AV5ffu/33usNeMEHvm+E9/u+uzNaDzqpkWdDJMBaMkEcECFUJVWlAVWogi
+0XsK8B
0AAGM+rl93pHcQ6xm8rVS3OCRJrqN/K5aM1cCIhvriVrMy/exd5KebR9kngvR7UaM97VHB
+ttLzd7
c0bnefMmxNfcpRiUzxZ11rW+da533esoNe9BTDAFGIAgKzsVYoKIhZ0PtDrCVcEACEowAl
+yKRAQK
mMAAqgri8ja23A4ZH7hPlmbtWgQk6Ro31gVP9LbGfMp+743Qqwr4w8Mbx+qS+rc9yzw0Z2
+lF1La4
arcUPKoT/g3HjY88Sf9O88IT3N/cTbjrxSvw/S7c4Q03uOzza/t79572v4c97nm/XVCe5A
+NdYcDV
P7uu0U+rRk7FQCAesAe8fwArNBJAWGjAAAESrcvCI0kzv18hCSE43NQmnpBXbfS9qzorAA
+M8ghDk
L7Wv+vvmDkl5iDLknNtEkgbiO2EzGM/CPqgTvPTTnZvjo9SxqPATqRP5ugiUwAmkwAo8N9
+5hgAaY
gpEjMs47EBO6DqcigZMzgfUhiBmoggZQglkqnvZiNmFTshWhkLS7vItoNhrcvPgjvR0ypx
+i6NnDT
l6EjkB36ss6yPMBTCb7anLkZP+Urj+X7QeCpv3dLNgCh/giLo7eMQRgthIktZBh94UIwbL
+iEsbiI
KUAvtBg0TIg07EIz7Bc2FEM41Io2lMMyjEOOscMvXMMx3Jg+9EP2A4ALQD4HDImLq0HMmw
+Huc7oP
6AEFoIIpGcIQO7z5a7fBo8TjoTqsczc2CjDGQ7wFVLJy6rJ2CTz/sJCg067ymzKnO8J4Sb
+r3uzmY
czb4ez+os6qmw54b+w+r08RM453k6Z0mHL9RBMaE+h3qEcZgLEbnUcZjNMYnfMb0c0ZmnE
+Zp5J5m
jEZodL9fzEZt7MZt9Eb9+yOBYAAMwAAeyCPCaxCNEMBUZMIZuIAeiAEJIAuLIsOOgDyd2x
+2iw5Ae
bD3E/sM8x7PCHfrA/uHHlXCsxAg9ECS9VoQ/iDs7xfNA+wuwX/O8VLQ6LBw35Do9VUs96F
+m9LMTH
ekug3StJkzDJgknJhltJlCTJQjpJlZTJ/nrJkZzJhWlJmiSYm9TJkfTJi+NJoPxJ98pJoU
+TJq8GL
DIwBdGw2WuS7wVLFpSsQBqABH8i7Trwx6vkeqwO9SBRCKNQpYiQKmhPFcno68cOQ+RvAjJ
+w8qQNB
hVG/zus/R6pIbpw8PqtIfsRCfzzGBNS8r2rAA+tFCLTAwjTMw0TMTbuOC8AAH0A192tBrg
+RIiAsA
BigBBaCBKjjANPOuF+SrGES/SJQ/87NBgMHBA2TH/p6rCGeztp+ztqOrRRaJxbaaF3D7ts
+R7PyZs
QcHztpZDoE1EwqaUt89iPSLDCPcaCaKTr+Rktpw7TotBTpsQiejECepcGOZ0zumETu3czu
+fszjJ0
iO9UTjAUz/B8zvM0T+30zvMEz+xUzvXUTnCsgimwAAK4Pv9Ar9HjP995EgYYgRigARM4ER
+ncxpWT
wqILntTcyF5kvf7yRJwLzZ27RVK0RKV7TYX8yqIrJ89yxZWDRYqrvGR7ugaEyKmrxV1M0M
+HkzWW0
Rrts0WT8xmE0y26EUWp00RbVxhrF0XBkwGoMR3CUUR8tUBb90SDV0SJlyKJBiB74gQ10K1
+PUwXYU
/rK58U8YKAETYMCo6ztU+Tt1Gzy4JJYrdJdJnESZG84vbTwlDDcuTb0p1ceGPDpSLFHN40
+3w8bwB
5S2MXBdeLD281J030sohTB16a709vDiftJeTpEnsO1SXZFQldVRDhdRFTdQ7VNRKHUpJvV
+RHjdQ8
3NT+wlRHDdVFPdRRLVVOXVRNnUlMXceIKCAfALDlU8jTkyKZK5oZAAF5VJ934chAhTnJvM
+WzG7rr
OMhyq7yxLJuydD+81EFLbM5OXJe29LK3VMj9W7/Io8sQCcBM7LNwI867ZEa/TDvAtMere8
+DNlJ7u
YTqYS9fwWVfxYdeJ1Ep1jdfhuR54nUh5ddcQ/ttXD4TIfr1X7QFYgX2FgrUUSwEBDLCAW7
+KPg023
gv0LiF0WYSoLS6GCEzg5YZoIg+VYYeLYjoUng6VYkfXYg1Wohw3Zgx3ZlP1YiG3ZjzW2lV
+XZkx1Z
1alYiSWel5XYkD3ZmfVYjaXZU4FZlE3ZZXFZ1dlZmG1Y3gHZhtWnlr3ZkF1ah31ZndDZq3
+VZp1XZ
kqXYkt1akZValv3arPXargVb+9BasyXbpvXatXXbtzVbtYVbsZXbuC1blpVblT1brqVbvA
+3btPVb
wHVau2XbvS1cWNgqxE1cWZgFWrAABXAEI0BcWdgqWbBcyo0FxIWFyU3czc3czZ0FR5iCWn
+iC/tyS
hc1FXeLKrdX9K8yNhdPNLcWt3L/yXNlFXdpN3Nf1XNbVXd71XdftXNnNXdaVXcqFBdjtXN
+V93coF
3ty1XM1dXeTlXemFXuj93Nll3tW93c7N3OFVXNeV3ui1Xs+FXc79XcyFBVtI3/VV3/Zl3+
+idXtZt
Xuw13fqV3/vFX/ud3+WF3/z1X/q13wDm3/4V4NbF3/2dXwQmYAP+3wF2YAYuYADGXgVeYA
+a+hUmY
hAtmgwzO4FsogB9QgDSghAu+4A6eBDa4hRRWYQzuYBK+BRwYgRO4hSbABRRmAxS+hT1Y4V
+u44RP2
4Q3eYB8u4QzGYSK+YRLeYBXm4STeYR7m/mAlXmIoTmEMBuIfBuIjPuESlmIMnmIUFmIW5m
+EVZmIN
dmEcXuIqDuMWvuE1XuEs/mEiFmMpVmIvVmMsVuIsJmE1JmM2HmIWxmMONmM95uMUxuIOtu
+EwPuRE
9uEvXuQkbmQOfmQNpmJIduRItmRLDuJMpuRJlmRG1uRO/uRLDuVQ9mROFmVT1uRS/mJSTu
+VRNmVM
fuVKdmVVduRW3uRVjmVTlrBdljAVAANJWARVyIUaiLWOk7BY42UJO4BTAIMCmIQkEIJTku
+ZkRgpk
puZrrgprPmZk1uZsxuZqnuZwxmZpNmZjPmZZ22VzpuZuRmdZUxJr7mZuLudz5uVp9mZ2/j
+7nd1bn
a7bnbcbndebnjgtnbRbngm7nb0bohFbohWbohnboh4boiJboiaboirZoes7mZd6DH7CARM
+AFIahn
eOZlBDADA3iEAgADD6iBdD5oljZod07nB/BnmV7neG5ngoZpl85pjE5mkebpas5nnZZneC
+Zqni7m
m/bmdC5mc/7nfq7nbObmgAbonRZndP5nfr7npxZpnN7qrNbpoP7qe3bqnSbrsvbqs0Zrex
+5rp17r
gybnlmZruEbqrg7rnG5rugZrsZZrvD7rqEbmAyCDR7CAjl4wISDmqpDpB7DmMvAAMgiEk7
+6FeDiF
A3jnXVZsfYZon05mxb5ppk7qfWbp/oiu7NC+6NI27dNG7dR26Kse54Vm7Z527dZWaK72Z4
+b2a9iW
bZhW69cG5222asSeaoBearRGaIN+adiuagiQ6TJohVuwAI5uBgoAgiaogBtQgTLA7huoAD
+JAAQPY
gwIogEfIhRtgBt4WanceaM3+bNxOarOW6qr2adAGbdWm7/q27/vGanIu6MrWb/3Wbf7u7f
+Qe6ABH
b4Em8P7OasxOcPlmb+T+6Z4+6rGebXbW7LaGcH2+7QcfZ/PO57em5sRW7gcQgkAogMEebG
+feAzDA
BVwAg1uQhwiwAFUogFvIBTNYaa2uadHO8fYm7Zo27tYe7X2WcPwm8iI38iNH8iK//moK7/
+BTYouD
ngcooAcIiHJ6mGceP2u2WHJwnm8cV+pufvIG32V6gAJ7gAAyN3Mh1+01D/PgbumqOIAmQI
+STTgSO
/gGOHmxVSARnnm4hSCrO5uvzVmu3Hmp8ZvCoPm9Bf2qs1vAkd/RHd3S2jmv1NvC8Bmq6Lm
+q+rnS9
rvCQtvTkToE2r+YodwIIsAcoKHW37mtvDvNy9uz8ZvRXl7Ann+8IdwIomIcUuPVcX++F1n
+Kg9nJe
pumqMIN4AAIKiIAIeARll+54MANmMGp1xnAO73FD7+fR/m1gd/PVVnNI9/Zv/3YmX3QsJ3
+dx3/Zy
P/cHp4dSjwcncIJrr4d152V3/m93CGh1CTv1KfcCJ4gHfXACL5Cwdk/1qth3fYDpdS/meq
+D3XXb3
gKcHL0iBdtcHL/CCeKAHg1/3eNBmfwd4f48He4cCr1YSf5/yWNt1CJD4XW73kpc1hNeHi5
+fmW0f1
j09wpB723g525dbmm5/tNTdwbJfrN+908/75bP/seD5qcFf6pVdt/xbrCHd1v55nbHf6/v
+bsIMf5
Al9vrJdmtrgH1kj1iOcC1riHWYcCfAh5Wj9mUqdyVJf5auYHKMgHpHCCfJgLfBj4No/7ub
+CHeqiK
Nj/5W7f7eRB8tGeLd68KJzD8Mj/1d2/zadaHxcf7xMd1CDh5lB/7ueAHs8/8/soH+cPvct
+0GcTEf
dweHcB0/fXJ/8y/3eSB39ZzXdqaX/dkvbWpvdNIv7thm9G+ei3yYB7uHAoOHALTHB3uIci
+go+1CX
+3kA+WRufFOXcgiw+1S3+32AAH1gCy6Yh8zXBycP+bbH9ePnAqTQ8lMK/OzfB5kvfsMneL
+bw/c4v
dVFHinhw/99nCysnc+ZH81NCe98/dSgACH4pIEApOI9LQScp5hnUB+Hhw4EQJUKsCPHBRA
+gDU6R4
gDGixo0VRVoEKZIkyYgUOXIsqbJkSoomNVo8SXOkS5AZc/Ls6fMn0KBChxItavSozpcyWY
+5cmTLk
0qdMYUptObGqxKgkDbZk/sgFwj4oXOJpjFewHkEoXjgWfAmBoUK4KfhBmQdhUUGyCO/RDP
+s1bQov
UPDV49gEHxR6aSE6qZuicb6HjaGQTZEv8ULHkhMCtsjQXsR79vhBaDzvcV2wYslCMEs57b
+6H91J3
bmn7Zk2cVn1qbcpSptClOW+rXKlzN0ykU3cibe78OfTo0o8CT8ocN87cybVXx279unacBZ
+vQrNfW
nth56uchdrL4YUHj6N3LdQ2Brt2069XHX4weSUVh2dWWRvSkZppGCGoEV1pNUISQe/1lNd
+4B2CGI
oFf2rHeZYhIqSGBuxvUWYlPhBWXTRichB1xW2yX1VE+3oZQdcm61OB2O/jnquKOOy0E1on
+W/+ebb
iFoB+SORK9oGInxQQIBYQVFyRmAKIErEIIMQIITEZfoEJiWYTb4FhXsQHIDagE4OZBqaAx
+mYHwTz
vccSevRUqeZNBVVY0oWpXQbmlE5udlptNdKUonffmUgiVdS5tFt33V2FYqIZTVUjjIbyuC
+mnnXo6
3KMuVlpdpDyVuqii4MHWl1hjcuEErPQ4QU9hVDI5kFzzrTkYFJE1eY+ssSq0mF8TIUTEnV
+48JGBp
tL0JEUN2IhTbQ00EutO0EHlBj2LPPuuVrOE6gZaHtDGJnaTZHYqkSVJVuq5N6141qaSGxk
+Qii/Ci
ep1wn/r7L8DR2cui/lONllgTwSEZPC/Cw3UXJT9O0AVFbIJBcc+sCOHTpETxySRnlhD8Gd
+tAs+Gz
jxNEXMbXYk1c9qoTCOVDHkKvhuWYgmw+JOfNEe8DpULnQmAgFD4XJBCbCFocccyDiTnoQB
+LuK5ym
ovr4W9W8qduwU8bdlHW6P/n4bsBlm302qDtRvfWNM6mtW6joyi132/KmBSVXHE0W5cxPz0
+kTlmRC
NNtrgINpV9RQVBgP3oOxZrGUpxkI2tCajVkmenxD2JnClUc+aLP5Ec13ExWWm9+tndsNVX
+JR7Ruj
vjKuyJ3Vlp5I6dwDH0c22r37vmO/a/MbZO5wbyf87rbTDVVb+6in/mxF8Tg/D7UPqbeRet
+g579D2
LTVhzz4p6XPP8xUxSYSG1T/kBfn7eAE+BPrYg8RA+lDf1zzQQ/C+PfdIb4+y5gEa4cSDH+
+Vb3/28
QD2JSE896sve+sA3EA0hSkQKO1XaQhWpsMFuYRh8lIxWFyKrYMo7WfsdClOYow8ST1SpIt
+ULXZiq
GfbHRRs5wJ4U1bWk5FB58qrZCMemQYRxcGtDUhG+zBS74IjNdkJq1/KGGK+q0MthrQNPvJ
+xoQlOx
TYVe/KLACgYp1UEKUVBUiojaZps0zmuMa1Tendw2kx0yzC3Y2dO9TJiQM3ltiHEbIwj/iJ
+spzpCL
lIIR8U7ILyU9/pEo/WoUHb9mRxkGp4QulFUkmyhHVakLd7QCynKIUzdOuo2EvEviIYfCwl
+HVToar
HKUO4yZLTsKQlpSs5Stnmahc2nJqx9MlK33IOkZN8pRXRGKKHpm8Lm4yRrgLHqlupKJaGt
+F4pzQl
IsX2QQtW80ehnBsoi4hKu/ESVcpUFS/L2c1YurKb1KwmLHepy3ei0523/GU7XTSLffKzn/
+78J0AD
KtCBErSgBj0oQhOq0IUytKEOfShEIyrRiVK0oha9KEYzqtGN7hMew/joMDzqUZCCdKQkPS
+lKSxrS
lMLDpCl96UddSlKZwvSlLRXpSnFq048ew6Q0XelJf6pSlPo0/qQtrWlQjwrUpQZVpUKd6U
+2f2lSo
ShWpJT0qTpXq1JxyVadI/SlNwUpUq4aVpWOFaVnPOtOYqnWtU61pWt861J3Kda5sretd3Q
+rXtto1
r2bFK1OHAYDBAkAAhSUsYg2L2MUyNrGHBUAAIhtZAcygsZZdrGIZm1nJElayAYDsZz9LWM
+pW1rCm
fWxjFUvZ0aZWs5dFrWMHa9gZ0PaynJ3sAAbwWQGINrOYZe1mPetZ0ta2s6EV7Wg9W9jivr
+a5hc1t
AHjLW+iCNrrWle51D+vbxr4Ctqz9rWvB+9rtele24bUseclbXtWeN7buvWx6Wyte+b73u/
+a9L37L
217z7le/mvlVr3ojO9jd8lbAiEXuZDlb3duCtrHCHe5wCyzgB0/YwNU98IAljGDIcni3FA
+6tcT0s
3MKOWLICOLFyKXxhBH/4wcYl8XFdzODbmljBIRYthCts48meuMfC1bCLB9zhDCvXwUMOMo
+ZVLOMl
p7jFOqZxiaP84QU/Gco0pnKMm6zlFmMZy1muspStLOYuKznMU2bylsGc5i+DOSAAOw==
EOD
    return ($binary_data);
}

# ===================
# rj_logo_small()
# ===================
# Arguments   : None
# Returns     : Base64 encoded GIF image
# Description : The RiotJournal small logo
#
sub rj_logo_small {
    my $binary_data = <<EOD;
R0lGODlhPQFWAOcAAAIyZgY6bvr6/sre7jZqmramkoqy1l5+ll6SwpqSihJGdnam0t7q8v
+LKnpa6
3kZSdmqaujZiilpuenqCgra+xnKKolZqet6+mlaKuprK4h5Odury9sLGygI2Zn6iwnpifp
+6+3oqa
rnKiws7e7ipOchI2ZqbG4maayq7K4maaztLi8laGqo6ium5efrrS6h4+bvLy8m6ezlZ6mk
+Z2nm52
fkZ6qmKSstbi8qLC4oau1sbS3i5agmqazhY6ai5Gbtre3o6+2kJymkp+rnaSrsLW6lJWdv
+b6/qay
uopqgiZajhZKfj5adn6uys7OzpK22pbG3jZWchI+crLK5n6q1uLq7sba7mqGnr7K2v7+/j
+Zejsqy
lu72+i5SfkZqjqq+ziJWhg5CcjpihmqezluLrk5+ohpGdoq61qqejgo2auLm7n6Spjpuni
+ZShuLu
9rLO5lqKvoa20hpOgmKSxvr+/lZ2mi5ikmKWxk6CspKisvb2+q7G4jZmmpKOhtrm8go6bp
+q+3u7u
7k5metbm8lqOwuzGnC5ekmaWuh5Ogh5Kdr7W6gI2ajJmjrbO5kpymsrW4jJaimaOsubu9p
+pyhgo+
cjpmljpehq62vvbOniZWiqrG4lKGto6y2kp6oiJGbpq63sKuknai0iZCbqKqtl6Osipekj
+5yogY2
aoKu1oKq1kJ2pqbC4lKCpvL2+jpqnh5SghZCcuLq9j5ulnqqxkZmijZafUJypipWgmaWyq
+q6znKi
zo622k5+sr7S6l6OwlKCtmKWykZ2qjJmmsrKylaGuo6muhJCdury+hpKflJ+st7m6iZOgt
+a6lq7K
5kJuonKi0l5ael6Sxnqm0kp6roqy2ubCmj5uoj5ypiJShg4+cpLC2oKGhipajkJminKWuj
+puoubq
7lKGujZKclaKvnKOqi5Wgkp+skJ2qkZ6riJOdho+ciJGdjJilu7y+sra7t7q9rrO5mJyfo
+Jmgk6C
tuLCmg46bipWinZifp6Wim6evjZqniJOghpCbu7KnkZyphY+agAAACH5BAEKAP8ALAAAAA
+A9AVYA
AAj+AFMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGCOe2Mixo8ePIEOKHEmypMmTKFOqXM
+mypcuX
MGOqvEWzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqFZqxqdOnUKNKnUq1qsUTVrNq3cq1q9
+evB2+l
OEnTjlk7t2SqXcu2rdu3cOPGHfvTjpBCh0wFiNPqzdK/gAMLHky4sGHCKcQuHGQtzqQAih
+QBUBSA
FDiwmDNr3sxZIlasCcslASMZgOnJACYF69W5tevXsKuKFRvSTqlDAQCke2Av3oNQp4tZS3
+sSAQZf
u6QBWw6sxi5fGOQQl0u9uvXr2K2PpZuzmpIO9B7+IJHUooiPdB0AdOgQR1pPOW98KS/lbQ
+2BYPiD
EVjjrZTzN78cJuCABBZo4ICJJXjQOd+hUYQkkjyTjinYdGHFAegAEEAS4hz0yyDglGOON/
+jlw581
payxRiv47YGfN+bsMkhsNNZo41SfbUfQCb1cY4qDkiARTgdRcDPEFZH8UMExqQWDAEEfgg
+NMK3u0
Yk0qwEhTjjzDiOOLPOXUYI41+bTYijni/HLjmmy22dBsCXr0izW5hSNJPKGgUQYd72DhJw
+wUdJEb
GLWkZUcvvpiTjzfW1CCPODMKlCNWt/SCwTnV5FPmHqVoYkd2oIYq6qjZbfeZTSlA02A8H7
+yABjr+
B3AACBYCfKMDHmEUM5kS4ECjSSqtrGHNHYOoqWNayCqWVgqD1ODNfcF4M8yB1FZr7bUGJg
+gnQbdo
IlkoH/iABhtqcNBEEzA4YoUCAKDhR26KHJJpPjW8YYekoAX4y7773vILpSf4C441exTsTa
+RuJqyw
jZPqONYvQqT3GxqvWMGBME1wUMEkAOhVyCpB+NFxHKkUm9hs/tohDphj1lLDlghvN4g5wb
+iYysI4
59wZnHBydIsdNazXAxoBHECBMMIcQY7I9ATBBBBPnDJDB5Gdo2a+0MhTSysEFOwitFV6Iw
+0CKA9T
Ss35TEvq2my37fZIpppKk0C3DJKbabTggbT+KLSY0oECEJjxRAaEL0CKacVgkJavqayhqT
+XnlKOJ
JsjVQGaJnV79Czhr6FdKgNiGLvropOuk7ekDiWUHAQGkR8cRwoiyBD0dKFEMPtkQTng2EL
+DbASZg
plJNLdJoMkgv0NjB7y/QDILBLmcH04oQT96CwDklsqbz9txn1fD3AfeCSW5chHDEAY+Rcg
+dfTOhO
OBArtO5HEmucI88gCPwbsGIBj3UCAm+Qxn3ysQs13eINnQuGPIylECe4oB0QjGAEpeCJaB
+xkGBF4
hAb7oZAY5AAEzJCgC1QxDWckBAQSTKEETZAQJ0SQCDnggUJygANmECGCvMDBJnKhEB7k4I
+b+EHTC
QR4IQRNYUCAxqIIKIVgFF5hgCjIkSC4cIMFEoCIhf0gEBF0gxB6eIoKMWABDcADGK4bldD
+1bFkfu
8B16zOIAJOiAKzBwghnEgQxwcF8GzBCL9UxiD+KgDWjoFqfEnIB58mCRNQKZAgRIo2bA+B
+RJmMEO
P1nykltgABE8sYCOpGAXoSiBKLMQkhg4gREqaMMGLsmKNqjgHQ7IBUgScclaXrIdImGGJY
+3gCTGA
JAa6kMIIIsGOOewyEirghRNywQOQiOEPArCkCUCySj+14xQciYEtL2mESLQDBVDkiDP0cE
+kBoAAU
IXkHDPwUiWmOZAFSsCQrnBADkhDBkpH+0EVI4tawk/nvBLHQVRReoQgF1MAQJ7DDIq5hAy
+C47wlM
+IIpFOGKOxhrOnHb1iHLkY89CAEa/hrGi0DKkxOgwBjbvOQcYKEHUNTkk/sQZQkekZNTZE
+IQrEip
n/KQDClM4yYpoKVOLdmOnaBglw7gwU14EA1VCMIIQ8VCHxgRw5ucgAd/gKqfVJETlFoTFX
+OLgTGj
yg4XoEKpKViALi/JACcoFagu2AI7ubqTE+SAAZeUgkt3woMq4HMTOUEj6pRVEwTUARvr8Q
+MpBDmG
L0QAH4NznyGUMBlSKE6jyhrIRmiCgFRE6zKN7NwetKcQZlQzqm3AgRjoJo0XyPQRBsn+AS
+8qGVU/
GWEE9EwdL2qLhREkJBPydMBqByIGVLwjp7zt7R9Awa0YeEKrWMjEQU47ghxIKhfJNQIjLH
+gLUBy1
lok4IpQYgVxjSDchMcBBHtg6DYWc4J5+akMXC/I9fn6mIxjAhN+wEYyEEkcI14gFEyKrO0
+7oahL5
gAal+CdIBZ3MF8+6g1ig4dk9QEMhNKGkPCPBYWJCVwAqmIJAeOALLpRBHeqgREGmUAXkyt
+MYHN4A
K8b61yiegBkdNkY0/SQAGEcCFi44CFbWigVeDlcgU3ABdG3r40iwYseWbIMnYqDZZ0L5vA
+XxKhYG
YN3EaHOXTY7EkiPxB1+CIp61hMX+H6JIEPL6aQMsTMgpBmBLHFAZIX3F53xTJ9ieSUpHGx
+GCK9Tj
ig7hKwhs4IRD3QeEReRGAalgoJ+XRRuBIKAWwbDaLeQgDRchAG4pQEE1WVEFXZhaFyYYAW
+2xEAkc
jFgOyIi1NN7wz1xUYb1+msMW3MGIP5jaE1K4wRZoPAcVRKOZKZjCqUGA1/iawNROQAVIEg
+PcnSaV
I9FQMisFwQsQmBoEblDBsC/JZWTfggfPleZHbnHaa/bPGTQegbd/zQu5WpIRzujud2tJhG
+h48hbv
sHc7RYJuLVuyuiFJC3yx0AZ9eoSf/JzbfQOW0FKAAQCKDRDFFcqGMRCYcLJIgin+AHAIX2
+wkowoa
pFikQS8F/6Ic+OlFXYdMW3ZIgW4byQURtCqAKtDtFtDohRyGXhMe6OHDfQBBvjWbghg4QA
+U0xgK+
Ty6pKajAkjfo8v5wMhYi8/KtPEDBqleqClnuyJSCiLoLzH6CGEDTknR9aQq03A4ztv2SRB
+AxbXjg
AOiOYBonOPM2t6CHt4LmuHPVyQmyvU0jgOBkqEpBnv30DcCiimeC/fnlU7WH9PihFIZMyx
+iSgAkP
6DEDNojDZL5w4f45eLPEGUsizfEkO4CjZhdWyC9E7actuGFuNDmBJ2BhSVjMDZQyzcKIpx
+D16lJa
jUqdwsL9tIm3zi0aN7BkH3L+sKyE3KLaWGBFmQXihD5csg8LsD5tahKDdtB4A1wdC7qhi2
+VJsfvg
OdisMy7Ji2hU+qrEx05/kALOsG/hN1YDcETLwgj2Zl4IcQubcHV+4g6X9A7MRV8KF2V7Bn
+HggxCg
IQ9fIBlgkCZxIgTbEAF59FBkcHHYUAf25z8OFnxjAQ7VQHuJgQH4kXsGMTcpoGFYwA5uwC
+0pkAPZ
F18DsQvq8FpIpArxtgli0H2Uth050A6XFF58ZnVYx32KQV+fQWSsIFwbgQL2xmpTMEj+NB
+A8EANp
Z0lVYEEnYGWWVH8DoWVcRhtf5idEYEaCVAU7pmaBh2Z4GAl+wgpB9meIhwX+cIYQMQCIrI
+ADFOgn
DOAAeOZX7LRnmHeJfzZIoOEv8lAH7AIAcTAIC2YbrjADueM+TLAGkKEAwFBIUahytzAw5y
+BzdqAJ
NfNp0/YwvPeDUkB1ApEDEogFsMBa6ZB8Y5ELgmBJ7KBa/LNgdPGGDqBlkZB/J7d4RYgFgq
+B1H6Et
4Pd1Ted+fmJebOaLOOdDgugnfeAEaTF/6uYzAdNueghvlsQLZTgbV1UFWiVlBGiATjAAY9
+UHm+BP
DMhO7vRwOTACypgLOIBcAiAF9eSOGRhfDleNHMiBm9U/vzAM5QAO5sAxAVAIT0Jxg7AG6D
+AKpycC
daAeSkBHqKNykiIPa1D+DmoiB7sQDNUgHTjhiz64BVIQe1iBA15lBAMgFjyADEkoSrCVAt
+EAXVxG
SDtCSLcQDZSIBXPgVs+IhX4iCNhkOl24S57AAz5kfllZhlQ3cfgSAyqwY+yAAmMBh1sldw
+KhZSOA
TWNxh1jQf9uRFjFwjti4CX94STngBI9oBLxgiMgVCXFXE1iRCUE5AifgDKumApa3hZI3lZ
+X3Uph4
iUBFG4MgD5rwIfkgGZNgDa23EcNACmwgC3oEBKmnIay3hbBHkSmQSEKwEb+APeaggzt4SL
+sIhCcT
MBGoVezACCMmDcWIlLdgSpfUUicng5RCSAp5SZngUgOBfVmIYdQmT2X+dgKqcI5GQATqt3
+7BZxOM
mWu8sI7p5idYRnH3Z03clxj7Z0lWlCMLwAjQlXf7eEnTEAP2SSuwIERiMZBY4IAFcQu5kA
+hjxQ6e
IBYjoJbriSzvpYFMV1/9RF8pQJPyIAcp8AsY4ArpoQRC8CmGcgfoQAn4kILZwASjoHoaYl
+HP+XOn
cgLl4A3ykBgUFgwyuYOU6YN5MAJ/8AeegANucAO4JlUBKXnScJQloHygoAqX5AmGhHOFZC
+rTcElu
4H/+g5XY2GVcaCpeeG1SYG+sEITcQpkF4QB86XNv+HbqeRB0dwqSYpcqkAmeAAI1VAVjyA
+6qUE+C
Z0kxZABFKJT1lAL+h5iIBuEJzTYHfYBOKWAC9iYA7SBiBTF5rNZFmZl5migQHHo/m/UGwc
+AxAJAE
4DAdneUHOzADK7ACIBMBtAAFimAKrYAWzwmLGzomjIQA3rAHirONz7h71aRrbRCsGwBlA8
+oMT0gT
yOBayJkL4IcFkogv/kRxC5YDecVc/WOdfnID2LSNPNONvZQCbkBbG6AHoEGOUeo/utAGbI
+ie0OVO
ENqeW/aetyCPthUJbQALkUCsc0AEdFmA+tl2jjqIX5kCAjpwniQGiYBrrJAIhjQFAchwOM
+CeFLdw
DUeRFGpf7Mks5zAMAbKhu8AiHhkMg0AcdTMJnQAFULAEKksDCaD+DepRCCD1Z04ZMG9APA
+p2QB1F
UjZhrj44VMZAj6mDDGVgjOl1SSDwhBbaklVqSVcqSFqadYE1KV53bWLXe4xQlv8ErTThBH
+yJS2sK
ZfGXZUSVf3XJW3kgmc30l346FlOYazcACjxwiIi5s7eACmKJBVvgAtOQAzlgAA+bB0RgQg
+RBqZfZ
Z4a7ebcgD/KQexxaCiGaBLlRDNXwL2mxohZQAJj7CfNwCYRwBqtXmsGXIwJxB6UwDFjxC7
+ZoDfcS
FhTnqzqla30gBZKaGDzQWq+VnE5Qrb+Zl4SEFc4lnTyUINgqVVxaoNwoT710CyBwjj1nfd
+yRLDyo
Cl41B4nArnH++IzIcloDcAqzEZ861U1VkANigFb+akk/dVU44J1HK6AESkgnZUkCAAuCIA
+h9cAPG
QGPb964RGl9CdLH1tSM8Ig0juxHNUgpycAJvEAet0x4c0QtxIAEX0ACXMMETXAC5oQRkkz
+pqlBa/
UAvmsKvQwHIFVKBm2oOrJgBR5w6y64vImoQAsKRIRmOCUH1RWmlxw2LwG0P39bTFm4leil
+TjawCP
iAXu0F5nKGRi0A47hphtyabR5aZEBadlC7/Emge8IL7VqLZ+0l4BMwVCxXBJhlyGGqcjEH
+VDxQ7M
MKlTGQnqeLiZJ7MpIAQYcC8BA2HgwBHS8ImY0CEnMAh+MAH+1HAJDSDBE6wFcYQNM2LDZ4
+gBpeAL
nOkNCcarEuu6PzgACHlv9Sh3tRtKSJkYoHC3WIACZidxsUcTPKALY8gA+Qcnw5uN64ZG4M
+cKX/kL
znDJRVYFyCaE+OJDpyUIumC9fmIC+guvzgefNDYAAwBdbaB3wJeffipIm7Bq70AEAleQYw
+GUyQWJ
6AShFKsLFUmhF7k4uSmStVALHZtQBDAJHfCRcmAXpnAGhEDBg9wAWgAFpiGKLskdHiyKNK
+EJnJKT
ZjgQPsgO76ALLsYOIHBnGiwNnDxTSIQDbPWsx6Igt0CEl8QI1pqlwZiNQPU9XldmacEMWr
+YBTmCW
HGFIC9D+BzQWuE0MZW6g0HM4tp9hl4ngCXRmW+1wZ/fVp1sMGjzArJa0BTdwmHRFcfiYzY
+j4eGho
mW18qZqpLeXAsZq6C4sErYNACo+2BoOwA52wuRNMyJewDBKQHo4cug4jDtYADsYyCOewBr
+7wgJO8
ixvw0s0aiXwmQ8hwnDAsFrmgZQKQdIOaWRuhC8koT1LMyteYdQPhDNPgBI5NT2KxiMElQ3
+VrywIQ
CSBgfVt3C2IQDclAYwzgCf3TdtDVDqscMDwAAi7mAks3r/yHCp7Al0aQCbIEJ+XrJ9wnrT
+kg25ZE
oGIxBXx52Tcw3MQ93GMIYhLbzd9ckX8GNBnMLFgiogT+4QtfoB4K4InaEM8U/NXzMAGmUQ
+MGtMEb
YQ20tyziwCgaWqYIMdCMwFSFTZV56JS3YJRKCBpZBb+RQASb4AzlmgKokAl9sGRSwN+mcg
+I8LCnR
4AaRAGPGYGcVfdPhZwBxigPqakkbUAUOILgC0dk4cANQlgcuIEbSKttAmwLFJdvSNdNVOA
+WgwAzQ
xQ5Y7D88jQU/RRDOANG2ZKgbkQkuJggOMAVAHuRTEA2ZwJeRMLuU+p9Ojama+gbyQBsv1y
+kaHDB2
YA6q5wdg0AlaMM/yfAnUkADr4Q0KpsEbWg7VQIIXugveUA6SrL+UbHMm7gRaNqYaThO228
+m0W4Au
Fn7+sDACjKAHKJAJRCAIw2pJczACUIR5rUyN80pkrMYLjDACLhYJzJQgoKAHBscKfc4IKI
+ACUpAI
fXC/t6TDcKJtgzgCUoACLtBs6AigxjyPUyAGOTCVWBBitm2A1iWtixeM+DRNkhcDDLBjAs
+AIubA8
/cIDOMxjLtBMERl+RMAMegDtzJAJOCBiFAqhcjCLNTEz5iBzfCYWI4kN6uEPNHAPF8APg0
+zBhFAA
prEOophyB+QNvkC5JyAO1VAKI7uzAU0QO8kMROkG0PUNDi55862kNAV59TmGQb3g7ECstI
+Jw9qWl
HC1/TqDwW7AFUGYELtCcWBENUmBwfsIODL9kRab+Arqg0w1b4bkGA8aw50bADCak4vPob8
+51WgLg
Am6oxTSueU3nCXvOaqqwEaYEXe7gANu4ETzg4vgkuJSqa8awAU8PYyPgAJeqLdBQAzriC9
+WQo/WF
gxyzzlAADwmgBdpdyOqRBPicl9dTA2ghEHbhDXcA124u10GYFtHQDlo1BzfgzcWprDAss9
+GgB21g
xillDIkAeFApvIldvPXp8Gx1RZS5eHowxFHFCrywCTHAgz+nCiq/TZBKtt1bhVd0AswKXc
+agCkt3
21iQ23zmDP54SeZFEzFgy3cpXpoVfAZgy3MwZc2eUpEApf67oeIQ9w9zDqVLcULoL/58Dc
+WQHgD+
QAISwAefcAHU8Aku2wGH4Bc50gsiws+HNDDdTsKlVXNk2kybMMSAy1wtXN9OCQogMAAbQP
+hBfQN6
MAX/V+A8jPzITgQ/X2TugAIAcSLFCYICU6TI9WdEJCwNHT5k5c5NNB4HT9wiaDGGCUFGHj
+rcUMUA
D4ElYzxMNOVWilvRBjwc4YQkKCkPpx3ESZDHJnYPjZk4OIWVQ3aeChbEeTAXszkOBTlLwa
+PKR6pt
QKzEylIrTgS+BmE8McicOQQHb2HEqJWgHQxrvigIAADAvkB87lkwJVcBOLO3oIGzNujiQT
+nnSskb
eNQi2ouNb+FgwIoVg0xIT0hps4XVFndXedz+QqauxIsXEVZmPJ0imol2fdpI1mzM3QApum
+IIPKs1
a7R2klkNOIUV7AJGgiJt2cKuTTtPMdCyPJuRxwIcI9xFYqd5i2wVbmQmHrxy4MoYTly4Mw
+YbliBV
0QhmveUsPSsYjKLhFJPjuGRjzBakcMYE31gJ7qjTTiBiPhgEwSGFGDzRTLJEgjurQvEGc6
+IP+pKb
YiAXBkQOOdhucGAgE0saDyNodrkII3CqkaYss7YarKBb7BAiCSUm6QAAP/zxQy4AAgBHPD
+vkMafI
8X7xBUZoLAQrKSkHmiYTNxjJZJPUTgBFFTe+ZAQolt5ohhIzpalwsahWcgYVJ678Eodpcn
+n+L6cT
E8sFBDBBWMCgNFOYAgQpGEHBgftwEg/RwQbKwQE9rgwzB2eQsjMt3U6IIQccrmRmk1ySQv
+GWGL68
0olcshLDEykgVQUVTKchlZEF/mxRNSuvNCEHhPQEM4cYpqxzpWg8gZSRHEhyIFZGlgWTEV
+WC0y1a
nOQAx6AUhPAGMRRLMojbozQJ5pgAegSAXADuGOhIYDSxNgUEUklFsClZcqzeaFFL67M/ce
+JB30RN
zGq8ihQNGLVo/93KopxWGhgs3EDNbcbU6A0Yun8j7svPjBqTdqtbBsYtrQpRazepggc2K2
+REUTZ5
S0XDQ1RasFzeNqOcBDKnlGEslZjiFI/+kmOGL+LqgFxroIGmHHPeWOwEO87JFmGM57W2ZJ
+4RTfTj
KXmu2uKD1boTtxbFi87ES20uWzE1zZ5RYowb63ZRrxO+MLGCGbPTZIvLzlvhgvva8qh2H5
+YyZPig
Y/vwgGfGTY5avMEAOo5TE248wREAN0i5SsGgBmkEey6FXVopxw7wbK6XseiEi5JevROOGW
+C7Oe66
69wOh53sAwEmO2XWUa8RbRQtCnbt4f0WuWO2Cwdv6pfrLL7biXmHUs3dW5+35Y3DNrtyd6
+0xZ5Ce
x1M4MTV/+eWEX/4qxRVFMCEdgV/UukUcb84ZxA4obc6+74mxxxrdIrYo3VGqeXaq2en+zD
+c3jW1N
SqEbm9m8BSrXUSxuckMgvcT2nJkhDHiGW8ziyDdBhBEvKy16mMNOp7av4c6Dg7BGLZiWwO
+UFsIEn
+AswsiWH+RlkfdZIxRuuRrDU+c58fLNQ9qaWwrURjEZMrFjK+oZBFf6rVuOzXMX2hTis+a
+l5xZNi
olRmMZKVDIvmI2DWaoi44yXvQi4cIfeGx62D9AJ88uoZY1DYxDul4Bf5o5G7zNEKTczvgS
+W8Wd+k
eMjYPbBryFMc2LZFsYilTWKUSpsBF9UuNe4LbibEWu/axq27cax8MdsfBYknLT/lxlsGlB
+3z0gSf
6UXyhJPDyCBKUQpx4I1yXOQaCKH+J7Zf9MIcawCHHFYovdSh8HcNjF0Jqzi7tNSuUpHMXV
+/QCEwj
jixuB7rhzWBGvj4iD4qqBFbzEOmw4J1QTbaD0hvVIjYzzis6k8Sn91YCwzX0kkZ1W2B4eD
+bLsp1l
EOfIR+nGlqZ6pnNGGoPl7UK5tgLyz0YZpKNi0DbARb7OiSma2AQrpTFLXZR59LQgVt7jwQ
+syUKL0
O5HBgAWzPap0Y4Ljny2Vp7AT9KIU+dBWQO35v+MNLiw1aMU5oAE7vzWTbMGTHOBU2DIHyt
+Nk4zQY
7hQ1xYshxYoYq5hjBHgxsnrRRmB0nRiBeU8N2hN2G9NdIxnZRiaST4Q1kmNMF3j+EGjUIh
+hCmB98
4MY3DBZ1Rn+UxhrOIYd1InKVp+xoANuWuEdSr4V5RUslq3nJjb5yYZDt5NtaVyfATbZuYL
+QXZHVj
ocEl8m9ewyn/YknBWa42cZcVrOTQYo49yPBhKXyqa10J1VsMQhreqIEcbqo2pzqTjNBsW0
+nf41Vq
GhaeX8smG0MlSg6y1W7gkWLVUHta2rrxrdnzlvNSdtHovfOa1bPrEWXbP7biM2yVRBS28s
+EicsbN
egO9XXR+gYFjlsOQC3Vl/9BJ1IiGjozkrKh45YZPz24UoENkKgQZylPZis13FyxhqEjGwZ
+UWrqW0
eulpAkc4E5+woBp8JQt1qtX+fvUrKinAQCmCEb6D2NjG/KrICWwskIqwrCKaqEa2omKQGj
+c5Kk12
8sBqfOMpP7nIQjaylItMZS1D2cdednKPtzzlIPt4yUJOypSrBuYhSxnLWybylbG8ZCjfGM
+hajrOc
1exlIIMqymImiZWrDOgei5nLYLYImxVtBMkwutF5SEY3gtEKD0SC0XmQTB40jWlWMNoIl2
+70pzv9
6WR4oBaQeMeA8vBpVkdoQK/2DadZseoBOTrTvhG1rVmN60bPWtSw9jWwhS3rUNu617C2Na
+aNQOtQ
u3rWmSZ2rzXt6VczG9jWpja1R31raL9616Hu9LEdLWtrV1vboqY1qIfNaSP+bKHd73Z3vO
+HNClvs
YAf1Jse9722LQuyhFUGAQr3rve8dkMMWB0e4vfctcFt0QRrVsEUZlGFwchjcFphIuC0qXn
+CO5zvf
HB/4vS0u8ooLPN8I1/jJM65xfaM85S4/uL093nGPl7zgA4e5vWNucJArXOMIVzm+GW7xlM
+/85wuv
eNITfvOOixzoMEc5z5Fuc5TfXOBIF7rSQ65wq+ub6FjX+sFtvm+K/7zsZ9+BkNQuJHqwgR
+IRWIc+
0ECuoqndXGuXiyn8wYZC7OAYUehR4PFerrsP3vDlGnzd5VL4xR+e8IKH/OEDr3jFC0nwdm
+e83RNv
+cdrfu3mKhrdOf95xDf+PvOcD33lJV96y6ve8az/fN0hX/jI1x72jbe83jGxh2DUQRlRiL
+3nhRSA
VxxiG4VgQzHQoPnT2170d++AIloffcO7HvGgJ/3lUX990ldf+LevvPa5D3rVlx/7o9e+6D
+G/+PCv
vvnsHz3erV/69HOf/q+XP+u1bwoFbCMYvdeRKJg7uZA+Rbg7PygGBXCF47MFRPAHUwg9tT
+PA1MO/
zYu/tTNA/Ws/+ju926vA6eu+EDQ9EPxA7GO8DtS/8YM//ItA+FM/6cs/76O75/tAFXQ+5r
+M/AJA+
P9gHWwgG3suCJLiGMgADbKAHP0BCbAADBVCCQ8CEQiiEbdAHbCgBFNz+vNqbPejrvhMUPv
+FzPNmz
Py0kPPlTvyyMwe/LvgtMPBq0wjW0QNzLQTjEvNQzQTT8wjZMw8ErQB1UhChwhUL4v//rO0
+xgA2VQ
BjawhXoghWBYh0KwBX14heXLw+CrQTscQzlUw9i7QRmkPNoDPxTMPBOsu4aAPVzAAhkAAF
+OUAcrL
RO1rCFB8vPmbRPZjPFI8w7WTASzwAgDIxV10vRsUPFu8wMwzhTL4guOrA97bA977v3Wog7
+4bwijI
iwzUwvezvTgMvxYkw/w7v+3zxMizRDkUw9bbPm+0PGEkPFOkAwDwAixYR9ijQdzrEVvsxG
+7kRu+7
xNsjxfl7PjrAAlz+6AB/BEh5rMFXTMHMg0G5eAVEuIYkIAVS2AaIFEJEeIUSGEbzo8BKFM
+fqS78N
nMHV00gSzEReXEdEoAM6SD8NkIF3FJKTNEkAoEchaUdUDAM6QIRKoIMwEBKTZEkAqMlK4L
+6VpDsN
cEm1O8mdlIEw6ACTrIQwCANEkAGgXElEKDyc1EmcRASYxIIRJDycREVyEUgAYEq1M8mvRD
+yhrISo
DDx/dMesBEfES8jOm8UMlECNdD4zVEP1+746rEAwvDwxtD5WvL6GIIaHeMel1IGHIAYhaY
+g02Mp9
tDx1TEV3ZEvCYwEsoIJyoQMqcIg0YElhvEyH8AINkAthDEt/5Ez+XEBNx2wIlJQLOmBNXW
+xHlBRG
wauE2PTM1/xHAAhLsUxMh2ABxsSC39xNrWxNLgy8PbzF5cTBbQxJD8zHULzDTbzCTpzFfD
+ROKsAF
zsQCoAQAx0wDLzBFLFjMDmgI7dRKvJtNdjxFAODMd+TMcQCASmgIHcCF36yEedzKyfzH8d
+SBcnnF
HjnN+hwHtgxP1pSLMDjP+3SIdUTHckGEBeXOVcxFXOBFXewRx9TOdsQCFtDPf/xNlBxPXA
+DKcTy8
hJw9RUDRMaxGGVRBbCQ/WQzMFMTBb4xD6NzI0WsIgOwRU/zPcRhOt4xQLCDNhlBK89xPxV
+PHDljS
y7TQCGiIrEz+zPIEACD9T63sAAVNAw0omjJwTFQ0zX8MSMzUTSxwS85cRVMcSN5sTSxdO1
+PcxXIh
Bi8IToEcUwu10qwUyyjVSvkEgMK0UDd9y73ETpCkxTnUxko00fWLUfRbwTcMyUSFTv0sA8
+TTAFJs
R/vEhU11TAfdTzdtvPVc0iEFACctzf7c1PHUT/asALUDUgulxwplUwu908WTzIYoA3NJTE
+/9S1zN
i7sbUAv1UfHcVDQV1N6szYOcw3skx3B0v/HDS0zUy2EsRxa8RsA8wTIczE891e+kijalx2
+SdzHWU
TABIzArgzPxU0G/dT1IsVwgMS8i0Uzu90EBlT0+lxZlEUvv+a4i8wLtgdU92xVfdHEiDbF
+EwZE5n
9cJHtUs3xMSHXdZrrM6PbM5mVbuGkM8esdLJ1IGTpIOVlAEuDVdu7VF37IDZFFAs0FDhJI
+aVPEmh
TM+NXbzEHAIk1ckq3c3elFW5UMUOSEw/BYAyANdPJZefFZIwkAFUlFVZ9VGQ/Vg6KFIsWM
+vifFAc
7cLr08bJg0cc3UTxy0YZRc68vFGJhdgclUPgpIPQlM91JYaPTcw0OFVyCVC1E1V3FBLuzN
+g/VdkC
HQLOXMz0LAPO7Fg6SEwqqNTE7FggFdPepNd7xdkOpYNxYE3a5Fa5yEXIVVwPndfdXFcWOM
+m37VaC
1c9BpVb+WRTBRKVDPLzF5uvI86NYSLXLX3zDxnwIHh3ThzDc0E1P7pPMctVbM2288XQIWt
+XKvECE
2FRZPV3X2u2AXrRcMeVZu2VPh6CCXQVVxbvc4SXYWX1e3C2DvDBYZCXaapXLii1U1TVHrZ
+28RZ1W
s11YjnxRbHVONiwaUhyHTb3ZnbxfXADaVBxIJiVeIblfoBzguisDLxgH7asEYsDfi+XWIR
+DP/vVJ
Bh6HMEDg+fSCCuiRSuBfxLvf/LVgLyAGRBgHL9BJXPBFzUMEFmjgBO3gMOBfciHhTe3fTT
+1aBO4R
8fxLrJ3UL3xW54xUh+1hyfPLG2U+6zTfQhVO6TQ9U/D+14dtVNZ74mq9PMTNvoz0Ydoz3Y
+TtvNlL
wx751Rc1VEPNQlHcWmuMX3iMUdZlVvAbWzEu263Ny5g8WJHEzg3MO668P7trTQi0x+tEvz
++2WM+r
vx22Whcl3Y3c4ouEPjp8zkUlxyjeY9NFXzL0xOWE2UMtQfKNY2W9vJDty2ycZNhtTlZEX2
+A0Yhe1
Yz0+34bFQqxlXyi+WtUt4ml93WalXy4UwUm0QlM+ZPhdXU4OxdQl31OuZBu8vmRQ5mVm5m
+Z25meG
5miW5mmm5mq25mvG5mzW5m3m5m725m8G52w2gBwg5xwY53Eu53JG53Rm53ZWZ3N2ZwNYZ3
+emZ3Ke
53Tjvud6pmd5Pmd47ud9JudpWOd8hmd2Juh3bueBNmd51meDZuiChmiDfueDxmd+pmiJru
+iLbmh1
Zuh+fuiJ9ueQ/md91pt1UjAFKxgDMaSTdquWBi/iuanluQX0uSwlMouVNukHQmmXXgn0We
+mZIiU7
sAMPY6pGCqvYugif/umYviqvommWPukbGWrGEOr0ai6tyh6Q6RbJmS/xmiqc0iugxil2uq
+flEpyX
RmsJYieMAhikZhuvAmt2Sq+yjrHlemukButVihK3tgzwMhBYUqDTUaGzNqH9+Wu8ZmvLAW
+y2zmtQ
CQgAOw==
EOD
    return ($binary_data);
}

# ===================
# rj_icon()
# ===================
# Arguments   : None
# Returns     : Base64 encoded GIF image
# Description : The RiotJournal icon, displayed on all Tk
#               dialogs
#
sub rj_icon {
    my $binary_data = <<EOD;
R0lGODlhIAAgAOcAAAIiTrNdAgY+a1KmzppQEKzO87KonRKCsiU+X7ZyshgmOrqabnpKQi
+dafEkK
UZ5qQqp1Wm5ajo7W/i40PAdSgK58Ok5igs5fAqWCWzUiGeqqYnLK4iV1pQJucs7OzrVlNk
+qOhnik
yvaEgJKKfmZGamwCQLdnDKKCqrp2Vlubyjhegrp+zgRcinI6an5ekmUDW0wkErJlLYm+7N
+7Kvpp6
Tk1CQJ2jk+T4/q/C5jhmlUtqkuPGpKJqEs2CV1yErB5iVnmDndiNgNFmCX52rrq+umxmWl
+5mcsNm
AneQuMZ6IkYqIi5jjGI0QmsWcCpIZl4WQrmchcV0Bd6VSYa33y1zpxtEbmIDgwhqmFuOt4
+ZuVp5i
TUWHtJy22I2r0eZ+akJKUlJ2mZJyNAM4XuZoAnK66GYfZ3oCYsheAua2tppqnvbRt92Va4
+2atcNp
Hl52fsyqjmMbQF0EcClTeRRjkI3F856KyMBtLSllndmeftRsKgp2poJOfhhUfmKbvbaCxj
+l1psJt
B8KSvrB1R24UOfSYYNR0EWGj04KWpmePtdLOyrC6wlkEWxtaiQw4YJ+Yk2xyjDptogNkk4
+pekoGi
zSJumqTd/k6FsGQEbsZ0QuaISPmtd3xiThNFbU5WWsqa2CVclN6gZuTd087i/lt8oIaWqn
+QEXHoi
UvCOaFcWaI6GyvSRgTVTe69pH5vF7mmDrm+n0wItWP7GmkNpjTlhjwJun6ZqFj4iQsKwoI
+ZaOgVF
cFQOYLbK6pfS/tSHQE6Rv0J0nv7itrVaFt+NWbaWqt5qAjtslcprBs3Ft3Wbw26w3NJtBE
+aWxrdu
CnoOesF9NsRlEUZehhYqTs5iIspyJpqetkIuGqB1pWIyamYKWr6GWp5irxtjkNKWaurSuG
+yXvxZ+
hhZqlp9jL86emsfV7eOme71vPjBejFZTXU1xm4Koy662unwSVOGJbG4DXy5soTBlmhZxn6
+LQ/aF2
Mk96qFl0lmp6rg5lksddF8J2HAVdmNdeBho2WEZWekJfgoo6hj44PCH+FUNyZWF0ZWQgd2
+l0aCBU
aGUgR0lNUAAsAAAAACAAIAAACP4AaeXLd0dOFTkAYN3JBQ8eCz2RtrkrVkzWrFk5ILlj9O
+fOO0gq
Hs7hVGWfHDecxMyxx+IKhStU7uSY5y1dOm99/myhsGWJnHn5OFCApYINPQSy5OSiAK4hiy
+190iFD
RM+Hj3lYXvX5NAudnHwU+JibtM+CqBvxxPBhRAEEmWSvEPkYNcoHFm9YfllClkOHjnyMAP
+jYBwTH
DUU+BIjJRUfrvF9LZIGhp2PVzBBYECHqB41SLgGzjOAYx88JPRlYAFj6w6eYjxDpJiFDZr
+OYHERg
kNCzwIKSAFij+UWbhCMerxywivWhM+WmZiTIRoXwpmISOiTQ4FGYI8YHGATI+v7Fa9VqCq
+dZyH4V
M2dORQ6KIXyk6+cDERIdkezZywWrCiK880jASyWv9GcORZDI4Y457yyBiCXpyNEFIjrQwg
+ILHHyW
1St/+FKJDJUUI4Ac67kDyR+QFLOEJf+pkI4r6NASyRX2UCAGIymkYMg2ZHzYigqwLNHAHe
+584tES
OYSACHqjzMPCAWBRYggsf+iYwh8yxFNAF07IMYtGRqbYAG3oYYFOJDLmQ0YKuYjhiyGGWP
+JLAQXs
Mso+VUDy0R13yNKAN12sMtsstFBgzzLJ5GIJBQK8YkkI6IxCDRukILDPLJ+4c8eBKhySTn
+WTmDOj
PRLw4Q5qsHyiJCIWAEGNIv6H7CMLg5BA0lUXrugw4SxXXDGAL3xYIgMfdwDwizeHPBLKMY
+l4EM0q
s3y0xCyjFNAPPV2go0IH32xgjzu8/LENBYxi4YYN3aihxgwTfAGJkRzcQYc3VaQTqA4/gN
+CHHL+E
ICRrYiDQyTHA7DBDNzV84YQsv9w2yW5sANGJEY50Y8AIHhBhgw0j2OBIDRnQcEwoJBdxzj
+E2GGBA
KLcssMMOUIgDBQrkaIHBGzSEIU8F4TygBQMwVFOEIor8U0MWuDwQSzbhQIAH04KEk0kmH0
+gBSi08
MBOMMkIEU44WuFQzgQL/KAEBJpr08oEdoKxRjh12fFDIM20II4UJRwgxhv4+fOdBgCA0FA
+EyDDFo
AkowwfSgiTPBtBHMMyYEYIcwwthhjDJ8762PNHawIs8DPBAASi+AAGJ1L8ywAsgRxpiQhB
+2ZsOO4
NMToM8YFZxSyuglRAGICPvgEgI8GoDDDTBRHcA1IAM70EEQwqgNiDOvGGBOFMXwrU4gJMT
+ijgTBR
mNAG1xcIIcQzwazBDQQVZF0664VcT8wYZzTeCzfkvP64EBdcYAzdWuAGBjAQBhpkTRr3SC
+D6zvCM
aQhCEHgARQw+8IEzSANyz7CDF7wQBHEM4xZQWEDb2CGCEqpCFepDgTjUgIYgrCEIp4jhKd
+ghjDWs
wxRl0EUaSAAFJjDhCY/YWMc6SlGCQTxhD54IRAscAAdUDOKJUBwEHBZBRVQ4wA+SsEYa9p
+DDRTTB
H9rwgye0gQpdlAEVi8DGC16QRmzoAhtepGITFpGANLjABUNIRR3qcAJrkNEBi1jjC9rxgj
+jEYRGX
GOQL4HiJZqzRAdeIABCQ4Ip6PIIEtnAANi7RjlKUwgztiIMVRmnIdrQjIAA7
EOD
    return ($binary_data);
}

Comment on RiotJournal - Graphical LiveJournal Client
Download Code
Re: RiotJournal - Graphical LiveJournal Client
by Anonymous Monk on Nov 26, 2003 at 04:43 UTC
    use User; (use User; my $APP_CONFIG  = User->Home().'/..riotjournal.rc';)

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://309984]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (11)
As of 2014-11-24 14:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (141 votes), past polls