Merge branch 'staging' of ssh://server/scm/spider into staging
authorDirk Koopman <djk@tobit.co.uk>
Thu, 16 Dec 2021 22:05:42 +0000 (22:05 +0000)
committerDirk Koopman <djk@tobit.co.uk>
Thu, 16 Dec 2021 22:05:42 +0000 (22:05 +0000)
75 files changed:
.gitignore
Changes
cmd/Aliases
cmd/Commands_en.hlp
cmd/announce.pl
cmd/chat.pl
cmd/dx.pl
cmd/mrtg.pl
cmd/reply.pl
cmd/send.pl
cmd/set/dxcq.pl
cmd/set/dxitu.pl
cmd/set/register.pl
cmd/set/usstate.pl
cmd/set/width.pl [new file with mode: 0644]
cmd/show/cluster.pl
cmd/show/data_stats.pl [new file with mode: 0644]
cmd/show/dx.pl
cmd/show/log.pl
cmd/show/rbn.pl [new file with mode: 0644]
cmd/show/registered.pl
cmd/show/version.pl
cmd/show/wm7d.pl
cmd/talk.pl
cmd/unset/register.pl
cmd/uptime.pl [new file with mode: 0644]
cmd/wx.pl
connect/gb7tlh
data/bands.pl
data/cty.dat
data/prefix_data.pl
data/wpxloc.raw
perl/DXChannel.pm
perl/DXCommandmode.pm
perl/DXCron.pm
perl/DXDebug.pm
perl/DXJSON.pm
perl/DXLogPrint.pm
perl/DXMsg.pm
perl/DXProt.pm
perl/DXProtHandle.pm
perl/DXProtout.pm
perl/DXSql.pm
perl/DXSql/SQLite.pm
perl/DXTimer.pm [new file with mode: 0644]
perl/DXUDP.pm [new file with mode: 0644]
perl/DXUser.pm
perl/DXUtil.pm
perl/EphMsg.pm
perl/ExtMsg.pm
perl/Filter.pm
perl/IntMsg.pm
perl/Messages
perl/Msg.pm
perl/Prefix.pm
perl/RBN.pm
perl/Route.pm
perl/Route/Node.pm
perl/Route/User.pm
perl/Spot.pm
perl/SysVar.pm
perl/Timer.pm [deleted file]
perl/USDB.pm
perl/VE7CC.pm
perl/WSJTX.pm [new file with mode: 0644]
perl/call.pl [deleted file]
perl/cluster.pl
perl/console.pl
perl/grepdbg
perl/grepwsjtl [new file with mode: 0755]
perl/watchdbg
perl/watchwsjtl [new file with mode: 0755]
perl/wsjtl.pl [new file with mode: 0755]
perlbrew-dxspider [new file with mode: 0755]
scripts/user_default.issue

index ae974f3daf186b0174a84eefac4d3cad76503acc..bdb912e675ee53dd45875591a799588b6b2c17a8 100644 (file)
@@ -20,3 +20,4 @@ tutor*
 db
 core
 a.out
+perl5lib/*
diff --git a/Changes b/Changes
index 99decfd230576ea987eccd6e474876dc79d5c8a3..f072ce6754552f55375a36dd73419fca7a2c0f69 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,150 @@
+11Dec21=======================================================================
+1. Removed dependency on perl Git package.
+2. Force code to change directory to $DXSPIDER_ROOT || '/spider'. Also force
+   git -C $root describe.
+3. Change git commands AGAIN to work on old perls (which mojo won't work on,
+   but it makes my life easier).
+4. Change version strings to include the perl version in use. 
+10Dec21=======================================================================
+1. Fix the output of set/dxgrid, set/usstate and set/dxcq or set/dxitu to how
+   it was always supposed to be since 2003.
+09Dec21=======================================================================
+1. Moved isregistered to DXChannel for safety...
+08Dec21=======================================================================
+1. Get to the bottom of why ssid'd calls were using the base call's 
+   credentials. This should now work as expected. 
+06Dec21=======================================================================
+1. Improve console.pl scrolling. Split long lines (eg on announcements.
+04Dec21=======================================================================
+1. Fix illogicalities in USDB creations and make sure that O_CREAT on tie does
+   NOT encounter an existing file to barf about. Even though it shouldn't.
+   Thanks Howard WB3FFV.
+2. Fixed a typo in show/registered that prevents a list of callsigns being
+   searched for. Got rid of some over complex code. Thanks Fabrizio iZ0UIN. 
+3. Fix long line wrapping in console.pl
+03Dec21=======================================================================
+1. Move motd and issue files to local_data if not already there.
+30Nov21=======================================================================
+1. Fix sh/dx with callsigns that have /p or VE/G1TLH in them.
+2. Add unset/ak1a, unset/arcluster aliases and some minimal help for UNSET/
+   SPIDER, NODE, ARCLUSTER, AKIA and also SET/USER.
+26Nov21=======================================================================
+1. *Really* change spot display format and sh/dx format "back the way they
+   were. But They won't stay that way for long!!!! There are four (yes, count
+   them) completely unused spaces at the end of the line!!!! 
+25Nov21=======================================================================
+1. Restored spot format back to the way it was.
+2. Added CTY-3127 prefixes
+24Nov21=======================================================================
+1. Make /spider/perl/create_sysop.pl work on a base git cloned tree.
+2. Add /spider/local /spider/local_cmd /spider/local_data to git. 
+3. Make user supplied console width (set/width) sticky.
+19Nov21=======================================================================
+1. Add the ability of console.pl to resize and have dx spots also resize so
+   that the comment field's size will increase accordingly. Sh/dx amd sh/mydx
+   also work similarly. If you make the console width smaller or wider then 
+   spots already on the screen will not resize. 
+2. For client programs that parse the output (why? use set/ve7cc to get more
+   easily machine parsed output), a new command "set/width <width>" is 
+   available. 
+18Nov21=======================================================================
+1. Add a dx spot cache which will store 2 days worth (configurable) of spots.
+   This is then used by the vast majority of simple sh/dx queries without 
+   using a sub process. A simple sh/dx is any sh/dx that does not have an
+   "expression" such as "sh/dx g1tlh". So "sh/dx", "sh/dx 200", "sh/mydx" will
+   always run in the main program via the cache. Certain client programs (no
+   names, no pack drill) will notice the difference immediately. It's also a
+   bit snappier.
+2. set/badspotter or set/badnode will work for RBN input. 
+3. RBN input with invalid QRGs will be dropped with a nice friendly message
+   rather than a scary exception message about multiplication thrown by one 
+   of the libraries that I use. 
+4. Added CTY-3126 prefixes.
+5. Silently ignore self spotting below 1240000Khz (change 
+   $Spot::minselfspot to 0 to disable or some other freq in Khz). NOTE this 
+   will appear as a spot to the spotter's feed, but will not be passed on.
+15Jul21=======================================================================
+1. Fix long standing bug in crontabs that commands with " rather than ' around
+   strings could cause those commands not to work. 
+2. Add CTY 3117 prefixes. 
+15Mar21=======================================================================
+1. Fix DXUtil::localdata so that it does actually prefer the latest version 
+   of a file regardless of whether it is in /spider/data or /spider/localdata.
+2. Add CTY-3105 prefixes.
+05Mar21=======================================================================
+1. Fix DXCron::spawn_cmd so that more than one spawn_cmd can be active at a 
+   time. This affects many nodes where lots of regular spawn_cmds happen at
+   a time and this prevented crucial things like 'start_connect' from working!
+2. Sort user lockout issues to cope with all likely scenarios - including 
+   "phantom" SSID working.
+3. Fix "close_gracefully" error messages which are useless, but benign. These 
+   happen (mainly) when outgoing connects timeout.
+24Feb21=======================================================================
+1. modify RBN timing arrangements
+    
+   There are two new twiddle pots:
+    
+   $limbotime (default 5*60 secs) which allows potential spots to
+   hang around longer to allow $minqual *different* skimmers to spot
+   them. At which point they are emitted. This is to catch the "slow
+   burning" spots where a call is spotted by different skimmers but
+   separated in time by more than $dwelltime - in fact maybe by
+   minutes.
+    
+   $maxqual (default 9 skimmers) which short circuits the normal
+   hard maximum $quality (9 skimmer spots) and $dwelltime (10secs)
+   to allow a spot that has $maxqual *different* skimmers (usually
+   as the result of a burst from the RBN) to defeat $dwelltime and
+   be emitted the moment that condition is satisfied. There maybe
+   a better name for this.
+21Feb21=======================================================================
+1. add data section on 160m in bands.pl.
+07Sep20=======================================================================
+1, Change interface to watchdbg & grepdbg slightly so that multiple search
+   regexes are ANDed rather than ORed together. ORing is easily achieved 
+   already by the usual regex pattern 'PATT..|PATT..|..' whereas ANDing could
+   not be done as easily without resorting lots of 'PATT.*PATH' things which
+   would not necessarily get what was wanted.
+2. Make sure that the pc92 C record only contains nodes and users and not
+   other extranoeus things like skimmers...
+15Aug20=======================================================================
+1. Simplify the skimmer scoring mechanism.
+13Aug20=======================================================================
+1. Improve the (displayed) RBN frequency weighting the skimmers' frequencies
+   w.r.t majority view on each spot. Any skimmer that disagrees with a 
+   gets docked a 'point' from their 'good' score (if any) and have a 'point'
+   added to their 'bad' score. This score is then taked into account during
+   the 'choosing the real frequency' process. If a skimmer agrees with the
+   majority the process is reversed. To see this in action: set/deb rbnskim
+06Aug20=======================================================================
+1, Add CTY-3013 Prefixes
+2. Make RBN more efficient. Start the process of skimmer node performance 
+   caching. Add minimum quality allowed (at 2), which will be overrideable.
+   The format of the rbn_cache has changed and so a full restart will occur.
+3. Collect channel input/output stats. New command: show/data_stats to show
+   them. 
+4. Add local::lib qw{/spider/perl5lib} to store cpanm loaded modules just for
+   DXSpider. This is done so that updates needed by future changes can be done
+   as the sysop user and doesn't have to be done as root. This paves the way
+   for UPDATE.pl which will pull down new modules that it needs automatically.
+   When it's written, which will be soon. 
+29Jul20=======================================================================
+1. Add show/rbn command that allows one to see who is online and configured
+   for RBN. See help sh/rbn for details.
+2. Fixed issue with set/ve7cc mode adding unwanted newlines to output.
+3. Attempted to make the QRG normalisation more "intelligent". This would be
+   sooooooooo much easier if skimmers were calibrated more accurately.
+4. Added CTY-3012 prefixes.
+23Jul20=======================================================================
+1. fix Filtering so that it does less of what it was doing badly, thus 
+   the perl interpreter to do more of the work. Which means you *should* be
+   able to define  more or less any allowable operation for that type of 
+   filter. Which is a complicated way of saying: you can now use brackets.
+2. Regex expressions now appear as readable text in sh/filter.
+3. Make the RBN status file JSON, rather than DD format. In future versions
+   it will also be VERSIONed to enable more features to be added 
+   transparently.
+4. Add show/rbn command to allow sysops to see who is using rbn.
 11Jul20=======================================================================
 1. Fix (embarrassing) gratuitous '#'s in bands.pl
 2. IMPORTANT: certain PC92 strings can crash DXSpider if the nologchan debug
index 59c1255e67dbd429610002c819b96182dbcff84a..f2b9b6acd87b8ffec7cf54c92a237199a43b3d12 100644 (file)
@@ -160,6 +160,9 @@ package CmdAlias;
                  'u' => [
                                  '^uns?e?t?$', 'apropos unset', 'apropos',
                                  '^uns?e?t?/dbg$', 'unset/debug', 'unset/debug',
+                                 '^uns?e?t?/arc', 'set/user', 'set/user',
+                                 '^uns?e?t?/spider$', 'set/user', 'set/user',
+                                 '^uns?e?t?/ak1a$', 'set/user', 'set/user',
                                  '^uns?e?t?/node$', 'set/user', 'set/user',
                                  '^uns?e?t?/sk', 'set/wantrbn none', 'set/wantrbn',
                                 ],
index 65153473da6a48eba9379697e09d96988f488019..ac67b14f81f6b093482e770a66d19416f354e2c5 100644 (file)
@@ -2033,6 +2033,12 @@ You can remove your startup script with UNSET/STARTUP.
 Tell the system that the call(s) are to be treated as DXSpider node and
 fed new style DX Protocol rather normal user commands.
 
+=== 5^UNSET/SPIDER <call> [<call>..]^Make the callsign a normal user
+=== 5^UNSET/ARCLUSTER <call> [<call>..]^Make the callsign a normal user
+=== 5^UNSET/NODE <call> [<call>..]^Make the callsign a normal user
+=== 5^UNSET/AK1A <call> [<call>..]^Make the callsign a normal user
+=== 5^SET/USER <call> [<call>..]^Make the callsign a normal user
+
 === 0^SET/TALK^Allow TALK messages to come out on your terminal
 === 0^UNSET/TALK^Stop TALK messages coming out on your terminal
 
@@ -2634,9 +2640,10 @@ with the USER keyword)
 Show all the nodes connected to this node in the new format.
 
 === 1^SHOW/NODE [<callsign> ...]^Show the type and version number of nodes
+=== 1^SHOW/NODE ALL^Show the type,version number of ALL known nodes
 Show the type and version (if connected) of the nodes specified on the
 command line. If no callsigns are specified then a sorted list of all
-the non-user callsigns known to the system will be displayed.
+the non-user callsigns connected to node will be displayed.
 
 === 0^SHOW/PREFIX <callsign>^Interrogate the prefix database 
 This command takes the <callsign> (which can be a full or partial 
@@ -2704,6 +2711,16 @@ connected. It is a sort of inverse sh/config.
 
  sh/route n2tly
 
+=== 1^SHOW/RBN [<callsign> ...]^Show which connected users want RBN spots
+=== 1^SHOW/RBN ALL^Show ALL users that want RBN spots
+Show a list of the users that want RBN spots of any the callsigns
+specified on the command line. If no callsigns are specified then a
+sorted list of all connected users wanting RBN spots will be displayed
+
+SHOW/RBN ALL
+
+will go through the user file and display ALL users that want RBN spots.
+
 === 9^SHOW/RCMD [<n>][<from>-<to>][<call>] ...^Show log of rcmds
 Show the rcmds that have come in and their replies.
 
index 7f52a461fafc952e0906c07b8ac8bfd873880685..962aebb6623acd925ba029dd5947132f2ec430f8 100644 (file)
@@ -20,7 +20,7 @@ my ($self, $line) = @_;
 my @f = split /\s+/, $line;
 return (1, $self->msg('e5')) if $self->remotecmd || $self->inscript;
 return (1, $self->msg('e9')) if !@f;
-return (1, $self->msg('e28')) unless $self->registered;
+return (1, $self->msg('e28')) unless $self->isregistered;
 
 my $sort = uc $f[0];
 my $to = '*';
index b65ca928769b163b43c7d7305d0135e672df6f71..13018765d9c43caad44fe8b7ec78f74e0a7b756d 100644 (file)
@@ -13,7 +13,7 @@ my ($self, $line) = @_;
 my @f = split /\s+/, $line, 2;
 return (1, $self->msg('e5')) if $self->remotecmd || $self->inscript;
 return (1, $self->msg('e34')) unless @f >= 1;
-return (1, $self->msg('e28')) unless $self->registered;
+return (1, $self->msg('e28')) unless $self->isregistered;
 
 my $target = uc $f[0];
 
index 3fd00e6bb1bce1a4e56169f231d3a378095f2331..27099f243a2a5f9dba15ec8034da0f3f1d6ca296 100644 (file)
--- a/cmd/dx.pl
+++ b/cmd/dx.pl
@@ -16,8 +16,12 @@ my $freq;
 my @out;
 my $valid = 0;
 my $localonly;
+my $oline = $line;
+
+#$DB::single=1;
+
 return (1, $self->msg('e5')) if $self->remotecmd || $self->inscript;
-return (1, $self->msg('e28')) unless $self->registered;
+return (1, $self->msg('e28')) unless $self->isregistered;
 
 my @bad;
 if (@bad = BadWords::check($line)) {   
@@ -53,22 +57,37 @@ if (is_freq($f[1]) && $f[0] =~ m{^[\w\d]+(?:/[\w\d]+){0,2}$}) {
        return (1, $self->msg('dx3'));
 }
 
+
+my $ipaddr;
+my $addr = $self->hostname;
+
+if ($self->conn && $self->conn->peerhost) {
+#      $ipaddr = $addr unless !is_ipaddr($addr) || $addr =~ /^127\./ || $addr =~ /^::[0-9a-f]+$/;
+       $ipaddr = $addr; # force a PC61 
+} elsif ($self->inscript) {
+       $ipaddr = "script";
+}
+
 # check some other things
 # remove ssid from calls
-my $callnoid = $self->call;
-$callnoid =~ s/-\d+$//;
-my $spotternoid = $spotter;
-$spotternoid =~ s/-\d+$//;
+my $spotternoid = basecall($spotter);
+my $callnoid = basecall($self->{call});
+
+#$DB::single = 1;
+
 if ($DXProt::baddx->in($spotted)) {
        $localonly++; 
 }
-if ($DXProt::badspotter->in($callnoid)) { 
-       LogDbg('DXCommand', "$self->{call} badspotter with $callnoid ($line)");
+if ($DXProt::badspotter->in($spotternoid)) { 
+       LogDbg('DXCommand', "badspotter $spotternoid as $spotter ($oline) from $addr");
        $localonly++; 
 }
-if ($callnoid ne $spotternoid && $DXProt::badspotter->in($spotternoid)) { 
-       LogDbg('DXCommand', "$self->{call} badspotter with $spotternoid ($line)");
-       $localonly++; 
+
+dbg "spotter $spotternoid/$callnoid\n";
+
+if (($spotted =~ /$spotternoid/ || $spotted =~ /$callnoid/) && $freq < $Spot::minselfspotqrg) {
+       LogDbg('DXCommand', "$spotternoid/$callnoid trying to self spot below ${Spot::minselfspotqrg}KHz ($oline) from $addr, not passed on to cluster");
+       $localonly++;
 }
 
 # make line the rest of the line
@@ -120,20 +139,13 @@ if ($spotted le ' ') {
 
 return (1, @out) unless $valid;
 
-my $ipaddr;
-
-if ($self->conn && $self->conn->peerhost) {
-       my $addr = $self->hostname;
-       $ipaddr = $addr unless !is_ipaddr($addr) || $addr =~ /^127\./ || $addr =~ /^::[0-9a-f]+$/;
-} elsif ($self->inscript) {
-       $ipaddr = "script";
-}
-
 # Store it here (but only if it isn't baddx)
 my $t = (int ($main::systime/60)) * 60;
 return (1, $self->msg('dup')) if Spot::dup($freq, $spotted, $t, $line, $spotter);
 my @spot = Spot::prepare($freq, $spotted, $t, $line, $spotter, $main::mycall, $ipaddr);
 
+#$DB::single = 1;
+
 if ($freq =~ /^69/ || $localonly) {
 
        # heaven forfend that we get a 69Mhz band :-)
@@ -142,18 +154,26 @@ if ($freq =~ /^69/ || $localonly) {
        }
 
        $self->dx_spot(undef, undef, @spot);
+
        return (1);
 } else {
-       if (@spot) {
-               # store it 
-               Spot::add(@spot);
-
                # send orf to the users
-               if ($ipaddr) {
-                       DXProt::send_dx_spot($self, DXProt::pc61($spotter, $freq, $spotted, $line, $ipaddr), @spot);
-               } else {
-                       DXProt::send_dx_spot($self, DXProt::pc11($spotter, $freq, $spotted, $line), @spot);
-               }
+       my $spot;
+
+       if ($ipaddr) {
+               $spot = DXProt::pc61($spotter, $freq, $spotted, $line, $ipaddr);
+       }
+       #else {
+       #       $spot = DXProt::pc11($spotter, $freq, $spotted, $line);
+       #}
+       
+       $self->dx_spot(undef, undef, @spot);
+       if ($self->isslugged) {
+               push @{$self->{sluggedpcs}}, [61, $spot, \@spot];
+       } else {
+               # store in spots database 
+               Spot::add(@spot);
+               DXProt::send_dx_spot($self, $spot, @spot);
        }
 }
 
index ce1d1020652cd4cab88a99089177989293b91fea..f60e06655ba950e577fa16e995ece4ba67814ea8 100644 (file)
@@ -33,7 +33,7 @@ sub handle
 {
        my ($self, $line) = @_;
 
-       $DB::single = 1;
+#      $DB::single = 1;
        
        # create the arg list
        my %want;
index 292316b5018a0ce189805befc54ddf6692bba7b0..22f04b85bd98d9570318a4f861566c0f0887768e 100644 (file)
@@ -67,7 +67,7 @@ if ($self->state eq "prompt") {
                @extra = ();
        } 
 
-       return (1, $self->msg('e28')) unless $self->registered || $to eq $main::myalias;
+       return (1, $self->msg('e28')) unless $self->isregistered || $to eq $main::myalias;
        
        $loc->{to} = [ $to, @extra ];       # to is an array
        $loc->{subject} = $oref->subject;
index 08b2aa43ab8662dc3f577b440a09b8ee6db857a0..0fb91e10bc7ed3799f8f1014c50fe790b3304976 100644 (file)
@@ -39,7 +39,7 @@ if ($self->state eq "prompt") {
        
        # any thing after send?
        return (1, $self->msg('e6')) if !@f;
-       return (1, $self->msg('e28')) unless $self->registered || uc $f[0] eq $main::myalias;
+       return (1, $self->msg('e28')) unless $self->isregistered || uc $f[0] eq $main::myalias;
 
        while (@f) {
                my $f = uc shift @f; 
index bfe40760692a565c442a16b52e737fea73266339..f3de3303f6c29e34974755096ea0d5ace40e913a 100644 (file)
@@ -22,10 +22,10 @@ foreach $call (@args) {
                        push @out, $self->msg('dxituu', $call);
                        $user->wantdxitu(0);
                }
-               if ($user->wantusstate) {
-                       push @out, $self->msg('usstateu', $call);
-                       $user->wantusstate(0);
-               }
+#              if ($user->wantusstate) {
+#                      push @out, $self->msg('usstateu', $call);
+#                      $user->wantusstate(0);
+#              }
                $user->put;
                push @out, $self->msg('dxcqs', $call);
        } else {
index 0e002ba748fe99a70980deef98a3d1b87f76ef4c..a8fd500e179bd795f633f9d49f0cc274f533d0ae 100644 (file)
@@ -18,10 +18,10 @@ foreach $call (@args) {
        my $user = DXUser::get_current($call);
        if ($user) {
                $user->wantdxitu(1);
-               if ($user->wantdxcq) {
-                       push @out, $self->msg('dxcqu', $call);
-                       $user->wantdxcq(0);
-               }
+#              if ($user->wantdxcq) {
+#                      push @out, $self->msg('dxcqu', $call);
+#                      $user->wantdxcq(0);
+#              }
                if ($user->wantusstate) {
                        push @out, $self->msg('usstateu', $call);
                        $user->wantusstate(0);
index ac96c2a4f6c40c8329c1542b81eb264ce627a88d..edcf1acd28c917143c0e773ad76f7bcd4d65d88c 100644 (file)
@@ -17,7 +17,7 @@ if ($self->priv < 9) {
        Log('DXCommand', $self->call . " attempted to register @args");
        return (1, $self->msg('e5'));
 }
-return (1, $self->msg('reginac')) unless $main::reqreg;
+#return (1, $self->msg('reginac')) unless $main::reqreg;
 
 foreach $call (@args) {
        $call = uc $call;
index 3babc8808c4f288d232fd18ff6f67b6813e7547f..af3072406eab11634f2ee7e79007fb6d00cb7e68 100644 (file)
@@ -20,14 +20,14 @@ foreach $call (@args) {
        my $user = DXUser::get_current($call);
        if ($user) {
                $user->wantusstate(1);
-               if ($user->wantdxitu) {
-                       push @out, $self->msg('dxituu', $call);
-                       $user->wantdxitu(0);
-               }
-               if ($user->wantdxcq) {
-                       push @out, $self->msg('dxcqu', $call);
-                       $user->wantdxcq(0);
-               }
+#              if ($user->wantdxitu) {
+#                      push @out, $self->msg('dxituu', $call);
+#                      $user->wantdxitu(0);
+#              }
+#              if ($user->wantdxcq) {
+#                      push @out, $self->msg('dxcqu', $call);
+#                      $user->wantdxcq(0);
+#              }
                $user->put;
                push @out, $self->msg('usstates', $call);
        } else {
diff --git a/cmd/set/width.pl b/cmd/set/width.pl
new file mode 100644 (file)
index 0000000..27620c2
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# set the page width for this invocation of the client
+#
+# Copyright (c) 2021 - Dirk Koopman G1TLH
+#
+#
+#
+my $self = shift;
+my $l = shift;
+$l = 80 if $l < 80;
+$self->width($l);
+$self->user->width($l);
+return (1, $self->msg('pagewidth', $l));
index 7ebfb946f5baa0912831a98e98da2f8be8c8db65..d61eaa84a869b90bec0e977ced74e306c5f2c7ef 100644 (file)
@@ -8,5 +8,6 @@ my ($nodes, $tot, $users, $maxlocalusers, $maxusers, $uptime, $localnodes) = Rou
 
 $localnodes = $main::routeroot->nodes;
 $users = $main::routeroot->users;
+$uptime = difft($main::starttime, ' ');
 
 return (1, $self->msg('cluster', $localnodes, $nodes, $users, $tot, $maxlocalusers, $maxusers, $uptime));
diff --git a/cmd/show/data_stats.pl b/cmd/show/data_stats.pl
new file mode 100644 (file)
index 0000000..ecd50d7
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# show the users on this cluster from the routing tables
+#
+# Copyright (c) 1998 Dirk Koopman G1TLH
+#
+#
+#
+
+sub handle
+{
+       my ($self, $line) = @_;
+       my @in = map { uc } split /\s+/, $line; # list of callsigns of nodes
+       my @out;
+       my @list;
+       
+       if ($in[0] eq 'ALL') {
+               @list = keys %DXChannel::channels;
+       } else {
+               while (@in) {
+                       my $in = shift @in;
+                       if ($in =~ /^NOD/){
+                               push @list, DXChannel::get_all_node_calls();
+                       } elsif ($in =~ /^USE/) {
+                               push @list, DXChannel::get_all_user_calls();
+                       } elsif ($in =~ /^RBN|SKI/) {
+                               push @list, map {$_->is_rbn ? $_->call : undef} DXChannel::get_all();
+                       } else {
+                               push @list, $in;
+                       }
+               }
+       }
+       
+       my $dt = difft($main::starttime, ' ');
+       push @out, sprintf "Transfered in:%-12.12s     IN                                OUT", $dt;
+       push @out, "Callsign             Lines             Data            Lines             Data";
+       push @out, "-----------------------------------------------------------------------------";
+       push @list, $self->call unless @list;
+       foreach my $call (sort @list) {
+               next if $call eq $main::mycall;
+               my $dxchan = DXChannel::get($call);
+               if ($dxchan) {
+                       my $conn = $dxchan->conn;
+                       push @out, sprintf("%-9.9s %16s %16s %16s %16s", $call, comma($conn->{linesin}), comma($conn->{datain}), comma($conn->{linesout}), comma($conn->{dataout}));
+               }
+       }
+
+       push @out, "-----------------------------------------------------------------------------" if @out > 3;
+       push @out, sprintf("%-9.9s %16s %16s %16s %16s", "TOTALS", comma($Msg::total_lines_in), comma($Msg::total_in), comma($Msg::total_lines_out), comma($Msg::total_out));
+
+       return (1, @out);
+}
+
+sub comma
+{
+       my $num = shift;
+       return scalar reverse(join(",",unpack("(A3)*", reverse int($num))));
+}
+
index 5387b7f407657ee5591711a0ae6a040abc5bf04b..4f71c13e51d69adf01d86e40b3c3e3af405b4fab 100644 (file)
@@ -41,6 +41,8 @@ sub handle
 
        
        dbg("sh/dx list: " . join(" ", @list)) if isdbg('sh/dx');
+
+#      $DB::single=1;
        
        while (@list) { # next field
                $f = shift @list;
@@ -143,11 +145,7 @@ sub handle
                } else {
                        $pre .= '*' unless $pre =~ /[\*\?\[]$/o;
                        $pre = shellregex($pre);
-                       if ($usesql) {
-                               $pre =~ s/\.\*/%/g;
-                       } else {
-                               $pre =~ s/\.\*\$$//;
-                       }
+                       $pre =~ s/\.\*\$$//;
                        $pre .= '$' if $exact;
                        $pre =~ s/\^//;
                        push @flist, 'call', $pre;
@@ -166,8 +164,8 @@ sub handle
   
        # now do the search
 
-       if ($self->{_nospawn}) {
-               my @res = Spot::search($expr, $fromday, $today, $from, $to, $user, $dofilter ? $self : undef);
+       if ($self->{_nospawn} || ($Spot::spotcachedays && !$expr && $from == 0 && $fromday == 0 && $today == 0)) {
+               my @res = Spot::search($expr, $fromday, $today, $from, $to, $user, $dofilter, $self);
                my $ref;
                my @dx;
                foreach $ref (@res) {
@@ -179,14 +177,14 @@ sub handle
                                        push @out, DXCommandmode::format_dx_spot($self, @$ref);
                                }
                                else {
-                                       push @out, Spot::formatl(@$ref);
+                                       push @out, Spot::formatl($self->{width}, @$ref);
                                }
                        }
                }
        }
        else {
                push @out, $self->spawn_cmd("sh/dx $line", \&Spot::search, 
-                                                                       args => [$expr, $fromday, $today, $from, $to, $filter, $dofilter ? $self : undef],
+                                                                       args => [$expr, $fromday, $today, $from, $to, $filter, $dofilter, $self],
                                                                        cb => sub {
                                                                                my ($dxchan, @res) = @_; 
                                                                                my $ref;
@@ -201,7 +199,7 @@ sub handle
                                                                                                        push @out, DXCommandmode::format_dx_spot($self, @$ref);
                                                                                                }
                                                                                                else {
-                                                                                                       push @out, Spot::formatl(@$ref);
+                                                                                                       push @out, Spot::formatl($self->{width}, @$ref);
                                                                                                }
                                                                                        }
                                                                                }
index b1023f29bea726cdf5182c58e0a4af6bf82f91ba..ec84daa0af781343767cd915409388642756a553 100644 (file)
@@ -24,7 +24,7 @@ sub handle
                        next if $from && $to > $from;
                }
                unless ($to) {
-                       ($to) = $f =~ /^(\d+)$/o if !$to;              # is it a to count?
+                       ($to) = $f =~ /^(\d+)$/ if !$to;              # is it a to count?
                        next if $to;
                }
                unless ($f =~ /^\d+/) {
diff --git a/cmd/show/rbn.pl b/cmd/show/rbn.pl
new file mode 100644 (file)
index 0000000..2bb8a0e
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# show/rbn [all|<call>,,,]
+# 
+# This command either lists all rbn users known about (sh/rbn all)
+# or the ones specified on the command line, If no arguments are present
+# then it will list all connected rbn/skimmer users.
+#
+# Copyright (c) 2020 Dirk Koopman G1TLH
+#
+
+
+my ($self, $line) = @_;
+return (1, $self->msg('e5')) unless $self->priv >= 1;
+
+my @call = map {uc $_} split /\s+/, $line; 
+my @out;
+my $count;
+
+# search thru the user
+if (@call == 0) {
+       @call = sort map{$_->call} grep {$_->user->call && $_->user->wantrbn} DXChannel::get_all_users();
+} elsif ($call[0] eq 'ALL') {
+       shift @call;
+       my ($action, $key, $data) = (0,0,0);
+       for ($action = DXUser::R_FIRST, $count = 0; !$DXUser::dbm->seq($key, $data, $action); $action = DXUser::R_NEXT) {
+               if (is_callsign($key)) {
+                       if ($data =~ /"sort":"[UW]"/  && $data =~ /"wantrbn":1/) {
+                               push @call, $key;
+                       }
+               }
+       }
+}
+
+push @out, join(' ', $self->msg('rbnusers'), $main::mycall);
+my @l;
+
+foreach my $call (@call) {
+       push @l, $call;
+       if (@l >= 5) {
+               push @out, sprintf "%-12s %-12s %-12s %-12s %-12s", @l;
+               @l = ();
+       }
+       ++$count;
+}
+if (@l) {
+       push @l, "" while @l < 5;
+       push @out, sprintf "%-12s %-12s %-12s %-12s %-12s", @l;
+}
+       
+
+return (1, @out, $self->msg('rec', $count));
+
+
+
+
index b3f345d96317186b9d58e4ae56d08fc61a375a37..4876aea2a7d6f9740f413eda68422f7f389b0afe 100644 (file)
@@ -19,7 +19,7 @@ sub handle
 
        if ($line) {
                $line =~ s/[^\w\-\/]+//g;
-               $line = "^\U\Q$line";
+               $line = "\U\Q$line";
        }
 
        if ($self->{_nospawn}) {
@@ -37,35 +37,45 @@ sub generate
        my $line = shift;
        my @out;
        my @val;
-                                                       
+
+#      dbg("set/register line: $line");
+
+       my %call = ();
+       $call{$_} = 1 for split /\s+/, $line;
+       delete $call{'ALL'};
 
        my ($action, $count, $key, $data) = (0,0,0,0);
-       eval qq{for (\$action = DXUser::R_FIRST, \$count = 0; !\$DXUser::dbm->seq(\$key, \$data, \$action); \$action = DXUser::R_NEXT) {
-       if (\$data =~ m{registered}) {                                  
-               if (!\$line || (\$line && \$key =~ /^$line/)) {
-                       my \$u = DXUser::get_current(\$key);
-                       if (\$u && \$u->registered) {
-                               push \@val, \$key;
-                               ++\$count;
+       unless (keys %call) {
+               for ($action = DXUser::R_FIRST, $count = 0; !$DXUser::dbm->seq($key, $data, $action); $action = DXUser::R_NEXT) {
+                       if ($data =~ m{registered}) {
+                               $call{$key} = 1;       # possible candidate
                        }
                }
        }
-} };
+
+       foreach $key (sort keys %call) {
+               my $u = DXUser::get_current($key);
+               if ($u && defined (my $r = $u->registered)) {
+                       push @val, "${key}($r)";
+                       ++$count;
+               }
+       }
+
        my @l;
+       push @out, "Registration is " . ($main::reqreg ? "Required" :  "NOT Required");
        foreach my $call (@val) {
                if (@l >= 5) {
-                       push @out, sprintf "%-12s %-12s %-12s %-12s %-12s", @l;
+                       push @out, sprintf "%-14s %-14s %-14s %-14s %-14s", @l;
                        @l = ();
                }
                push @l, $call;
        }
        if (@l) {
                push @l, "" while @l < 5;
-               push @out, sprintf "%-12s %-12s %-12s %-12s %-12s", @l;
+               push @out, sprintf "%-14s %-14s %-14s %-14s %-14s", @l;
        }
 
-       push @out, $@ if $@;
-       push @out, , $self->msg('rec', $count);
+       push @out, $self->msg('rec', $count);
        return @out;
        
 }
index 0b0f0cfb66df9645b7675af023173a2810f48c22..5707504a190705138cbdfe91cd289e203cf7c172 100644 (file)
@@ -23,7 +23,7 @@ if ($self->priv > 5 && @in) {
 } else {
        my ($year) = (gmtime($main::systime))[5];
        $year += 1900;
-       push @out, "DX Spider Cluster version $main::version (build $main::build git: $main::gitbranch/$main::gitversion) on \u$^O";
+       push @out, "DXSpider v$main::version (build $main::build git: $main::gitbranch/$main::gitversion) using perl $^V on \u$^O";
        push @out, "Copyright (c) 1998-$year Dirk Koopman G1TLH";
 }
 
index 5df379a3e7676db9e0f426ab27d304be9dcd232c..0aa7e9918084c6e32ace0d25f50d41f9e982d712 100644 (file)
@@ -45,7 +45,7 @@ sub on_disc
 {
        my $conn = shift;
        my $dxchan = shift;
-       $DB::single = 1;
+#      $DB::single = 1;
        
        $dxchan->send(map {"$conn->{prefix}$_"} @{$conn->{_wm7d}});
 }
index acd2eba54f84e6a70a73a826a18924b78532c70e..dae38e243be0d56b8f1378fd57e8f4bcf067e28b 100644 (file)
@@ -33,7 +33,7 @@ return (1, $self->msg('e8')) unless $to;
 $to = uc $to;
 
 return (1, $self->msg('e22', $to)) unless is_callsign($to);
-return (1, $self->msg('e28')) unless $self->registered || $to eq $main::myalias;
+return (1, $self->msg('e28')) unless $self->isregistered || $to eq $main::myalias;
 
 $via = uc $via if $via;
 my $call = $via || $to;
index a0c36d78f7ce299514fa5929f73aaca4920f7ed0..c18ac3c7069f24159b993a8a8bc0620d08f63bf7 100644 (file)
@@ -17,7 +17,7 @@ if ($self->priv < 9) {
        Log('DXCommand', $self->call . " attempted to unregister @args");
        return (1, $self->msg('e5'));
 }
-return (1, $self->msg('reginac')) unless $main::reqreg;
+#return (1, $self->msg('reginac')) unless $main::reqreg;
 
 foreach $call (@args) {
        $call = uc $call;
diff --git a/cmd/uptime.pl b/cmd/uptime.pl
new file mode 100644 (file)
index 0000000..484cb4c
--- /dev/null
@@ -0,0 +1,6 @@
+#
+# do a tradiotional "uptime" clone
+#
+my $self = shift;
+
+return (1, sprintf("%s $main::mycall uptime: %s", ztime(), difft($main::starttime, ' ')));
index 73e2e56677ba4fc678f4ed232cf7f7ea387bf6ab..571471909fac9677a1010a2afd6ba1f0dd8a9730 100644 (file)
--- a/cmd/wx.pl
+++ b/cmd/wx.pl
@@ -23,7 +23,7 @@ my $t = ztime(time);
 my $tonode;
 my $via;
 return (1, $self->msg('e5')) if $self->remotecmd || $self->inscript;
-return (1, $self->msg('e28')) unless $self->registered;
+return (1, $self->msg('e28')) unless $self->isregistered;
 
 if ($sort eq "FULL") {
   $line =~ s/^$f[0]\s+//;    # remove it
index 15b419a33126491b414c333cc437cc09a9670d53..48c45f50273e08b32c4fb4ad6b5bd34f2823a9b8 100644 (file)
@@ -1,8 +1,3 @@
 timeout 15
-abort (Busy|Sorry|Fail)
-# don't forget to chmod 4775 netrom_call!
-connect ax25 /usr/sbin/netrom_call bbs gb7djk g1tlh-0
-'Connect' ''
-'Connect' 'ak1a'
-'Connect'  ''
-client gb7tlh ax25
+connect telnet dirk7.int.tobit.co.uk 7300
+'ogin:' 'gb7tlh-1'
index 7ea4a61136136752439377e6307d9dc2694b6570..1bd60f671b6d0bc70268ad20ebcba7874df3038e 100644 (file)
@@ -26,8 +26,9 @@
                                                          }, 'Bands'),
 
                  '160m' => bless( { band => [ 1800, 2000 ], 
-                                                        cw => [ 1800, 1830 ], 
-                                                        rtty => [ 1838, 1841 ], 
+                                                        cw => [ 1800, 1838 ], 
+                                                        rtty => [ 1838, 1841 ],
+                                                        data => [ 1838, 1843],
                                                         ssb => [ 1831, 2000] 
                                                   }, 'Bands'),
 
index c3d805fe0a0a9cdbbcfb80ab1d3cfd507eeabf6b..da81a1342eb0b4de445252ccbd5be2694ddb7887 100644 (file)
@@ -20,7 +20,7 @@ Conway Reef:              32:  56:  OC:  -22.00:  -175.00:   -12.0:  3D2/c:
     =3D2CR;
 Rotuma Island:            32:  56:  OC:  -12.48:  -177.08:   -12.0:  3D2/r:
     =3D2RI;
-Kingdom of eSwatini:      38:  57:  AF:  -26.65:   -31.48:    -2.0:  3DA:
+Kingdom of Eswatini:      38:  57:  AF:  -26.65:   -31.48:    -2.0:  3DA:
     3DA;
 Tunisia:                  33:  37:  AF:   35.40:    -9.32:    -1.0:  3V:
     3V,TS;
@@ -45,7 +45,7 @@ ITU HQ:                   14:  28:  EU:   46.17:    -6.05:    -1.0:  4U1I:
 United Nations HQ:        05:  08:  NA:   40.75:    73.97:     5.0:  4U1U:
     =4U1UN;
 Vienna Intl Ctr:          15:  28:  EU:   48.20:   -16.30:    -1.0:  *4U1V:
-    =4U0R,=4U1A,=4U1VIC,=4U2STAYHOME,=4U2U,=4Y1A,=C7A;
+    =4U0R,=4U1A,=4U1VIC,=4U2U,=4Y1A,=C7A;
 Timor - Leste:            28:  54:  OC:   -8.80:  -126.05:    -9.0:  4W:
     4W;
 Israel:                   20:  39:  AS:   31.32:   -34.82:    -2.0:  4X:
@@ -105,7 +105,7 @@ Sierra Leone:             35:  46:  AF:    8.50:    13.25:     0.0:  9L:
 West Malaysia:            28:  54:  AS:    3.95:  -102.23:    -8.0:  9M2:
     9M,9W;
 East Malaysia:            28:  54:  OC:    2.68:  -113.32:    -8.0:  9M6:
-    9M6,9M8,9W6,9W8,=9M4CAK,=9M4CCB,=9M4CKT,=9M4CRB,=9M4CRP,=9M4SJSM;
+    9M6,9M8,9W6,9W8,=9M4CAK,=9M4CKT,=9M4CRP,=9M4CWS,=9M7DX;
 Nepal:                    22:  42:  AS:   27.70:   -85.33:   -5.75:  9N:
     9N;
 Dem. Rep. of the Congo:   36:  52:  AF:   -3.12:   -23.03:    -1.0:  9Q:
@@ -281,7 +281,7 @@ China:                    24:  44:  AS:   36.00:  -102.00:    -8.0:  BY:
 Nauru:                    31:  65:  OC:   -0.52:  -166.92:   -12.0:  C2:
     C2;
 Andorra:                  14:  27:  EU:   42.58:    -1.62:    -1.0:  C3:
-    C3,=VERSION;
+    C3;
 The Gambia:               35:  46:  AF:   13.40:    16.38:     0.0:  C5:
     C5;
 Bahamas:                  08:  11:  NA:   24.25:    76.00:     5.0:  C6:
@@ -291,7 +291,7 @@ Mozambique:               37:  53:  AF:  -18.25:   -35.00:    -2.0:  C9:
 Chile:                    12:  14:  SA:  -30.00:    71.00:     4.0:  CE:
     3G,CA,CB,CC,CD,CE,XQ,XR,3G7[16],3G8[16],CA7[16],CA8[16],CB7[16],CB8[16],
     CC7[16],CC8[16],CD7[16],CD8[16],CE7[16],CE8[16],XQ7[16],XQ8[16],XR7[16],
-    XR8[16],=XQ6CFX[16],=XQ6OA[16];
+    XR8[16],=CD0YJA/3,=CD0YJA/4,=XQ6CFX[16],=XQ6OA[16];
 San Felix & San Ambrosio: 12:  14:  SA:  -26.28:    80.07:     4.0:  CE0X:
     3G0X,CA0X,CB0X,CC0X,CD0X,CE0X,XQ0X,XR0X;
 Easter Island:            12:  63:  SA:  -27.10:   109.37:     6.0:  CE0Y:
@@ -304,9 +304,10 @@ Antarctica:               13:  74:  SA:  -90.00:     0.00:     0.0:  CE9:
     FT3Y(30)[70],FT4Y(30)[70],FT5Y(30)[70],FT6Y(30)[70],FT7Y(30)[70],
     FT8Y(30)[70],LU1Z[73],LU2Z[73],LU3Z[73],LU4Z[73],LU5Z[73],LU6Z[73],
     LU7Z[73],LU8Z[73],LU9Z[73],RI1AN(29)[69],VI0(39)[69],VK0(39)[69],
-    ZL5(30)[71],ZM5(30)[71],ZS7(38)[67],=8J1RL(39)[67],=DP0GVN(38)[67],
-    =DP1POL(38)[67],=KC4AAA(39),=KC4AAC[73],=KC4USB(12),=KC4USV(30)[71],
-    =RI1ANC(29)[70],=VP8AL[73];
+    ZL5(30)[71],ZM5(30)[71],ZS7(38)[67],=FT4YM/P(29),=8J1RL(39)[67],
+    =DP0GVN(38)[67],=DP1POL(38)[67],=KC4AAA(39),=KC4AAC[73],=KC4USB(12),
+    =KC4USN(30),=KC4USV(30)[71],=RI1ANC(29)[70],=RI1ANR(38)[67],
+    =RI60ANT(38)[67],=VP8/SQ1SGB[73];
 Cuba:                     08:  11:  NA:   21.50:    80.00:     5.0:  CM:
     CL,CM,CO,T4;
 Morocco:                  33:  37:  AF:   32.00:     5.00:     0.0:  CN:
@@ -333,8 +334,7 @@ Comoros:                  39:  53:  AF:  -11.63:   -43.30:    -3.0:  D6:
     D6;
 Fed. Rep. of Germany:     14:  28:  EU:   51.00:   -10.00:    -1.0:  DL:
     DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR,Y2,Y3,Y4,Y5,Y6,Y7,
-    Y8,Y9,=DM19ERZ/BL,=DM19ERZ/BU,=DM19ERZ/HAM,=DM19ERZ/MAF,=DM19ERZ/MF,
-    =DM19ERZ/MS,=DM19ERZ/VL;
+    Y8,Y9;
 Philippines:              27:  50:  OC:   13.00:  -122.00:    -8.0:  DU:
     4D,4E,4F,4G,4H,4I,DU,DV,DW,DX,DY,DZ;
 Eritrea:                  37:  48:  AF:   15.00:   -39.00:    -3.0:  E3:
@@ -349,13 +349,12 @@ Niue:                     32:  62:  OC:  -19.03:   169.85:    11.0:  E6:
     E6;
 Bosnia-Herzegovina:       15:  28:  EU:   44.32:   -17.57:    -1.0:  E7:
     E7;
-Spain:                    14:  37:  EU:   40.37:     4.88:    -1.0:  EA:
-    AM,AN,AO,EA,EB,EC,ED,EE,EF,EG,EH,=EA2EZ/P,=EA3HSD/P,=EA5CC/P,=EA5EZ/P,
-    =EA5ZD/URE,=EA9HU,=EC5EA/VIC;
+Spain:                    14:  37:  EU:   40.32:     3.43:    -1.0:  EA:
+    AM,AN,AO,EA,EB,EC,ED,EE,EF,EG,EH,=EA5CC/P,=EA5IKT/P,=EA5RCK/CDI,=EA9HU;
 Balearic Islands:         14:  37:  EU:   39.60:    -2.95:    -1.0:  EA6:
     AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6;
 Canary Islands:           33:  36:  AF:   28.32:    15.85:     0.0:  EA8:
-    AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8,=EA8VK/URE;
+    AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8;
 Ceuta & Melilla:          33:  37:  AF:   35.90:     5.27:    -1.0:  EA9:
     AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9;
 Ireland:                  14:  27:  EU:   53.13:     8.02:     0.0:  EI:
@@ -384,7 +383,7 @@ Turkmenistan:             17:  30:  AS:   38.00:   -58.00:    -5.0:  EZ:
 France:                   14:  27:  EU:   46.00:    -2.00:    -1.0:  F:
     F,HW,HX,HY,TH,TM,TP,TQ,TV;
 Guadeloupe:               08:  11:  NA:   16.13:    61.67:     4.0:  FG:
-    FG,=TO8FTDM;
+    FG;
 Mayotte:                  39:  53:  AF:  -12.88:   -45.15:    -3.0:  FH:
     FH;
 St. Barthelemy:           08:  11:  NA:   17.90:    62.83:     4.0:  FJ:
@@ -394,21 +393,21 @@ New Caledonia:            32:  56:  OC:  -21.50:  -165.50:   -11.0:  FK:
 Chesterfield Islands:     30:  56:  OC:  -19.87:  -158.32:   -11.0:  FK/c:
     =TX3X;
 Martinique:               08:  11:  NA:   14.70:    61.03:     4.0:  FM:
-    FM,=TO5A,=TO5O,=TO5T,=TO7A;
+    FM,=TO5A,=TO5T,=TO7A,=TO7O;
 French Polynesia:         32:  63:  OC:  -17.65:   149.40:    10.0:  FO:
     FO;
 Austral Islands:          32:  63:  OC:  -23.37:   149.48:    10.0:  FO/a:
-    =TX2A;
+    =FO/W7GJ;
 Clipperton Island:        07:  10:  NA:   10.28:   109.22:     8.0:  FO/c:
     =TX5P;
 Marquesas Islands:        31:  63:  OC:   -8.92:   140.07:     9.5:  FO/m:
-    =FO/F6BCW;
+    =TX7MB;
 St. Pierre & Miquelon:    05:  09:  NA:   46.77:    56.20:     3.0:  FP:
     FP;
 Reunion Island:           39:  53:  AF:  -21.12:   -55.48:    -4.0:  FR:
     FR;
 St. Martin:               08:  11:  NA:   18.08:    63.03:     4.0:  FS:
-    FS;
+    FS,=TO9W;
 Glorioso Islands:         39:  53:  AF:  -11.55:   -47.28:    -4.0:  FT/g:
     FT0G,FT1G,FT2G,FT3G,FT4G,FT5G,FT6G,FT7G,FT8G,FT9G;
 Juan de Nova, Europa:     39:  53:  AF:  -17.05:   -42.72:    -3.0:  FT/j:
@@ -427,32 +426,30 @@ Wallis & Futuna Islands:  32:  62:  OC:  -13.30:   176.20:   -12.0:  FW:
 French Guiana:            09:  12:  SA:    4.00:    53.00:     3.0:  FY:
     FY,=TO1A;
 England:                  14:  27:  EU:   52.77:     1.47:     0.0:  G:
-    2E,G,M,NHS;
+    2E,2ZE,G,M;
 Isle of Man:              14:  27:  EU:   54.20:     4.53:     0.0:  GD:
     2D,GD,GT,MD,MT;
 Northern Ireland:         14:  27:  EU:   54.73:     6.68:     0.0:  GI:
-    2I,GI,GN,MI,MN,=2I0NGM/NHS,=GB100RS,=GB1HSC,=GB3NGI,=GB4AFD,=GB4UAS,
-    =GB5NHS,=GB75VEC,=GB8NHS,=GB9AFD;
+    2I,GI,GN,MI,MN,=GB3NGI,=GB8LWF;
 Jersey:                   14:  27:  EU:   49.22:     2.18:     0.0:  GJ:
-    2J,GH,GJ,MH,MJ,=GH5DX/NHS;
+    2J,GH,GJ,MH,MJ,=GB2JSA;
+Scotland:                 14:  27:  EU:   56.82:     4.18:     0.0:  GM:
+    2A,2M,GM,GS,MA,MM,MS,=GB0DBS,=GB0GDS,=GB0SJR,=GB1002ZE,=GB100BCG,=GB2ELH,
+    =GB2JCM,=GB2OWM,=GB2ZE,=GB3ANG,=GB3LER,=GB3LER/B,=GB4GDS,=GB4LER,=GB60ANT,
+    =GM3WUX/2ZE,=GM4UBJ/2ZE,=GM8IEM/2ZE;
 Shetland Islands:         14:  27:  EU:   60.50:     1.50:     0.0:  *GM/s:
     =2M0BDR,=2M0BDT,=2M0CPN,=2M0GFC,=2M0SEG,=2M0SPX,=2M0ZET,=GB2ELH,=GB3LER,
     =GB3LER/B,=GB4LER,=GM0AVR,=GM0CXQ,=GM0EKM,=GM0GFL,=GM0ILB,=GM0JDB,=GM1FGN,
     =GM1KKI,=GM1ZNR,=GM3WHT,=GM3ZET,=GM4IPK,=GM4JPI,=GM4LBE,=GM4LER,=GM4PXG,
     =GM4SLV,=GM4SSA,=GM4WXQ,=GM4ZHL,=GM6RQW,=GM6YQA,=GM7AFE,=GM7GWW,=GM8LNH,
     =GM8MMA,=GM8YEC,=GS3ZET,=MM0LSM,=MM0NQY,=MM0VIK,=MM0XAU,=MM0ZAL,=MM0ZCG,
-    =MM0ZRC,=MM1FJM,=MM3VQO,=MM5PSL,=MM5YLO,=MM6BDU,=MM6BZQ,=MM6IKB,=MM6IMB,
-    =MM6MFA,=MM6PTE,=MM6SJK,=MM6YLO,=MM6ZBG,=MM6ZDW,=MM8A,=MS0ZCG,=MS0ZET;
-Scotland:                 14:  27:  EU:   56.82:     4.18:     0.0:  GM:
-    2A,2M,GM,GS,MA,MM,MS,=GB0SLB,=GB2ELH,=GB2FEA,=GB2JCM,=GB2KDR,=GB2OL,
-    =GB2ROC,=GB3ANG,=GB3LER,=GB3LER/B,=GB4LER,=GB7SRW,=GM0WED/NHS,=GM3YDN/NHS,
-    =GM4SQM/NHS,=GM4SQN/NHS,=GM6JNJ/NHS,=MM0DHQ/NHS,=MM3AWD/NHS,=MM3DDQ/NHS,
-    =MM7WAB/NHS;
+    =MM0ZRC,=MM1FEO,=MM1FJM,=MM3VQO,=MM5PSL,=MM5YLO,=MM6BDU,=MM6BZQ,=MM6IKB,
+    =MM6IMB,=MM6MFA,=MM6PTE,=MM6SJK,=MM6YLO,=MM6ZBG,=MM6ZDW,=MM7CGR,=MM8A,
+    =MS0ZCG,=MS0ZET;
 Guernsey:                 14:  27:  EU:   49.45:     2.58:     0.0:  GU:
     2U,GP,GU,MP,MU;
 Wales:                    14:  27:  EU:   52.28:     3.73:     0.0:  GW:
-    2W,GC,GW,MC,MW,=GB0ATM,=GB0GIG,=GB0HMM,=GB0MZX,=GB0WIW,=GB0WMZ,=GB1KEY,
-    =GB1WIW,=GB2TD,=GB2VK,=GB2WIW,=GB5VEP,=GB6RNLI;
+    2W,GC,GW,MC,MW,=GB1MIS,=GB2TD,=GB2VK;
 Solomon Islands:          28:  51:  OC:   -9.00:  -160.00:   -11.0:  H4:
     H4;
 Temotu Province:          32:  51:  OC:  -10.72:  -165.80:   -11.0:  H40:
@@ -490,16 +487,15 @@ Vatican City:             15:  28:  EU:   41.90:   -12.47:    -1.0:  HV:
 Saudi Arabia:             21:  39:  AS:   24.20:   -43.83:    -3.0:  HZ:
     7Z,8Z,HZ;
 Italy:                    15:  28:  EU:   42.82:   -12.58:    -1.0:  I:
-    I,=4U0WFP,=4U25B,=4U5F,=4U9STAYHOME,=IK5TBI/I/CT,=IK8IJN/I/US,=IK8VHP/OA,
-    =IZ0EUX/I/AZ;
+    I,=4U0WFP,=4U1GSC,=4U24OCT,=4U5F,=IT9ELM/0,=IT9PQJ/0,=IT9RGY/4;
 African Italy:            33:  37:  AF:   35.67:   -12.67:    -1.0:  *IG9:
     IG9,IH9;
 Sardinia:                 15:  28:  EU:   40.15:    -9.27:    -1.0:  IS:
-    IM0,IS,IW0U,IW0V,IW0W,IW0X,IW0Y,IW0Z,=II0ICH,=II0IDP,=II0M,=IQ0AG,=IQ0AH,
-    =IQ0AI,=IQ0AK,=IQ0AL,=IQ0AM,=IQ0EH,=IQ0HO,=IQ0ID,=IQ0ID/P,=IQ0JY,=IQ0NU,
-    =IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0SS;
+    IM0,IS,IW0U,IW0V,IW0W,IW0X,IW0Y,IW0Z,=II0ICH,=II0IDP,=II0M,=IO0MMI,=IQ0AG,
+    =IQ0AH,=IQ0AI,=IQ0AK,=IQ0AK/P,=IQ0AL,=IQ0AM,=IQ0EH,=IQ0HO,=IQ0ID,=IQ0JY,
+    =IQ0NU,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0SS;
 Sicily:                   15:  28:  EU:   37.50:   -14.00:    -1.0:  *IT9:
-    IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=IT9YBL/SG;
+    IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=IQ1QQ/9,=IW0HBY/9;
 Djibouti:                 37:  48:  AF:   11.75:   -42.35:    -3.0:  J2:
     J2;
 Grenada:                  08:  11:  NA:   12.13:    61.68:     4.0:  J3:
@@ -514,7 +510,8 @@ St. Vincent:              08:  11:  NA:   13.23:    61.20:     4.0:  J8:
     J8;
 Japan:                    25:  45:  AS:   36.40:  -138.38:    -9.0:  JA:
     7J,7K,7L,7M,7N,8J,8K,8L,8M,8N,JA,JE,JF,JG,JH,JI,JJ,JK,JL,JM,JN,JO,JP,JQ,
-    JR,JS;
+    JR,JS,AGJ60,HTR60,IEJ60,ISG60,KJP60,KTD60,MMD60,MMY60,OGN60,OKA60,SHI60,
+    TRA60,UEO60,=8N60HAM/OKA;
 Minami Torishima:         27:  90:  OC:   24.28:  -153.97:   -10.0:  JD/m:
     =JG8NQJ/JD1;
 Ogasawara:                27:  45:  AS:   27.05:  -142.20:    -9.0:  JD/o:
@@ -531,100 +528,107 @@ Jordan:                   20:  39:  AS:   31.18:   -36.42:    -2.0:  JY:
     JY;
 United States:            05:  08:  NA:   37.53:    91.67:     5.0:  K:
     AA,AB,AC,AD,AE,AF,AG,AI,AJ,AK,K,N,W,=4U1WB(5)[8],=AA0O(5)[8],=AA2IL(3)[6],
-    =AA4DD(4)[8],=AA4Q(3)[6],=AA5JF(5)[8],=AA8R(5)[8],=AB3AI(4)[8],
-    =AB4B(4)[8],=AB4GG(4)[8],=AB4IQ(4)[8],=AB5OR(4)[8],=AB8RL(5)[8],
-    =AB8YZ(4)[7],=AC4CA(4)[7],=AC4G(4)[8],=AC4GW(4)[8],=AC6WI(5)[8],
-    =AC6ZM(4)[8],=AC7AF(4)[7],=AC8Y(5)[8],=AD1C(4)[7],=AD4EB(4)[8],
-    =AD4TA(4)[8],=AD8J(5)[8],=AE4ED(4)[8],=AE6JV(5)[8],=AE7AP(4)[6],
-    =AG4W(4)[8],=AH0U(3)[6],=AH2AV(4)[8],=AH2O(5)[8],=AI4DB(4)[8],=AI9K(4)[7],
-    =AJ4A(4)[8],=AJ4F(4)[7],=AJ7G(5)[8],=AL0A(5)[8],=AL4B(4)[8],=AL7RF(3)[6],
-    =G8ERJ(5)[8],=K0ACP(4)[8],=K0EJ(4)[8],=K0IP(3)[6],=K0LUZ(5)[8],
-    =K0NW(3)[6],=K0PJ(4)[8],=K0SN(4)[6],=K0TQ(4)[8],=K0ZR(5)[8],=K1DC(4)[8],
-    =K1DW(4)[7],=K1GU(4)[8],=K1KD(4)[7],=K1LT(4)[8],=K2DSW(4)[7],=K2GMY(3)[6],
-    =K2KR(4)[7],=K2PM(4)[8],=K2PO(3)[6],=K2RD(3)[6],=K2RP(3)[6],=K2UR(4)[8],
-    =K2VV(4)[7],=K3DMG(4)[8],=K3EST(3)[6],=K3IE(4)[8],=K3JWI(4)[8],
-    =K3PA(4)[7],=K3WT(4)[7],=K3WYC(3)[6],=K3YP(4)[8],=K4AB(4)[8],=K4AFE(4)[8],
-    =K4AMC(4)[8],=K4AVX(4)[8],=K4BX(4)[8],=K4CWW(4)[8],=K4FN(4)[8],
-    =K4FT(4)[8],=K4IE(4)[8],=K4IU(4)[7],=K4OAQ(4)[8],=K4OWR(4)[8],=K4RO(4)[8],
-    =K4TCG(4)[8],=K4TZ(4)[8],=K4UU(4)[8],=K4WG(4)[8],=K4WI(4)[8],=K4WW(4)[8],
+    =AA2MA(4)[8],=AA4DD(4)[8],=AA4Q(3)[6],=AA4R(4)[8],=AA5JF(5)[8],
+    =AA8R(5)[8],=AB4B(4)[8],=AB4GG(4)[8],=AB8RL(5)[8],=AB8YZ(4)[7],
+    =AC4CA(4)[7],=AC4G(4)[8],=AC6WI(5)[8],=AC6ZM(4)[8],=AC7AF(4)[7],
+    =AC8Y(5)[8],=AC9TO(4)[7],=AD1C(4)[7],=AD4EB(4)[8],=AD4TA(4)[8],
+    =AD5XI(5)[8],=AD8J(5)[8],=AE4ED(4)[8],=AE6JV(5)[8],=AE7AP(4)[6],
+    =AF4T(4)[8],=AG4W(4)[8],=AH0U(3)[6],=AH2O(5)[8],=AH6EZ(3)[6],=AH6FF(4)[8],
+    =AH6JS(3)[6],=AH6LE(3)[6],=AH6SU(3)[6],=AI4DB(4)[8],=AI6O(4)[7],
+    =AI9K(4)[7],=AJ4A(4)[8],=AJ4F(4)[7],=AJ7G(5)[8],=AL1VE(3)[6],=AL5P(4)[7],
+    =AL7CR(3)[6],=AL7RF(3)[6],=AL7RT(4)[6],=G8ERJ(5)[8],=K0ACP(4)[8],
+    =K0EJ(4)[8],=K0IP(3)[6],=K0LUZ(5)[8],=K0NW(3)[6],=K0PG(4)[8],=K0PJ(4)[8],
+    =K0SN(4)[6],=K0TQ(4)[8],=K0XP(3)[6],=K0ZR(5)[8],=K1DC(4)[8],=K1DW(4)[7],
+    =K1GU(4)[8],=K1KD(4)[7],=K1LT(4)[8],=K2DRH(4)[7],=K2GMY(3)[6],=K2KR(4)[7],
+    =K2PO(3)[6],=K2RD(3)[6],=K2RP(3)[6],=K2VV(4)[7],=K2YAZ(4)[8],=K3DMG(4)[8],
+    =K3EST(3)[6],=K3GP(4)[8],=K3IE(4)[8],=K3JWI(4)[8],=K3NT(4)[7],=K3PA(4)[7],
+    =K3WT(4)[7],=K3YP(4)[8],=K4AB(4)[8],=K4AFE(4)[8],=K4AMC(4)[8],
+    =K4BWP(4)[8],=K4BX(4)[8],=K4DR(4)[8],=K4DXV(4)[8],=K4FN(4)[8],
+    =K4HAL(4)[8],=K4IU(4)[7],=K4OAQ(4)[8],=K4RO(4)[8],=K4TCG(4)[8],
+    =K4TG(4)[8],=K4TZ(4)[8],=K4UU(4)[8],=K4WG(4)[8],=K4WI(4)[8],=K4WW(4)[8],
     =K4XU(3)[6],=K4YJ(4)[8],=K4ZGB(4)[8],=K5EK(5)[8],=K5GDX(4)[8],=K5KG(5)[8],
-    =K5OA(3)[6],=K5VIP(5)[8],=K5ZD(5)[8],=K6BFL(4)[7],=K6XT(4)[7],
-    =K7ABV(4)[6],=K7BV(5)[8],=K7CS(4)[8],=K7DR(4)[8],=K7IA(4)[7],=K7JOE(4)[8],
-    =K7OM(5)[8],=K7QA(4)[6],=K7SCX(4)[7],=K7SV(5)[8],=K7TD(4)[7],=K7ZYV(4)[8],
-    =K8AC(5)[8],=K8ARY(5)[8],=K8CN(5)[8],=K8IA(3)[6],=K8JQ(5)[8],=K8LF(5)[8],
-    =K8LS(4)[7],=K8NYG(5)[8],=K8PO(5)[8],=K8TR(3)[6],=K9CHP(5)[8],=K9DR(4)[7],
-    =K9DU(4)[7],=K9GWS(5)[8],=K9JF(3)[6],=K9JM(3)[6],=K9OM(5)[8],=K9OZ(4)[7],
-    =K9RS(5)[8],=K9WA(4)[7],=K9WZB(3)[6],=K9YC(3)[6],=KA3MTT(4)[8],
-    =KA4BVG(4)[8],=KA4GAV(4)[7],=KA4OTB(4)[8],=KA8HDE(4)[7],=KA8Q(5)[8],
-    =KA9FOX(4)[7],=KB4QZH(4)[8],=KB7Q(4)[6],=KB9S(4)[7],=KC2LM(4)[7],
-    =KC4HW(4)[8],=KC4NX(4)[8],=KC4SAW(4)[8],=KC4TEO(4)[8],=KC4WQ(4)[8],
-    =KC7QY(4)[7],=KC8GCR(5)[8],=KC9K(4)[7],=KD0EE(4)[8],=KD2KW(4)[7],
-    =KD4EE(4)[8],=KD5DD(4)[8],=KE0L(4)[8],=KE0YI(4)[8],=KE1B(3)[6],
-    =KE2VB(3)[6],=KE3K(4)[8],=KE4KY(4)[8],=KE8FT(3)[6],=KF4AV(4)[8],
-    =KF5BA(4)[8],=KF5MU(4)[8],=KG0F(3)[6],=KG4CUY(4)[8],=KG5HVO(4)[8],
-    =KH2BR(3)[6],=KH2D(5)[8],=KH2GM(5)[8],=KH6CT(5)[8],=KH6DHK(5)[8],
-    =KH6M(5)[8],=KH6VM(3)[6],=KH6XS(3)[6],=KI6DY(4)[7],=KI6QDH(4)[7],
-    =KI7ID(4)[7],=KJ4AOM(4)[8],=KJ4IWZ(4)[8],=KJ4M(4)[8],=KJ9C(4)[6],
-    =KK9A(5)[8],=KK9N(4)[7],=KL0MP(5)[8],=KL2RA(4)[7],=KL4CZ(4)[6],
-    =KL7HQR(3)[6],=KL7IKV(3)[6],=KL7QW(4)[7],=KL7SK(3)[6],=KM4FO(4)[8],
-    =KM4JA(4)[8],=KM7W(4)[6],=KN1CBR(4)[7],=KN4DUA(4)[8],=KN8U(5)[8],
-    =KO8SCA(5)[8],=KO9V(4)[7],=KP3M(5)[8],=KR4F(4)[8],=KS0CW(5)[8],
-    =KS4X(4)[8],=KS7T(4)[6],=KS9W(4)[7],=KT3M(4)[7],=KT4O(4)[8],=KT4RR(4)[8],
-    =KU1CW(3)[6],=KU8E(5)[8],=KV4T(4)[8],=KV8S(4)[7],=KW4J(4)[8],=KW7D(4)[7],
-    =KW7Q(4)[7],=KX2P(4)[7],=KY0Q(4)[8],=KZ1W(3)[6],=KZ4KX(4)[8],=KZ9V(4)[7],
-    =N0SMX(5)[8],=N1JM(3)[6],=N1XK(4)[7],=N2AU(3)[6],=N2BJ(4)[8],=N2IC(4)[7],
-    =N2JNR(3)[6],=N2NL(4)[8],=N3BB(4)[7],=N3BUO(4)[7],=N3CI(4)[7],=N3RA(4)[8],
-    =N3RC(3)[6],=N3ZZ(3)[6],=N4ARO(4)[8],=N4AU(4)[8],=N4BAA(4)[8],
-    =N4BCB(4)[8],=N4BCD(4)[8],=N4DW(4)[8],=N4HAI(4)[8],=N4KC(4)[8],
-    =N4KH(4)[8],=N4NA(4)[8],=N4NO(4)[8],=N4OGW(4)[8],=N4QS(4)[8],=N4SL(4)[6],
-    =N4TZ(4)[8],=N4UC(4)[8],=N4UW(4)[8],=N4VI(4)[7],=N4VV(4)[8],=N4WE(4)[8],
-    =N4ZY(4)[8],=N4ZZ(4)[8],=N5CR(3)[6],=N5CW(4)[8],=N5DX(5)[8],=N5KO(3)[6],
-    =N5RP(4)[8],=N5SMQ(5)[8],=N5TB(5)[8],=N5TOO(5)[8],=N5YT(4)[8],=N5ZO(3)[6],
-    =N6AR(5)[8],=N6DW(5)[8],=N6RSH(4)[7],=N7DR(4)[7],=N7FUL(4)[7],=N7IP(4)[6],
-    =N7IV(4)[7],=N7MZW(4)[7],=N7NG(4)[7],=N7RCS(5)[8],=N7US(4)[8],=N7WY(4)[7],
-    =N7ZZ(4)[8],=N8AID(5)[8],=N8GU(5)[8],=N8II(5)[8],=N8NA(5)[8],=N8NN(5)[8],
-    =N8OO(4)[7],=N8RA(5)[8],=N8WXQ(5)[8],=N9CIQ(4)[7],=N9GB(4)[7],
-    =N9HDE(4)[7],=N9JF(4)[7],=N9NA(3)[6],=N9NB(5)[8],=N9NC(5)[8],=N9NM(4)[7],
-    =N9OU(5)[8],=N9RV(4)[6],=N9SB(4)[7],=N9VPV(4)[7],=NA5NN(4)[8],=ND2T(3)[6],
-    =ND3N(4)[8],=ND4Y(4)[8],=NE8P(5)[8],=NE9U(4)[7],=NF4J(4)[8],=NG7A(4)[7],
-    =NH6T(4)[8],=NI7R(5)[8],=NJ4P(4)[8],=NJ8J(5)[8],=NJ8M(4)[7],=NK8Q(5)[8],
-    =NL7CQ(4)[7],=NL7D(3)[6],=NL7QC(4)[7],=NL7XM(5)[8],=NN1N(4)[7],
-    =NN4NT(4)[8],=NN4SA(4)[8],=NN5O(4)[8],=NN7A(4)[7],=NN7CW(5)[8],
-    =NN9DD(5)[8],=NO9E(5)[8],=NP2GG(5)[8],=NP3K(5)[8],=NQ6N(4)[8],=NR4L(4)[8],
-    =NR5W(3)[6],=NR7DX(4)[6],=NS2X(4)[8],=NS4X(4)[8],=NT0K(5)[8],=NW2P(3)[6],
-    =NW7R(5)[8],=NW8U(5)[8],=NX1P(3)[6],=NY6DX(5)[8],=NZ6T(5)[8],=W0BR(5)[8],
-    =W0PV(5)[8],=W0RIC(3)[6],=W0ZP(4)[8],=W1GKT(4)[8],=W1NN(4)[8],
-    =W1PDI(4)[8],=W1PR(3)[6],=W1RH(3)[6],=W1SRD(3)[6],=W2ACY(4)[7],
-    =W2GS(4)[7],=W2IY(4)[7],=W2VJN(3)[6],=W3CB(4)[8],=W3HDH(4)[8],
-    =W3HKK(4)[8],=W3NX(3)[6],=W3TB(4)[8],=W4BCG(4)[8],=W4DAN(4)[8],
-    =W4ER(4)[8],=W4GKM(4)[8],=W4KW(4)[8],=W4LC(4)[8],=W4NBS(4)[8],=W4NI(4)[8],
-    =W4NNF(4)[8],=W4NZ(4)[8],=W4PF(4)[8],=W4RYW(4)[8],=W4TLK(4)[8],
-    =W4TTM(4)[8],=W4UT(4)[8],=W5MX(4)[8],=W5NZ(4)[8],=W5UE(4)[8],=W5UJ(3)[6],
-    =W5VE(5)[8],=W5VS(5)[8],=W6GMT(4)[7],=W6KGP(4)[7],=W6LFB(4)[7],
-    =W6NWS(5)[8],=W6RLL(3)[7],=W6SFG(5)[8],=W6UB(4)[8],=W6XR(5)[8],
-    =W7EE(4)[6],=W7HJ(5)[8],=W7II(4)[7],=W7IMP(5)[8],=W7IY(5)[8],=W7KF(4)[6],
-    =W7RY(4)[7],=W7UT(4)[7],=W8AT(5)[8],=W8FJ(5)[8],=W8FN(5)[8],=W8HAP(5)[8],
-    =W8HGH(5)[8],=W8LYJ(4)[7],=W8OV(4)[7],=W8TK(3)[6],=W9CF(3)[6],=W9DC(5)[8],
-    =W9ET(4)[7],=W9FI(3)[6],=W9JA(4)[7],=W9JEF(4)[7],=W9KKN(3)[6],
-    =W9MAF(4)[7],=W9PL(3)[6],=W9RM(4)[7],=W9RNY(4)[7],=WA0WWW(3)[6],
-    =WA1FCN(4)[8],=WA1UJU(4)[8],=WA2VYA(4)[7],=WA3C(4)[8],=WA4JA(4)[8],
-    =WA5POK(4)[8],=WA8KAN(5)[8],=WA8OJR(5)[8],=WA8ZBT(4)[7],=WB2JEP(3)[6],
-    =WB3JFS(3)[6],=WB4YDY(4)[8],=WB8BPU(5)[8],=WB8YYY(5)[8],=WB9QAF(4)[7],
-    =WC7S(4)[7],=WE5P(4)[8],=WE6EZ(4)[7],=WF7T(4)[8],=WF9A(5)[8],=WH0AI(4)[7],
-    =WH6AQ(5)[8],=WH6LE(5)[8],=WH7R(4)[7],=WJ9B(3)[6],=WL7OU(4)[7],
-    =WM5DX(4)[8],=WN7S(5)[8],=WO7U(4)[7],=WP3ME(5)[8],=WQ5L(4)[8],=WR3O(4)[8],
-    =WS6K(4)[8],=WS6X(5)[8],=WS7X(5)[8],=WS9M(5)[8],=WT2P(4)[8],=WT8WV(5)[8],
-    =WU0B(5)[8],=WU9B(3)[6],=WV4P(4)[8],=WV8SW(5)[8],=WW4R(4)[8],=WW5M(4)[8],
-    =WX4W(4)[8],=WX5S(3)[6],=WY6K(4)[7],=WY7FD(4)[7],=WZ1Y(4)[7],=WZ4F(4)[8],
-    =WZ7I(5)[8],=WZ8T(3)[6];
+    =K5OA(3)[6],=K5VIP(5)[8],=K5ZD(5)[8],=K6ND(5)[8],=K6XT(4)[7],=K6ZB(4)[7],
+    =K7ABV(4)[6],=K7BG(4)[7],=K7BV(5)[8],=K7CS(4)[8],=K7DR(4)[8],=K7GM(5)[8],
+    =K7IA(4)[7],=K7JOE(4)[8],=K7OM(5)[8],=K7QA(4)[6],=K7RB(4)[7],=K7SCX(4)[7],
+    =K7SV(5)[8],=K7TD(4)[7],=K8AC(5)[8],=K8ARY(5)[8],=K8CN(5)[8],=K8IA(3)[6],
+    =K8JQ(5)[8],=K8LBQ(5)[8],=K8LF(5)[8],=K8LS(4)[7],=K8NYG(5)[8],=K8TE(4)[7],
+    =K8TR(3)[6],=K9CHP(5)[8],=K9DR(4)[7],=K9DU(4)[7],=K9GS(5)[8],=K9JM(3)[6],
+    =K9MK(4)[7],=K9MWM(4)[7],=K9OZ(4)[7],=K9PY(3)[6],=K9RS(5)[8],=K9RZ(3)[6],
+    =K9WA(4)[7],=K9YC(3)[6],=KA3MTT(4)[8],=KA4GAV(4)[7],=KA4OTB(4)[7],
+    =KA7PNH(4)[7],=KA8HDE(4)[7],=KA8Q(5)[8],=KA9FOX(4)[7],=KA9VVQ(4)[7],
+    =KB2S(3)[6],=KB4QZH(4)[8],=KB9S(4)[7],=KC2LM(4)[7],=KC4HW(4)[8],
+    =KC4NX(4)[8],=KC4SAW(4)[8],=KC4TEO(4)[8],=KC4WQ(4)[8],=KC7QY(4)[7],
+    =KC8GCR(5)[8],=KC8J(3)[6],=KC9K(4)[7],=KD0EE(4)[8],=KD2KW(4)[7],
+    =KD4EE(4)[8],=KD4TRG(4)[8],=KD5DD(4)[8],=KD7RF(4)[8],=KD9QS(5)[8],
+    =KE0L(4)[8],=KE0YI(4)[8],=KE1B(3)[6],=KE2VB(3)[6],=KE3K(4)[8],
+    =KE4KY(4)[8],=KE8FT(3)[6],=KF5BA(4)[8],=KF5MU(4)[8],=KG0F(3)[6],
+    =KG4CUY(4)[8],=KG5HVO(4)[8],=KH2AR(4)[7],=KH2BR(3)[6],=KH2D(5)[8],
+    =KH2GM(4)[8],=KH2PM(5)[8],=KH2SR(3)[6],=KH2TJ(3)[6],=KH6CT(5)[8],
+    =KH6GK(3)[6],=KH6M(5)[8],=KH6VM(3)[6],=KH6XS(3)[6],=KH7FC(5)[8],
+    =KI6DY(4)[8],=KI6QDH(4)[7],=KI8I(5)[8],=KJ4AOM(4)[8],=KJ4M(4)[8],
+    =KJ9C(4)[6],=KK9A(5)[8],=KK9N(4)[7],=KL0SS(5)[8],=KL1SE(4)[8],
+    =KL2AX(4)[7],=KL7DJ(3)[6],=KL7HQR(3)[6],=KL7IKV(3)[6],=KL7NW(4)[7],
+    =KL7QW(4)[7],=KL7SK(3)[6],=KM4CH(4)[8],=KM4FO(4)[8],=KM4JA(4)[8],
+    =KM4JAK(4)[8],=KM4RO(4)[8],=KM6Z(4)[8],=KM7W(4)[6],=KN1CBR(4)[7],
+    =KO4OL(4)[8],=KO4Z(4)[8],=KO8SCA(5)[8],=KO8V(5)[8],=KO9V(4)[7],
+    =KP2X(4)[7],=KP3M(5)[8],=KP3U(5)[8],=KP4MD(3)[6],=KR4F(4)[8],=KS0CW(5)[8],
+    =KS4X(4)[8],=KS7T(4)[6],=KS9W(4)[7],=KT3M(4)[7],=KT4O(4)[8],=KU1CW(3)[6],
+    =KU8E(5)[8],=KV3T(4)[8],=KV8S(4)[7],=KW4J(4)[8],=KW4YA(4)[8],=KW7Q(4)[7],
+    =KX2P(4)[7],=KX4X(4)[8],=KY0Q(4)[8],=KY0W(3)[6],=KZ1W(3)[6],=KZ9V(4)[7],
+    =N0YY(5)[8],=N2BJ(4)[8],=N2IC(4)[7],=N2JNR(3)[6],=N2NL(4)[8],=N3BB(4)[7],
+    =N3CI(4)[7],=N3RA(4)[8],=N3RC(3)[6],=N3ZZ(3)[6],=N4ARO(4)[8],=N4AU(4)[8],
+    =N4BAA(4)[8],=N4BCD(4)[8],=N4DW(4)[8],=N4EL(4)[8],=N4HAI(4)[8],
+    =N4JRG(4)[8],=N4KH(4)[8],=N4NO(4)[8],=N4OGW(4)[8],=N4QS(4)[8],=N4SS(4)[8],
+    =N4TY(4)[8],=N4TZ(4)[8],=N4UC(4)[8],=N4VI(4)[7],=N4VV(4)[8],=N4WE(4)[8],
+    =N4ZY(4)[8],=N4ZZ(4)[8],=N5CR(3)[6],=N5CW(4)[8],=N5DX(5)[8],=N5EP(4)[8],
+    =N5GF(5)[8],=N5KO(3)[6],=N5RP(4)[8],=N5SMQ(5)[8],=N5TOO(5)[8],=N5YT(4)[8],
+    =N5ZO(3)[6],=N6AR(5)[8],=N6DW(5)[8],=N6EE(5)[8],=N6JS(5)[8],=N6RSH(4)[7],
+    =N7DR(4)[7],=N7IV(4)[7],=N7MZW(4)[7],=N7RCS(5)[8],=N7US(4)[8],=N7WY(4)[7],
+    =N7ZZ(4)[8],=N8AID(5)[8],=N8CL(5)[8],=N8II(5)[8],=N8IVN(5)[8],=N8KH(5)[8],
+    =N8NA(5)[8],=N8NN(5)[8],=N8OO(4)[7],=N8RA(5)[8],=N8WXQ(5)[8],=N9CIQ(4)[7],
+    =N9GB(4)[7],=N9HDE(4)[7],=N9JF(4)[7],=N9NA(3)[6],=N9NB(5)[8],=N9NC(5)[8],
+    =N9NM(4)[7],=N9OU(5)[8],=N9RV(4)[6],=N9SB(4)[7],=N9TX(4)[7],=N9VPV(4)[7],
+    =NA2U(3)[6],=NA4A(4)[8],=NA5NN(4)[8],=ND2T(3)[6],=ND3N(4)[8],=ND4Y(4)[8],
+    =NE8P(5)[8],=NE9U(4)[7],=NF4J(4)[8],=NG7A(4)[7],=NH6L(4)[7],=NH6PK(4)[8],
+    =NH6T(4)[8],=NH6Z(3)[6],=NI7R(5)[8],=NJ4P(4)[8],=NJ8J(5)[8],=NJ8M(4)[7],
+    =NK8Q(5)[8],=NL7CQ(4)[7],=NL7D(3)[6],=NL7P(5)[8],=NL7QC(4)[7],
+    =NL7WA(5)[8],=NL7XM(5)[8],=NL7XT(4)[8],=NN1N(4)[7],=NN4NT(4)[8],
+    =NN5O(4)[8],=NN7A(4)[7],=NN7CW(5)[8],=NN9DD(5)[8],=NO9E(5)[8],
+    =NP2GG(5)[8],=NP2JV(5)[8],=NP3FB(4)[8],=NP3K(5)[8],=NQ6N(4)[8],
+    =NR4L(4)[8],=NR7DX(4)[6],=NS4X(4)[8],=NT0K(5)[8],=NV4B(4)[8],=NW8U(5)[8],
+    =NX1P(3)[6],=NY6DX(5)[8],=NZ7Q(4)[7],=W0BR(5)[8],=W0NA(5)[8],=W0PV(5)[8],
+    =W0QQG(5)[8],=W0RIC(3)[6],=W0YK(3)[6],=W0ZP(4)[8],=W1NN(4)[8],=W1PR(3)[6],
+    =W1RH(3)[6],=W1SRD(3)[6],=W2ACY(4)[7],=W2GS(4)[7],=W2UP(4)[7],
+    =W2VJN(3)[6],=W3CB(4)[8],=W3HDH(4)[8],=W3HKK(4)[8],=W3NX(3)[6],
+    =W3TB(4)[8],=W4BCG(4)[8],=W4DAN(4)[8],=W4EF(3)[6],=W4ER(4)[8],
+    =W4GKM(4)[8],=W4JSI(4)[8],=W4KW(4)[8],=W4LC(4)[8],=W4NBS(4)[8],
+    =W4NNF(4)[8],=W4NZ(4)[8],=W4PA(4)[8],=W4PF(4)[8],=W4SSF(4)[8],
+    =W4TLK(4)[8],=W4UT(4)[8],=W4UWC(4)[8],=W5MX(4)[8],=W5NZ(4)[8],=W5UJ(3)[6],
+    =W5VS(5)[8],=W6FB(4)[7],=W6GMT(4)[7],=W6KGP(4)[7],=W6LFB(4)[7],
+    =W6NCB(4)[8],=W6NWS(5)[8],=W6SFG(5)[8],=W6UB(4)[8],=W7DXX(4)[7],
+    =W7EE(4)[6],=W7GKF(5)[8],=W7II(4)[7],=W7IMP(5)[8],=W7LG(5)[8],=W7RF(4)[7],
+    =W7RY(4)[7],=W7UT(4)[7],=W7XT(4)[6],=W8AKS(5)[8],=W8AT(5)[8],=W8FJ(5)[8],
+    =W8FN(5)[8],=W8HAP(5)[8],=W8LYJ(4)[7],=W8OV(4)[7],=W8TK(3)[6],=W9CF(3)[6],
+    =W9DC(5)[8],=W9ET(4)[7],=W9JA(4)[7],=W9KKN(3)[6],=W9RNY(4)[7],
+    =WA0LJM(5)[8],=WA0WWW(3)[6],=WA1FCN(4)[8],=WA1FMM(4)[7],=WA1UJU(4)[8],
+    =WA2VYA(4)[7],=WA3C(4)[8],=WA4JA(4)[8],=WA5POK(4)[8],=WA8KAN(5)[8],
+    =WA8OJR(5)[8],=WA8ZBT(4)[7],=WB4YDL(4)[8],=WB4YDY(4)[8],=WB5WAJ(4)[8],
+    =WB7GR(4)[7],=WB8YYY(5)[8],=WC7S(4)[7],=WE5P(4)[8],=WE6EZ(4)[7],
+    =WF7T(4)[8],=WF9A(5)[8],=WH0AI(4)[7],=WH6AQ(5)[8],=WH6FZY(3)[6],
+    =WH6LE(5)[8],=WH7R(4)[7],=WJ9B(3)[6],=WL5H(4)[7],=WL7OU(4)[7],
+    =WM5DX(4)[8],=WN7S(5)[8],=WN7Y(4)[7],=WO7U(4)[7],=WP2C(5)[8],=WP2J(5)[8],
+    =WP3ME(5)[8],=WQ5L(4)[8],=WR3O(4)[8],=WR4T(4)[8],=WR8AA(5)[8],=WS6K(4)[8],
+    =WS6X(5)[8],=WS7X(5)[8],=WS9M(5)[8],=WT2P(4)[8],=WT7TT(4)[7],=WT8WV(5)[8],
+    =WU9B(3)[6],=WV4P(4)[8],=WW4R(4)[8],=WW5M(4)[8],=WX4W(4)[8],=WX5S(3)[6],
+    =WY7FD(4)[7],=WY7M(4)[7],=WZ4F(4)[8],=WZ7I(5)[8],=WZ8T(3)[6];
 Guantanamo Bay:           08:  11:  NA:   20.00:    75.00:     5.0:  KG4:
-    KG4,=KG4MA,=KG4NE;
+    KG4,=KG4NE;
 Mariana Islands:          27:  64:  OC:   15.18:  -145.72:   -10.0:  KH0:
-    AH0,KH0,NH0,WH0,=K8RN,=KI5DQL,=NH2B;
+    AH0,KH0,NH0,WH0,=NH2B;
 Baker & Howland Islands:  31:  61:  OC:    0.00:   176.00:    12.0:  KH1:
     AH1,KH1,NH1,WH1;
 Guam:                     27:  64:  OC:   13.37:  -144.70:   -10.0:  KH2:
-    AH2,KH2,NH2,WH2,=K4QFS,=KG6DX,=KG6JDX,=KJ6AYQ,=KN4LVP,=N0RY;
+    AH2,KH2,NH2,WH2,=AH0IM,=KA1I,=KC2IIT,=KF7BMU,=KG6DX,=KG6JDX,=WA0OII;
 Johnston Island:          31:  61:  OC:   16.72:   169.53:    10.0:  KH3:
     AH3,KH3,NH3,WH3;
 Midway Island:            31:  61:  OC:   28.20:   177.37:    11.0:  KH4:
@@ -632,40 +636,41 @@ Midway Island:            31:  61:  OC:   28.20:   177.37:    11.0:  KH4:
 Palmyra & Jarvis Islands: 31:  61:  OC:    5.87:   162.07:    11.0:  KH5:
     AH5,KH5,NH5,WH5;
 Hawaii:                   31:  61:  OC:   21.12:   157.48:    10.0:  KH6:
-    AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,=K2GT,=K4XV,=K6HNL,=K9FD,=KA7BSK,=KB3HXI,
-    =KB5OXR,=KB6EGA,=KC2CLQ,=KD0JNO,=KD0OXU,=KD4GVR,=KD7GWI,=KD8LYB,=KE0JSB,
-    =KE0KIE,=KE5VQB,=KE6MKW,=KE6TIX,=KF4UJC,=KG4CAN,=KG4TZD,=KG5CH,=KG5CNO,
-    =KG5IVP,=KG7ZJM,=KH0WJ,=KH3AE,=KI7AUZ,=KJ6COM,=KJ6CQT,=KJ6FDF,=KK4RNF,
-    =KL3JC,=KM6RWE,=KM6UVP,=N0VYO,=N3BQY,=N3GWR,=N4BER,=N7BMD,=NB6R,=ND1A,
-    =W6QPV,=W7NX,=WA6AW,=WA6CZL,=WA6QDQ,=WB4JTT;
+    AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,=AB7RT,=AG5LT,=AG6QD,=AK4RA,=K1TOR,=K2GT,
+    =K2SHO,=K2SOO,=K6BHG,=K6TWG,=K9FD,=KB1HGW,=KB3UWV,=KB3UWW,=KB3VLO,=KB6EGA,
+    =KC7ELH,=KC8JNV,=KD4NFW,=KD6APH,=KE6OTK,=KF6YYH,=KF7QMX,=KF7QVM,=KG6EZW,
+    =KG6HFK,=KG7JHH,=KG7KDP,=KH0WJ,=KH3AE,=KI7PEZ,=KI7ZTQ,=KJ6CAV,=KJ6MQL,
+    =KJ6MSJ,=KJ6NIA,=KJ6NIB,=KJ6SGY,=KK4EGT,=KK4IUT,=KK6DIT,=KK6GRC,=KK6QAI,
+    =KM4FPS,=KM6HPE,=KN4KYO,=KO4LCM,=KW6CR,=N7AK,=NH2IY,=NR0G,=W1GDM,=W6AKL,
+    =W6DSD,=W6RZY,=W7NX,=W7WKS,=WA6QDQ,=WB4JTT,=WL7CSW;
 Kure Island:              31:  61:  OC:   29.00:   178.00:    10.0:  KH7K:
     AH7K,KH7K,NH7K,WH7K;
 American Samoa:           32:  62:  OC:  -14.32:   170.78:    11.0:  KH8:
-    AH8,KH8,NH8,WH8;
+    AH8,KH8,NH8,WH8,=W9CG;
 Swains Island:            32:  62:  OC:  -11.05:   171.25:    11.0:  KH8/s:
     =K9CS/KH8S;
 Wake Island:              31:  65:  OC:   19.28:  -166.63:   -12.0:  KH9:
     AH9,KH9,NH9,WH9;
 Alaska:                   01:  01:  NA:   61.40:   148.87:     8.0:  KL:
-    AL,KL,NL,WL,=AJ4MY,=K1TMT,=K4PSG,=K5RD,=K7BUF,=K7CAP,=K7VRK,=KA1NCN,
-    =KB5NOW,=KB5YLG,=KB9THD,=KC0EFL,=KC0GLN,=KC1LVR,=KC5NHL,=KC9IKH,=KD0ONB,
-    =KD2NPD,=KD5MQC,=KD7OOS,=KD8KQL,=KD9TK,=KE5WGZ,=KE7PXV,=KE7ZXH,=KF3L,
-    =KF5UBP,=KF7ARC,=KF7FLL,=KF7FLM,=KF7ING,=KF7ITN,=KF7KTH,=KF7WVE,=KG7ZEV,
-    =KJ4YOY,=KJ6RFQ,=KK6SNS,=KM6YOD,=KN4ENR,=KN4LJD,=KN4RXC,=KO4DHN,=KW4XD,
-    =N6QEK,=N7CGC,=N7DKL,=N7DUD,=NH2LS,=NU9Q,=W0ZEE,=W1JM,=W1LYD,=W3MKG,=W9CG,
-    =WA1FVJ,=WH6GBB,=WH6GCO,=WW4AL;
+    AL,KL,NL,WL,=AF7UM,=K4WGX,=K6SAS,=KA1NCN,=KA7GAL,=KB1IEV,=KB2SVN,=KB9SZM,
+    =KC0JVX,=KC2VSR,=KC3MPG,=KC6ZLZ,=KC8VKY,=KC9RQZ,=KD0OAK,=KD5KVP,=KD7RYC,
+    =KE0PRX,=KE7BAQ,=KE8CCS,=KF7MVM,=KG6HTQ,=KG7SRS,=KI4YRQ,=KI5KBN,=KJ6NPJ,
+    =KK4BAN,=KK4CAS,=KK4CAU,=KK4CHH,=KK4WWH,=KK4WWI,=KK7I,=KM6EED,=KN4CCY,
+    =KN4MGX,=KN4MTF,=N1ROR,=N1TX,=N6IGV,=N6QEK,=N6RGP,=NN7C,=NP4TY,=W0HPD,
+    =W1LYD,=W3MKG,=W5ERV,=W5SPY,=W6SMA,=W7CB,=W7EGG,=W7JAL,=WA1FVJ,=WA4BUD,
+    =WA4RRE,=WB5EAA,=WB7ULO,=WB8BRU,=WE9H,=WH7DC,=WI5GUY;
 Navassa Island:           08:  11:  NA:   18.40:    75.00:     5.0:  KP1:
     KP1,NP1,WP1;
 US Virgin Islands:        08:  11:  NA:   17.73:    64.80:     4.0:  KP2:
-    KP2,NP2,WP2,=K5KUB,=K9VV,=KV4CF,=KV4KW,=W4LIS;
+    KP2,NP2,WP2,=K9VV,=KD6VXI,=KV4BT,=W4LIS;
 Puerto Rico:              08:  11:  NA:   18.18:    66.55:     4.0:  KP4:
-    KP3,KP4,NP3,NP4,WP3,WP4,=KB1CKX,=KB2BVX,=KB3TTV,=KC2GRZ,=KC2TE,=KC5FWS,
-    =KF5YGN,=KF5YGX,=KP2Z,=N2FVA,=N2IBR,=N4MMT;
+    KP3,KP4,NP3,NP4,WP3,WP4,=KC3EUQ,=KH2RU,=KI5JZC,=KN4NAR,=KP2H,=KP2Z,=N4AKO,
+    =N5YIZ,=WB2HMY;
 Desecheo Island:          08:  11:  NA:   18.08:    67.88:     4.0:  KP5:
     KP5,NP5,WP5;
 Norway:                   14:  18:  EU:   61.00:    -9.00:    -1.0:  LA:
     LA,LB,LC,LD,LE,LF,LG,LH,LI,LJ,LK,LL,LM,LN;
-Argentina:                13:  14:  SA:  -34.80:    65.92:     3.0:  LU:
+Argentina:                13:  14:  SA:  -32.50:    62.13:     3.0:  LU:
     AY,AZ,L1,L2,L3,L4,L5,L6,L7,L8,L9,LO,LP,LQ,LR,LS,LT,LU,LV,LW,AY0V[16],
     AY0W[16],AY0X[16],AY0Y[16],AY1V[16],AY1W[16],AY1X[16],AY1Y[16],AY2V[16],
     AY2W[16],AY2X[16],AY2Y[16],AY3V[16],AY3W[16],AY3X[16],AY3Y[16],AY4V[16],
@@ -761,10 +766,16 @@ Argentina:                13:  14:  SA:  -34.80:    65.92:     3.0:  LU:
     LW2W[16],LW2X[16],LW2Y[16],LW3V[16],LW3W[16],LW3X[16],LW3Y[16],LW4V[16],
     LW4W[16],LW4X[16],LW4Y[16],LW5V[16],LW5W[16],LW5X[16],LW5Y[16],LW6V[16],
     LW6W[16],LW6X[16],LW6Y[16],LW7V[16],LW7W[16],LW7X[16],LW7Y[16],LW8V[16],
-    LW8W[16],LW8X[16],LW8Y[16],LW9V[16],LW9W[16],LW9X[16],LW9Y[16],
-    =LU1AW/X[16],=LU1QR/Q,=LU2DVI/H,=LU3HT/H,=LU5QR/Q;
+    LW8W[16],LW8X[16],LW8Y[16],LW9V[16],LW9W[16],LW9X[16],LW9Y[16],=LT2F/F,
+    =LU1AW/X[16],=LU1COP/D,=LU1COP/E,=LU1DAA/D,=LU1LT/L,=LU1VHP/V[16],
+    =LU1VYL/V[16],=LU1VZ/V[16],=LU1YAX/V[16],=LU2ALF/D,=LU2DVI/H,=LU2EZG/D,
+    =LU2JAL/J,=LU3DVN/X[16],=LU3DYN/D,=LU3JVR/J,=LU3VAL/V[16],=LU4AAO/D,
+    =LU4ARU/D,=LU4FM/F,=LU4LAS/L,=LU5DQ/D,=LU5DSM/ANT,=LU5JAH/J,=LU5JIB/J,
+    =LU5JU/J,=LU5YF/V[16],=LU7YG/Y[16],=LU8JLB/J,=LU8VCC/V[16],=LU9ERA/H,
+    =LU9JDZ/J,=LU9JLB/J,=LU9JZX/J,=LU9LCF/L,=LW1ECO/D,=LW3DBH/D,=LW3EK/D,
+    =LW3EMP/L;
 Luxembourg:               14:  27:  EU:   50.00:    -6.00:    -1.0:  LX:
-    LX;
+    LX,=LX9S/J;
 Lithuania:                15:  29:  EU:   55.45:   -23.63:    -2.0:  LY:
     LY;
 Bulgaria:                 20:  28:  EU:   42.83:   -25.08:    -2.0:  LZ:
@@ -774,8 +785,8 @@ Peru:                     10:  12:  SA:  -10.00:    76.00:     5.0:  OA:
 Lebanon:                  20:  39:  AS:   33.83:   -35.83:    -2.0:  OD:
     OD;
 Austria:                  15:  28:  EU:   47.33:   -13.33:    -1.0:  OE:
-    OE,=4U0R,=4U1A,=4U1VIC,=4U2STAYHOME,=4U2U,=4Y1A,=C7A;
-Finland:                  15:  18:  EU:   63.78:   -27.08:    -2.0:  OH:
+    OE,=4U0R,=4U1A,=4U1VIC,=4U2U,=4Y1A,=C7A;
+Finland:                  15:  18:  EU:   61.38:   -24.82:    -2.0:  OH:
     OF,OG,OH,OI,OJ;
 Aland Islands:            15:  18:  EU:   60.13:   -20.37:    -2.0:  OH0:
     OF0,OG0,OH0,OI0;
@@ -800,7 +811,8 @@ Aruba:                    09:  11:  SA:   12.53:    69.98:     4.0:  P4:
 DPR of Korea:             25:  44:  AS:   39.78:  -126.30:    -9.0:  P5:
     P5,P6,P7,P8,P9;
 Netherlands:              14:  27:  EU:   52.28:    -5.47:    -1.0:  PA:
-    PA,PB,PC,PD,PE,PF,PG,PH,PI;
+    PA,PB,PC,PD,PE,PF,PG,PH,PI,=PA1AW/J,=PA1BP/J,=PA3ESO/J,=PA6JAM/J,
+    =PA6SJB/J,=PC6RH/J;
 Curacao:                  09:  11:  SA:   12.17:    69.00:     4.0:  PJ2:
     PJ2;
 Bonaire:                  09:  11:  SA:   12.20:    68.25:     4.0:  PJ4:
@@ -832,7 +844,7 @@ Suriname:                 09:  12:  SA:    4.00:    56.00:     3.0:  PZ:
 Franz Josef Land:         40:  75:  EU:   80.68:   -49.92:    -3.0:  R1FJ:
     RI1F;
 Western Sahara:           33:  46:  AF:   24.82:    13.85:     0.0:  S0:
-    S0;
+    S0,=VERSION;
 Bangladesh:               22:  41:  AS:   24.12:   -89.65:    -6.0:  S2:
     S2,S3;
 Slovenia:                 15:  28:  EU:   46.00:   -14.00:    -1.0:  S5:
@@ -841,7 +853,7 @@ Seychelles:               39:  53:  AF:   -4.67:   -55.47:    -4.0:  S7:
     S7;
 Sao Tome & Principe:      36:  47:  AF:    0.22:    -6.57:     0.0:  S9:
     S9;
-Sweden:                   14:  18:  EU:   61.20:   -14.57:    -1.0:  SM:
+Sweden:                   14:  18:  EU:   58.90:   -15.33:    -1.0:  SM:
     7S,8S,SA,SB,SC,SD,SE,SF,SG,SH,SI,SJ,SK,SL,SM;
 Poland:                   15:  28:  EU:   52.28:   -18.67:    -1.0:  SP:
     3Z,HF,SN,SO,SP,SQ,SR;
@@ -850,13 +862,17 @@ Sudan:                    34:  48:  AF:   14.47:   -28.62:    -3.0:  ST:
 Egypt:                    34:  38:  AF:   26.28:   -28.60:    -2.0:  SU:
     6A,6B,SS,SU;
 Greece:                   20:  28:  EU:   39.78:   -21.78:    -2.0:  SV:
-    J4,SV,SW,SX,SY,SZ;
+    J4,SV,SW,SX,SY,SZ,=SV2JAO/J,=SX2IMA/J;
 Mount Athos:              20:  28:  EU:   40.00:   -24.00:    -2.0:  SV/a:
     =SV2ASP/A,=SV2RSG/A;
 Dodecanese:               20:  28:  EU:   36.17:   -27.93:    -2.0:  SV5:
-    J45,SV5,SW5,SX5,SY5,SZ5;
+    J45,SV5,SW5,SX5,SY5,SZ5,=SX200ADL,=SX200AZK,=SX200AZR,=SX200BYR,=SX200CJK,
+    =SX200DKL,=SX200DZX,=SX200FRT,=SX200KKU,=SX200SKE,=SZ200RDS;
 Crete:                    20:  28:  EU:   35.23:   -24.78:    -2.0:  SV9:
-    J49,SV9,SW9,SX9,SY9,SZ9,=SV0XAZ;
+    J49,SV9,SW9,SX9,SY9,SZ9,=SV0XAZ,=SX200ANK,=SX200BMG,=SX200CAF,=SX200CJO,
+    =SX200COL,=SX200CVY,=SX200DJO,=SX200FBG,=SX200FBK,=SX200JI,=SX200KNA,
+    =SX200MBH,=SX200QWP,=SX200RGI,=SX200RKU,=SX200RMU,=SX200RNG,=SY200CGZ,
+    =SZ200ERK;
 Tuvalu:                   31:  65:  OC:   -8.50:  -179.20:   -12.0:  T2:
     T2;
 Western Kiribati:         31:  65:  OC:    1.42:  -173.00:   -12.0:  T30:
@@ -874,9 +890,9 @@ San Marino:               15:  28:  EU:   43.95:   -12.45:    -1.0:  T7:
 Palau:                    27:  64:  OC:    7.45:  -134.53:    -9.0:  T8:
     T8;
 Asiatic Turkey:           20:  39:  AS:   39.18:   -35.65:    -2.0:  TA:
-    TA,TB,TC,YM,=TA1BZ/2,=TA1C/2,=TA1D/3,=TA1D/4,=TA1FA/2,=TA1HZ/2;
+    TA,TB,TC,YM,=TA1C/2,=TA1D/3;
 European Turkey:          20:  39:  EU:   41.02:   -28.97:    -2.0:  *TA1:
-    TA1,TB1,TC1,YM1,=TA6CQ/1;
+    TA1,TB1,TC1,YM1;
 Iceland:                  40:  17:  EU:   64.80:    18.73:     0.0:  TF:
     TF;
 Guatemala:                07:  11:  NA:   15.50:    90.30:     6.0:  TG:
@@ -973,21 +989,22 @@ European Russia:          16:  29:  EU:   53.65:   -41.37:    -4.0:  UA:
     UH4W[30],UH8F(17)[30],UH8G(17)[30],UH8X(17)[20],UH9F(17)[30],UH9G(17)[30],
     UH9X(17)[20],UI1I(17)[20],UI1N[19],UI1O[19],UI1P[20],UI1Z[19],UI4H[30],
     UI4I[30],UI4W[30],UI8F(17)[30],UI8G(17)[30],UI8X(17)[20],UI9F(17)[30],
-    UI9G(17)[30],UI9X(17)[20],=R8FF/7,=RA9UUY/6,=RT9T/3,=RX9KT/6,=R100RK[19],
+    UI9G(17)[30],UI9X(17)[20],=R9JBF/1,=RA9ULL/6,=RT9T/3,=UA0QNI/3,=UB8S/P,
+    =R0AI/3,=R325G[19],=R325P[19],=R325SF[19],=R325SSF[19],=R325Z[19],
     =R4HAT[29],=R4HC[29],=R4HCE[29],=R4HCZ[29],=R4HD[29],=R4HDC[29],
     =R4HDR[29],=R4HL[29],=R4IC[29],=R4ID[29],=R4II[29],=R4IK[29],=R4IM[29],
-    =R4IN[29],=R4IO[29],=R4IT[29],=R8FF/3,=R8FF/P,=R8MB/1(17)[20],=R8XF/1,
-    =RA4HL[29],=RA4NCC[30],=RC4HT[29],=RC4I[29],=RJ4I[29],=RJ4P[30],
-    =RK4HM[29],=RK4P[30],=RM4I[29],=RM4R[30],=RN4HFJ[29],=RN4HIF[29],=RT9K/6,
-    =RT9T/1,=RU4HD[29],=RU4HP[29],=RU4I[29],=RW4HM[29],=RW4HTK[29],=RW4HW[29],
-    =RW4HZ[29],=RW9WJ/4[30],=UA3LMR/P,=UA4H[29],=UA4HBM[29],=UA4HGL[29],
-    =UA4HIP[29],=UA4HRZ[29],=UA4HY[29],=UA4NF[30],=UA4PN[30],=UA4RF[30],
-    =UB5O/1[19],=UC4I[29],=UI4I[29];
+    =R4IN[29],=R4IO[29],=R4IT[29],=R4WAN/P[30],=R6LCA/J,=R8MB/1(17)[20],
+    =R9FCS/4,=RA4HL[29],=RA4NCC[30],=RA60ANT[19],=RC4HT[29],=RC4I[29],
+    =RJ4I[29],=RK4HM[29],=RK4P[30],=RL1I/P(17)[20],=RM4I[29],=RN4HFJ[29],
+    =RN4HIF[29],=RN60ANT[19],=RT9K/6,=RU4HD[29],=RU4HP[29],=RU4I[29],
+    =RW4HM[29],=RW4HTK[29],=RW4HW[29],=RW4HZ[29],=RW9WJ/4[30],=UA3LMR/P,
+    =UA4H[29],=UA4HBM[29],=UA4HGL[29],=UA4HIP[29],=UA4HRZ[29],=UA4HY[29],
+    =UA4NF[30],=UA4PN[30],=UA5B/4,=UC4I[29],=UE80SKR,=UI4I[29];
 Kaliningrad:              15:  29:  EU:   54.72:   -20.52:    -3.0:  UA2:
     R2F,R2K,RA2,RC2F,RC2K,RD2F,RD2K,RE2F,RE2K,RF2F,RF2K,RG2F,RG2K,RJ2F,RJ2K,
     RK2F,RK2K,RL2F,RL2K,RM2F,RM2K,RN2F,RN2K,RO2F,RO2K,RQ2F,RQ2K,RT2F,RT2K,
     RU2F,RU2K,RV2F,RV2K,RW2F,RW2K,RX2F,RX2K,RY2F,RY2K,RZ2F,RZ2K,U2F,U2K,UA2,
-    UB2,UC2,UD2,UE2,UF2,UG2,UH2,UI2,=R2MWO,=UB5O/2;
+    UB2,UC2,UD2,UE2,UF2,UG2,UH2,UI2,=R2MWO,=R325B,=R325BF;
 Asiatic Russia:           17:  30:  AS:   55.88:   -84.08:    -7.0:  UA9:
     R0,R8(17)[30],R9,RA0,RA8(17)[30],RA9,RC0,RC8(17)[30],RC9,RD0,RD8(17)[30],
     RD9,RE0,RE8(17)[30],RE9,RF0,RF8(17)[30],RF9,RG0,RG8(17)[30],RG9,RI0,
@@ -1106,9 +1123,10 @@ Asiatic Russia:           17:  30:  AS:   55.88:   -84.08:    -7.0:  UA9:
     UI8O(18)[31],UI8P(18)[31],UI8S(16)[30],UI8T(16)[30],UI8U(18)[31],
     UI8V(18)[31],UI8W(16)[30],UI8Y(18)[31],UI8Z(18)[31],UI9I(18)[31],
     UI9M(17)[30],UI9P(18)[31],UI9S(16),UI9T(16),UI9V(18)[31],UI9W(16),
-    =R2ET/9(18)[31],=R8FF/8(17)[30],=R9WCJ/8(17)[30],=RA/UT5IA(19)[23],
-    =RA0QK/8(17)[30],=RN9S(16),=RT8T(16)[30],=RT9S(16),=RU20RU(17)[30],
-    =RX9WT/8(17)[30],=UB5O/4(16),=UB5O/9(18)[31],=UD6AOP/0(19)[25];
+    =R2ET/9(18)[31],=R325F(19)[34],=R325TF(19)[34],=R4FBJ/9/P(18)[32],
+    =R800SAN(18)[32],=R9WGK/P,=RA0QK/8(17)[30],=RA4RU/9[20],=RA9MX/0(18)[32],
+    =RK60ANT(18)[32],=RL60ANT(19)[34],=RN9S(16),=RT60ANT,=RT9S(16),
+    =RV7B/9[20],=RX6DL/8/P(17)[30],=RX9SN/P(16),=RX9WT/P,=UD6AOP/0(19)[35];
 Uzbekistan:               17:  30:  AS:   41.40:   -63.97:    -5.0:  UK:
     UJ,UK,UL,UM;
 Kazakhstan:               17:  30:  AS:   48.17:   -65.18:    -5.0:  UN:
@@ -1153,31 +1171,27 @@ Canada:                   05:  09:  NA:   44.35:    78.75:     5.0:  VE:
     CI0(2)[4],CI1(1)[2],CI2,CJ2[4],CK2[4],CY1,CY2(2),CZ0(2)[4],CZ1(1)[2],CZ2,
     VA2[4],VB2[4],VC2[4],VD1,VD2(2),VE2[4],VF0(2)[4],VF1(1)[2],VF2,VG2[4],VO1,
     VO2(2),VX2[4],VY0(2)[4],VY1(1)[2],VY2,XJ1,XJ2(2),XK0(2)[4],XK1(1)[2],XK2,
-    XL2[4],XM2[4],XN1,XN2(2),XO0(2)[4],XO1(1)[2],XO2,=VER20200625,
-    =VA2VVV(2)[4],=VE2CSI(2)[4],=VE2EKA(2)[4],=VE2FK[9],=VE2IDX(2)[4],
-    =VE2IM(2)[4],=VE2KK[9],=VE8AT(2)[4],=VY0AA(4)[3],=VY0PW(4)[3];
+    XL2[4],XM2[4],XN1,XN2(2),XO0(2)[4],XO1(1)[2],XO2,=VER20211125,
+    =VA2VT(2)[4],=VA2VVV(2)[4],=VE2CSI(2)[4],=VE2EKA(2)[4],=VE2FK[9],
+    =VE2IDX(2)[4],=VE2IM(2)[4],=VE2TKH(2)[4],=VY0PW(4)[3];
 Australia:                30:  59:  OC:  -23.70:  -132.33:   -10.0:  VK:
-    AX,VH,VI,VJ,VK,VL,VM,VN,VZ,AX4[55],VH4[55],VI4[55],VJ4[55],VK4[55],
-    VL4[55],VM4[55],VN4[55],VZ4[55];
+    AX,VI,VJ,VK,VL,AX4[55],VI4[55],VJ4[55],VK4[55],VL4[55],=VK3ZW(29)[55];
 Heard Island:             39:  68:  AF:  -53.08:   -73.50:    -5.0:  VK0H:
     =VK0EK;
 Macquarie Island:         30:  60:  OC:  -54.60:  -158.88:   -10.0:  VK0M:
     =VK0AI;
 Cocos (Keeling) Islands:  29:  54:  OC:  -12.15:   -96.82:    -6.5:  VK9C:
-    AX9C,AX9Y,VH9C,VH9Y,VI9C,VI9Y,VJ9C,VJ9Y,VK9C,VK9FC,VK9KC,VK9Y,VK9ZY,VL9C,
-    VL9Y,VM9C,VM9Y,VN9C,VN9Y,VZ9C,VZ9Y;
+    AX9C,AX9Y,VI9C,VI9Y,VK9C,VK9FC,VK9KC,VK9Y,VK9ZY,VZ9Y;
 Lord Howe Island:         30:  60:  OC:  -31.55:  -159.08:   -10.5:  VK9L:
-    AX9L,VH9L,VI9L,VJ9L,VK9FL,VK9L,VK9ZL,VL9L,VM9L,VN9L,VZ9L,=VK3YQS/9,
-    =VK3YQS/VK9;
+    AX9L,VI9L,VK9FL,VK9L,VK9ZL,VZ9L;
 Mellish Reef:             30:  56:  OC:  -17.40:  -155.85:   -10.0:  VK9M:
-    AX9M,VH9M,VI9M,VJ9M,VK9M,VL9M,VM9M,VN9M,VZ9M;
+    AX9M,VI9M,VK9M,VZ9M;
 Norfolk Island:           32:  60:  OC:  -29.03:  -167.93:   -11.5:  VK9N:
-    AX9,VH9,VI9,VJ9,VK9,VL9,VM9,VN9,VZ9;
+    AX9,VI9,VK9;
 Willis Island:            30:  55:  OC:  -16.22:  -150.02:   -10.0:  VK9W:
-    AX9W,AX9Z,VH9W,VH9Z,VI9W,VI9Z,VJ9W,VJ9Z,VK9FW,VK9W,VK9Z,VL9W,VL9Z,VM9W,
-    VM9Z,VN9W,VN9Z,VZ9W,VZ9Z;
+    AX9W,AX9Z,VI9W,VI9Z,VK9FW,VK9W,VK9Z,VZ9W;
 Christmas Island:         29:  54:  OC:  -10.48:  -105.63:    -7.0:  VK9X:
-    AX9X,VH9X,VI9X,VJ9X,VK9FX,VK9KX,VK9X,VL9X,VM9X,VN9X,VZ9X;
+    AX9X,VI9X,VK9FX,VK9KX,VK9X,VZ9X;
 Anguilla:                 08:  11:  NA:   18.23:    63.00:     4.0:  VP2E:
     VP2E;
 Montserrat:               08:  11:  NA:   16.75:    62.18:     4.0:  VP2M:
@@ -1195,7 +1209,7 @@ Falkland Islands:         13:  16:  SA:  -51.63:    58.72:     4.0:  VP8:
 South Georgia Island:     13:  73:  SA:  -54.48:    37.08:     2.0:  VP8/g:
     =VP8CA;
 South Shetland Islands:   13:  73:  SA:  -62.08:    58.67:     4.0:  VP8/h:
-    CE9,XR9,=HF0POL;
+    CE9,XR9,=DT8A,=HF0POL;
 South Orkney Islands:     13:  73:  SA:  -60.60:    45.55:     3.0:  VP8/o:
     =VP8PJ;
 South Sandwich Islands:   13:  73:  SA:  -58.43:    26.33:     2.0:  VP8/s:
@@ -1213,7 +1227,7 @@ Andaman & Nicobar Is.:    26:  49:  AS:   12.37:   -92.78:    -5.5:  VU4:
 Lakshadweep Islands:      22:  41:  AS:   11.23:   -72.78:    -5.5:  VU7:
     VU7;
 Mexico:                   06:  10:  NA:   21.32:   100.23:     6.0:  XE:
-    4A,4B,4C,6D,6E,6F,6G,6H,6I,6J,XA,XB,XC,XD,XE,XF,XG,XH,XI;
+    4A,4B,4C,6D,6E,6F,6G,6H,6I,6J,XA,XB,XC,XD,XE,XF,XG,XH,XI,=4C4C;
 Revillagigedo:            06:  10:  NA:   18.77:   110.97:     7.0:  XF4:
     4A4,4B4,4C4,6D4,6E4,6F4,6G4,6H4,6I4,6J4,XA4,XB4,XC4,XD4,XE4,XF4,XG4,XH4,
     XI4;
index 8aca325849caeca17b0eef1cc89f4b980f0dd511..8c9773debaf91a4f548e89c37aba813395bf6526 100644 (file)
@@ -12,6 +12,7 @@
   '2M' => '144',
   '2U' => '145',
   '2W' => '146',
+  '2ZE' => '140',
   '3A' => '3',
   '3B6' => '4,5,348',
   '3B7' => '347',
   '9Y4/I' => '393',
   '9Y4/O' => '395',
   '9Z' => '61',
-  '=2I0NGM/NHS' => '142',
   '=2M0BDR' => '687',
   '=2M0BDT' => '687',
   '=2M0CPN' => '687',
   '=3D2RI' => '12',
   '=3Y0E' => '17',
   '=3Y0X' => '18',
+  '=4C4C' => '292,1573,1575,1577',
   '=4U0R' => '981',
   '=4U0WFP' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
   '=4U1A' => '981',
+  '=4U1GSC' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
   '=4U1ITU' => '23',
   '=4U1UN' => '24',
   '=4U1VIC' => '981',
   '=4U1WB' => '179',
   '=4U1WRC' => '23',
-  '=4U25B' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
-  '=4U2STAYHOME' => '981',
+  '=4U24OCT' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
   '=4U2U' => '981',
   '=4U5F' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
-  '=4U9STAYHOME' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
   '=4Y1A' => '981',
   '=8J1RL' => '1717,1719,1722,1724,1726,1728,1730,330,343',
+  '=8N60HAM/OKA' => '173,856,860,862,864,866,868,870,872,874,876,878',
   '=9M4CAK' => '54,55,374',
-  '=9M4CCB' => '54,55,374',
   '=9M4CKT' => '54,55,374',
-  '=9M4CRB' => '54,55,374',
   '=9M4CRP' => '54,55,374',
-  '=9M4SJSM' => '54,55,374',
+  '=9M4CWS' => '54,55,374',
+  '=9M7DX' => '54,55,374',
   '=AA0O' => '179',
   '=AA2IL' => '179',
+  '=AA2MA' => '179',
   '=AA4DD' => '179',
   '=AA4Q' => '179',
+  '=AA4R' => '179',
   '=AA5JF' => '179',
   '=AA8R' => '179',
-  '=AB3AI' => '179',
   '=AB4B' => '179',
   '=AB4GG' => '179',
-  '=AB4IQ' => '179',
-  '=AB5OR' => '179',
+  '=AB7RT' => '186',
   '=AB8RL' => '179',
   '=AB8YZ' => '179',
   '=AC4CA' => '179',
   '=AC4G' => '179',
-  '=AC4GW' => '179',
   '=AC6WI' => '179',
   '=AC6ZM' => '179',
   '=AC7AF' => '179',
   '=AC8Y' => '179',
+  '=AC9TO' => '179',
   '=AD1C' => '179',
   '=AD4EB' => '179',
   '=AD4TA' => '179',
+  '=AD5XI' => '179',
   '=AD8J' => '179',
   '=AE4ED' => '179',
   '=AE6JV' => '179',
   '=AE7AP' => '179',
+  '=AF4T' => '179',
+  '=AF7UM' => '191,900,902,904,906,908',
   '=AG4W' => '179',
+  '=AG5LT' => '186',
+  '=AG6QD' => '186',
+  '=AH0IM' => '182',
   '=AH0U' => '179',
-  '=AH2AV' => '179',
   '=AH2O' => '179',
+  '=AH6EZ' => '179',
+  '=AH6FF' => '179',
+  '=AH6JS' => '179',
+  '=AH6LE' => '179',
+  '=AH6SU' => '179',
   '=AI4DB' => '179',
+  '=AI6O' => '179',
   '=AI9K' => '179',
   '=AJ4A' => '179',
   '=AJ4F' => '179',
-  '=AJ4MY' => '191,900,902,904,906,908',
   '=AJ7G' => '179',
-  '=AL0A' => '179',
-  '=AL4B' => '179',
+  '=AK4RA' => '186',
+  '=AL1VE' => '179',
+  '=AL5P' => '179',
+  '=AL7CR' => '179',
   '=AL7RF' => '179',
+  '=AL7RT' => '179',
   '=BS7H' => '70',
   '=C7A' => '981',
-  '=DM19ERZ/BL' => '95',
-  '=DM19ERZ/BU' => '95',
-  '=DM19ERZ/HAM' => '95',
-  '=DM19ERZ/MAF' => '95',
-  '=DM19ERZ/MF' => '95',
-  '=DM19ERZ/MS' => '95',
-  '=DM19ERZ/VL' => '95',
+  '=CD0YJA/3' => '79,470,472,474,476,478,480,482,484',
+  '=CD0YJA/4' => '79,470,472,474,476,478,480,482,484',
   '=DP0GVN' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=DP1POL' => '1717,1719,1722,1724,1726,1728,1730,330,343',
+  '=DT8A' => '343',
   '=E51PT' => '331,1732,1734',
   '=E51WL' => '331,1732,1734',
-  '=EA2EZ/P' => '102,598,600,602,604,606,608',
-  '=EA3HSD/P' => '102,598,600,602,604,606,608',
   '=EA5CC/P' => '102,598,600,602,604,606,608',
-  '=EA5EZ/P' => '102,598,600,602,604,606,608',
-  '=EA5ZD/URE' => '102,598,600,602,604,606,608',
-  '=EA8VK/URE' => '104,610,612',
+  '=EA5IKT/P' => '102,598,600,602,604,606,608',
+  '=EA5RCK/CDI' => '102,598,600,602,604,606,608',
   '=EA9HU' => '102,598,600,602,604,606,608',
-  '=EC5EA/VIC' => '102,598,600,602,604,606,608',
-  '=FO/F6BCW' => '127',
+  '=FO/W7GJ' => '125',
+  '=FT4YM/P' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=G8ERJ' => '179',
-  '=GB0ATM' => '146',
-  '=GB0GIG' => '146',
-  '=GB0HMM' => '146',
-  '=GB0MZX' => '146',
-  '=GB0SLB' => '144,688',
-  '=GB0WIW' => '146',
-  '=GB0WMZ' => '146',
-  '=GB100RS' => '142',
-  '=GB1HSC' => '142',
-  '=GB1KEY' => '146',
-  '=GB1WIW' => '146',
-  '=GB2ELH' => '687',
-  '=GB2FEA' => '144,688',
+  '=GB0DBS' => '144,688',
+  '=GB0GDS' => '144,688',
+  '=GB0SJR' => '144,688',
+  '=GB1002ZE' => '144,688',
+  '=GB100BCG' => '144,688',
+  '=GB1MIS' => '146',
+  '=GB2ELH' => '144,688',
   '=GB2JCM' => '144,688',
-  '=GB2KDR' => '144,688',
-  '=GB2OL' => '144,688',
-  '=GB2ROC' => '144,688',
+  '=GB2JSA' => '143',
+  '=GB2OWM' => '144,688',
   '=GB2TD' => '146',
   '=GB2VK' => '146',
-  '=GB2WIW' => '146',
+  '=GB2ZE' => '144,688',
   '=GB3ANG' => '144,688',
-  '=GB3LER' => '687',
-  '=GB3LER/B' => '687',
+  '=GB3LER' => '144,688',
+  '=GB3LER/B' => '144,688',
   '=GB3NGI' => '142',
-  '=GB4AFD' => '142',
-  '=GB4LER' => '687',
-  '=GB4UAS' => '142',
-  '=GB5NHS' => '142',
-  '=GB5VEP' => '146',
-  '=GB6RNLI' => '146',
-  '=GB75VEC' => '142',
-  '=GB7SRW' => '144,688',
-  '=GB8NHS' => '142',
-  '=GB9AFD' => '142',
-  '=GH5DX/NHS' => '143',
+  '=GB4GDS' => '144,688',
+  '=GB4LER' => '144,688',
+  '=GB60ANT' => '144,688',
+  '=GB8LWF' => '142',
   '=GM0AVR' => '687',
   '=GM0CXQ' => '687',
   '=GM0EKM' => '687',
   '=GM0GFL' => '687',
   '=GM0ILB' => '687',
   '=GM0JDB' => '687',
-  '=GM0WED/NHS' => '144,688',
   '=GM1FGN' => '687',
   '=GM1KKI' => '687',
   '=GM1ZNR' => '687',
   '=GM3WHT' => '687',
-  '=GM3YDN/NHS' => '144,688',
+  '=GM3WUX/2ZE' => '144,688',
   '=GM3ZET' => '687',
   '=GM4IPK' => '687',
   '=GM4JPI' => '687',
   '=GM4LER' => '687',
   '=GM4PXG' => '687',
   '=GM4SLV' => '687',
-  '=GM4SQM/NHS' => '144,688',
-  '=GM4SQN/NHS' => '144,688',
   '=GM4SSA' => '687',
+  '=GM4UBJ/2ZE' => '144,688',
   '=GM4WXQ' => '687',
   '=GM4ZHL' => '687',
-  '=GM6JNJ/NHS' => '144,688',
   '=GM6RQW' => '687',
   '=GM6YQA' => '687',
   '=GM7AFE' => '687',
   '=GM7GWW' => '687',
+  '=GM8IEM/2ZE' => '144,688',
   '=GM8LNH' => '687',
   '=GM8MMA' => '687',
   '=GM8YEC' => '687',
   '=II0ICH' => '166',
   '=II0IDP' => '166',
   '=II0M' => '166',
-  '=IK5TBI/I/CT' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
-  '=IK8IJN/I/US' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
-  '=IK8VHP/OA' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
+  '=IO0MMI' => '166',
   '=IQ0AG' => '166',
   '=IQ0AH' => '166',
   '=IQ0AI' => '166',
   '=IQ0AK' => '166',
+  '=IQ0AK/P' => '166',
   '=IQ0AL' => '166',
   '=IQ0AM' => '166',
   '=IQ0EH' => '166',
   '=IQ0HO' => '166',
   '=IQ0ID' => '166',
-  '=IQ0ID/P' => '166',
   '=IQ0JY' => '166',
   '=IQ0NU' => '166',
-  '=IQ0NU/P' => '166',
-  '=IQ0NV' => '166',
-  '=IQ0NV/P' => '166',
   '=IQ0OG' => '166',
   '=IQ0OH' => '166',
   '=IQ0QP' => '166',
   '=IQ0SS' => '166',
-  '=IT9YBL/SG' => '845',
-  '=IZ0EUX/I/AZ' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
+  '=IQ1QQ/9' => '845',
+  '=IT9ELM/0' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
+  '=IT9PQJ/0' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
+  '=IT9RGY/4' => '165,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850',
+  '=IW0HBY/9' => '845',
   '=JG8NQJ/JD1' => '333',
   '=JW/LB2PG' => '893',
   '=K0ACP' => '179',
   '=K0IP' => '179',
   '=K0LUZ' => '179',
   '=K0NW' => '179',
+  '=K0PG' => '179',
   '=K0PJ' => '179',
   '=K0SN' => '179',
   '=K0TQ' => '179',
+  '=K0XP' => '179',
   '=K0ZR' => '179',
   '=K1DC' => '179',
   '=K1DW' => '179',
   '=K1GU' => '179',
   '=K1KD' => '179',
   '=K1LT' => '179',
-  '=K1TMT' => '191,900,902,904,906,908',
-  '=K2DSW' => '179',
+  '=K1TOR' => '186',
+  '=K2DRH' => '179',
   '=K2GMY' => '179',
   '=K2GT' => '186',
   '=K2KR' => '179',
-  '=K2PM' => '179',
   '=K2PO' => '179',
   '=K2RD' => '179',
   '=K2RP' => '179',
-  '=K2UR' => '179',
+  '=K2SHO' => '186',
+  '=K2SOO' => '186',
   '=K2VV' => '179',
+  '=K2YAZ' => '179',
   '=K3DMG' => '179',
   '=K3EST' => '179',
+  '=K3GP' => '179',
   '=K3IE' => '179',
   '=K3JWI' => '179',
+  '=K3NT' => '179',
   '=K3PA' => '179',
   '=K3WT' => '179',
-  '=K3WYC' => '179',
   '=K3YP' => '179',
   '=K4AB' => '179',
   '=K4AFE' => '179',
   '=K4AMC' => '179',
-  '=K4AVX' => '179',
+  '=K4BWP' => '179',
   '=K4BX' => '179',
-  '=K4CWW' => '179',
+  '=K4DR' => '179',
+  '=K4DXV' => '179',
   '=K4FN' => '179',
-  '=K4FT' => '179',
-  '=K4IE' => '179',
+  '=K4HAL' => '179',
   '=K4IU' => '179',
   '=K4OAQ' => '179',
-  '=K4OWR' => '179',
-  '=K4PSG' => '191,900,902,904,906,908',
-  '=K4QFS' => '182',
   '=K4RO' => '179',
   '=K4TCG' => '179',
+  '=K4TG' => '179',
   '=K4TZ' => '179',
   '=K4UU' => '179',
   '=K4WG' => '179',
+  '=K4WGX' => '191,900,902,904,906,908',
   '=K4WI' => '179',
   '=K4WW' => '179',
   '=K4XU' => '179',
-  '=K4XV' => '186',
   '=K4YJ' => '179',
   '=K4ZGB' => '179',
   '=K5EK' => '179',
   '=K5GDX' => '179',
   '=K5KG' => '179',
-  '=K5KUB' => '193',
   '=K5OA' => '179',
-  '=K5RD' => '191,900,902,904,906,908',
   '=K5VIP' => '179',
   '=K5ZD' => '179',
-  '=K6BFL' => '179',
-  '=K6HNL' => '186',
+  '=K6BHG' => '186',
+  '=K6ND' => '179',
+  '=K6SAS' => '191,900,902,904,906,908',
+  '=K6TWG' => '186',
   '=K6XT' => '179',
+  '=K6ZB' => '179',
   '=K7ABV' => '179',
-  '=K7BUF' => '191,900,902,904,906,908',
+  '=K7BG' => '179',
   '=K7BV' => '179',
-  '=K7CAP' => '191,900,902,904,906,908',
   '=K7CS' => '179',
   '=K7DR' => '179',
+  '=K7GM' => '179',
   '=K7IA' => '179',
   '=K7JOE' => '179',
   '=K7OM' => '179',
   '=K7QA' => '179',
+  '=K7RB' => '179',
   '=K7SCX' => '179',
   '=K7SV' => '179',
   '=K7TD' => '179',
-  '=K7VRK' => '191,900,902,904,906,908',
-  '=K7ZYV' => '179',
   '=K8AC' => '179',
   '=K8ARY' => '179',
   '=K8CN' => '179',
   '=K8IA' => '179',
   '=K8JQ' => '179',
+  '=K8LBQ' => '179',
   '=K8LF' => '179',
   '=K8LS' => '179',
   '=K8NYG' => '179',
-  '=K8PO' => '179',
-  '=K8RN' => '180',
+  '=K8TE' => '179',
   '=K8TR' => '179',
   '=K9CHP' => '179',
   '=K9CS/KH8S' => '189',
   '=K9DR' => '179',
   '=K9DU' => '179',
   '=K9FD' => '186',
-  '=K9GWS' => '179',
-  '=K9JF' => '179',
+  '=K9GS' => '179',
   '=K9JM' => '179',
-  '=K9OM' => '179',
+  '=K9MK' => '179',
+  '=K9MWM' => '179',
   '=K9OZ' => '179',
+  '=K9PY' => '179',
   '=K9RS' => '179',
+  '=K9RZ' => '179',
   '=K9VV' => '193',
   '=K9WA' => '179',
-  '=K9WZB' => '179',
   '=K9YC' => '179',
+  '=KA1I' => '182',
   '=KA1NCN' => '191,900,902,904,906,908',
   '=KA3MTT' => '179',
-  '=KA4BVG' => '179',
   '=KA4GAV' => '179',
   '=KA4OTB' => '179',
-  '=KA7BSK' => '186',
+  '=KA7GAL' => '191,900,902,904,906,908',
+  '=KA7PNH' => '179',
   '=KA8HDE' => '179',
   '=KA8Q' => '179',
   '=KA9FOX' => '179',
-  '=KB1CKX' => '194',
-  '=KB2BVX' => '194',
-  '=KB3HXI' => '186',
-  '=KB3TTV' => '194',
+  '=KA9VVQ' => '179',
+  '=KB1HGW' => '186',
+  '=KB1IEV' => '191,900,902,904,906,908',
+  '=KB2S' => '179',
+  '=KB2SVN' => '191,900,902,904,906,908',
+  '=KB3UWV' => '186',
+  '=KB3UWW' => '186',
+  '=KB3VLO' => '186',
   '=KB4QZH' => '179',
-  '=KB5NOW' => '191,900,902,904,906,908',
-  '=KB5OXR' => '186',
-  '=KB5YLG' => '191,900,902,904,906,908',
   '=KB6EGA' => '186',
-  '=KB7Q' => '179',
   '=KB9S' => '179',
-  '=KB9THD' => '191,900,902,904,906,908',
-  '=KC0EFL' => '191,900,902,904,906,908',
-  '=KC0GLN' => '191,900,902,904,906,908',
-  '=KC1LVR' => '191,900,902,904,906,908',
-  '=KC2CLQ' => '186',
-  '=KC2GRZ' => '194',
+  '=KB9SZM' => '191,900,902,904,906,908',
+  '=KC0JVX' => '191,900,902,904,906,908',
+  '=KC2IIT' => '182',
   '=KC2LM' => '179',
-  '=KC2TE' => '194',
+  '=KC2VSR' => '191,900,902,904,906,908',
+  '=KC3EUQ' => '194',
+  '=KC3MPG' => '191,900,902,904,906,908',
   '=KC4AAA' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=KC4AAC' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=KC4HW' => '179',
   '=KC4SAW' => '179',
   '=KC4TEO' => '179',
   '=KC4USB' => '1717,1719,1722,1724,1726,1728,1730,330,343',
+  '=KC4USN' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=KC4USV' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=KC4WQ' => '179',
-  '=KC5FWS' => '194',
-  '=KC5NHL' => '191,900,902,904,906,908',
+  '=KC6ZLZ' => '191,900,902,904,906,908',
+  '=KC7ELH' => '186',
   '=KC7QY' => '179',
   '=KC8GCR' => '179',
-  '=KC9IKH' => '191,900,902,904,906,908',
+  '=KC8J' => '179',
+  '=KC8JNV' => '186',
+  '=KC8VKY' => '191,900,902,904,906,908',
   '=KC9K' => '179',
+  '=KC9RQZ' => '191,900,902,904,906,908',
   '=KD0EE' => '179',
-  '=KD0JNO' => '186',
-  '=KD0ONB' => '191,900,902,904,906,908',
-  '=KD0OXU' => '186',
+  '=KD0OAK' => '191,900,902,904,906,908',
   '=KD2KW' => '179',
-  '=KD2NPD' => '191,900,902,904,906,908',
   '=KD4EE' => '179',
-  '=KD4GVR' => '186',
+  '=KD4NFW' => '186',
+  '=KD4TRG' => '179',
   '=KD5DD' => '179',
-  '=KD5MQC' => '191,900,902,904,906,908',
-  '=KD7GWI' => '186',
-  '=KD7OOS' => '191,900,902,904,906,908',
-  '=KD8KQL' => '191,900,902,904,906,908',
-  '=KD8LYB' => '186',
-  '=KD9TK' => '191,900,902,904,906,908',
-  '=KE0JSB' => '186',
-  '=KE0KIE' => '186',
+  '=KD5KVP' => '191,900,902,904,906,908',
+  '=KD6APH' => '186',
+  '=KD6VXI' => '193',
+  '=KD7RF' => '179',
+  '=KD7RYC' => '191,900,902,904,906,908',
+  '=KD9QS' => '179',
   '=KE0L' => '179',
+  '=KE0PRX' => '191,900,902,904,906,908',
   '=KE0YI' => '179',
   '=KE1B' => '179',
   '=KE2VB' => '179',
   '=KE3K' => '179',
   '=KE4KY' => '179',
-  '=KE5VQB' => '186',
-  '=KE5WGZ' => '191,900,902,904,906,908',
-  '=KE6MKW' => '186',
-  '=KE6TIX' => '186',
-  '=KE7PXV' => '191,900,902,904,906,908',
-  '=KE7ZXH' => '191,900,902,904,906,908',
+  '=KE6OTK' => '186',
+  '=KE7BAQ' => '191,900,902,904,906,908',
+  '=KE8CCS' => '191,900,902,904,906,908',
   '=KE8FT' => '179',
-  '=KF3L' => '191,900,902,904,906,908',
-  '=KF4AV' => '179',
-  '=KF4UJC' => '186',
   '=KF5BA' => '179',
   '=KF5MU' => '179',
-  '=KF5UBP' => '191,900,902,904,906,908',
-  '=KF5YGN' => '194',
-  '=KF5YGX' => '194',
-  '=KF7ARC' => '191,900,902,904,906,908',
-  '=KF7FLL' => '191,900,902,904,906,908',
-  '=KF7FLM' => '191,900,902,904,906,908',
-  '=KF7ING' => '191,900,902,904,906,908',
-  '=KF7ITN' => '191,900,902,904,906,908',
-  '=KF7KTH' => '191,900,902,904,906,908',
-  '=KF7WVE' => '191,900,902,904,906,908',
+  '=KF6YYH' => '186',
+  '=KF7BMU' => '182',
+  '=KF7MVM' => '191,900,902,904,906,908',
+  '=KF7QMX' => '186',
+  '=KF7QVM' => '186',
   '=KG0F' => '179',
-  '=KG4CAN' => '186',
   '=KG4CUY' => '179',
-  '=KG4MA' => '1686,1687,1688,1689,1690,1691,1692,1693,334',
   '=KG4NE' => '1686,1687,1688,1689,1690,1691,1692,1693,334',
-  '=KG4TZD' => '186',
-  '=KG5CH' => '186',
-  '=KG5CNO' => '186',
   '=KG5HVO' => '179',
-  '=KG5IVP' => '186',
   '=KG6DX' => '182',
+  '=KG6EZW' => '186',
+  '=KG6HFK' => '186',
+  '=KG6HTQ' => '191,900,902,904,906,908',
   '=KG6JDX' => '182',
-  '=KG7ZEV' => '191,900,902,904,906,908',
-  '=KG7ZJM' => '186',
+  '=KG7JHH' => '186',
+  '=KG7KDP' => '186',
+  '=KG7SRS' => '191,900,902,904,906,908',
   '=KH0WJ' => '186',
+  '=KH2AR' => '179',
   '=KH2BR' => '179',
   '=KH2D' => '179',
   '=KH2GM' => '179',
+  '=KH2PM' => '179',
+  '=KH2RU' => '194',
+  '=KH2SR' => '179',
+  '=KH2TJ' => '179',
   '=KH3AE' => '186',
   '=KH6CT' => '179',
-  '=KH6DHK' => '179',
+  '=KH6GK' => '179',
   '=KH6M' => '179',
   '=KH6VM' => '179',
   '=KH6XS' => '179',
-  '=KI5DQL' => '180',
+  '=KH7FC' => '179',
+  '=KI4YRQ' => '191,900,902,904,906,908',
+  '=KI5JZC' => '194',
+  '=KI5KBN' => '191,900,902,904,906,908',
   '=KI6DY' => '179',
   '=KI6QDH' => '179',
-  '=KI7AUZ' => '186',
-  '=KI7ID' => '179',
+  '=KI7PEZ' => '186',
+  '=KI7ZTQ' => '186',
+  '=KI8I' => '179',
   '=KJ4AOM' => '179',
-  '=KJ4IWZ' => '179',
   '=KJ4M' => '179',
-  '=KJ4YOY' => '191,900,902,904,906,908',
-  '=KJ6AYQ' => '182',
-  '=KJ6COM' => '186',
-  '=KJ6CQT' => '186',
-  '=KJ6FDF' => '186',
-  '=KJ6RFQ' => '191,900,902,904,906,908',
+  '=KJ6CAV' => '186',
+  '=KJ6MQL' => '186',
+  '=KJ6MSJ' => '186',
+  '=KJ6NIA' => '186',
+  '=KJ6NIB' => '186',
+  '=KJ6NPJ' => '191,900,902,904,906,908',
+  '=KJ6SGY' => '186',
   '=KJ9C' => '179',
-  '=KK4RNF' => '186',
-  '=KK6SNS' => '191,900,902,904,906,908',
+  '=KK4BAN' => '191,900,902,904,906,908',
+  '=KK4CAS' => '191,900,902,904,906,908',
+  '=KK4CAU' => '191,900,902,904,906,908',
+  '=KK4CHH' => '191,900,902,904,906,908',
+  '=KK4EGT' => '186',
+  '=KK4IUT' => '186',
+  '=KK4WWH' => '191,900,902,904,906,908',
+  '=KK4WWI' => '191,900,902,904,906,908',
+  '=KK6DIT' => '186',
+  '=KK6GRC' => '186',
+  '=KK6QAI' => '186',
+  '=KK7I' => '191,900,902,904,906,908',
   '=KK9A' => '179',
   '=KK9N' => '179',
-  '=KL0MP' => '179',
-  '=KL2RA' => '179',
-  '=KL3JC' => '186',
-  '=KL4CZ' => '179',
+  '=KL0SS' => '179',
+  '=KL1SE' => '179',
+  '=KL2AX' => '179',
+  '=KL7DJ' => '179',
   '=KL7HQR' => '179',
   '=KL7IKV' => '179',
+  '=KL7NW' => '179',
   '=KL7QW' => '179',
   '=KL7SK' => '179',
+  '=KM4CH' => '179',
   '=KM4FO' => '179',
+  '=KM4FPS' => '186',
   '=KM4JA' => '179',
-  '=KM6RWE' => '186',
-  '=KM6UVP' => '186',
-  '=KM6YOD' => '191,900,902,904,906,908',
+  '=KM4JAK' => '179',
+  '=KM4RO' => '179',
+  '=KM6EED' => '191,900,902,904,906,908',
+  '=KM6HPE' => '186',
+  '=KM6Z' => '179',
   '=KM7W' => '179',
   '=KN1CBR' => '179',
-  '=KN4DUA' => '179',
-  '=KN4ENR' => '191,900,902,904,906,908',
-  '=KN4LJD' => '191,900,902,904,906,908',
-  '=KN4LVP' => '182',
-  '=KN4RXC' => '191,900,902,904,906,908',
-  '=KN8U' => '179',
-  '=KO4DHN' => '191,900,902,904,906,908',
+  '=KN4CCY' => '191,900,902,904,906,908',
+  '=KN4KYO' => '186',
+  '=KN4MGX' => '191,900,902,904,906,908',
+  '=KN4MTF' => '191,900,902,904,906,908',
+  '=KN4NAR' => '194',
+  '=KO4LCM' => '186',
+  '=KO4OL' => '179',
+  '=KO4Z' => '179',
   '=KO8SCA' => '179',
+  '=KO8V' => '179',
   '=KO9V' => '179',
+  '=KP2H' => '194',
+  '=KP2X' => '179',
   '=KP2Z' => '194',
   '=KP3M' => '179',
+  '=KP3U' => '179',
+  '=KP4MD' => '179',
   '=KR4F' => '179',
   '=KS0CW' => '179',
   '=KS4X' => '179',
   '=KS9W' => '179',
   '=KT3M' => '179',
   '=KT4O' => '179',
-  '=KT4RR' => '179',
   '=KU1CW' => '179',
   '=KU8E' => '179',
-  '=KV4CF' => '193',
-  '=KV4KW' => '193',
-  '=KV4T' => '179',
+  '=KV3T' => '179',
+  '=KV4BT' => '193',
   '=KV8S' => '179',
   '=KW4J' => '179',
-  '=KW4XD' => '191,900,902,904,906,908',
-  '=KW7D' => '179',
+  '=KW4YA' => '179',
+  '=KW6CR' => '186',
   '=KW7Q' => '179',
   '=KX2P' => '179',
+  '=KX4X' => '179',
   '=KY0Q' => '179',
+  '=KY0W' => '179',
   '=KZ1W' => '179',
-  '=KZ4KX' => '179',
   '=KZ9V' => '179',
+  '=LT2F/F' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
   '=LU1AW/X' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
-  '=LU1QR/Q' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1COP/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1COP/E' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1DAA/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1LT/L' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1VHP/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1VYL/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1VZ/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU1YAX/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU2ALF/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
   '=LU2DVI/H' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
-  '=LU3HT/H' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
-  '=LU5QR/Q' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
-  '=MM0DHQ/NHS' => '144,688',
+  '=LU2EZG/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU2JAL/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU3DVN/X' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU3DYN/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU3JVR/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU3VAL/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU4AAO/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU4ARU/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU4FM/F' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU4LAS/L' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU5DQ/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU5DSM/ANT' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU5JAH/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU5JIB/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU5JU/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU5YF/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU7YG/Y' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU8JLB/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU8VCC/V' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU9ERA/H' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU9JDZ/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU9JLB/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU9JZX/J' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LU9LCF/L' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LW1ECO/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LW3DBH/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LW3EK/D' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LW3EMP/L' => '197,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962',
+  '=LX9S/J' => '198',
   '=MM0LSM' => '687',
   '=MM0NQY' => '687',
   '=MM0VIK' => '687',
   '=MM0ZAL' => '687',
   '=MM0ZCG' => '687',
   '=MM0ZRC' => '687',
+  '=MM1FEO' => '687',
   '=MM1FJM' => '687',
-  '=MM3AWD/NHS' => '144,688',
-  '=MM3DDQ/NHS' => '144,688',
   '=MM3VQO' => '687',
   '=MM5PSL' => '687',
   '=MM5YLO' => '687',
   '=MM6YLO' => '687',
   '=MM6ZBG' => '687',
   '=MM6ZDW' => '687',
-  '=MM7WAB/NHS' => '144,688',
+  '=MM7CGR' => '687',
   '=MM8A' => '687',
   '=MS0ZCG' => '687',
   '=MS0ZET' => '687',
-  '=N0RY' => '182',
-  '=N0SMX' => '179',
-  '=N0VYO' => '186',
-  '=N1JM' => '179',
-  '=N1XK' => '179',
-  '=N2AU' => '179',
+  '=N0YY' => '179',
+  '=N1ROR' => '191,900,902,904,906,908',
+  '=N1TX' => '191,900,902,904,906,908',
   '=N2BJ' => '179',
-  '=N2FVA' => '194',
-  '=N2IBR' => '194',
   '=N2IC' => '179',
   '=N2JNR' => '179',
   '=N2NL' => '179',
   '=N3BB' => '179',
-  '=N3BQY' => '186',
-  '=N3BUO' => '179',
   '=N3CI' => '179',
-  '=N3GWR' => '186',
   '=N3RA' => '179',
   '=N3RC' => '179',
   '=N3ZZ' => '179',
+  '=N4AKO' => '194',
   '=N4ARO' => '179',
   '=N4AU' => '179',
   '=N4BAA' => '179',
-  '=N4BCB' => '179',
   '=N4BCD' => '179',
-  '=N4BER' => '186',
   '=N4DW' => '179',
+  '=N4EL' => '179',
   '=N4HAI' => '179',
-  '=N4KC' => '179',
+  '=N4JRG' => '179',
   '=N4KH' => '179',
-  '=N4MMT' => '194',
-  '=N4NA' => '179',
   '=N4NO' => '179',
   '=N4OGW' => '179',
   '=N4QS' => '179',
-  '=N4SL' => '179',
+  '=N4SS' => '179',
+  '=N4TY' => '179',
   '=N4TZ' => '179',
   '=N4UC' => '179',
-  '=N4UW' => '179',
   '=N4VI' => '179',
   '=N4VV' => '179',
   '=N4WE' => '179',
   '=N5CR' => '179',
   '=N5CW' => '179',
   '=N5DX' => '179',
+  '=N5EP' => '179',
+  '=N5GF' => '179',
   '=N5KO' => '179',
   '=N5RP' => '179',
   '=N5SMQ' => '179',
-  '=N5TB' => '179',
   '=N5TOO' => '179',
+  '=N5YIZ' => '194',
   '=N5YT' => '179',
   '=N5ZO' => '179',
   '=N6AR' => '179',
   '=N6DW' => '179',
+  '=N6EE' => '179',
+  '=N6IGV' => '191,900,902,904,906,908',
+  '=N6JS' => '179',
   '=N6QEK' => '191,900,902,904,906,908',
+  '=N6RGP' => '191,900,902,904,906,908',
   '=N6RSH' => '179',
-  '=N7BMD' => '186',
-  '=N7CGC' => '191,900,902,904,906,908',
-  '=N7DKL' => '191,900,902,904,906,908',
+  '=N7AK' => '186',
   '=N7DR' => '179',
-  '=N7DUD' => '191,900,902,904,906,908',
-  '=N7FUL' => '179',
-  '=N7IP' => '179',
   '=N7IV' => '179',
   '=N7MZW' => '179',
-  '=N7NG' => '179',
   '=N7RCS' => '179',
   '=N7US' => '179',
   '=N7WY' => '179',
   '=N7ZZ' => '179',
   '=N8AID' => '179',
-  '=N8GU' => '179',
+  '=N8CL' => '179',
   '=N8II' => '179',
+  '=N8IVN' => '179',
+  '=N8KH' => '179',
   '=N8NA' => '179',
   '=N8NN' => '179',
   '=N8OO' => '179',
   '=N9OU' => '179',
   '=N9RV' => '179',
   '=N9SB' => '179',
+  '=N9TX' => '179',
   '=N9VPV' => '179',
+  '=NA2U' => '179',
+  '=NA4A' => '179',
   '=NA5NN' => '179',
-  '=NB6R' => '186',
-  '=ND1A' => '186',
   '=ND2T' => '179',
   '=ND3N' => '179',
   '=ND4Y' => '179',
   '=NF4J' => '179',
   '=NG7A' => '179',
   '=NH2B' => '180',
-  '=NH2LS' => '191,900,902,904,906,908',
+  '=NH2IY' => '186',
+  '=NH6L' => '179',
+  '=NH6PK' => '179',
   '=NH6T' => '179',
+  '=NH6Z' => '179',
   '=NI7R' => '179',
   '=NJ4P' => '179',
   '=NJ8J' => '179',
   '=NK8Q' => '179',
   '=NL7CQ' => '179',
   '=NL7D' => '179',
+  '=NL7P' => '179',
   '=NL7QC' => '179',
+  '=NL7WA' => '179',
   '=NL7XM' => '179',
+  '=NL7XT' => '179',
   '=NN1N' => '179',
   '=NN4NT' => '179',
-  '=NN4SA' => '179',
   '=NN5O' => '179',
   '=NN7A' => '179',
+  '=NN7C' => '191,900,902,904,906,908',
   '=NN7CW' => '179',
   '=NN9DD' => '179',
   '=NO9E' => '179',
   '=NP2GG' => '179',
+  '=NP2JV' => '179',
+  '=NP3FB' => '179',
   '=NP3K' => '179',
+  '=NP4TY' => '191,900,902,904,906,908',
   '=NQ6N' => '179',
+  '=NR0G' => '186',
   '=NR4L' => '179',
-  '=NR5W' => '179',
   '=NR7DX' => '179',
-  '=NS2X' => '179',
   '=NS4X' => '179',
   '=NT0K' => '179',
-  '=NU9Q' => '191,900,902,904,906,908',
-  '=NW2P' => '179',
-  '=NW7R' => '179',
+  '=NV4B' => '179',
   '=NW8U' => '179',
   '=NX1P' => '179',
   '=NY6DX' => '179',
-  '=NZ6T' => '179',
-  '=R100RK' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=NZ7Q' => '179',
+  '=PA1AW/J' => '216',
+  '=PA1BP/J' => '216',
+  '=PA3ESO/J' => '216',
+  '=PA6JAM/J' => '216',
+  '=PA6SJB/J' => '216',
+  '=PC6RH/J' => '216',
+  '=R0AI/3' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=R2ET/9' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=R2MWO' => '264',
+  '=R325B' => '264',
+  '=R325BF' => '264',
+  '=R325F' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=R325G' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R325P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R325SF' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R325SSF' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R325TF' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=R325Z' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R4FBJ/9/P' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=R4HAT' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=R4HC' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=R4HCE' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=R4IN' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=R4IO' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=R4IT' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=R8FF/3' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=R8FF/7' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=R8FF/8' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
-  '=R8FF/P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R4WAN/P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R6LCA/J' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R800SAN' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=R8MB/1' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=R8XF/1' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=R9WCJ/8' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
-  '=RA/UT5IA' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=R9FCS/4' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R9JBF/1' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=R9WGK/P' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=RA0QK/8' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=RA4HL' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RA4NCC' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=RA9UUY/6' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=RA4RU/9' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RA60ANT' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=RA9MX/0' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RA9ULL/6' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RC4HT' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RC4I' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RI1ANC' => '1717,1719,1722,1724,1726,1728,1730,330,343',
+  '=RI1ANR' => '1717,1719,1722,1724,1726,1728,1730,330,343',
+  '=RI60ANT' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=RJ4I' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=RJ4P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RK4HM' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RK4P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=RK60ANT' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RL1I/P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=RL60ANT' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=RM4I' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=RM4R' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RN4HFJ' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RN4HIF' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=RN60ANT' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RN9S' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
-  '=RT8T' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RT60ANT' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=RT9K/6' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RT9S' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
-  '=RT9T/1' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RT9T/3' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=RU20RU' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=RU4HD' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RU4HP' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RU4I' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=RV7B/9' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=RW4HM' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RW4HTK' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RW4HW' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RW4HZ' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=RW9WJ/4' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=RX9KT/6' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=RX9WT/8' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RX6DL/8/P' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RX9SN/P' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=RX9WT/P' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
   '=SV0XAZ' => '240',
   '=SV2ASP/A' => '238',
+  '=SV2JAO/J' => '237,1156,1158,1160,1162,1164,1166,1168',
   '=SV2RSG/A' => '238',
-  '=TA1BZ/2' => '249,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188',
+  '=SX200ADL' => '239',
+  '=SX200ANK' => '240',
+  '=SX200AZK' => '239',
+  '=SX200AZR' => '239',
+  '=SX200BMG' => '240',
+  '=SX200BYR' => '239',
+  '=SX200CAF' => '240',
+  '=SX200CJK' => '239',
+  '=SX200CJO' => '240',
+  '=SX200COL' => '240',
+  '=SX200CVY' => '240',
+  '=SX200DJO' => '240',
+  '=SX200DKL' => '239',
+  '=SX200DZX' => '239',
+  '=SX200FBG' => '240',
+  '=SX200FBK' => '240',
+  '=SX200FRT' => '239',
+  '=SX200JI' => '240',
+  '=SX200KKU' => '239',
+  '=SX200KNA' => '240',
+  '=SX200MBH' => '240',
+  '=SX200QWP' => '240',
+  '=SX200RGI' => '240',
+  '=SX200RKU' => '240',
+  '=SX200RMU' => '240',
+  '=SX200RNG' => '240',
+  '=SX200SKE' => '239',
+  '=SX2IMA/J' => '237,1156,1158,1160,1162,1164,1166,1168',
+  '=SY200CGZ' => '240',
+  '=SZ200ERK' => '240',
+  '=SZ200RDS' => '239',
   '=TA1C/2' => '249,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188',
   '=TA1D/3' => '249,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188',
-  '=TA1D/4' => '249,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188',
-  '=TA1FA/2' => '249,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188',
-  '=TA1HZ/2' => '249,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188',
-  '=TA6CQ/1' => '1171',
   '=TO1A' => '139',
   '=TO5A' => '123',
-  '=TO5O' => '123',
   '=TO5T' => '123',
   '=TO7A' => '123',
-  '=TO8FTDM' => '118',
-  '=TX2A' => '125',
+  '=TO7O' => '123',
+  '=TO9W' => '130',
   '=TX3X' => '122',
   '=TX5P' => '126',
+  '=TX7MB' => '127',
+  '=UA0QNI/3' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UA3LMR/P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UA4H' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UA4HBM' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UA4HY' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UA4NF' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UA4PN' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=UA4RF' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=UB5O/1' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
-  '=UB5O/2' => '264',
-  '=UB5O/4' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
-  '=UB5O/9' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=UA5B/4' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=UB8S/P' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UC4I' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UD6AOP/0' => '265,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379',
+  '=UE80SKR' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
   '=UI4I' => '263,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315',
+  '=VA2VT' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VA2VVV' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VE2CSI' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VE2EKA' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VE2FK' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VE2IDX' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VE2IM' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
-  '=VE2KK' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
-  '=VE8AT' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
-  '=VER20200625' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
-  '=VERSION' => '75',
+  '=VE2TKH' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
+  '=VER20211125' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
+  '=VERSION' => '228',
   '=VK0AI' => '336',
   '=VK0EK' => '335',
-  '=VK3YQS/9' => '338',
-  '=VK3YQS/VK9' => '338',
+  '=VK3ZW' => '277,1535,1537,1539,1541,1543,1545,1547,1549',
   '=VP6D' => '284',
-  '=VP8AL' => '1717,1719,1722,1724,1726,1728,1730,330,343',
+  '=VP8/SQ1SGB' => '1717,1719,1722,1724,1726,1728,1730,330,343',
   '=VP8CA' => '342',
   '=VP8DXU' => '345',
   '=VP8PJ' => '344',
-  '=VY0AA' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=VY0PW' => '276,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533',
   '=W0BR' => '179',
+  '=W0HPD' => '191,900,902,904,906,908',
+  '=W0NA' => '179',
   '=W0PV' => '179',
+  '=W0QQG' => '179',
   '=W0RIC' => '179',
-  '=W0ZEE' => '191,900,902,904,906,908',
+  '=W0YK' => '179',
   '=W0ZP' => '179',
-  '=W1GKT' => '179',
-  '=W1JM' => '191,900,902,904,906,908',
+  '=W1GDM' => '186',
   '=W1LYD' => '191,900,902,904,906,908',
   '=W1NN' => '179',
-  '=W1PDI' => '179',
   '=W1PR' => '179',
   '=W1RH' => '179',
   '=W1SRD' => '179',
   '=W2ACY' => '179',
   '=W2GS' => '179',
-  '=W2IY' => '179',
+  '=W2UP' => '179',
   '=W2VJN' => '179',
   '=W3CB' => '179',
   '=W3HDH' => '179',
   '=W3TB' => '179',
   '=W4BCG' => '179',
   '=W4DAN' => '179',
+  '=W4EF' => '179',
   '=W4ER' => '179',
   '=W4GKM' => '179',
+  '=W4JSI' => '179',
   '=W4KW' => '179',
   '=W4LC' => '179',
   '=W4LIS' => '193',
   '=W4NBS' => '179',
-  '=W4NI' => '179',
   '=W4NNF' => '179',
   '=W4NZ' => '179',
+  '=W4PA' => '179',
   '=W4PF' => '179',
-  '=W4RYW' => '179',
+  '=W4SSF' => '179',
   '=W4TLK' => '179',
-  '=W4TTM' => '179',
   '=W4UT' => '179',
+  '=W4UWC' => '179',
+  '=W5ERV' => '191,900,902,904,906,908',
   '=W5MX' => '179',
   '=W5NZ' => '179',
-  '=W5UE' => '179',
+  '=W5SPY' => '191,900,902,904,906,908',
   '=W5UJ' => '179',
-  '=W5VE' => '179',
   '=W5VS' => '179',
+  '=W6AKL' => '186',
+  '=W6DSD' => '186',
+  '=W6FB' => '179',
   '=W6GMT' => '179',
   '=W6KGP' => '179',
   '=W6LFB' => '179',
+  '=W6NCB' => '179',
   '=W6NWS' => '179',
-  '=W6QPV' => '186',
-  '=W6RLL' => '179',
+  '=W6RZY' => '186',
   '=W6SFG' => '179',
+  '=W6SMA' => '191,900,902,904,906,908',
   '=W6UB' => '179',
-  '=W6XR' => '179',
+  '=W7CB' => '191,900,902,904,906,908',
+  '=W7DXX' => '179',
   '=W7EE' => '179',
-  '=W7HJ' => '179',
+  '=W7EGG' => '191,900,902,904,906,908',
+  '=W7GKF' => '179',
   '=W7II' => '179',
   '=W7IMP' => '179',
-  '=W7IY' => '179',
-  '=W7KF' => '179',
+  '=W7JAL' => '191,900,902,904,906,908',
+  '=W7LG' => '179',
   '=W7NX' => '186',
+  '=W7RF' => '179',
   '=W7RY' => '179',
   '=W7UT' => '179',
+  '=W7WKS' => '186',
+  '=W7XT' => '179',
+  '=W8AKS' => '179',
   '=W8AT' => '179',
   '=W8FJ' => '179',
   '=W8FN' => '179',
   '=W8HAP' => '179',
-  '=W8HGH' => '179',
   '=W8LYJ' => '179',
   '=W8OV' => '179',
   '=W8TK' => '179',
   '=W9CF' => '179',
-  '=W9CG' => '191,900,902,904,906,908',
+  '=W9CG' => '188,189',
   '=W9DC' => '179',
   '=W9ET' => '179',
-  '=W9FI' => '179',
   '=W9JA' => '179',
-  '=W9JEF' => '179',
   '=W9KKN' => '179',
-  '=W9MAF' => '179',
-  '=W9PL' => '179',
-  '=W9RM' => '179',
   '=W9RNY' => '179',
+  '=WA0LJM' => '179',
+  '=WA0OII' => '182',
   '=WA0WWW' => '179',
   '=WA1FCN' => '179',
+  '=WA1FMM' => '179',
   '=WA1FVJ' => '191,900,902,904,906,908',
   '=WA1UJU' => '179',
   '=WA2VYA' => '179',
   '=WA3C' => '179',
+  '=WA4BUD' => '191,900,902,904,906,908',
   '=WA4JA' => '179',
+  '=WA4RRE' => '191,900,902,904,906,908',
   '=WA5POK' => '179',
-  '=WA6AW' => '186',
-  '=WA6CZL' => '186',
   '=WA6QDQ' => '186',
   '=WA8KAN' => '179',
   '=WA8OJR' => '179',
   '=WA8ZBT' => '179',
-  '=WB2JEP' => '179',
-  '=WB3JFS' => '179',
+  '=WB2HMY' => '194',
   '=WB4JTT' => '186',
+  '=WB4YDL' => '179',
   '=WB4YDY' => '179',
-  '=WB8BPU' => '179',
+  '=WB5EAA' => '191,900,902,904,906,908',
+  '=WB5WAJ' => '179',
+  '=WB7GR' => '179',
+  '=WB7ULO' => '191,900,902,904,906,908',
+  '=WB8BRU' => '191,900,902,904,906,908',
   '=WB8YYY' => '179',
-  '=WB9QAF' => '179',
   '=WC7S' => '179',
   '=WE5P' => '179',
   '=WE6EZ' => '179',
+  '=WE9H' => '191,900,902,904,906,908',
   '=WF7T' => '179',
   '=WF9A' => '179',
   '=WH0AI' => '179',
   '=WH6AQ' => '179',
-  '=WH6GBB' => '191,900,902,904,906,908',
-  '=WH6GCO' => '191,900,902,904,906,908',
+  '=WH6FZY' => '179',
   '=WH6LE' => '179',
+  '=WH7DC' => '191,900,902,904,906,908',
   '=WH7R' => '179',
+  '=WI5GUY' => '191,900,902,904,906,908',
   '=WJ9B' => '179',
+  '=WL5H' => '179',
+  '=WL7CSW' => '186',
   '=WL7OU' => '179',
   '=WM5DX' => '179',
   '=WN7S' => '179',
+  '=WN7Y' => '179',
   '=WO7U' => '179',
+  '=WP2C' => '179',
+  '=WP2J' => '179',
   '=WP3ME' => '179',
   '=WQ5L' => '179',
   '=WR3O' => '179',
+  '=WR4T' => '179',
+  '=WR8AA' => '179',
   '=WS6K' => '179',
   '=WS6X' => '179',
   '=WS7X' => '179',
   '=WS9M' => '179',
   '=WT2P' => '179',
+  '=WT7TT' => '179',
   '=WT8WV' => '179',
-  '=WU0B' => '179',
   '=WU9B' => '179',
   '=WV4P' => '179',
-  '=WV8SW' => '179',
-  '=WW4AL' => '191,900,902,904,906,908',
   '=WW4R' => '179',
   '=WW5M' => '179',
   '=WX4W' => '179',
   '=WX5S' => '179',
-  '=WY6K' => '179',
   '=WY7FD' => '179',
-  '=WZ1Y' => '179',
+  '=WY7M' => '179',
   '=WZ4F' => '179',
   '=WZ7I' => '179',
   '=WZ8T' => '179',
   'AG7' => '1701,1702,1703,1704,1705,1706,1707,1708',
   'AG8' => '1709,1710,1711',
   'AG9' => '1712,1713,1714',
+  'AGJ60' => '877',
   'AH0' => '180',
   'AH1' => '181',
   'AH2' => '182',
   'HS8' => '787',
   'HS9' => '789',
   'HT' => '305',
+  'HTR60' => '877',
   'HU' => '307',
   'HV' => '163',
   'HW' => '117',
   'ID8' => '827',
   'ID9' => '829',
   'IE9' => '831',
+  'IEJ60' => '877',
   'IF9' => '833',
   'IG9' => '835',
   'IH9' => '837',
   'IR8' => '813',
   'IR9' => '845',
   'IS' => '166',
+  'ISG60' => '877',
   'IT9' => '845',
   'IU0' => '797',
   'IU1' => '799',
   'KJ7' => '1701,1702,1703,1704,1705,1706,1707,1708',
   'KJ8' => '1709,1710,1711',
   'KJ9' => '1712,1713,1714',
+  'KJP60' => '877',
   'KK0' => '1666,1667,1668,1669,1670,1671,1672,1673',
   'KK1' => '1674,1675,1676,1677,1678,1679',
   'KK2' => '1680,1681',
   'KT7' => '1701,1702,1703,1704,1705,1706,1707,1708',
   'KT8' => '1709,1710,1711',
   'KT9' => '1712,1713,1714',
+  'KTD60' => '877',
   'KU0' => '1666,1667,1668,1669,1670,1671,1672,1673',
   'KU1' => '1674,1675,1676,1677,1678,1679',
   'KU2' => '1680,1681',
   'MI' => '142',
   'MJ' => '143',
   'MM' => '144',
+  'MMD60' => '877',
+  'MMY60' => '877',
   'MN' => '142',
   'MP' => '145',
   'MS' => '144',
   'NH7K' => '187',
   'NH8' => '188',
   'NH9' => '190',
-  'NHS' => '140',
   'NI0' => '1666,1667,1668,1669,1670,1671,1672,1673',
   'NI1' => '1674,1675,1676,1677,1678,1679',
   'NI2' => '1680,1681',
   'OG7' => '1013',
   'OG8' => '1015',
   'OG9' => '1017',
+  'OGN60' => '877',
   'OH' => '204,1002,1004,1006,1008,1010,1012,1014,1016,1018',
   'OH0' => '205',
   'OH1' => '1001',
   'OK' => '207,1020,1022',
   'OK1' => '1019',
   'OK2' => '1021',
+  'OKA60' => '877',
   'OL' => '207',
   'OM' => '208,1024,1026,1028,1030,1032,1034,1036,1038',
   'OM0' => '1023',
   'SH5' => '1131',
   'SH6' => '1133',
   'SH7' => '1135',
+  'SHI60' => '877',
   'SI' => '233',
   'SI0' => '1121',
   'SI1' => '1123',
   'TP' => '117',
   'TQ' => '117',
   'TR' => '258',
+  'TRA60' => '877',
   'TS' => '14',
   'TT' => '259',
   'TU' => '1203',
   'UE9X' => '1314',
   'UE9Y' => '1376',
   'UE9Z' => '1378',
+  'UEO60' => '877',
   'UF0' => '265',
   'UF0A' => '1316',
   'UF0B' => '1316',
   'VG7' => '1516',
   'VG8' => '1518',
   'VG9' => '1520',
-  'VH' => '277',
-  'VH1' => '1534',
-  'VH2' => '1536',
-  'VH3' => '1538',
-  'VH4' => '1540',
-  'VH5' => '1542',
-  'VH6' => '1544',
-  'VH7' => '1546',
-  'VH8' => '1548',
-  'VH9' => '278',
-  'VH9C' => '337',
-  'VH9L' => '338',
-  'VH9M' => '339',
-  'VH9W' => '340',
-  'VH9X' => '341',
-  'VH9Y' => '337',
-  'VH9Z' => '340',
   'VI' => '277',
   'VI0' => '1718',
   'VI1' => '1534',
   'VJ6' => '1544',
   'VJ7' => '1546',
   'VJ8' => '1548',
-  'VJ9' => '278',
-  'VJ9C' => '337',
-  'VJ9L' => '338',
-  'VJ9M' => '339',
-  'VJ9W' => '340',
-  'VJ9X' => '341',
-  'VJ9Y' => '337',
-  'VJ9Z' => '340',
   'VK' => '277,1535,1537,1539,1541,1543,1545,1547,1549',
   'VK0' => '1718,335,336',
   'VK0H' => '335',
   'VL6' => '1544',
   'VL7' => '1546',
   'VL8' => '1548',
-  'VL9' => '278',
-  'VL9C' => '337',
-  'VL9L' => '338',
-  'VL9M' => '339',
-  'VL9W' => '340',
-  'VL9X' => '341',
-  'VL9Y' => '337',
-  'VL9Z' => '340',
-  'VM' => '277',
-  'VM1' => '1534',
-  'VM2' => '1536',
-  'VM3' => '1538',
-  'VM4' => '1540',
-  'VM5' => '1542',
-  'VM6' => '1544',
-  'VM7' => '1546',
-  'VM8' => '1548',
-  'VM9' => '278',
-  'VM9C' => '337',
-  'VM9L' => '338',
-  'VM9M' => '339',
-  'VM9W' => '340',
-  'VM9X' => '341',
-  'VM9Y' => '337',
-  'VM9Z' => '340',
-  'VN' => '277',
-  'VN1' => '1534',
-  'VN2' => '1536',
-  'VN3' => '1538',
-  'VN4' => '1540',
-  'VN5' => '1542',
-  'VN6' => '1544',
-  'VN7' => '1546',
-  'VN8' => '1548',
-  'VN9' => '278',
-  'VN9C' => '337',
-  'VN9L' => '338',
-  'VN9M' => '339',
-  'VN9W' => '340',
-  'VN9X' => '341',
-  'VN9Y' => '337',
-  'VN9Z' => '340',
   'VO1' => '1522',
   'VO2' => '1524',
   'VP2' => '279,280,281',
   'VY1' => '1530',
   'VY2' => '1532',
   'VY9' => '276',
-  'VZ' => '277',
-  'VZ1' => '1534',
-  'VZ2' => '1536',
-  'VZ3' => '1538',
-  'VZ4' => '1540',
-  'VZ5' => '1542',
-  'VZ6' => '1544',
-  'VZ7' => '1546',
-  'VZ8' => '1548',
-  'VZ9' => '278',
-  'VZ9C' => '337',
   'VZ9L' => '338',
   'VZ9M' => '339',
   'VZ9W' => '340',
   'VZ9X' => '341',
   'VZ9Y' => '337',
-  'VZ9Z' => '340',
   'W' => '179',
   'W0' => '1666,1667,1668,1669,1670,1671,1672,1673',
   'W1' => '1674,1675,1676,1677,1678,1679',
    10 => bless( { name => 'Fiji-3D2', dxcc => 277, itu => 56, cq => 32, utcoff => -12.00, lat => -17.7833333333333, long => 177.916666666667, qra => 'RH82WF' }, 'Prefix'),
    11 => bless( { name => 'Conway-Reef-3D2/C', dxcc => 321, itu => 56, cq => 32, utcoff => -12.00, lat => -22, long => 175, qra => 'RG78MA' }, 'Prefix'),
    12 => bless( { name => 'Rotuma-Island-3D2/R', dxcc => 324, itu => 56, cq => 32, utcoff => -12.00, lat => -12.4833333333333, long => 177.083333333333, qra => 'RH87NM' }, 'Prefix'),
-   13 => bless( { name => 'Kingdom-of-eSwatini-3DA', dxcc => 278, itu => 57, cq => 38, utcoff => -2.00, lat => -26.65, long => 31.4833333333333, qra => 'KG53RI' }, 'Prefix'),
+   13 => bless( { name => 'Kingdom-of-Eswatini-3DA', dxcc => 278, itu => 57, cq => 38, utcoff => -2.00, lat => -26.65, long => 31.4833333333333, qra => 'KG53RI' }, 'Prefix'),
    14 => bless( { name => 'Tunisia-3V', dxcc => 279, itu => 37, cq => 33, utcoff => -1.00, lat => 35.4, long => 9.31666666666667, qra => 'JM45PJ' }, 'Prefix'),
    15 => bless( { name => 'Vietnam-3W', dxcc => 231, itu => 49, cq => 26, utcoff => -7.00, lat => 15.8, long => 107.9, qra => 'OK35WT' }, 'Prefix'),
    16 => bless( { name => 'Guinea-3X', dxcc => 280, itu => 46, cq => 35, utcoff => 0.00, lat => 11, long => -10.6833333333333, qra => 'IK41PA' }, 'Prefix'),
    99 => bless( { name => 'South-Cook-Islands-E5/S', dxcc => 257, itu => 63, cq => 32, utcoff => 10.00, lat => -21.9, long => -157.933333333333, qra => 'BG18AC' }, 'Prefix'),
    100 => bless( { name => 'Niue-E6', dxcc => 258, itu => 62, cq => 32, utcoff => 11.00, lat => -19.0333333333333, long => -169.85, qra => 'AH50BX' }, 'Prefix'),
    101 => bless( { name => 'Bosnia-Herzegovina-E7', dxcc => 336, itu => 28, cq => 15, utcoff => -1.00, lat => 44.3166666666667, long => 17.5666666666667, qra => 'JN84SH' }, 'Prefix'),
-   102 => bless( { name => 'Spain-EA', dxcc => 34, itu => 37, cq => 14, utcoff => -1.00, lat => 40.3666666666667, long => -4.88333333333333, qra => 'IN70NI' }, 'Prefix'),
+   102 => bless( { name => 'Spain-EA', dxcc => 34, itu => 37, cq => 14, utcoff => -1.00, lat => 40.3166666666667, long => -3.43333333333333, qra => 'IN80GH' }, 'Prefix'),
    103 => bless( { name => 'Balearic-Islands-EA6', dxcc => 35, itu => 37, cq => 14, utcoff => -1.00, lat => 39.6, long => 2.95, qra => 'JM19LO' }, 'Prefix'),
    104 => bless( { name => 'Canary-Islands-EA8', dxcc => 36, itu => 36, cq => 33, utcoff => 0.00, lat => 28.3166666666667, long => -15.85, qra => 'IL28BH' }, 'Prefix'),
    105 => bless( { name => 'Ceuta-Melilla-EA9', dxcc => 37, itu => 37, cq => 33, utcoff => -1.00, lat => 35.9, long => -5.26666666666667, qra => 'IM75IV' }, 'Prefix'),
    194 => bless( { name => 'Puerto-Rico-KP4', dxcc => 120, itu => 11, cq => 8, utcoff => 4.00, lat => 18.1833333333333, long => -66.55, qra => 'FK68RE' }, 'Prefix'),
    195 => bless( { name => 'Desecheo-Island-KP5', dxcc => 121, itu => 11, cq => 8, utcoff => 4.00, lat => 18.0833333333333, long => -67.8833333333333, qra => 'FK68BB' }, 'Prefix'),
    196 => bless( { name => 'Norway-LA', dxcc => 123, itu => 18, cq => 14, utcoff => -1.00, lat => 61, long => 9, qra => 'JP41MA' }, 'Prefix'),
-   197 => bless( { name => 'Argentina-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.8, long => -65.9166666666667, qra => 'FF75AE' }, 'Prefix'),
+   197 => bless( { name => 'Argentina-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -32.5, long => -62.1333333333333, qra => 'FF87WM' }, 'Prefix'),
    198 => bless( { name => 'Luxembourg-LX', dxcc => 125, itu => 27, cq => 14, utcoff => -1.00, lat => 50, long => 6, qra => 'JO30AA' }, 'Prefix'),
    199 => bless( { name => 'Lithuania-LY', dxcc => 194, itu => 29, cq => 15, utcoff => -2.00, lat => 55.45, long => 23.6333333333333, qra => 'KO15TK' }, 'Prefix'),
    200 => bless( { name => 'Bulgaria-LZ', dxcc => 126, itu => 28, cq => 20, utcoff => -2.00, lat => 42.8333333333333, long => 25.0833333333333, qra => 'KN22NU' }, 'Prefix'),
    201 => bless( { name => 'Peru-OA', dxcc => 127, itu => 12, cq => 10, utcoff => 5.00, lat => -10, long => -76, qra => 'FI20AA' }, 'Prefix'),
    202 => bless( { name => 'Lebanon-OD', dxcc => 128, itu => 39, cq => 20, utcoff => -2.00, lat => 33.8333333333333, long => 35.8333333333333, qra => 'KM73WU' }, 'Prefix'),
    203 => bless( { name => 'Austria-OE', dxcc => 129, itu => 28, cq => 15, utcoff => -1.00, lat => 47.3333333333333, long => 13.3333333333333, qra => 'JN67QI' }, 'Prefix'),
-   204 => bless( { name => 'Finland-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 63.7833333333333, long => 27.0833333333333, qra => 'KP33NS' }, 'Prefix'),
+   204 => bless( { name => 'Finland-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61.3833333333333, long => 24.8166666666667, qra => 'KP21JJ' }, 'Prefix'),
    205 => bless( { name => 'Aland-Islands-OH0', dxcc => 131, itu => 18, cq => 15, utcoff => -2.00, lat => 60.1333333333333, long => 20.3666666666667, qra => 'KP00ED' }, 'Prefix'),
    206 => bless( { name => 'Market-Reef-OJ0', dxcc => 132, itu => 18, cq => 15, utcoff => -2.00, lat => 60, long => 19, qra => 'JP90MA' }, 'Prefix'),
    207 => bless( { name => 'Czech-Republic-OK', dxcc => 133, itu => 28, cq => 15, utcoff => -1.00, lat => 50, long => 16, qra => 'JO80AA' }, 'Prefix'),
    230 => bless( { name => 'Slovenia-S5', dxcc => 335, itu => 28, cq => 15, utcoff => -1.00, lat => 46, long => 14, qra => 'JN76AA' }, 'Prefix'),
    231 => bless( { name => 'Seychelles-S7', dxcc => 149, itu => 53, cq => 39, utcoff => -4.00, lat => -4.66666666666667, long => 55.4666666666667, qra => 'LI75RH' }, 'Prefix'),
    232 => bless( { name => 'Sao-Tome-Principe-S9', dxcc => 150, itu => 47, cq => 36, utcoff => 0.00, lat => 0.216666666666667, long => 6.56666666666667, qra => 'JJ30GF' }, 'Prefix'),
-   233 => bless( { name => 'Sweden-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 61.2, long => 14.5666666666667, qra => 'JP71GE' }, 'Prefix'),
+   233 => bless( { name => 'Sweden-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 58.9, long => 15.3333333333333, qra => 'JO78QV' }, 'Prefix'),
    234 => bless( { name => 'Poland-SP', dxcc => 152, itu => 28, cq => 15, utcoff => -1.00, lat => 52.2833333333333, long => 18.6666666666667, qra => 'JO92HG' }, 'Prefix'),
    235 => bless( { name => 'Sudan-ST', dxcc => 153, itu => 48, cq => 34, utcoff => -3.00, lat => 14.4666666666667, long => 28.6166666666667, qra => 'KK44HL' }, 'Prefix'),
    236 => bless( { name => 'Egypt-SU', dxcc => 155, itu => 38, cq => 34, utcoff => -2.00, lat => 26.2833333333333, long => 28.6, qra => 'KL46HG' }, 'Prefix'),
    488 => bless( { name => 'Havana-City-CO2', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 23.1333333333333, long => -82.3833333333333, qra => 'EL83TD' }, 'Prefix'),
    489 => bless( { name => 'Havana-CM', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 22.8166666666667, long => -82.35, qra => 'EL82TT' }, 'Prefix'),
    490 => bless( { name => 'Havana-CO3', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 22.8166666666667, long => -82.35, qra => 'EL82TT' }, 'Prefix'),
-   491 => bless( { name => 'Islas-de-Juvenfud-CM', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 21.75, long => -82.85, qra => 'EL81NS' }, 'Prefix'),
-   492 => bless( { name => 'Islas-de-Juvenfud-CO4', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 21.75, long => -82.85, qra => 'EL81NS' }, 'Prefix'),
+   491 => bless( { name => 'Islas-de-Juventud-CM', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 21.75, long => -82.85, qra => 'EL81NS' }, 'Prefix'),
+   492 => bless( { name => 'Islas-de-Juventud-CO4', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 21.75, long => -82.85, qra => 'EL81NS' }, 'Prefix'),
    493 => bless( { name => 'Matanzas-CM', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 23.05, long => -81.5833333333333, qra => 'EL93FB' }, 'Prefix'),
    494 => bless( { name => 'Matanzas-CO5', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 23.05, long => -81.5833333333333, qra => 'EL93FB' }, 'Prefix'),
    495 => bless( { name => 'Cienfuegos-Villa-Clara-Sancti-Spiritus-CM', dxcc => 20, itu => 11, cq => 8, utcoff => 5.00, lat => 22.4, long => -79.95, qra => 'FL02AJ' }, 'Prefix'),
    916 => bless( { name => 'Ski-LA/S', dxcc => 123, itu => 18, cq => 14, utcoff => -1.00, lat => 59.7333333333333, long => 10.8833333333333, qra => 'JO59KR' }, 'Prefix'),
    917 => bless( { name => 'Trondheim-LA', dxcc => 123, itu => 18, cq => 14, utcoff => -1.00, lat => 63.4166666666667, long => 10.3833333333333, qra => 'JP53EJ' }, 'Prefix'),
    918 => bless( { name => 'Trondheim-LA/T', dxcc => 123, itu => 18, cq => 14, utcoff => -1.00, lat => 63.4166666666667, long => 10.3833333333333, qra => 'JP53EJ' }, 'Prefix'),
-   919 => bless( { name => 'Buenos-Aires-city-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.6, long => -58.3666666666667, qra => 'GF05TJ' }, 'Prefix'),
-   920 => bless( { name => 'Buenos-Aires-city-LU-A', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.6, long => -58.3666666666667, qra => 'GF05TJ' }, 'Prefix'),
-   921 => bless( { name => 'Buenos-Aires-province-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -38.75, long => -62.25, qra => 'FF81VG' }, 'Prefix'),
-   922 => bless( { name => 'Buenos-Aires-province-LU-D', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -38.75, long => -62.25, qra => 'FF81VG' }, 'Prefix'),
-   923 => bless( { name => 'Santa-Fe-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.5666666666667, long => -60.6666666666667, qra => 'FF98QK' }, 'Prefix'),
-   924 => bless( { name => 'Santa-Fe-LU-F', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.5666666666667, long => -60.6666666666667, qra => 'FF98QK' }, 'Prefix'),
-   925 => bless( { name => 'Chaco-and-Formosa-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.4666666666667, long => -59, qra => 'GG02MM' }, 'Prefix'),
-   926 => bless( { name => 'Chaco-and-Formosa-LU-G', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.4666666666667, long => -59, qra => 'GG02MM' }, 'Prefix'),
-   927 => bless( { name => 'Cordoba-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.3166666666667, long => -64.1666666666667, qra => 'FF78VQ' }, 'Prefix'),
-   928 => bless( { name => 'Cordoba-LU-H', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.3166666666667, long => -64.1666666666667, qra => 'FF78VQ' }, 'Prefix'),
-   929 => bless( { name => 'Misiones-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.45, long => -55.8166666666667, qra => 'GG22CN' }, 'Prefix'),
-   930 => bless( { name => 'Misiones-LU-I', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.45, long => -55.8166666666667, qra => 'GG22CN' }, 'Prefix'),
-   931 => bless( { name => 'Entre-Rios-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.7333333333333, long => -60.5333333333333, qra => 'FF98RG' }, 'Prefix'),
-   932 => bless( { name => 'Entre-Rios-LU-J', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.7333333333333, long => -60.5333333333333, qra => 'FF98RG' }, 'Prefix'),
-   933 => bless( { name => 'Tucuman-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.7666666666667, long => -65.25, qra => 'FG73JF' }, 'Prefix'),
-   934 => bless( { name => 'Tucuman-LU-K', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.7666666666667, long => -65.25, qra => 'FG73JF' }, 'Prefix'),
-   935 => bless( { name => 'Corrientes-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.5, long => -58.8, qra => 'GG02OM' }, 'Prefix'),
-   936 => bless( { name => 'Corrientes-LU-L', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.5, long => -58.8, qra => 'GG02OM' }, 'Prefix'),
-   937 => bless( { name => 'Mendoza-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.6666666666667, long => -68.2, qra => 'FF55VI' }, 'Prefix'),
-   938 => bless( { name => 'Mendoza-LU-M', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.6666666666667, long => -68.2, qra => 'FF55VI' }, 'Prefix'),
-   939 => bless( { name => 'Santiago-del-Estero-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.8, long => -64.2, qra => 'FG72VE' }, 'Prefix'),
-   940 => bless( { name => 'Santiago-del-Estero-LU-N', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.8, long => -64.2, qra => 'FG72VE' }, 'Prefix'),
-   941 => bless( { name => 'Salta-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -24.7666666666667, long => -65.4666666666667, qra => 'FG75GF' }, 'Prefix'),
-   942 => bless( { name => 'Salta-LU-O', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -24.7666666666667, long => -65.4666666666667, qra => 'FG75GF' }, 'Prefix'),
-   943 => bless( { name => 'San-Juan-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.55, long => -68.5166666666667, qra => 'FF58RK' }, 'Prefix'),
-   944 => bless( { name => 'San-Juan-LU-P', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.55, long => -68.5166666666667, qra => 'FF58RK' }, 'Prefix'),
-   945 => bless( { name => 'San-Luis-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33, long => -66, qra => 'FF77AA' }, 'Prefix'),
-   946 => bless( { name => 'San-Luis-LU-Q', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33, long => -66, qra => 'FF77AA' }, 'Prefix'),
-   947 => bless( { name => 'Catamarca-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -28.4666666666667, long => -65.7666666666667, qra => 'FG71CM' }, 'Prefix'),
-   948 => bless( { name => 'Catamarca-LU-R', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -28.4666666666667, long => -65.7666666666667, qra => 'FG71CM' }, 'Prefix'),
-   949 => bless( { name => 'La-Rioja-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -29.25, long => -67, qra => 'FG60MS' }, 'Prefix'),
-   950 => bless( { name => 'La-Rioja-LU-S', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -29.25, long => -67, qra => 'FG60MS' }, 'Prefix'),
-   951 => bless( { name => 'Jujuy-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -24.1666666666667, long => -65.8, qra => 'FG75CT' }, 'Prefix'),
-   952 => bless( { name => 'Jujuy-LU-T', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -24.1666666666667, long => -65.8, qra => 'FG75CT' }, 'Prefix'),
-   953 => bless( { name => 'La-Pampas-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -38, long => -66, qra => 'FF72AA' }, 'Prefix'),
-   954 => bless( { name => 'La-Pampas-LU-U', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -38, long => -66, qra => 'FF72AA' }, 'Prefix'),
-   955 => bless( { name => 'Rio-Negro-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -40, long => -66, qra => 'FF70AA' }, 'Prefix'),
-   956 => bless( { name => 'Rio-Negro-LU-V', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -40, long => -66, qra => 'FF70AA' }, 'Prefix'),
-   957 => bless( { name => 'Chubut-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -45.8666666666667, long => -67.5, qra => 'FE64GD' }, 'Prefix'),
-   958 => bless( { name => 'Chubut-LU-W', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -45.8666666666667, long => -67.5, qra => 'FE64GD' }, 'Prefix'),
-   959 => bless( { name => 'Santa-Cruz-Tierra-del-Fuego-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -45, long => -69, qra => 'FE55MA' }, 'Prefix'),
-   960 => bless( { name => 'Santa-Cruz-Tierra-del-Fuego-LU-X', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -45, long => -69, qra => 'FE55MA' }, 'Prefix'),
-   961 => bless( { name => 'Neuquen-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -38.55, long => -68.05, qra => 'FF51XK' }, 'Prefix'),
-   962 => bless( { name => 'Neuquen-LU-Y', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -38.55, long => -68.05, qra => 'FF51XK' }, 'Prefix'),
+   919 => bless( { name => 'Buenos-Aires-city-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.6, long => -58.3833333333333, qra => 'GF05TJ' }, 'Prefix'),
+   920 => bless( { name => 'Buenos-Aires-city-LU-A', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -34.6, long => -58.3833333333333, qra => 'GF05TJ' }, 'Prefix'),
+   921 => bless( { name => 'Buenos-Aires-province-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33.7, long => -61, qra => 'FF96MH' }, 'Prefix'),
+   922 => bless( { name => 'Buenos-Aires-province-LU-D', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33.7, long => -61, qra => 'FF96MH' }, 'Prefix'),
+   923 => bless( { name => 'Santa-Fe-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33.7166666666667, long => -62.2333333333333, qra => 'FF86VG' }, 'Prefix'),
+   924 => bless( { name => 'Santa-Fe-LU-F', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33.7166666666667, long => -62.2333333333333, qra => 'FF86VG' }, 'Prefix'),
+   925 => bless( { name => 'Chaco-and-Formosa-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.95, long => -58.7166666666667, qra => 'GG03PB' }, 'Prefix'),
+   926 => bless( { name => 'Chaco-and-Formosa-LU-G', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.95, long => -58.7166666666667, qra => 'GG03PB' }, 'Prefix'),
+   927 => bless( { name => 'Cordoba-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.4166666666667, long => -64.1833333333333, qra => 'FF78VN' }, 'Prefix'),
+   928 => bless( { name => 'Cordoba-LU-H', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -31.4166666666667, long => -64.1833333333333, qra => 'FF78VN' }, 'Prefix'),
+   929 => bless( { name => 'Misiones-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.9166666666667, long => -54.5166666666667, qra => 'GG23RB' }, 'Prefix'),
+   930 => bless( { name => 'Misiones-LU-I', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.9166666666667, long => -54.5166666666667, qra => 'GG23RB' }, 'Prefix'),
+   931 => bless( { name => 'Entre-Rios-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -32.05, long => -60.2833333333333, qra => 'FF97UW' }, 'Prefix'),
+   932 => bless( { name => 'Entre-Rios-LU-J', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -32.05, long => -60.2833333333333, qra => 'FF97UW' }, 'Prefix'),
+   933 => bless( { name => 'Tucuman-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.9333333333333, long => -65.3333333333333, qra => 'FG73IB' }, 'Prefix'),
+   934 => bless( { name => 'Tucuman-LU-K', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -26.9333333333333, long => -65.3333333333333, qra => 'FG73IB' }, 'Prefix'),
+   935 => bless( { name => 'Corrientes-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -28.6666666666667, long => -57.6333333333333, qra => 'GG11EH' }, 'Prefix'),
+   936 => bless( { name => 'Corrientes-LU-L', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -28.6666666666667, long => -57.6333333333333, qra => 'GG11EH' }, 'Prefix'),
+   937 => bless( { name => 'Mendoza-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -32.8833333333333, long => -68.85, qra => 'FF57NC' }, 'Prefix'),
+   938 => bless( { name => 'Mendoza-LU-M', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -32.8833333333333, long => -68.85, qra => 'FF57NC' }, 'Prefix'),
+   939 => bless( { name => 'Santiago-del-Estero-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.7833333333333, long => -64.2666666666667, qra => 'FG72UF' }, 'Prefix'),
+   940 => bless( { name => 'Santiago-del-Estero-LU-N', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -27.7833333333333, long => -64.2666666666667, qra => 'FG72UF' }, 'Prefix'),
+   941 => bless( { name => 'Salta-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -24.7833333333333, long => -65.4166666666667, qra => 'FG75GF' }, 'Prefix'),
+   942 => bless( { name => 'Salta-LU-O', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -24.7833333333333, long => -65.4166666666667, qra => 'FG75GF' }, 'Prefix'),
+   943 => bless( { name => 'San-Juan-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -30.8666666666667, long => -68.9833333333333, qra => 'FF59MD' }, 'Prefix'),
+   944 => bless( { name => 'San-Juan-LU-P', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -30.8666666666667, long => -68.9833333333333, qra => 'FF59MD' }, 'Prefix'),
+   945 => bless( { name => 'San-Luis-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33.3, long => -66.35, qra => 'FF66TQ' }, 'Prefix'),
+   946 => bless( { name => 'San-Luis-LU-Q', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -33.3, long => -66.35, qra => 'FF66TQ' }, 'Prefix'),
+   947 => bless( { name => 'Catamarca-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -28.4333333333333, long => -65.7833333333333, qra => 'FG71CN' }, 'Prefix'),
+   948 => bless( { name => 'Catamarca-LU-R', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -28.4333333333333, long => -65.7833333333333, qra => 'FG71CN' }, 'Prefix'),
+   949 => bless( { name => 'La-Rioja-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -29.4333333333333, long => -66.85, qra => 'FG60NN' }, 'Prefix'),
+   950 => bless( { name => 'La-Rioja-LU-S', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -29.4333333333333, long => -66.85, qra => 'FG60NN' }, 'Prefix'),
+   951 => bless( { name => 'Jujuy-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -23.75, long => -65.5, qra => 'FG76GG' }, 'Prefix'),
+   952 => bless( { name => 'Jujuy-LU-T', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -23.75, long => -65.5, qra => 'FG76GG' }, 'Prefix'),
+   953 => bless( { name => 'La-Pampa-LU', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -36.6166666666667, long => -64.2833333333333, qra => 'FF73UJ' }, 'Prefix'),
+   954 => bless( { name => 'La-Pampa-LU-U', dxcc => 124, itu => 14, cq => 13, utcoff => 3.00, lat => -36.6166666666667, long => -64.2833333333333, qra => 'FF73UJ' }, 'Prefix'),
+   955 => bless( { name => 'Rio-Negro-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -40.8, long => -63, qra => 'FE89ME' }, 'Prefix'),
+   956 => bless( { name => 'Rio-Negro-LU-V', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -40.8, long => -63, qra => 'FE89ME' }, 'Prefix'),
+   957 => bless( { name => 'Chubut-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -43.3, long => -65.1, qra => 'FE76KQ' }, 'Prefix'),
+   958 => bless( { name => 'Chubut-LU-W', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -43.3, long => -65.1, qra => 'FE76KQ' }, 'Prefix'),
+   959 => bless( { name => 'Santa-Cruz-Tierra-del-Fuego-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -50.4333333333333, long => -69.25, qra => 'FD59JN' }, 'Prefix'),
+   960 => bless( { name => 'Santa-Cruz-Tierra-del-Fuego-LU-X', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -50.4333333333333, long => -69.25, qra => 'FD59JN' }, 'Prefix'),
+   961 => bless( { name => 'Neuquen-LU', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -38.95, long => -68.0666666666667, qra => 'FF51XB' }, 'Prefix'),
+   962 => bless( { name => 'Neuquen-LU-Y', dxcc => 124, itu => 16, cq => 13, utcoff => 3.00, lat => -38.95, long => -68.0666666666667, qra => 'FF51XB' }, 'Prefix'),
    963 => bless( { name => 'Lambayeque-Plura-Tumbes-OA', dxcc => 127, itu => 12, cq => 10, utcoff => 5.00, lat => -6.51666666666667, long => -79.85, qra => 'FI03BL' }, 'Prefix'),
    964 => bless( { name => 'Lambayeque-Plura-Tumbes-OA1', dxcc => 127, itu => 12, cq => 10, utcoff => 5.00, lat => -6.51666666666667, long => -79.85, qra => 'FI03BL' }, 'Prefix'),
    965 => bless( { name => 'Cajamarca-La-Libertad-OA', dxcc => 127, itu => 12, cq => 10, utcoff => 5.00, lat => -7.15, long => -78.5166666666667, qra => 'FI02RU' }, 'Prefix'),
    1000 => bless( { name => 'Vorarlberg-OE9', dxcc => 129, itu => 28, cq => 15, utcoff => -1.00, lat => 47.25, long => 9.9, qra => 'JN47WG' }, 'Prefix'),
    1001 => bless( { name => 'Turku-Pori-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 60.45, long => 22.25, qra => 'KP10DK' }, 'Prefix'),
    1002 => bless( { name => 'Turku-Pori-OH1', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 60.45, long => 22.25, qra => 'KP10DK' }, 'Prefix'),
-   1003 => bless( { name => 'Uusimaa-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 60.2333333333333, long => 24.7833333333333, qra => 'KP20JF' }, 'Prefix'),
-   1004 => bless( { name => 'Uusimaa-OH2', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 60.2333333333333, long => 24.7833333333333, qra => 'KP20JF' }, 'Prefix'),
-   1005 => bless( { name => 'Hame-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61.5333333333333, long => 23.75, qra => 'KP11VM' }, 'Prefix'),
-   1006 => bless( { name => 'Hame-OH3', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61.5333333333333, long => 23.75, qra => 'KP11VM' }, 'Prefix'),
+   1003 => bless( { name => 'Uudenmaa-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 60.2333333333333, long => 24.7833333333333, qra => 'KP20JF' }, 'Prefix'),
+   1004 => bless( { name => 'Uudenmaa-OH2', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 60.2333333333333, long => 24.7833333333333, qra => 'KP20JF' }, 'Prefix'),
+   1005 => bless( { name => 'Haeme-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61.5333333333333, long => 23.75, qra => 'KP11VM' }, 'Prefix'),
+   1006 => bless( { name => 'Haeme-OH3', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61.5333333333333, long => 23.75, qra => 'KP11VM' }, 'Prefix'),
    1007 => bless( { name => 'Mikkeli-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 62.5, long => 28, qra => 'KP42AM' }, 'Prefix'),
    1008 => bless( { name => 'Mikkeli-OH4', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 62.5, long => 28, qra => 'KP42AM' }, 'Prefix'),
-   1009 => bless( { name => 'Kymenlaakso-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61, long => 28.2, qra => 'KP41CA' }, 'Prefix'),
-   1010 => bless( { name => 'Kymenlaakso-OH5', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61, long => 28.2, qra => 'KP41CA' }, 'Prefix'),
+   1009 => bless( { name => 'Kymi-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61, long => 28.2, qra => 'KP41CA' }, 'Prefix'),
+   1010 => bless( { name => 'Kymi-OH5', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 61, long => 28.2, qra => 'KP41CA' }, 'Prefix'),
    1011 => bless( { name => 'Keski-Suomi-Vaasa-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 63, long => 22, qra => 'KP13AA' }, 'Prefix'),
    1012 => bless( { name => 'Keski-Suomi-Vaasa-OH6', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 63, long => 22, qra => 'KP13AA' }, 'Prefix'),
    1013 => bless( { name => 'Kuopio-Pohjois-Karjala-OH', dxcc => 130, itu => 18, cq => 15, utcoff => -2.00, lat => 62.8, long => 27.5, qra => 'KP32ST' }, 'Prefix'),
    1118 => bless( { name => 'Principe-S9/P', dxcc => 150, itu => 47, cq => 36, utcoff => 0.00, lat => 1.61666666666667, long => 7.4, qra => 'JJ31QO' }, 'Prefix'),
    1119 => bless( { name => 'Sao-Tome-S9', dxcc => 150, itu => 47, cq => 36, utcoff => 0.00, lat => 0.233333333333333, long => 6.6, qra => 'JJ30HF' }, 'Prefix'),
    1120 => bless( { name => 'Sao-Tome-S9/S', dxcc => 150, itu => 47, cq => 36, utcoff => 0.00, lat => 0.233333333333333, long => 6.6, qra => 'JJ30HF' }, 'Prefix'),
-   1121 => bless( { name => 'Stockholm-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.4333333333333, long => 17.95, qra => 'JO89XK' }, 'Prefix'),
-   1122 => bless( { name => 'Stockholm-SM0', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.4333333333333, long => 17.95, qra => 'JO89XK' }, 'Prefix'),
-   1123 => bless( { name => 'Gotland-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.5, long => 18.4, qra => 'JO97EM' }, 'Prefix'),
-   1124 => bless( { name => 'Gotland-SM1', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.5, long => 18.4, qra => 'JO97EM' }, 'Prefix'),
-   1125 => bless( { name => 'Norrbotten-Vasterbotten-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 65, long => 20, qra => 'KP05AA' }, 'Prefix'),
-   1126 => bless( { name => 'Norrbotten-Vasterbotten-SM2', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 65, long => 20, qra => 'KP05AA' }, 'Prefix'),
-   1127 => bless( { name => 'Gavleborg-Jarntland-Vasternorrland-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 62, long => 19, qra => 'JP92MA' }, 'Prefix'),
-   1128 => bless( { name => 'Gavleborg-Jarntland-Vasternorrland-SM3', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 62, long => 19, qra => 'JP92MA' }, 'Prefix'),
-   1129 => bless( { name => 'Kopparberg-Orebo-Varmland-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.3, long => 15.0833333333333, qra => 'JO79NH' }, 'Prefix'),
-   1130 => bless( { name => 'Kopparberg-Orebo-Varmland-SM4', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.3, long => 15.0833333333333, qra => 'JO79NH' }, 'Prefix'),
-   1131 => bless( { name => 'Ostergottland-Sodermanland-Uppsala-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 58.4166666666667, long => 15.5833333333333, qra => 'JO78TJ' }, 'Prefix'),
-   1132 => bless( { name => 'Ostergottland-Sodermanland-Uppsala-SM5', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 58.4166666666667, long => 15.5833333333333, qra => 'JO78TJ' }, 'Prefix'),
-   1133 => bless( { name => 'Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.75, long => 12, qra => 'JO67AS' }, 'Prefix'),
-   1134 => bless( { name => 'Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM6', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.75, long => 12, qra => 'JO67AS' }, 'Prefix'),
-   1135 => bless( { name => 'Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 55.5833333333333, long => 13.1, qra => 'JO65NO' }, 'Prefix'),
-   1136 => bless( { name => 'Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM7', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 55.5833333333333, long => 13.1, qra => 'JO65NO' }, 'Prefix'),
+   1121 => bless( { name => 'Stockholm-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.3333333333333, long => 18.1666666666667, qra => 'JO99BI' }, 'Prefix'),
+   1122 => bless( { name => 'Stockholm-SM0', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.3333333333333, long => 18.1666666666667, qra => 'JO99BI' }, 'Prefix'),
+   1123 => bless( { name => 'Gotland-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.5, long => 18.5166666666667, qra => 'JO97GM' }, 'Prefix'),
+   1124 => bless( { name => 'Gotland-SM1', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.5, long => 18.5166666666667, qra => 'JO97GM' }, 'Prefix'),
+   1125 => bless( { name => 'Norrbotten-Vasterbotten-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 65.6833333333333, long => 18.4, qra => 'JP95EQ' }, 'Prefix'),
+   1126 => bless( { name => 'Norrbotten-Vasterbotten-SM2', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 65.6833333333333, long => 18.4, qra => 'JP95EQ' }, 'Prefix'),
+   1127 => bless( { name => 'Gavleborg-Jamtland-Vasternorrland-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 62, long => 16.2833333333333, qra => 'JP82DA' }, 'Prefix'),
+   1128 => bless( { name => 'Gavleborg-Jamtland-Vasternorrland-SM3', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 62, long => 16.2833333333333, qra => 'JP82DA' }, 'Prefix'),
+   1129 => bless( { name => 'Kopparberg-Orebro-Varmland-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.7833333333333, long => 14.7166666666667, qra => 'JO79IS' }, 'Prefix'),
+   1130 => bless( { name => 'Kopparberg-Orebro-Varmland-SM4', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.7833333333333, long => 14.7166666666667, qra => 'JO79IS' }, 'Prefix'),
+   1131 => bless( { name => 'Ostergotland-Sodermanland-Uppsala-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.15, long => 16.4666666666667, qra => 'JO89FD' }, 'Prefix'),
+   1132 => bless( { name => 'Ostergotland-Sodermanland-Uppsala-SM5', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 59.15, long => 16.4666666666667, qra => 'JO89FD' }, 'Prefix'),
+   1133 => bless( { name => 'Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.9666666666667, long => 11.9, qra => 'JO57WX' }, 'Prefix'),
+   1134 => bless( { name => 'Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM6', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 57.9666666666667, long => 11.9, qra => 'JO57WX' }, 'Prefix'),
+   1135 => bless( { name => 'Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 56.4333333333333, long => 14, qra => 'JO76AK' }, 'Prefix'),
+   1136 => bless( { name => 'Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM7', dxcc => 151, itu => 18, cq => 14, utcoff => -1.00, lat => 56.4333333333333, long => 14, qra => 'JO76AK' }, 'Prefix'),
    1137 => bless( { name => 'Zachodniopomorskie-SP', dxcc => 152, itu => 28, cq => 15, utcoff => -1.00, lat => 53.4166666666667, long => 14.5333333333333, qra => 'JO73GJ' }, 'Prefix'),
    1138 => bless( { name => 'Zachodniopomorskie-SP1', dxcc => 152, itu => 28, cq => 15, utcoff => -1.00, lat => 53.4166666666667, long => 14.5333333333333, qra => 'JO73GJ' }, 'Prefix'),
    1139 => bless( { name => 'Pomorskie-Kujawsko-Pomorskie-SP', dxcc => 152, itu => 28, cq => 15, utcoff => -1.00, lat => 54.45, long => 17.3333333333333, qra => 'JO84QK' }, 'Prefix'),
    1515 => bless( { name => 'Alberta-VE6', dxcc => 197, itu => 2, cq => 4, utcoff => 7.00, lat => 52.1166666666667, long => -113.833333333333, qra => 'DO32CC' }, 'Prefix'),
    1516 => bless( { name => 'British-Columbia-VE', dxcc => 197, itu => 2, cq => 3, utcoff => 7.00, lat => 49.5333333333333, long => -122.666666666667, qra => 'CN89PM' }, 'Prefix'),
    1517 => bless( { name => 'British-Columbia-VE7', dxcc => 197, itu => 2, cq => 3, utcoff => 7.00, lat => 49.5333333333333, long => -122.666666666667, qra => 'CN89PM' }, 'Prefix'),
-   1518 => bless( { name => 'Northwest-Territories-VE', dxcc => 197, itu => 3, cq => 1, utcoff => 7.00, lat => 62.45, long => -147.766666666667, qra => 'BP62CK' }, 'Prefix'),
-   1519 => bless( { name => 'Northwest-Territories-VE8', dxcc => 197, itu => 3, cq => 1, utcoff => 7.00, lat => 62.45, long => -147.766666666667, qra => 'BP62CK' }, 'Prefix'),
+   1518 => bless( { name => 'Northwest-Territories-VE', dxcc => 197, itu => 3, cq => 1, utcoff => 7.00, lat => 62.45, long => -114.4, qra => 'DP22TK' }, 'Prefix'),
+   1519 => bless( { name => 'Northwest-Territories-VE8', dxcc => 197, itu => 3, cq => 1, utcoff => 7.00, lat => 62.45, long => -114.4, qra => 'DP22TK' }, 'Prefix'),
    1520 => bless( { name => 'New-Brunswick-VE', dxcc => 197, itu => 9, cq => 5, utcoff => 4.00, lat => 45.75, long => -65.8, qra => 'FN75CS' }, 'Prefix'),
    1521 => bless( { name => 'New-Brunswick-VE9', dxcc => 197, itu => 9, cq => 5, utcoff => 4.00, lat => 45.75, long => -65.8, qra => 'FN75CS' }, 'Prefix'),
    1522 => bless( { name => 'Newfoundland-VE', dxcc => 197, itu => 9, cq => 5, utcoff => 3.50, lat => 48.4833333333333, long => -55.4666666666667, qra => 'GN28GL' }, 'Prefix'),
index 23f2dfd1d6776dcf73071f5b76372076348907f3..6ae6981fcc95a19a4ce9e99801597e750a07eea8 100644 (file)
@@ -1,6 +1,6 @@
 ! $Id$
 !
-! This file was created by Jim Reisert AD1C on 25 Jun 2020
+! This file was created by Jim Reisert AD1C on 25 Nov 2021
 ! See: https://www.country-files.com/dx-cluster/wpxloc/
 !
 ! Highest DXCC number is 359 ("VERSION" entity)
@@ -25,7 +25,7 @@ BV9S,BW9S,BX9S Spratly-Islands-1S                     269 50 26  -8.00  9 53  0
 3D2 Conway-Reef-3D2/C                                 321 56 32 -12.00 22  0  0 S 175  0  0 E
 3D2/R Rotuma-Island-3D2/R                             324 56 32 -12.00 12 29  0 S 177  5  0 E @
 3D2 Rotuma-Island-3D2/R                               324 56 32 -12.00 12 29  0 S 177  5  0 E
-3DA Kingdom-of-eSwatini-3DA                           278 57 38  -2.00 26 39  0 S  31 29  0 E @
+3DA Kingdom-of-Eswatini-3DA                           278 57 38  -2.00 26 39  0 S  31 29  0 E @
 3V Tunisia-3V                                         279 37 33  -1.00 35 24  0 N   9 19  0 E @
 TS Tunisia-3V                                         279 37 33  -1.00 35 24  0 N   9 19  0 E
 3W Vietnam-3W                                         231 49 26  -7.00 15 48  0 N 107 54  0 E @
@@ -1012,9 +1012,9 @@ CL2,CM2,T42 Havana-City-CM                             20 11  8   5.00 23  8  0
 CO3 Havana-CM                                          20 11  8   5.00 22 49  0 N  82 21  0 W
 CM Havana-CO3                                          20 11  8   5.00 22 49  0 N  82 21  0 W
 CL3,CM3,T43 Havana-CM                                  20 11  8   5.00 22 49  0 N  82 21  0 W
-CO4 Islas-de-Juvenfud-CM                               20 11  8   5.00 21 45  0 N  82 51  0 W
-CM Islas-de-Juvenfud-CO4                               20 11  8   5.00 21 45  0 N  82 51  0 W
-CL4,CM4,T44 Islas-de-Juvenfud-CM                       20 11  8   5.00 21 45  0 N  82 51  0 W
+CO4 Islas-de-Juventud-CM                               20 11  8   5.00 21 45  0 N  82 51  0 W
+CM Islas-de-Juventud-CO4                               20 11  8   5.00 21 45  0 N  82 51  0 W
+CL4,CM4,T44 Islas-de-Juventud-CM                       20 11  8   5.00 21 45  0 N  82 51  0 W
 CO5 Matanzas-CM                                        20 11  8   5.00 23  3  0 N  81 35  0 W
 CM Matanzas-CO5                                        20 11  8   5.00 23  3  0 N  81 35  0 W
 CL5,CM5,T45 Matanzas-CM                                20 11  8   5.00 23  3  0 N  81 35  0 W
@@ -1251,8 +1251,8 @@ E5/S South-Cook-Islands-E5/S                          257 63 32  10.00 21 54  0
 E5 South-Cook-Islands-E5/S                            257 63 32  10.00 21 54  0 S 157 56  0 W
 E6 Niue-E6                                            258 62 32  11.00 19  2  0 S 169 51  0 W @
 E7 Bosnia-Herzegovina-E7                              336 28 15  -1.00 44 19  0 N  17 34  0 E @
-EA Spain-EA                                            34 37 14  -1.00 40 22  0 N   4 53  0 W @
-AM,AN,AO,EB,EC,ED,EE,EF,EG,EH Spain-EA                 34 37 14  -1.00 40 22  0 N   4 53  0 W
+EA Spain-EA                                            34 37 14  -1.00 40 19  0 N   3 26  0 W @
+AM,AN,AO,EB,EC,ED,EE,EF,EG,EH Spain-EA                 34 37 14  -1.00 40 19  0 N   3 26  0 W
 EA1 AV-BU-C-LE-LO-LU-O-OU-P-PO-S-SA-SG-SO-VA-ZA-EA     34 37 14  -1.00 42 34  0 N   6 10  0 W
 EA AV-BU-C-LE-LO-LU-O-OU-P-PO-S-SA-SG-SO-VA-ZA-EA1     34 37 14  -1.00 42 34  0 N   6 10  0 W
 AM1 AV-BU-C-LE-LO-LU-O-OU-P-PO-S-SA-SG-SO-VA-ZA-EA     34 37 14  -1.00 42 34  0 N   6 10  0 W
@@ -1447,7 +1447,7 @@ FW/W Wallis-Island-FW                                  59 62 32 -12.00 13 16  0
 FW Wallis-Island-FW/W                                  59 62 32 -12.00 13 16  0 S 176 12  0 W
 FY French-Guiana-FY                                    60 12  9   3.00  4  0  0 N  53  0  0 W @
 G England-G                                            61 27 14   0.00 52 46  0 N   1 28  0 W @
-2E,M,NHS England-G                                     61 27 14   0.00 52 46  0 N   1 28  0 W
+2E,2ZE,M England-G                                     61 27 14   0.00 52 46  0 N   1 28  0 W
 GD Isle-of-Man-GD                                      62 27 14   0.00 54 12  0 N   4 32  0 W @
 2D,GT,MD,MT Isle-of-Man-GD                             62 27 14   0.00 54 12  0 N   4 32  0 W
 GI Northern-Ireland-GI                                 63 27 14   0.00 54 44  0 N   6 41  0 W @
@@ -1775,8 +1775,9 @@ JA Hokuriku-JA9                                        95 45 25  -9.00 36  4  0
 JM9,JN9,JO9,JP9,JQ9,JR9,JS9 Hokuriku-JA                95 45 25  -9.00 36  4  0 N 136 13  0 E
 JS6 Okinawa-JA                                         95 45 25  -9.00 26 13  0 N 127 41  0 E
 JA Okinawa-JS6                                         95 45 25  -9.00 26 13  0 N 127 41  0 E
-JR6R,JR6S,JR6T,JR6U,JR6V,JR6W,JR6X,JR6Y Okinawa-JA     95 45 25  -9.00 26 13  0 N 127 41  0 E
-JR6Z Okinawa-JA                                        95 45 25  -9.00 26 13  0 N 127 41  0 E
+AGJ60,HTR60,IEJ60,ISG60,JR6R,JR6S,JR6T Okinawa-JA      95 45 25  -9.00 26 13  0 N 127 41  0 E
+JR6U,JR6V,JR6W,JR6X,JR6Y,JR6Z,KJP60,KTD60 Okinawa-JA   95 45 25  -9.00 26 13  0 N 127 41  0 E
+MMD60,MMY60,OGN60,OKA60,SHI60,TRA60,UEO60 Okinawa-JA   95 45 25  -9.00 26 13  0 N 127 41  0 E
 JD/O Ogasawara-JD/O                                    97 45 27  -9.00 27  3  0 N 142 12  0 E @
 JD1 Ogasawara-JD/O                                     97 45 27  -9.00 27  3  0 N 142 12  0 E
 JT Mongolia-JT                                         98 32 23  -7.00 46 46  0 N 102 10  0 E @
@@ -1867,752 +1868,752 @@ LA/S Ski-LA                                           123 18 14  -1.00 59 44  0
 LA Ski-LA/S                                           123 18 14  -1.00 59 44  0 N  10 53  0 E
 LA/T Trondheim-LA                                     123 18 14  -1.00 63 25  0 N  10 23  0 E
 LA Trondheim-LA/T                                     123 18 14  -1.00 63 25  0 N  10 23  0 E
-LU Argentina-LU                                       124 14 13   3.00 34 48  0 S  65 55  0 W @
-AY,AZ,L1,L2,L3,L4,L5,L6,L7,L8,L9,LO,LP Argentina-LU   124 14 13   3.00 34 48  0 S  65 55  0 W
-LQ,LR,LS,LT,LV,LW Argentina-LU                        124 14 13   3.00 34 48  0 S  65 55  0 W
-LU-A Buenos-Aires-city-LU                             124 14 13   3.00 34 36  0 S  58 22  0 W
-LU Buenos-Aires-city-LU-A                             124 14 13   3.00 34 36  0 S  58 22  0 W
-AY0A,AY0B,AY0C,AY1A,AY1B,AY1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AY2A,AY2B,AY2C,AY3A,AY3B,AY3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AY4A,AY4B,AY4C,AY5A,AY5B,AY5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AY6A,AY6B,AY6C,AY7A,AY7B,AY7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AY8A,AY8B,AY8C,AY9A,AY9B,AY9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AZ0A,AZ0B,AZ0C,AZ1A,AZ1B,AZ1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AZ2A,AZ2B,AZ2C,AZ3A,AZ3B,AZ3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AZ4A,AZ4B,AZ4C,AZ5A,AZ5B,AZ5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AZ6A,AZ6B,AZ6C,AZ7A,AZ7B,AZ7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-AZ8A,AZ8B,AZ8C,AZ9A,AZ9B,AZ9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L20A,L20B,L20C,L21A,L21B,L21C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L22A,L22B,L22C,L23A,L23B,L23C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L24A,L24B,L24C,L25A,L25B,L25C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L26A,L26B,L26C,L27A,L27B,L27C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L28A,L28B,L28C,L29A,L29B,L29C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L30A,L30B,L30C,L31A,L31B,L31C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L32A,L32B,L32C,L33A,L33B,L33C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L34A,L34B,L34C,L35A,L35B,L35C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L36A,L36B,L36C,L37A,L37B,L37C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L38A,L38B,L38C,L39A,L39B,L39C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L40A,L40B,L40C,L41A,L41B,L41C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L42A,L42B,L42C,L43A,L43B,L43C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L44A,L44B,L44C,L45A,L45B,L45C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L46A,L46B,L46C,L47A,L47B,L47C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L48A,L48B,L48C,L49A,L49B,L49C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L50A,L50B,L50C,L51A,L51B,L51C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L52A,L52B,L52C,L53A,L53B,L53C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L54A,L54B,L54C,L55A,L55B,L55C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L56A,L56B,L56C,L57A,L57B,L57C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L58A,L58B,L58C,L59A,L59B,L59C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L60A,L60B,L60C,L61A,L61B,L61C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L62A,L62B,L62C,L63A,L63B,L63C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L64A,L64B,L64C,L65A,L65B,L65C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L66A,L66B,L66C,L67A,L67B,L67C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L68A,L68B,L68C,L69A,L69B,L69C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L70A,L70B,L70C,L71A,L71B,L71C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L72A,L72B,L72C,L73A,L73B,L73C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L74A,L74B,L74C,L75A,L75B,L75C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L76A,L76B,L76C,L77A,L77B,L77C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L78A,L78B,L78C,L79A,L79B,L79C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L80A,L80B,L80C,L81A,L81B,L81C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L82A,L82B,L82C,L83A,L83B,L83C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L84A,L84B,L84C,L85A,L85B,L85C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L86A,L86B,L86C,L87A,L87B,L87C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L88A,L88B,L88C,L89A,L89B,L89C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L90A,L90B,L90C,L91A,L91B,L91C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L92A,L92B,L92C,L93A,L93B,L93C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L94A,L94B,L94C,L95A,L95B,L95C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L96A,L96B,L96C,L97A,L97B,L97C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-L98A,L98B,L98C,L99A,L99B,L99C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LO0A,LO0B,LO0C,LO1A,LO1B,LO1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LO2A,LO2B,LO2C,LO3A,LO3B,LO3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LO4A,LO4B,LO4C,LO5A,LO5B,LO5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LO6A,LO6B,LO6C,LO7A,LO7B,LO7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LO8A,LO8B,LO8C,LO9A,LO9B,LO9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LP0A,LP0B,LP0C,LP1A,LP1B,LP1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LP2A,LP2B,LP2C,LP3A,LP3B,LP3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LP4A,LP4B,LP4C,LP5A,LP5B,LP5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LP6A,LP6B,LP6C,LP7A,LP7B,LP7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LP8A,LP8B,LP8C,LP9A,LP9B,LP9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LQ0A,LQ0B,LQ0C,LQ1A,LQ1B,LQ1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LQ2A,LQ2B,LQ2C,LQ3A,LQ3B,LQ3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LQ4A,LQ4B,LQ4C,LQ5A,LQ5B,LQ5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LQ6A,LQ6B,LQ6C,LQ7A,LQ7B,LQ7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LQ8A,LQ8B,LQ8C,LQ9A,LQ9B,LQ9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LR0A,LR0B,LR0C,LR1A,LR1B,LR1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LR2A,LR2B,LR2C,LR3A,LR3B,LR3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LR4A,LR4B,LR4C,LR5A,LR5B,LR5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LR6A,LR6B,LR6C,LR7A,LR7B,LR7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LR8A,LR8B,LR8C,LR9A,LR9B,LR9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LS0A,LS0B,LS0C,LS1A,LS1B,LS1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LS2A,LS2B,LS2C,LS3A,LS3B,LS3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LS4A,LS4B,LS4C,LS5A,LS5B,LS5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LS6A,LS6B,LS6C,LS7A,LS7B,LS7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LS8A,LS8B,LS8C,LS9A,LS9B,LS9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LT0A,LT0B,LT0C,LT1A,LT1B,LT1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LT2A,LT2B,LT2C,LT3A,LT3B,LT3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LT4A,LT4B,LT4C,LT5A,LT5B,LT5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LT6A,LT6B,LT6C,LT7A,LT7B,LT7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LT8A,LT8B,LT8C,LT9A,LT9B,LT9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LU0A,LU0B,LU0C,LU1A,LU1B,LU1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LU2A,LU2B,LU2C,LU3A,LU3B,LU3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LU4A,LU4B,LU4C,LU5A,LU5B,LU5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LU6A,LU6B,LU6C,LU7A,LU7B,LU7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LU8A,LU8B,LU8C,LU9A,LU9B,LU9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LV0A,LV0B,LV0C,LV1A,LV1B,LV1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LV2A,LV2B,LV2C,LV3A,LV3B,LV3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LV4A,LV4B,LV4C,LV5A,LV5B,LV5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LV6A,LV6B,LV6C,LV7A,LV7B,LV7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LV8A,LV8B,LV8C,LV9A,LV9B,LV9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LW0A,LW0B,LW0C,LW1A,LW1B,LW1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LW2A,LW2B,LW2C,LW3A,LW3B,LW3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LW4A,LW4B,LW4C,LW5A,LW5B,LW5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LW6A,LW6B,LW6C,LW7A,LW7B,LW7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LW8A,LW8B,LW8C,LW9A,LW9B,LW9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 22  0 W
-LU-D Buenos-Aires-province-LU                         124 14 13   3.00 38 45  0 S  62 15  0 W
-LU Buenos-Aires-province-LU-D                         124 14 13   3.00 38 45  0 S  62 15  0 W
-AY0D,AY0E,AY1D,AY1E,AY2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AY2E,AY3D,AY3E,AY4D,AY4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AY5D,AY5E,AY6D,AY6E,AY7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AY7E,AY8D,AY8E,AY9D,AY9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AZ0D,AZ0E,AZ1D,AZ1E,AZ2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AZ2E,AZ3D,AZ3E,AZ4D,AZ4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AZ5D,AZ5E,AZ6D,AZ6E,AZ7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-AZ7E,AZ8D,AZ8E,AZ9D,AZ9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L20D,L20E,L21D,L21E,L22D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L22E,L23D,L23E,L24D,L24E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L25D,L25E,L26D,L26E,L27D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L27E,L28D,L28E,L29D,L29E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L30D,L30E,L31D,L31E,L32D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L32E,L33D,L33E,L34D,L34E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L35D,L35E,L36D,L36E,L37D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L37E,L38D,L38E,L39D,L39E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L40D,L40E,L41D,L41E,L42D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L42E,L43D,L43E,L44D,L44E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L45D,L45E,L46D,L46E,L47D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L47E,L48D,L48E,L49D,L49E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L50D,L50E,L51D,L51E,L52D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L52E,L53D,L53E,L54D,L54E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L55D,L55E,L56D,L56E,L57D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L57E,L58D,L58E,L59D,L59E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L60D,L60E,L61D,L61E,L62D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L62E,L63D,L63E,L64D,L64E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L65D,L65E,L66D,L66E,L67D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L67E,L68D,L68E,L69D,L69E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L70D,L70E,L71D,L71E,L72D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L72E,L73D,L73E,L74D,L74E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L75D,L75E,L76D,L76E,L77D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L77E,L78D,L78E,L79D,L79E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L80D,L80E,L81D,L81E,L82D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L82E,L83D,L83E,L84D,L84E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L85D,L85E,L86D,L86E,L87D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L87E,L88D,L88E,L89D,L89E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L90D,L90E,L91D,L91E,L92D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L92E,L93D,L93E,L94D,L94E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L95D,L95E,L96D,L96E,L97D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-L97E,L98D,L98E,L99D,L99E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LO0D,LO0E,LO1D,LO1E,LO2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LO2E,LO3D,LO3E,LO4D,LO4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LO5D,LO5E,LO6D,LO6E,LO7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LO7E,LO8D,LO8E,LO9D,LO9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LP0D,LP0E,LP1D,LP1E,LP2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LP2E,LP3D,LP3E,LP4D,LP4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LP5D,LP5E,LP6D,LP6E,LP7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LP7E,LP8D,LP8E,LP9D,LP9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LQ0D,LQ0E,LQ1D,LQ1E,LQ2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LQ2E,LQ3D,LQ3E,LQ4D,LQ4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LQ5D,LQ5E,LQ6D,LQ6E,LQ7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LQ7E,LQ8D,LQ8E,LQ9D,LQ9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LR0D,LR0E,LR1D,LR1E,LR2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LR2E,LR3D,LR3E,LR4D,LR4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LR5D,LR5E,LR6D,LR6E,LR7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LR7E,LR8D,LR8E,LR9D,LR9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LS0D,LS0E,LS1D,LS1E,LS2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LS2E,LS3D,LS3E,LS4D,LS4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LS5D,LS5E,LS6D,LS6E,LS7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LS7E,LS8D,LS8E,LS9D,LS9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LT0D,LT0E,LT1D,LT1E,LT2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LT2E,LT3D,LT3E,LT4D,LT4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LT5D,LT5E,LT6D,LT6E,LT7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LT7E,LT8D,LT8E,LT9D,LT9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LU0D,LU0E,LU1D,LU1E,LU2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LU2E,LU3D,LU3E,LU4D,LU4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LU5D,LU5E,LU6D,LU6E,LU7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LU7E,LU8D,LU8E,LU9D,LU9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LV0D,LV0E,LV1D,LV1E,LV2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LV2E,LV3D,LV3E,LV4D,LV4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LV5D,LV5E,LV6D,LV6E,LV7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LV7E,LV8D,LV8E,LV9D,LV9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LW0D,LW0E,LW1D,LW1E,LW2D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LW2E,LW3D,LW3E,LW4D,LW4E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LW5D,LW5E,LW6D,LW6E,LW7D Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LW7E,LW8D,LW8E,LW9D,LW9E Buenos-Aires-province-LU     124 14 13   3.00 38 45  0 S  62 15  0 W
-LU-F Santa-Fe-LU                                      124 14 13   3.00 31 34  0 S  60 40  0 W
-LU Santa-Fe-LU-F                                      124 14 13   3.00 31 34  0 S  60 40  0 W
-AY0F,AY1F,AY2F,AY3F,AY4F,AY5F,AY6F,AY7F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-AY8F,AY9F,AZ0F,AZ1F,AZ2F,AZ3F,AZ4F,AZ5F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-AZ6F,AZ7F,AZ8F,AZ9F,L20F,L21F,L22F,L23F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L24F,L25F,L26F,L27F,L28F,L29F,L30F,L31F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L32F,L33F,L34F,L35F,L36F,L37F,L38F,L39F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L40F,L41F,L42F,L43F,L44F,L45F,L46F,L47F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L48F,L49F,L50F,L51F,L52F,L53F,L54F,L55F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L56F,L57F,L58F,L59F,L60F,L61F,L62F,L63F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L64F,L65F,L66F,L67F,L68F,L69F,L70F,L71F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L72F,L73F,L74F,L75F,L76F,L77F,L78F,L79F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L80F,L81F,L82F,L83F,L84F,L85F,L86F,L87F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L88F,L89F,L90F,L91F,L92F,L93F,L94F,L95F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-L96F,L97F,L98F,L99F,LO0F,LO1F,LO2F,LO3F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LO4F,LO5F,LO6F,LO7F,LO8F,LO9F,LP0F,LP1F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LP2F,LP3F,LP4F,LP5F,LP6F,LP7F,LP8F,LP9F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LQ0F,LQ1F,LQ2F,LQ3F,LQ4F,LQ5F,LQ6F,LQ7F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LQ8F,LQ9F,LR0F,LR1F,LR2F,LR3F,LR4F,LR5F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LR6F,LR7F,LR8F,LR9F,LS0F,LS1F,LS2F,LS3F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LS4F,LS5F,LS6F,LS7F,LS8F,LS9F,LT0F,LT1F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LT2F,LT3F,LT4F,LT5F,LT6F,LT7F,LT8F,LT9F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LU0F,LU1F,LU2F,LU3F,LU4F,LU5F,LU6F,LU7F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LU8F,LU9F,LV0F,LV1F,LV2F,LV3F,LV4F,LV5F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LV6F,LV7F,LV8F,LV9F,LW0F,LW1F,LW2F,LW3F Santa-Fe-LU   124 14 13   3.00 31 34  0 S  60 40  0 W
-LW4F,LW5F,LW6F,LW7F,LW8F,LW9F Santa-Fe-LU             124 14 13   3.00 31 34  0 S  60 40  0 W
-LU-G Chaco-and-Formosa-LU                             124 14 13   3.00 27 28  0 S  59  0  0 W
-LU Chaco-and-Formosa-LU-G                             124 14 13   3.00 27 28  0 S  59  0  0 W
-AY0G,AY1G,AY2G,AY3G,AY4G,AY5G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-AY6G,AY7G,AY8G,AY9G,AZ0G,AZ1G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-AZ2G,AZ3G,AZ4G,AZ5G,AZ6G,AZ7G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-AZ8G,AZ9G,L20G,L21G,L22G,L23G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L24G,L25G,L26G,L27G,L28G,L29G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L30G,L31G,L32G,L33G,L34G,L35G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L36G,L37G,L38G,L39G,L40G,L41G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L42G,L43G,L44G,L45G,L46G,L47G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L48G,L49G,L50G,L51G,L52G,L53G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L54G,L55G,L56G,L57G,L58G,L59G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L60G,L61G,L62G,L63G,L64G,L65G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L66G,L67G,L68G,L69G,L70G,L71G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L72G,L73G,L74G,L75G,L76G,L77G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L78G,L79G,L80G,L81G,L82G,L83G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L84G,L85G,L86G,L87G,L88G,L89G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L90G,L91G,L92G,L93G,L94G,L95G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-L96G,L97G,L98G,L99G,LO0G,LO1G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LO2G,LO3G,LO4G,LO5G,LO6G,LO7G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LO8G,LO9G,LP0G,LP1G,LP2G,LP3G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LP4G,LP5G,LP6G,LP7G,LP8G,LP9G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LQ0G,LQ1G,LQ2G,LQ3G,LQ4G,LQ5G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LQ6G,LQ7G,LQ8G,LQ9G,LR0G,LR1G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LR2G,LR3G,LR4G,LR5G,LR6G,LR7G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LR8G,LR9G,LS0G,LS1G,LS2G,LS3G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LS4G,LS5G,LS6G,LS7G,LS8G,LS9G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LT0G,LT1G,LT2G,LT3G,LT4G,LT5G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LT6G,LT7G,LT8G,LT9G,LU0G,LU1G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LU2G,LU3G,LU4G,LU5G,LU6G,LU7G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LU8G,LU9G,LV0G,LV1G,LV2G,LV3G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LV4G,LV5G,LV6G,LV7G,LV8G,LV9G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LW0G,LW1G,LW2G,LW3G,LW4G,LW5G Chaco-and-Formosa-LU    124 14 13   3.00 27 28  0 S  59  0  0 W
-LW6G,LW7G,LW8G,LW9G Chaco-and-Formosa-LU              124 14 13   3.00 27 28  0 S  59  0  0 W
-LU-H Cordoba-LU                                       124 14 13   3.00 31 19  0 S  64 10  0 W
-LU Cordoba-LU-H                                       124 14 13   3.00 31 19  0 S  64 10  0 W
-AY0H,AY1H,AY2H,AY3H,AY4H,AY5H,AY6H,AY7H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-AY8H,AY9H,AZ0H,AZ1H,AZ2H,AZ3H,AZ4H,AZ5H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-AZ6H,AZ7H,AZ8H,AZ9H,L20H,L21H,L22H,L23H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L24H,L25H,L26H,L27H,L28H,L29H,L30H,L31H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L32H,L33H,L34H,L35H,L36H,L37H,L38H,L39H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L40H,L41H,L42H,L43H,L44H,L45H,L46H,L47H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L48H,L49H,L50H,L51H,L52H,L53H,L54H,L55H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L56H,L57H,L58H,L59H,L60H,L61H,L62H,L63H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L64H,L65H,L66H,L67H,L68H,L69H,L70H,L71H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L72H,L73H,L74H,L75H,L76H,L77H,L78H,L79H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L80H,L81H,L82H,L83H,L84H,L85H,L86H,L87H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L88H,L89H,L90H,L91H,L92H,L93H,L94H,L95H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-L96H,L97H,L98H,L99H,LO0H,LO1H,LO2H,LO3H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LO4H,LO5H,LO6H,LO7H,LO8H,LO9H,LP0H,LP1H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LP2H,LP3H,LP4H,LP5H,LP6H,LP7H,LP8H,LP9H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LQ0H,LQ1H,LQ2H,LQ3H,LQ4H,LQ5H,LQ6H,LQ7H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LQ8H,LQ9H,LR0H,LR1H,LR2H,LR3H,LR4H,LR5H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LR6H,LR7H,LR8H,LR9H,LS0H,LS1H,LS2H,LS3H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LS4H,LS5H,LS6H,LS7H,LS8H,LS9H,LT0H,LT1H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LT2H,LT3H,LT4H,LT5H,LT6H,LT7H,LT8H,LT9H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LU0H,LU1H,LU2H,LU3H,LU4H,LU5H,LU6H,LU7H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LU8H,LU9H,LV0H,LV1H,LV2H,LV3H,LV4H,LV5H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LV6H,LV7H,LV8H,LV9H,LW0H,LW1H,LW2H,LW3H Cordoba-LU    124 14 13   3.00 31 19  0 S  64 10  0 W
-LW4H,LW5H,LW6H,LW7H,LW8H,LW9H Cordoba-LU              124 14 13   3.00 31 19  0 S  64 10  0 W
-LU-I Misiones-LU                                      124 14 13   3.00 27 27  0 S  55 49  0 W
-LU Misiones-LU-I                                      124 14 13   3.00 27 27  0 S  55 49  0 W
-AY0I,AY1I,AY2I,AY3I,AY4I,AY5I,AY6I,AY7I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-AY8I,AY9I,AZ0I,AZ1I,AZ2I,AZ3I,AZ4I,AZ5I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-AZ6I,AZ7I,AZ8I,AZ9I,L20I,L21I,L22I,L23I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L24I,L25I,L26I,L27I,L28I,L29I,L30I,L31I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L32I,L33I,L34I,L35I,L36I,L37I,L38I,L39I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L40I,L41I,L42I,L43I,L44I,L45I,L46I,L47I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L48I,L49I,L50I,L51I,L52I,L53I,L54I,L55I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L56I,L57I,L58I,L59I,L60I,L61I,L62I,L63I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L64I,L65I,L66I,L67I,L68I,L69I,L70I,L71I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L72I,L73I,L74I,L75I,L76I,L77I,L78I,L79I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L80I,L81I,L82I,L83I,L84I,L85I,L86I,L87I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L88I,L89I,L90I,L91I,L92I,L93I,L94I,L95I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-L96I,L97I,L98I,L99I,LO0I,LO1I,LO2I,LO3I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LO4I,LO5I,LO6I,LO7I,LO8I,LO9I,LP0I,LP1I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LP2I,LP3I,LP4I,LP5I,LP6I,LP7I,LP8I,LP9I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LQ0I,LQ1I,LQ2I,LQ3I,LQ4I,LQ5I,LQ6I,LQ7I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LQ8I,LQ9I,LR0I,LR1I,LR2I,LR3I,LR4I,LR5I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LR6I,LR7I,LR8I,LR9I,LS0I,LS1I,LS2I,LS3I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LS4I,LS5I,LS6I,LS7I,LS8I,LS9I,LT0I,LT1I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LT2I,LT3I,LT4I,LT5I,LT6I,LT7I,LT8I,LT9I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LU0I,LU1I,LU2I,LU3I,LU4I,LU5I,LU6I,LU7I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LU8I,LU9I,LV0I,LV1I,LV2I,LV3I,LV4I,LV5I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LV6I,LV7I,LV8I,LV9I,LW0I,LW1I,LW2I,LW3I Misiones-LU   124 14 13   3.00 27 27  0 S  55 49  0 W
-LW4I,LW5I,LW6I,LW7I,LW8I,LW9I Misiones-LU             124 14 13   3.00 27 27  0 S  55 49  0 W
-LU-J Entre-Rios-LU                                    124 14 13   3.00 31 44  0 S  60 32  0 W
-LU Entre-Rios-LU-J                                    124 14 13   3.00 31 44  0 S  60 32  0 W
-AY0J,AY1J,AY2J,AY3J,AY4J,AY5J,AY6J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-AY7J,AY8J,AY9J,AZ0J,AZ1J,AZ2J,AZ3J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-AZ4J,AZ5J,AZ6J,AZ7J,AZ8J,AZ9J,L20J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L21J,L22J,L23J,L24J,L25J,L26J,L27J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L28J,L29J,L30J,L31J,L32J,L33J,L34J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L35J,L36J,L37J,L38J,L39J,L40J,L41J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L42J,L43J,L44J,L45J,L46J,L47J,L48J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L49J,L50J,L51J,L52J,L53J,L54J,L55J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L56J,L57J,L58J,L59J,L60J,L61J,L62J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L63J,L64J,L65J,L66J,L67J,L68J,L69J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L70J,L71J,L72J,L73J,L74J,L75J,L76J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L77J,L78J,L79J,L80J,L81J,L82J,L83J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L84J,L85J,L86J,L87J,L88J,L89J,L90J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L91J,L92J,L93J,L94J,L95J,L96J,L97J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-L98J,L99J,LO0J,LO1J,LO2J,LO3J,LO4J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LO5J,LO6J,LO7J,LO8J,LO9J,LP0J,LP1J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LP2J,LP3J,LP4J,LP5J,LP6J,LP7J,LP8J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LP9J,LQ0J,LQ1J,LQ2J,LQ3J,LQ4J,LQ5J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LQ6J,LQ7J,LQ8J,LQ9J,LR0J,LR1J,LR2J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LR3J,LR4J,LR5J,LR6J,LR7J,LR8J,LR9J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LS0J,LS1J,LS2J,LS3J,LS4J,LS5J,LS6J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LS7J,LS8J,LS9J,LT0J,LT1J,LT2J,LT3J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LT4J,LT5J,LT6J,LT7J,LT8J,LT9J,LU0J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LU1J,LU2J,LU3J,LU4J,LU5J,LU6J,LU7J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LU8J,LU9J,LV0J,LV1J,LV2J,LV3J,LV4J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LV5J,LV6J,LV7J,LV8J,LV9J,LW0J,LW1J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LW2J,LW3J,LW4J,LW5J,LW6J,LW7J,LW8J Entre-Rios-LU      124 14 13   3.00 31 44  0 S  60 32  0 W
-LW9J Entre-Rios-LU                                    124 14 13   3.00 31 44  0 S  60 32  0 W
-LU-K Tucuman-LU                                       124 14 13   3.00 26 46  0 S  65 15  0 W
-LU Tucuman-LU-K                                       124 14 13   3.00 26 46  0 S  65 15  0 W
-AY0K,AY1K,AY2K,AY3K,AY4K,AY5K,AY6K,AY7K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-AY8K,AY9K,AZ0K,AZ1K,AZ2K,AZ3K,AZ4K,AZ5K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-AZ6K,AZ7K,AZ8K,AZ9K,L20K,L21K,L22K,L23K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L24K,L25K,L26K,L27K,L28K,L29K,L30K,L31K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L32K,L33K,L34K,L35K,L36K,L37K,L38K,L39K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L40K,L41K,L42K,L43K,L44K,L45K,L46K,L47K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L48K,L49K,L50K,L51K,L52K,L53K,L54K,L55K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L56K,L57K,L58K,L59K,L60K,L61K,L62K,L63K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L64K,L65K,L66K,L67K,L68K,L69K,L70K,L71K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L72K,L73K,L74K,L75K,L76K,L77K,L78K,L79K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L80K,L81K,L82K,L83K,L84K,L85K,L86K,L87K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L88K,L89K,L90K,L91K,L92K,L93K,L94K,L95K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-L96K,L97K,L98K,L99K,LO0K,LO1K,LO2K,LO3K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LO4K,LO5K,LO6K,LO7K,LO8K,LO9K,LP0K,LP1K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LP2K,LP3K,LP4K,LP5K,LP6K,LP7K,LP8K,LP9K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LQ0K,LQ1K,LQ2K,LQ3K,LQ4K,LQ5K,LQ6K,LQ7K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LQ8K,LQ9K,LR0K,LR1K,LR2K,LR3K,LR4K,LR5K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LR6K,LR7K,LR8K,LR9K,LS0K,LS1K,LS2K,LS3K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LS4K,LS5K,LS6K,LS7K,LS8K,LS9K,LT0K,LT1K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LT2K,LT3K,LT4K,LT5K,LT6K,LT7K,LT8K,LT9K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LU0K,LU1K,LU2K,LU3K,LU4K,LU5K,LU6K,LU7K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LU8K,LU9K,LV0K,LV1K,LV2K,LV3K,LV4K,LV5K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LV6K,LV7K,LV8K,LV9K,LW0K,LW1K,LW2K,LW3K Tucuman-LU    124 14 13   3.00 26 46  0 S  65 15  0 W
-LW4K,LW5K,LW6K,LW7K,LW8K,LW9K Tucuman-LU              124 14 13   3.00 26 46  0 S  65 15  0 W
-LU-L Corrientes-LU                                    124 14 13   3.00 27 30  0 S  58 48  0 W
-LU Corrientes-LU-L                                    124 14 13   3.00 27 30  0 S  58 48  0 W
-AY0L,AY1L,AY2L,AY3L,AY4L,AY5L,AY6L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-AY7L,AY8L,AY9L,AZ0L,AZ1L,AZ2L,AZ3L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-AZ4L,AZ5L,AZ6L,AZ7L,AZ8L,AZ9L,L20L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L21L,L22L,L23L,L24L,L25L,L26L,L27L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L28L,L29L,L30L,L31L,L32L,L33L,L34L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L35L,L36L,L37L,L38L,L39L,L40L,L41L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L42L,L43L,L44L,L45L,L46L,L47L,L48L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L49L,L50L,L51L,L52L,L53L,L54L,L55L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L56L,L57L,L58L,L59L,L60L,L61L,L62L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L63L,L64L,L65L,L66L,L67L,L68L,L69L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L70L,L71L,L72L,L73L,L74L,L75L,L76L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L77L,L78L,L79L,L80L,L81L,L82L,L83L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L84L,L85L,L86L,L87L,L88L,L89L,L90L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L91L,L92L,L93L,L94L,L95L,L96L,L97L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-L98L,L99L,LO0L,LO1L,LO2L,LO3L,LO4L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LO5L,LO6L,LO7L,LO8L,LO9L,LP0L,LP1L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LP2L,LP3L,LP4L,LP5L,LP6L,LP7L,LP8L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LP9L,LQ0L,LQ1L,LQ2L,LQ3L,LQ4L,LQ5L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LQ6L,LQ7L,LQ8L,LQ9L,LR0L,LR1L,LR2L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LR3L,LR4L,LR5L,LR6L,LR7L,LR8L,LR9L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LS0L,LS1L,LS2L,LS3L,LS4L,LS5L,LS6L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LS7L,LS8L,LS9L,LT0L,LT1L,LT2L,LT3L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LT4L,LT5L,LT6L,LT7L,LT8L,LT9L,LU0L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LU1L,LU2L,LU3L,LU4L,LU5L,LU6L,LU7L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LU8L,LU9L,LV0L,LV1L,LV2L,LV3L,LV4L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LV5L,LV6L,LV7L,LV8L,LV9L,LW0L,LW1L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LW2L,LW3L,LW4L,LW5L,LW6L,LW7L,LW8L Corrientes-LU      124 14 13   3.00 27 30  0 S  58 48  0 W
-LW9L Corrientes-LU                                    124 14 13   3.00 27 30  0 S  58 48  0 W
-LU-M Mendoza-LU                                       124 14 13   3.00 34 40  0 S  68 12  0 W
-LU Mendoza-LU-M                                       124 14 13   3.00 34 40  0 S  68 12  0 W
-AY0M,AY1M,AY2M,AY3M,AY4M,AY5M,AY6M,AY7M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-AY8M,AY9M,AZ0M,AZ1M,AZ2M,AZ3M,AZ4M,AZ5M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-AZ6M,AZ7M,AZ8M,AZ9M,L20M,L21M,L22M,L23M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L24M,L25M,L26M,L27M,L28M,L29M,L30M,L31M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L32M,L33M,L34M,L35M,L36M,L37M,L38M,L39M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L40M,L41M,L42M,L43M,L44M,L45M,L46M,L47M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L48M,L49M,L50M,L51M,L52M,L53M,L54M,L55M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L56M,L57M,L58M,L59M,L60M,L61M,L62M,L63M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L64M,L65M,L66M,L67M,L68M,L69M,L70M,L71M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L72M,L73M,L74M,L75M,L76M,L77M,L78M,L79M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L80M,L81M,L82M,L83M,L84M,L85M,L86M,L87M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L88M,L89M,L90M,L91M,L92M,L93M,L94M,L95M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-L96M,L97M,L98M,L99M,LO0M,LO1M,LO2M,LO3M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LO4M,LO5M,LO6M,LO7M,LO8M,LO9M,LP0M,LP1M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LP2M,LP3M,LP4M,LP5M,LP6M,LP7M,LP8M,LP9M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LQ0M,LQ1M,LQ2M,LQ3M,LQ4M,LQ5M,LQ6M,LQ7M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LQ8M,LQ9M,LR0M,LR1M,LR2M,LR3M,LR4M,LR5M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LR6M,LR7M,LR8M,LR9M,LS0M,LS1M,LS2M,LS3M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LS4M,LS5M,LS6M,LS7M,LS8M,LS9M,LT0M,LT1M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LT2M,LT3M,LT4M,LT5M,LT6M,LT7M,LT8M,LT9M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LU0M,LU1M,LU2M,LU3M,LU4M,LU5M,LU6M,LU7M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LU8M,LU9M,LV0M,LV1M,LV2M,LV3M,LV4M,LV5M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LV6M,LV7M,LV8M,LV9M,LW0M,LW1M,LW2M,LW3M Mendoza-LU    124 14 13   3.00 34 40  0 S  68 12  0 W
-LW4M,LW5M,LW6M,LW7M,LW8M,LW9M Mendoza-LU              124 14 13   3.00 34 40  0 S  68 12  0 W
-LU-N Santiago-del-Estero-LU                           124 14 13   3.00 27 48  0 S  64 12  0 W
-LU Santiago-del-Estero-LU-N                           124 14 13   3.00 27 48  0 S  64 12  0 W
-AY0N,AY1N,AY2N,AY3N,AY4N,AY5N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-AY6N,AY7N,AY8N,AY9N,AZ0N,AZ1N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-AZ2N,AZ3N,AZ4N,AZ5N,AZ6N,AZ7N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-AZ8N,AZ9N,L20N,L21N,L22N,L23N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L24N,L25N,L26N,L27N,L28N,L29N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L30N,L31N,L32N,L33N,L34N,L35N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L36N,L37N,L38N,L39N,L40N,L41N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L42N,L43N,L44N,L45N,L46N,L47N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L48N,L49N,L50N,L51N,L52N,L53N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L54N,L55N,L56N,L57N,L58N,L59N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L60N,L61N,L62N,L63N,L64N,L65N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L66N,L67N,L68N,L69N,L70N,L71N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L72N,L73N,L74N,L75N,L76N,L77N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L78N,L79N,L80N,L81N,L82N,L83N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L84N,L85N,L86N,L87N,L88N,L89N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L90N,L91N,L92N,L93N,L94N,L95N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-L96N,L97N,L98N,L99N,LO0N,LO1N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LO2N,LO3N,LO4N,LO5N,LO6N,LO7N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LO8N,LO9N,LP0N,LP1N,LP2N,LP3N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LP4N,LP5N,LP6N,LP7N,LP8N,LP9N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LQ0N,LQ1N,LQ2N,LQ3N,LQ4N,LQ5N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LQ6N,LQ7N,LQ8N,LQ9N,LR0N,LR1N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LR2N,LR3N,LR4N,LR5N,LR6N,LR7N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LR8N,LR9N,LS0N,LS1N,LS2N,LS3N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LS4N,LS5N,LS6N,LS7N,LS8N,LS9N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LT0N,LT1N,LT2N,LT3N,LT4N,LT5N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LT6N,LT7N,LT8N,LT9N,LU0N,LU1N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LU2N,LU3N,LU4N,LU5N,LU6N,LU7N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LU8N,LU9N,LV0N,LV1N,LV2N,LV3N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LV4N,LV5N,LV6N,LV7N,LV8N,LV9N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LW0N,LW1N,LW2N,LW3N,LW4N,LW5N Santiago-del-Estero-LU  124 14 13   3.00 27 48  0 S  64 12  0 W
-LW6N,LW7N,LW8N,LW9N Santiago-del-Estero-LU            124 14 13   3.00 27 48  0 S  64 12  0 W
-LU-O Salta-LU                                         124 14 13   3.00 24 46  0 S  65 28  0 W
-LU Salta-LU-O                                         124 14 13   3.00 24 46  0 S  65 28  0 W
-AY0O,AY1O,AY2O,AY3O,AY4O,AY5O,AY6O,AY7O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-AY8O,AY9O,AZ0O,AZ1O,AZ2O,AZ3O,AZ4O,AZ5O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-AZ6O,AZ7O,AZ8O,AZ9O,L20O,L21O,L22O,L23O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L24O,L25O,L26O,L27O,L28O,L29O,L30O,L31O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L32O,L33O,L34O,L35O,L36O,L37O,L38O,L39O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L40O,L41O,L42O,L43O,L44O,L45O,L46O,L47O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L48O,L49O,L50O,L51O,L52O,L53O,L54O,L55O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L56O,L57O,L58O,L59O,L60O,L61O,L62O,L63O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L64O,L65O,L66O,L67O,L68O,L69O,L70O,L71O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L72O,L73O,L74O,L75O,L76O,L77O,L78O,L79O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L80O,L81O,L82O,L83O,L84O,L85O,L86O,L87O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L88O,L89O,L90O,L91O,L92O,L93O,L94O,L95O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-L96O,L97O,L98O,L99O,LO0O,LO1O,LO2O,LO3O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LO4O,LO5O,LO6O,LO7O,LO8O,LO9O,LP0O,LP1O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LP2O,LP3O,LP4O,LP5O,LP6O,LP7O,LP8O,LP9O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LQ0O,LQ1O,LQ2O,LQ3O,LQ4O,LQ5O,LQ6O,LQ7O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LQ8O,LQ9O,LR0O,LR1O,LR2O,LR3O,LR4O,LR5O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LR6O,LR7O,LR8O,LR9O,LS0O,LS1O,LS2O,LS3O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LS4O,LS5O,LS6O,LS7O,LS8O,LS9O,LT0O,LT1O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LT2O,LT3O,LT4O,LT5O,LT6O,LT7O,LT8O,LT9O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LU0O,LU1O,LU2O,LU3O,LU4O,LU5O,LU6O,LU7O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LU8O,LU9O,LV0O,LV1O,LV2O,LV3O,LV4O,LV5O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LV6O,LV7O,LV8O,LV9O,LW0O,LW1O,LW2O,LW3O Salta-LU      124 14 13   3.00 24 46  0 S  65 28  0 W
-LW4O,LW5O,LW6O,LW7O,LW8O,LW9O Salta-LU                124 14 13   3.00 24 46  0 S  65 28  0 W
-LU-P San-Juan-LU                                      124 14 13   3.00 31 33  0 S  68 31  0 W
-LU San-Juan-LU-P                                      124 14 13   3.00 31 33  0 S  68 31  0 W
-AY0P,AY1P,AY2P,AY3P,AY4P,AY5P,AY6P,AY7P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-AY8P,AY9P,AZ0P,AZ1P,AZ2P,AZ3P,AZ4P,AZ5P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-AZ6P,AZ7P,AZ8P,AZ9P,L20P,L21P,L22P,L23P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L24P,L25P,L26P,L27P,L28P,L29P,L30P,L31P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L32P,L33P,L34P,L35P,L36P,L37P,L38P,L39P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L40P,L41P,L42P,L43P,L44P,L45P,L46P,L47P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L48P,L49P,L50P,L51P,L52P,L53P,L54P,L55P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L56P,L57P,L58P,L59P,L60P,L61P,L62P,L63P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L64P,L65P,L66P,L67P,L68P,L69P,L70P,L71P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L72P,L73P,L74P,L75P,L76P,L77P,L78P,L79P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L80P,L81P,L82P,L83P,L84P,L85P,L86P,L87P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L88P,L89P,L90P,L91P,L92P,L93P,L94P,L95P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-L96P,L97P,L98P,L99P,LO0P,LO1P,LO2P,LO3P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LO4P,LO5P,LO6P,LO7P,LO8P,LO9P,LP0P,LP1P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LP2P,LP3P,LP4P,LP5P,LP6P,LP7P,LP8P,LP9P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LQ0P,LQ1P,LQ2P,LQ3P,LQ4P,LQ5P,LQ6P,LQ7P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LQ8P,LQ9P,LR0P,LR1P,LR2P,LR3P,LR4P,LR5P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LR6P,LR7P,LR8P,LR9P,LS0P,LS1P,LS2P,LS3P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LS4P,LS5P,LS6P,LS7P,LS8P,LS9P,LT0P,LT1P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LT2P,LT3P,LT4P,LT5P,LT6P,LT7P,LT8P,LT9P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LU0P,LU1P,LU2P,LU3P,LU4P,LU5P,LU6P,LU7P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LU8P,LU9P,LV0P,LV1P,LV2P,LV3P,LV4P,LV5P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LV6P,LV7P,LV8P,LV9P,LW0P,LW1P,LW2P,LW3P San-Juan-LU   124 14 13   3.00 31 33  0 S  68 31  0 W
-LW4P,LW5P,LW6P,LW7P,LW8P,LW9P San-Juan-LU             124 14 13   3.00 31 33  0 S  68 31  0 W
-LU-Q San-Luis-LU                                      124 14 13   3.00 33  0  0 S  66  0  0 W
-LU San-Luis-LU-Q                                      124 14 13   3.00 33  0  0 S  66  0  0 W
-AY0Q,AY1Q,AY2Q,AY3Q,AY4Q,AY5Q,AY6Q,AY7Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-AY8Q,AY9Q,AZ0Q,AZ1Q,AZ2Q,AZ3Q,AZ4Q,AZ5Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-AZ6Q,AZ7Q,AZ8Q,AZ9Q,L20Q,L21Q,L22Q,L23Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L24Q,L25Q,L26Q,L27Q,L28Q,L29Q,L30Q,L31Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L32Q,L33Q,L34Q,L35Q,L36Q,L37Q,L38Q,L39Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L40Q,L41Q,L42Q,L43Q,L44Q,L45Q,L46Q,L47Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L48Q,L49Q,L50Q,L51Q,L52Q,L53Q,L54Q,L55Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L56Q,L57Q,L58Q,L59Q,L60Q,L61Q,L62Q,L63Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L64Q,L65Q,L66Q,L67Q,L68Q,L69Q,L70Q,L71Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L72Q,L73Q,L74Q,L75Q,L76Q,L77Q,L78Q,L79Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L80Q,L81Q,L82Q,L83Q,L84Q,L85Q,L86Q,L87Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L88Q,L89Q,L90Q,L91Q,L92Q,L93Q,L94Q,L95Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-L96Q,L97Q,L98Q,L99Q,LO0Q,LO1Q,LO2Q,LO3Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LO4Q,LO5Q,LO6Q,LO7Q,LO8Q,LO9Q,LP0Q,LP1Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LP2Q,LP3Q,LP4Q,LP5Q,LP6Q,LP7Q,LP8Q,LP9Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LQ0Q,LQ1Q,LQ2Q,LQ3Q,LQ4Q,LQ5Q,LQ6Q,LQ7Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LQ8Q,LQ9Q,LR0Q,LR1Q,LR2Q,LR3Q,LR4Q,LR5Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LR6Q,LR7Q,LR8Q,LR9Q,LS0Q,LS1Q,LS2Q,LS3Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LS4Q,LS5Q,LS6Q,LS7Q,LS8Q,LS9Q,LT0Q,LT1Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LT2Q,LT3Q,LT4Q,LT5Q,LT6Q,LT7Q,LT8Q,LT9Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LU0Q,LU1Q,LU2Q,LU3Q,LU4Q,LU5Q,LU6Q,LU7Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LU8Q,LU9Q,LV0Q,LV1Q,LV2Q,LV3Q,LV4Q,LV5Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LV6Q,LV7Q,LV8Q,LV9Q,LW0Q,LW1Q,LW2Q,LW3Q San-Luis-LU   124 14 13   3.00 33  0  0 S  66  0  0 W
-LW4Q,LW5Q,LW6Q,LW7Q,LW8Q,LW9Q San-Luis-LU             124 14 13   3.00 33  0  0 S  66  0  0 W
-LU-R Catamarca-LU                                     124 14 13   3.00 28 28  0 S  65 46  0 W
-LU Catamarca-LU-R                                     124 14 13   3.00 28 28  0 S  65 46  0 W
-AY0R,AY1R,AY2R,AY3R,AY4R,AY5R,AY6R,AY7R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-AY8R,AY9R,AZ0R,AZ1R,AZ2R,AZ3R,AZ4R,AZ5R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-AZ6R,AZ7R,AZ8R,AZ9R,L20R,L21R,L22R,L23R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L24R,L25R,L26R,L27R,L28R,L29R,L30R,L31R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L32R,L33R,L34R,L35R,L36R,L37R,L38R,L39R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L40R,L41R,L42R,L43R,L44R,L45R,L46R,L47R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L48R,L49R,L50R,L51R,L52R,L53R,L54R,L55R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L56R,L57R,L58R,L59R,L60R,L61R,L62R,L63R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L64R,L65R,L66R,L67R,L68R,L69R,L70R,L71R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L72R,L73R,L74R,L75R,L76R,L77R,L78R,L79R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L80R,L81R,L82R,L83R,L84R,L85R,L86R,L87R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L88R,L89R,L90R,L91R,L92R,L93R,L94R,L95R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-L96R,L97R,L98R,L99R,LO0R,LO1R,LO2R,LO3R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LO4R,LO5R,LO6R,LO7R,LO8R,LO9R,LP0R,LP1R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LP2R,LP3R,LP4R,LP5R,LP6R,LP7R,LP8R,LP9R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LQ0R,LQ1R,LQ2R,LQ3R,LQ4R,LQ5R,LQ6R,LQ7R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LQ8R,LQ9R,LR0R,LR1R,LR2R,LR3R,LR4R,LR5R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LR6R,LR7R,LR8R,LR9R,LS0R,LS1R,LS2R,LS3R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LS4R,LS5R,LS6R,LS7R,LS8R,LS9R,LT0R,LT1R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LT2R,LT3R,LT4R,LT5R,LT6R,LT7R,LT8R,LT9R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LU0R,LU1R,LU2R,LU3R,LU4R,LU5R,LU6R,LU7R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LU8R,LU9R,LV0R,LV1R,LV2R,LV3R,LV4R,LV5R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LV6R,LV7R,LV8R,LV9R,LW0R,LW1R,LW2R,LW3R Catamarca-LU  124 14 13   3.00 28 28  0 S  65 46  0 W
-LW4R,LW5R,LW6R,LW7R,LW8R,LW9R Catamarca-LU            124 14 13   3.00 28 28  0 S  65 46  0 W
-LU-S La-Rioja-LU                                      124 14 13   3.00 29 15  0 S  67  0  0 W
-LU La-Rioja-LU-S                                      124 14 13   3.00 29 15  0 S  67  0  0 W
-AY0S,AY1S,AY2S,AY3S,AY4S,AY5S,AY6S,AY7S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-AY8S,AY9S,AZ0S,AZ1S,AZ2S,AZ3S,AZ4S,AZ5S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-AZ6S,AZ7S,AZ8S,AZ9S,L20S,L21S,L22S,L23S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L24S,L25S,L26S,L27S,L28S,L29S,L30S,L31S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L32S,L33S,L34S,L35S,L36S,L37S,L38S,L39S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L40S,L41S,L42S,L43S,L44S,L45S,L46S,L47S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L48S,L49S,L50S,L51S,L52S,L53S,L54S,L55S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L56S,L57S,L58S,L59S,L60S,L61S,L62S,L63S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L64S,L65S,L66S,L67S,L68S,L69S,L70S,L71S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L72S,L73S,L74S,L75S,L76S,L77S,L78S,L79S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L80S,L81S,L82S,L83S,L84S,L85S,L86S,L87S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L88S,L89S,L90S,L91S,L92S,L93S,L94S,L95S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-L96S,L97S,L98S,L99S,LO0S,LO1S,LO2S,LO3S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LO4S,LO5S,LO6S,LO7S,LO8S,LO9S,LP0S,LP1S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LP2S,LP3S,LP4S,LP5S,LP6S,LP7S,LP8S,LP9S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LQ0S,LQ1S,LQ2S,LQ3S,LQ4S,LQ5S,LQ6S,LQ7S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LQ8S,LQ9S,LR0S,LR1S,LR2S,LR3S,LR4S,LR5S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LR6S,LR7S,LR8S,LR9S,LS0S,LS1S,LS2S,LS3S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LS4S,LS5S,LS6S,LS7S,LS8S,LS9S,LT0S,LT1S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LT2S,LT3S,LT4S,LT5S,LT6S,LT7S,LT8S,LT9S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LU0S,LU1S,LU2S,LU3S,LU4S,LU5S,LU6S,LU7S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LU8S,LU9S,LV0S,LV1S,LV2S,LV3S,LV4S,LV5S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LV6S,LV7S,LV8S,LV9S,LW0S,LW1S,LW2S,LW3S La-Rioja-LU   124 14 13   3.00 29 15  0 S  67  0  0 W
-LW4S,LW5S,LW6S,LW7S,LW8S,LW9S La-Rioja-LU             124 14 13   3.00 29 15  0 S  67  0  0 W
-LU-T Jujuy-LU                                         124 14 13   3.00 24 10  0 S  65 48  0 W
-LU Jujuy-LU-T                                         124 14 13   3.00 24 10  0 S  65 48  0 W
-AY0T,AY1T,AY2T,AY3T,AY4T,AY5T,AY6T,AY7T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-AY8T,AY9T,AZ0T,AZ1T,AZ2T,AZ3T,AZ4T,AZ5T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-AZ6T,AZ7T,AZ8T,AZ9T,L20T,L21T,L22T,L23T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L24T,L25T,L26T,L27T,L28T,L29T,L30T,L31T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L32T,L33T,L34T,L35T,L36T,L37T,L38T,L39T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L40T,L41T,L42T,L43T,L44T,L45T,L46T,L47T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L48T,L49T,L50T,L51T,L52T,L53T,L54T,L55T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L56T,L57T,L58T,L59T,L60T,L61T,L62T,L63T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L64T,L65T,L66T,L67T,L68T,L69T,L70T,L71T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L72T,L73T,L74T,L75T,L76T,L77T,L78T,L79T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L80T,L81T,L82T,L83T,L84T,L85T,L86T,L87T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L88T,L89T,L90T,L91T,L92T,L93T,L94T,L95T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-L96T,L97T,L98T,L99T,LO0T,LO1T,LO2T,LO3T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LO4T,LO5T,LO6T,LO7T,LO8T,LO9T,LP0T,LP1T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LP2T,LP3T,LP4T,LP5T,LP6T,LP7T,LP8T,LP9T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LQ0T,LQ1T,LQ2T,LQ3T,LQ4T,LQ5T,LQ6T,LQ7T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LQ8T,LQ9T,LR0T,LR1T,LR2T,LR3T,LR4T,LR5T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LR6T,LR7T,LR8T,LR9T,LS0T,LS1T,LS2T,LS3T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LS4T,LS5T,LS6T,LS7T,LS8T,LS9T,LT0T,LT1T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LT2T,LT3T,LT4T,LT5T,LT6T,LT7T,LT8T,LT9T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LU0T,LU1T,LU2T,LU3T,LU4T,LU5T,LU6T,LU7T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LU8T,LU9T,LV0T,LV1T,LV2T,LV3T,LV4T,LV5T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LV6T,LV7T,LV8T,LV9T,LW0T,LW1T,LW2T,LW3T Jujuy-LU      124 14 13   3.00 24 10  0 S  65 48  0 W
-LW4T,LW5T,LW6T,LW7T,LW8T,LW9T Jujuy-LU                124 14 13   3.00 24 10  0 S  65 48  0 W
-LU-U La-Pampas-LU                                     124 14 13   3.00 38  0  0 S  66  0  0 W
-LU La-Pampas-LU-U                                     124 14 13   3.00 38  0  0 S  66  0  0 W
-AY0U,AY1U,AY2U,AY3U,AY4U,AY5U,AY6U,AY7U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-AY8U,AY9U,AZ0U,AZ1U,AZ2U,AZ3U,AZ4U,AZ5U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-AZ6U,AZ7U,AZ8U,AZ9U,L20U,L21U,L22U,L23U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L24U,L25U,L26U,L27U,L28U,L29U,L30U,L31U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L32U,L33U,L34U,L35U,L36U,L37U,L38U,L39U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L40U,L41U,L42U,L43U,L44U,L45U,L46U,L47U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L48U,L49U,L50U,L51U,L52U,L53U,L54U,L55U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L56U,L57U,L58U,L59U,L60U,L61U,L62U,L63U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L64U,L65U,L66U,L67U,L68U,L69U,L70U,L71U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L72U,L73U,L74U,L75U,L76U,L77U,L78U,L79U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L80U,L81U,L82U,L83U,L84U,L85U,L86U,L87U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L88U,L89U,L90U,L91U,L92U,L93U,L94U,L95U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-L96U,L97U,L98U,L99U,LO0U,LO1U,LO2U,LO3U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LO4U,LO5U,LO6U,LO7U,LO8U,LO9U,LP0U,LP1U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LP2U,LP3U,LP4U,LP5U,LP6U,LP7U,LP8U,LP9U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LQ0U,LQ1U,LQ2U,LQ3U,LQ4U,LQ5U,LQ6U,LQ7U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LQ8U,LQ9U,LR0U,LR1U,LR2U,LR3U,LR4U,LR5U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LR6U,LR7U,LR8U,LR9U,LS0U,LS1U,LS2U,LS3U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LS4U,LS5U,LS6U,LS7U,LS8U,LS9U,LT0U,LT1U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LT2U,LT3U,LT4U,LT5U,LT6U,LT7U,LT8U,LT9U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LU0U,LU1U,LU2U,LU3U,LU4U,LU5U,LU6U,LU7U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LU8U,LU9U,LV0U,LV1U,LV2U,LV3U,LV4U,LV5U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LV6U,LV7U,LV8U,LV9U,LW0U,LW1U,LW2U,LW3U La-Pampas-LU  124 14 13   3.00 38  0  0 S  66  0  0 W
-LW4U,LW5U,LW6U,LW7U,LW8U,LW9U La-Pampas-LU            124 14 13   3.00 38  0  0 S  66  0  0 W
-LU-V Rio-Negro-LU                                     124 16 13   3.00 40  0  0 S  66  0  0 W
-LU Rio-Negro-LU-V                                     124 16 13   3.00 40  0  0 S  66  0  0 W
-AY0V,AY1V,AY2V,AY3V,AY4V,AY5V,AY6V,AY7V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-AY8V,AY9V,AZ0V,AZ1V,AZ2V,AZ3V,AZ4V,AZ5V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-AZ6V,AZ7V,AZ8V,AZ9V,L20V,L21V,L22V,L23V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L24V,L25V,L26V,L27V,L28V,L29V,L30V,L31V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L32V,L33V,L34V,L35V,L36V,L37V,L38V,L39V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L40V,L41V,L42V,L43V,L44V,L45V,L46V,L47V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L48V,L49V,L50V,L51V,L52V,L53V,L54V,L55V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L56V,L57V,L58V,L59V,L60V,L61V,L62V,L63V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L64V,L65V,L66V,L67V,L68V,L69V,L70V,L71V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L72V,L73V,L74V,L75V,L76V,L77V,L78V,L79V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L80V,L81V,L82V,L83V,L84V,L85V,L86V,L87V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L88V,L89V,L90V,L91V,L92V,L93V,L94V,L95V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-L96V,L97V,L98V,L99V,LO0V,LO1V,LO2V,LO3V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LO4V,LO5V,LO6V,LO7V,LO8V,LO9V,LP0V,LP1V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LP2V,LP3V,LP4V,LP5V,LP6V,LP7V,LP8V,LP9V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LQ0V,LQ1V,LQ2V,LQ3V,LQ4V,LQ5V,LQ6V,LQ7V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LQ8V,LQ9V,LR0V,LR1V,LR2V,LR3V,LR4V,LR5V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LR6V,LR7V,LR8V,LR9V,LS0V,LS1V,LS2V,LS3V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LS4V,LS5V,LS6V,LS7V,LS8V,LS9V,LT0V,LT1V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LT2V,LT3V,LT4V,LT5V,LT6V,LT7V,LT8V,LT9V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LU0V,LU1V,LU2V,LU3V,LU4V,LU5V,LU6V,LU7V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LU8V,LU9V,LV0V,LV1V,LV2V,LV3V,LV4V,LV5V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LV6V,LV7V,LV8V,LV9V,LW0V,LW1V,LW2V,LW3V Rio-Negro-LU  124 16 13   3.00 40  0  0 S  66  0  0 W
-LW4V,LW5V,LW6V,LW7V,LW8V,LW9V Rio-Negro-LU            124 16 13   3.00 40  0  0 S  66  0  0 W
-LU-W Chubut-LU                                        124 16 13   3.00 45 52  0 S  67 30  0 W
-LU Chubut-LU-W                                        124 16 13   3.00 45 52  0 S  67 30  0 W
-AY0W,AY1W,AY2W,AY3W,AY4W,AY5W,AY6W,AY7W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-AY8W,AY9W,AZ0W,AZ1W,AZ2W,AZ3W,AZ4W,AZ5W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-AZ6W,AZ7W,AZ8W,AZ9W,L20W,L21W,L22W,L23W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L24W,L25W,L26W,L27W,L28W,L29W,L30W,L31W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L32W,L33W,L34W,L35W,L36W,L37W,L38W,L39W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L40W,L41W,L42W,L43W,L44W,L45W,L46W,L47W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L48W,L49W,L50W,L51W,L52W,L53W,L54W,L55W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L56W,L57W,L58W,L59W,L60W,L61W,L62W,L63W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L64W,L65W,L66W,L67W,L68W,L69W,L70W,L71W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L72W,L73W,L74W,L75W,L76W,L77W,L78W,L79W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L80W,L81W,L82W,L83W,L84W,L85W,L86W,L87W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L88W,L89W,L90W,L91W,L92W,L93W,L94W,L95W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-L96W,L97W,L98W,L99W,LO0W,LO1W,LO2W,LO3W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LO4W,LO5W,LO6W,LO7W,LO8W,LO9W,LP0W,LP1W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LP2W,LP3W,LP4W,LP5W,LP6W,LP7W,LP8W,LP9W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LQ0W,LQ1W,LQ2W,LQ3W,LQ4W,LQ5W,LQ6W,LQ7W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LQ8W,LQ9W,LR0W,LR1W,LR2W,LR3W,LR4W,LR5W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LR6W,LR7W,LR8W,LR9W,LS0W,LS1W,LS2W,LS3W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LS4W,LS5W,LS6W,LS7W,LS8W,LS9W,LT0W,LT1W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LT2W,LT3W,LT4W,LT5W,LT6W,LT7W,LT8W,LT9W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LU0W,LU1W,LU2W,LU3W,LU4W,LU5W,LU6W,LU7W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LU8W,LU9W,LV0W,LV1W,LV2W,LV3W,LV4W,LV5W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LV6W,LV7W,LV8W,LV9W,LW0W,LW1W,LW2W,LW3W Chubut-LU     124 16 13   3.00 45 52  0 S  67 30  0 W
-LW4W,LW5W,LW6W,LW7W,LW8W,LW9W Chubut-LU               124 16 13   3.00 45 52  0 S  67 30  0 W
-LU-X Santa-Cruz-Tierra-del-Fuego-LU                   124 16 13   3.00 45  0  0 S  69  0  0 W
-LU Santa-Cruz-Tierra-del-Fuego-LU-X                   124 16 13   3.00 45  0  0 S  69  0  0 W
-AY0X,AY1X,AY2X,AY3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-AY4X,AY5X,AY6X,AY7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-AY8X,AY9X,AZ0X,AZ1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-AZ2X,AZ3X,AZ4X,AZ5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-AZ6X,AZ7X,AZ8X,AZ9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L20X,L21X,L22X,L23X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L24X,L25X,L26X,L27X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L28X,L29X,L30X,L31X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L32X,L33X,L34X,L35X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L36X,L37X,L38X,L39X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L40X,L41X,L42X,L43X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L44X,L45X,L46X,L47X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L48X,L49X,L50X,L51X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L52X,L53X,L54X,L55X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L56X,L57X,L58X,L59X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L60X,L61X,L62X,L63X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L64X,L65X,L66X,L67X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L68X,L69X,L70X,L71X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L72X,L73X,L74X,L75X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L76X,L77X,L78X,L79X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L80X,L81X,L82X,L83X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L84X,L85X,L86X,L87X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L88X,L89X,L90X,L91X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L92X,L93X,L94X,L95X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-L96X,L97X,L98X,L99X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LO0X,LO1X,LO2X,LO3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LO4X,LO5X,LO6X,LO7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LO8X,LO9X,LP0X,LP1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LP2X,LP3X,LP4X,LP5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LP6X,LP7X,LP8X,LP9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LQ0X,LQ1X,LQ2X,LQ3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LQ4X,LQ5X,LQ6X,LQ7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LQ8X,LQ9X,LR0X,LR1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LR2X,LR3X,LR4X,LR5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LR6X,LR7X,LR8X,LR9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LS0X,LS1X,LS2X,LS3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LS4X,LS5X,LS6X,LS7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LS8X,LS9X,LT0X,LT1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LT2X,LT3X,LT4X,LT5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LT6X,LT7X,LT8X,LT9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LU0X,LU1X,LU2X,LU3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LU4X,LU5X,LU6X,LU7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LU8X,LU9X,LV0X,LV1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LV2X,LV3X,LV4X,LV5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LV6X,LV7X,LV8X,LV9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LW0X,LW1X,LW2X,LW3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LW4X,LW5X,LW6X,LW7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 45  0  0 S  69  0  0 W
-LW8X,LW9X Santa-Cruz-Tierra-del-Fuego-LU              124 16 13   3.00 45  0  0 S  69  0  0 W
-LU-Y Neuquen-LU                                       124 16 13   3.00 38 33  0 S  68  3  0 W
-LU Neuquen-LU-Y                                       124 16 13   3.00 38 33  0 S  68  3  0 W
-AY0Y,AY1Y,AY2Y,AY3Y,AY4Y,AY5Y,AY6Y,AY7Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-AY8Y,AY9Y,AZ0Y,AZ1Y,AZ2Y,AZ3Y,AZ4Y,AZ5Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-AZ6Y,AZ7Y,AZ8Y,AZ9Y,L20Y,L21Y,L22Y,L23Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L24Y,L25Y,L26Y,L27Y,L28Y,L29Y,L30Y,L31Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L32Y,L33Y,L34Y,L35Y,L36Y,L37Y,L38Y,L39Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L40Y,L41Y,L42Y,L43Y,L44Y,L45Y,L46Y,L47Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L48Y,L49Y,L50Y,L51Y,L52Y,L53Y,L54Y,L55Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L56Y,L57Y,L58Y,L59Y,L60Y,L61Y,L62Y,L63Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L64Y,L65Y,L66Y,L67Y,L68Y,L69Y,L70Y,L71Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L72Y,L73Y,L74Y,L75Y,L76Y,L77Y,L78Y,L79Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L80Y,L81Y,L82Y,L83Y,L84Y,L85Y,L86Y,L87Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L88Y,L89Y,L90Y,L91Y,L92Y,L93Y,L94Y,L95Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-L96Y,L97Y,L98Y,L99Y,LO0Y,LO1Y,LO2Y,LO3Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LO4Y,LO5Y,LO6Y,LO7Y,LO8Y,LO9Y,LP0Y,LP1Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LP2Y,LP3Y,LP4Y,LP5Y,LP6Y,LP7Y,LP8Y,LP9Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LQ0Y,LQ1Y,LQ2Y,LQ3Y,LQ4Y,LQ5Y,LQ6Y,LQ7Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LQ8Y,LQ9Y,LR0Y,LR1Y,LR2Y,LR3Y,LR4Y,LR5Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LR6Y,LR7Y,LR8Y,LR9Y,LS0Y,LS1Y,LS2Y,LS3Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LS4Y,LS5Y,LS6Y,LS7Y,LS8Y,LS9Y,LT0Y,LT1Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LT2Y,LT3Y,LT4Y,LT5Y,LT6Y,LT7Y,LT8Y,LT9Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LU0Y,LU1Y,LU2Y,LU3Y,LU4Y,LU5Y,LU6Y,LU7Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LU8Y,LU9Y,LV0Y,LV1Y,LV2Y,LV3Y,LV4Y,LV5Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LV6Y,LV7Y,LV8Y,LV9Y,LW0Y,LW1Y,LW2Y,LW3Y Neuquen-LU    124 16 13   3.00 38 33  0 S  68  3  0 W
-LW4Y,LW5Y,LW6Y,LW7Y,LW8Y,LW9Y Neuquen-LU              124 16 13   3.00 38 33  0 S  68  3  0 W
+LU Argentina-LU                                       124 14 13   3.00 32 30  0 S  62  8  0 W @
+AY,AZ,L1,L2,L3,L4,L5,L6,L7,L8,L9,LO,LP Argentina-LU   124 14 13   3.00 32 30  0 S  62  8  0 W
+LQ,LR,LS,LT,LV,LW Argentina-LU                        124 14 13   3.00 32 30  0 S  62  8  0 W
+LU-A Buenos-Aires-city-LU                             124 14 13   3.00 34 36  0 S  58 23  0 W
+LU Buenos-Aires-city-LU-A                             124 14 13   3.00 34 36  0 S  58 23  0 W
+AY0A,AY0B,AY0C,AY1A,AY1B,AY1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AY2A,AY2B,AY2C,AY3A,AY3B,AY3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AY4A,AY4B,AY4C,AY5A,AY5B,AY5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AY6A,AY6B,AY6C,AY7A,AY7B,AY7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AY8A,AY8B,AY8C,AY9A,AY9B,AY9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AZ0A,AZ0B,AZ0C,AZ1A,AZ1B,AZ1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AZ2A,AZ2B,AZ2C,AZ3A,AZ3B,AZ3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AZ4A,AZ4B,AZ4C,AZ5A,AZ5B,AZ5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AZ6A,AZ6B,AZ6C,AZ7A,AZ7B,AZ7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+AZ8A,AZ8B,AZ8C,AZ9A,AZ9B,AZ9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L20A,L20B,L20C,L21A,L21B,L21C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L22A,L22B,L22C,L23A,L23B,L23C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L24A,L24B,L24C,L25A,L25B,L25C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L26A,L26B,L26C,L27A,L27B,L27C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L28A,L28B,L28C,L29A,L29B,L29C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L30A,L30B,L30C,L31A,L31B,L31C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L32A,L32B,L32C,L33A,L33B,L33C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L34A,L34B,L34C,L35A,L35B,L35C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L36A,L36B,L36C,L37A,L37B,L37C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L38A,L38B,L38C,L39A,L39B,L39C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L40A,L40B,L40C,L41A,L41B,L41C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L42A,L42B,L42C,L43A,L43B,L43C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L44A,L44B,L44C,L45A,L45B,L45C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L46A,L46B,L46C,L47A,L47B,L47C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L48A,L48B,L48C,L49A,L49B,L49C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L50A,L50B,L50C,L51A,L51B,L51C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L52A,L52B,L52C,L53A,L53B,L53C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L54A,L54B,L54C,L55A,L55B,L55C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L56A,L56B,L56C,L57A,L57B,L57C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L58A,L58B,L58C,L59A,L59B,L59C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L60A,L60B,L60C,L61A,L61B,L61C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L62A,L62B,L62C,L63A,L63B,L63C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L64A,L64B,L64C,L65A,L65B,L65C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L66A,L66B,L66C,L67A,L67B,L67C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L68A,L68B,L68C,L69A,L69B,L69C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L70A,L70B,L70C,L71A,L71B,L71C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L72A,L72B,L72C,L73A,L73B,L73C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L74A,L74B,L74C,L75A,L75B,L75C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L76A,L76B,L76C,L77A,L77B,L77C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L78A,L78B,L78C,L79A,L79B,L79C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L80A,L80B,L80C,L81A,L81B,L81C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L82A,L82B,L82C,L83A,L83B,L83C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L84A,L84B,L84C,L85A,L85B,L85C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L86A,L86B,L86C,L87A,L87B,L87C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L88A,L88B,L88C,L89A,L89B,L89C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L90A,L90B,L90C,L91A,L91B,L91C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L92A,L92B,L92C,L93A,L93B,L93C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L94A,L94B,L94C,L95A,L95B,L95C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L96A,L96B,L96C,L97A,L97B,L97C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+L98A,L98B,L98C,L99A,L99B,L99C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LO0A,LO0B,LO0C,LO1A,LO1B,LO1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LO2A,LO2B,LO2C,LO3A,LO3B,LO3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LO4A,LO4B,LO4C,LO5A,LO5B,LO5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LO6A,LO6B,LO6C,LO7A,LO7B,LO7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LO8A,LO8B,LO8C,LO9A,LO9B,LO9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LP0A,LP0B,LP0C,LP1A,LP1B,LP1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LP2A,LP2B,LP2C,LP3A,LP3B,LP3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LP4A,LP4B,LP4C,LP5A,LP5B,LP5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LP6A,LP6B,LP6C,LP7A,LP7B,LP7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LP8A,LP8B,LP8C,LP9A,LP9B,LP9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LQ0A,LQ0B,LQ0C,LQ1A,LQ1B,LQ1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LQ2A,LQ2B,LQ2C,LQ3A,LQ3B,LQ3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LQ4A,LQ4B,LQ4C,LQ5A,LQ5B,LQ5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LQ6A,LQ6B,LQ6C,LQ7A,LQ7B,LQ7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LQ8A,LQ8B,LQ8C,LQ9A,LQ9B,LQ9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LR0A,LR0B,LR0C,LR1A,LR1B,LR1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LR2A,LR2B,LR2C,LR3A,LR3B,LR3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LR4A,LR4B,LR4C,LR5A,LR5B,LR5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LR6A,LR6B,LR6C,LR7A,LR7B,LR7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LR8A,LR8B,LR8C,LR9A,LR9B,LR9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LS0A,LS0B,LS0C,LS1A,LS1B,LS1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LS2A,LS2B,LS2C,LS3A,LS3B,LS3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LS4A,LS4B,LS4C,LS5A,LS5B,LS5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LS6A,LS6B,LS6C,LS7A,LS7B,LS7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LS8A,LS8B,LS8C,LS9A,LS9B,LS9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LT0A,LT0B,LT0C,LT1A,LT1B,LT1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LT2A,LT2B,LT2C,LT3A,LT3B,LT3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LT4A,LT4B,LT4C,LT5A,LT5B,LT5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LT6A,LT6B,LT6C,LT7A,LT7B,LT7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LT8A,LT8B,LT8C,LT9A,LT9B,LT9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LU0A,LU0B,LU0C,LU1A,LU1B,LU1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LU2A,LU2B,LU2C,LU3A,LU3B,LU3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LU4A,LU4B,LU4C,LU5A,LU5B,LU5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LU6A,LU6B,LU6C,LU7A,LU7B,LU7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LU8A,LU8B,LU8C,LU9A,LU9B,LU9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LV0A,LV0B,LV0C,LV1A,LV1B,LV1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LV2A,LV2B,LV2C,LV3A,LV3B,LV3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LV4A,LV4B,LV4C,LV5A,LV5B,LV5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LV6A,LV6B,LV6C,LV7A,LV7B,LV7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LV8A,LV8B,LV8C,LV9A,LV9B,LV9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LW0A,LW0B,LW0C,LW1A,LW1B,LW1C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LW2A,LW2B,LW2C,LW3A,LW3B,LW3C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LW4A,LW4B,LW4C,LW5A,LW5B,LW5C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LW6A,LW6B,LW6C,LW7A,LW7B,LW7C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LW8A,LW8B,LW8C,LW9A,LW9B,LW9C Buenos-Aires-city-LU    124 14 13   3.00 34 36  0 S  58 23  0 W
+LU-D Buenos-Aires-province-LU                         124 14 13   3.00 33 42  0 S  61  0  0 W
+LU Buenos-Aires-province-LU-D                         124 14 13   3.00 33 42  0 S  61  0  0 W
+AY0D,AY0E,AY1D,AY1E,AY2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AY2E,AY3D,AY3E,AY4D,AY4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AY5D,AY5E,AY6D,AY6E,AY7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AY7E,AY8D,AY8E,AY9D,AY9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AZ0D,AZ0E,AZ1D,AZ1E,AZ2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AZ2E,AZ3D,AZ3E,AZ4D,AZ4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AZ5D,AZ5E,AZ6D,AZ6E,AZ7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+AZ7E,AZ8D,AZ8E,AZ9D,AZ9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L20D,L20E,L21D,L21E,L22D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L22E,L23D,L23E,L24D,L24E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L25D,L25E,L26D,L26E,L27D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L27E,L28D,L28E,L29D,L29E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L30D,L30E,L31D,L31E,L32D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L32E,L33D,L33E,L34D,L34E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L35D,L35E,L36D,L36E,L37D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L37E,L38D,L38E,L39D,L39E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L40D,L40E,L41D,L41E,L42D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L42E,L43D,L43E,L44D,L44E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L45D,L45E,L46D,L46E,L47D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L47E,L48D,L48E,L49D,L49E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L50D,L50E,L51D,L51E,L52D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L52E,L53D,L53E,L54D,L54E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L55D,L55E,L56D,L56E,L57D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L57E,L58D,L58E,L59D,L59E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L60D,L60E,L61D,L61E,L62D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L62E,L63D,L63E,L64D,L64E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L65D,L65E,L66D,L66E,L67D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L67E,L68D,L68E,L69D,L69E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L70D,L70E,L71D,L71E,L72D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L72E,L73D,L73E,L74D,L74E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L75D,L75E,L76D,L76E,L77D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L77E,L78D,L78E,L79D,L79E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L80D,L80E,L81D,L81E,L82D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L82E,L83D,L83E,L84D,L84E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L85D,L85E,L86D,L86E,L87D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L87E,L88D,L88E,L89D,L89E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L90D,L90E,L91D,L91E,L92D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L92E,L93D,L93E,L94D,L94E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L95D,L95E,L96D,L96E,L97D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+L97E,L98D,L98E,L99D,L99E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LO0D,LO0E,LO1D,LO1E,LO2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LO2E,LO3D,LO3E,LO4D,LO4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LO5D,LO5E,LO6D,LO6E,LO7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LO7E,LO8D,LO8E,LO9D,LO9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LP0D,LP0E,LP1D,LP1E,LP2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LP2E,LP3D,LP3E,LP4D,LP4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LP5D,LP5E,LP6D,LP6E,LP7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LP7E,LP8D,LP8E,LP9D,LP9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LQ0D,LQ0E,LQ1D,LQ1E,LQ2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LQ2E,LQ3D,LQ3E,LQ4D,LQ4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LQ5D,LQ5E,LQ6D,LQ6E,LQ7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LQ7E,LQ8D,LQ8E,LQ9D,LQ9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LR0D,LR0E,LR1D,LR1E,LR2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LR2E,LR3D,LR3E,LR4D,LR4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LR5D,LR5E,LR6D,LR6E,LR7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LR7E,LR8D,LR8E,LR9D,LR9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LS0D,LS0E,LS1D,LS1E,LS2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LS2E,LS3D,LS3E,LS4D,LS4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LS5D,LS5E,LS6D,LS6E,LS7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LS7E,LS8D,LS8E,LS9D,LS9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LT0D,LT0E,LT1D,LT1E,LT2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LT2E,LT3D,LT3E,LT4D,LT4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LT5D,LT5E,LT6D,LT6E,LT7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LT7E,LT8D,LT8E,LT9D,LT9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LU0D,LU0E,LU1D,LU1E,LU2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LU2E,LU3D,LU3E,LU4D,LU4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LU5D,LU5E,LU6D,LU6E,LU7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LU7E,LU8D,LU8E,LU9D,LU9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LV0D,LV0E,LV1D,LV1E,LV2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LV2E,LV3D,LV3E,LV4D,LV4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LV5D,LV5E,LV6D,LV6E,LV7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LV7E,LV8D,LV8E,LV9D,LV9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LW0D,LW0E,LW1D,LW1E,LW2D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LW2E,LW3D,LW3E,LW4D,LW4E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LW5D,LW5E,LW6D,LW6E,LW7D Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LW7E,LW8D,LW8E,LW9D,LW9E Buenos-Aires-province-LU     124 14 13   3.00 33 42  0 S  61  0  0 W
+LU-F Santa-Fe-LU                                      124 14 13   3.00 33 43  0 S  62 14  0 W
+LU Santa-Fe-LU-F                                      124 14 13   3.00 33 43  0 S  62 14  0 W
+AY0F,AY1F,AY2F,AY3F,AY4F,AY5F,AY6F,AY7F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+AY8F,AY9F,AZ0F,AZ1F,AZ2F,AZ3F,AZ4F,AZ5F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+AZ6F,AZ7F,AZ8F,AZ9F,L20F,L21F,L22F,L23F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L24F,L25F,L26F,L27F,L28F,L29F,L30F,L31F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L32F,L33F,L34F,L35F,L36F,L37F,L38F,L39F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L40F,L41F,L42F,L43F,L44F,L45F,L46F,L47F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L48F,L49F,L50F,L51F,L52F,L53F,L54F,L55F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L56F,L57F,L58F,L59F,L60F,L61F,L62F,L63F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L64F,L65F,L66F,L67F,L68F,L69F,L70F,L71F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L72F,L73F,L74F,L75F,L76F,L77F,L78F,L79F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L80F,L81F,L82F,L83F,L84F,L85F,L86F,L87F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L88F,L89F,L90F,L91F,L92F,L93F,L94F,L95F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+L96F,L97F,L98F,L99F,LO0F,LO1F,LO2F,LO3F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LO4F,LO5F,LO6F,LO7F,LO8F,LO9F,LP0F,LP1F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LP2F,LP3F,LP4F,LP5F,LP6F,LP7F,LP8F,LP9F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LQ0F,LQ1F,LQ2F,LQ3F,LQ4F,LQ5F,LQ6F,LQ7F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LQ8F,LQ9F,LR0F,LR1F,LR2F,LR3F,LR4F,LR5F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LR6F,LR7F,LR8F,LR9F,LS0F,LS1F,LS2F,LS3F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LS4F,LS5F,LS6F,LS7F,LS8F,LS9F,LT0F,LT1F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LT2F,LT3F,LT4F,LT5F,LT6F,LT7F,LT8F,LT9F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LU0F,LU1F,LU2F,LU3F,LU4F,LU5F,LU6F,LU7F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LU8F,LU9F,LV0F,LV1F,LV2F,LV3F,LV4F,LV5F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LV6F,LV7F,LV8F,LV9F,LW0F,LW1F,LW2F,LW3F Santa-Fe-LU   124 14 13   3.00 33 43  0 S  62 14  0 W
+LW4F,LW5F,LW6F,LW7F,LW8F,LW9F Santa-Fe-LU             124 14 13   3.00 33 43  0 S  62 14  0 W
+LU-G Chaco-and-Formosa-LU                             124 14 13   3.00 26 57  0 S  58 43  0 W
+LU Chaco-and-Formosa-LU-G                             124 14 13   3.00 26 57  0 S  58 43  0 W
+AY0G,AY1G,AY2G,AY3G,AY4G,AY5G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+AY6G,AY7G,AY8G,AY9G,AZ0G,AZ1G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+AZ2G,AZ3G,AZ4G,AZ5G,AZ6G,AZ7G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+AZ8G,AZ9G,L20G,L21G,L22G,L23G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L24G,L25G,L26G,L27G,L28G,L29G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L30G,L31G,L32G,L33G,L34G,L35G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L36G,L37G,L38G,L39G,L40G,L41G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L42G,L43G,L44G,L45G,L46G,L47G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L48G,L49G,L50G,L51G,L52G,L53G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L54G,L55G,L56G,L57G,L58G,L59G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L60G,L61G,L62G,L63G,L64G,L65G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L66G,L67G,L68G,L69G,L70G,L71G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L72G,L73G,L74G,L75G,L76G,L77G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L78G,L79G,L80G,L81G,L82G,L83G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L84G,L85G,L86G,L87G,L88G,L89G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L90G,L91G,L92G,L93G,L94G,L95G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+L96G,L97G,L98G,L99G,LO0G,LO1G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LO2G,LO3G,LO4G,LO5G,LO6G,LO7G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LO8G,LO9G,LP0G,LP1G,LP2G,LP3G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LP4G,LP5G,LP6G,LP7G,LP8G,LP9G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LQ0G,LQ1G,LQ2G,LQ3G,LQ4G,LQ5G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LQ6G,LQ7G,LQ8G,LQ9G,LR0G,LR1G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LR2G,LR3G,LR4G,LR5G,LR6G,LR7G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LR8G,LR9G,LS0G,LS1G,LS2G,LS3G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LS4G,LS5G,LS6G,LS7G,LS8G,LS9G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LT0G,LT1G,LT2G,LT3G,LT4G,LT5G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LT6G,LT7G,LT8G,LT9G,LU0G,LU1G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LU2G,LU3G,LU4G,LU5G,LU6G,LU7G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LU8G,LU9G,LV0G,LV1G,LV2G,LV3G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LV4G,LV5G,LV6G,LV7G,LV8G,LV9G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LW0G,LW1G,LW2G,LW3G,LW4G,LW5G Chaco-and-Formosa-LU    124 14 13   3.00 26 57  0 S  58 43  0 W
+LW6G,LW7G,LW8G,LW9G Chaco-and-Formosa-LU              124 14 13   3.00 26 57  0 S  58 43  0 W
+LU-H Cordoba-LU                                       124 14 13   3.00 31 25  0 S  64 11  0 W
+LU Cordoba-LU-H                                       124 14 13   3.00 31 25  0 S  64 11  0 W
+AY0H,AY1H,AY2H,AY3H,AY4H,AY5H,AY6H,AY7H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+AY8H,AY9H,AZ0H,AZ1H,AZ2H,AZ3H,AZ4H,AZ5H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+AZ6H,AZ7H,AZ8H,AZ9H,L20H,L21H,L22H,L23H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L24H,L25H,L26H,L27H,L28H,L29H,L30H,L31H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L32H,L33H,L34H,L35H,L36H,L37H,L38H,L39H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L40H,L41H,L42H,L43H,L44H,L45H,L46H,L47H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L48H,L49H,L50H,L51H,L52H,L53H,L54H,L55H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L56H,L57H,L58H,L59H,L60H,L61H,L62H,L63H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L64H,L65H,L66H,L67H,L68H,L69H,L70H,L71H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L72H,L73H,L74H,L75H,L76H,L77H,L78H,L79H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L80H,L81H,L82H,L83H,L84H,L85H,L86H,L87H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L88H,L89H,L90H,L91H,L92H,L93H,L94H,L95H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+L96H,L97H,L98H,L99H,LO0H,LO1H,LO2H,LO3H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LO4H,LO5H,LO6H,LO7H,LO8H,LO9H,LP0H,LP1H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LP2H,LP3H,LP4H,LP5H,LP6H,LP7H,LP8H,LP9H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LQ0H,LQ1H,LQ2H,LQ3H,LQ4H,LQ5H,LQ6H,LQ7H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LQ8H,LQ9H,LR0H,LR1H,LR2H,LR3H,LR4H,LR5H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LR6H,LR7H,LR8H,LR9H,LS0H,LS1H,LS2H,LS3H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LS4H,LS5H,LS6H,LS7H,LS8H,LS9H,LT0H,LT1H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LT2H,LT3H,LT4H,LT5H,LT6H,LT7H,LT8H,LT9H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LU0H,LU1H,LU2H,LU3H,LU4H,LU5H,LU6H,LU7H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LU8H,LU9H,LV0H,LV1H,LV2H,LV3H,LV4H,LV5H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LV6H,LV7H,LV8H,LV9H,LW0H,LW1H,LW2H,LW3H Cordoba-LU    124 14 13   3.00 31 25  0 S  64 11  0 W
+LW4H,LW5H,LW6H,LW7H,LW8H,LW9H Cordoba-LU              124 14 13   3.00 31 25  0 S  64 11  0 W
+LU-I Misiones-LU                                      124 14 13   3.00 26 55  0 S  54 31  0 W
+LU Misiones-LU-I                                      124 14 13   3.00 26 55  0 S  54 31  0 W
+AY0I,AY1I,AY2I,AY3I,AY4I,AY5I,AY6I,AY7I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+AY8I,AY9I,AZ0I,AZ1I,AZ2I,AZ3I,AZ4I,AZ5I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+AZ6I,AZ7I,AZ8I,AZ9I,L20I,L21I,L22I,L23I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L24I,L25I,L26I,L27I,L28I,L29I,L30I,L31I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L32I,L33I,L34I,L35I,L36I,L37I,L38I,L39I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L40I,L41I,L42I,L43I,L44I,L45I,L46I,L47I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L48I,L49I,L50I,L51I,L52I,L53I,L54I,L55I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L56I,L57I,L58I,L59I,L60I,L61I,L62I,L63I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L64I,L65I,L66I,L67I,L68I,L69I,L70I,L71I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L72I,L73I,L74I,L75I,L76I,L77I,L78I,L79I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L80I,L81I,L82I,L83I,L84I,L85I,L86I,L87I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L88I,L89I,L90I,L91I,L92I,L93I,L94I,L95I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+L96I,L97I,L98I,L99I,LO0I,LO1I,LO2I,LO3I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LO4I,LO5I,LO6I,LO7I,LO8I,LO9I,LP0I,LP1I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LP2I,LP3I,LP4I,LP5I,LP6I,LP7I,LP8I,LP9I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LQ0I,LQ1I,LQ2I,LQ3I,LQ4I,LQ5I,LQ6I,LQ7I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LQ8I,LQ9I,LR0I,LR1I,LR2I,LR3I,LR4I,LR5I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LR6I,LR7I,LR8I,LR9I,LS0I,LS1I,LS2I,LS3I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LS4I,LS5I,LS6I,LS7I,LS8I,LS9I,LT0I,LT1I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LT2I,LT3I,LT4I,LT5I,LT6I,LT7I,LT8I,LT9I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LU0I,LU1I,LU2I,LU3I,LU4I,LU5I,LU6I,LU7I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LU8I,LU9I,LV0I,LV1I,LV2I,LV3I,LV4I,LV5I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LV6I,LV7I,LV8I,LV9I,LW0I,LW1I,LW2I,LW3I Misiones-LU   124 14 13   3.00 26 55  0 S  54 31  0 W
+LW4I,LW5I,LW6I,LW7I,LW8I,LW9I Misiones-LU             124 14 13   3.00 26 55  0 S  54 31  0 W
+LU-J Entre-Rios-LU                                    124 14 13   3.00 32  3  0 S  60 17  0 W
+LU Entre-Rios-LU-J                                    124 14 13   3.00 32  3  0 S  60 17  0 W
+AY0J,AY1J,AY2J,AY3J,AY4J,AY5J,AY6J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+AY7J,AY8J,AY9J,AZ0J,AZ1J,AZ2J,AZ3J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+AZ4J,AZ5J,AZ6J,AZ7J,AZ8J,AZ9J,L20J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L21J,L22J,L23J,L24J,L25J,L26J,L27J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L28J,L29J,L30J,L31J,L32J,L33J,L34J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L35J,L36J,L37J,L38J,L39J,L40J,L41J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L42J,L43J,L44J,L45J,L46J,L47J,L48J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L49J,L50J,L51J,L52J,L53J,L54J,L55J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L56J,L57J,L58J,L59J,L60J,L61J,L62J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L63J,L64J,L65J,L66J,L67J,L68J,L69J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L70J,L71J,L72J,L73J,L74J,L75J,L76J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L77J,L78J,L79J,L80J,L81J,L82J,L83J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L84J,L85J,L86J,L87J,L88J,L89J,L90J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L91J,L92J,L93J,L94J,L95J,L96J,L97J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+L98J,L99J,LO0J,LO1J,LO2J,LO3J,LO4J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LO5J,LO6J,LO7J,LO8J,LO9J,LP0J,LP1J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LP2J,LP3J,LP4J,LP5J,LP6J,LP7J,LP8J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LP9J,LQ0J,LQ1J,LQ2J,LQ3J,LQ4J,LQ5J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LQ6J,LQ7J,LQ8J,LQ9J,LR0J,LR1J,LR2J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LR3J,LR4J,LR5J,LR6J,LR7J,LR8J,LR9J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LS0J,LS1J,LS2J,LS3J,LS4J,LS5J,LS6J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LS7J,LS8J,LS9J,LT0J,LT1J,LT2J,LT3J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LT4J,LT5J,LT6J,LT7J,LT8J,LT9J,LU0J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LU1J,LU2J,LU3J,LU4J,LU5J,LU6J,LU7J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LU8J,LU9J,LV0J,LV1J,LV2J,LV3J,LV4J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LV5J,LV6J,LV7J,LV8J,LV9J,LW0J,LW1J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LW2J,LW3J,LW4J,LW5J,LW6J,LW7J,LW8J Entre-Rios-LU      124 14 13   3.00 32  3  0 S  60 17  0 W
+LW9J Entre-Rios-LU                                    124 14 13   3.00 32  3  0 S  60 17  0 W
+LU-K Tucuman-LU                                       124 14 13   3.00 26 56  0 S  65 20  0 W
+LU Tucuman-LU-K                                       124 14 13   3.00 26 56  0 S  65 20  0 W
+AY0K,AY1K,AY2K,AY3K,AY4K,AY5K,AY6K,AY7K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+AY8K,AY9K,AZ0K,AZ1K,AZ2K,AZ3K,AZ4K,AZ5K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+AZ6K,AZ7K,AZ8K,AZ9K,L20K,L21K,L22K,L23K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L24K,L25K,L26K,L27K,L28K,L29K,L30K,L31K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L32K,L33K,L34K,L35K,L36K,L37K,L38K,L39K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L40K,L41K,L42K,L43K,L44K,L45K,L46K,L47K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L48K,L49K,L50K,L51K,L52K,L53K,L54K,L55K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L56K,L57K,L58K,L59K,L60K,L61K,L62K,L63K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L64K,L65K,L66K,L67K,L68K,L69K,L70K,L71K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L72K,L73K,L74K,L75K,L76K,L77K,L78K,L79K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L80K,L81K,L82K,L83K,L84K,L85K,L86K,L87K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L88K,L89K,L90K,L91K,L92K,L93K,L94K,L95K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+L96K,L97K,L98K,L99K,LO0K,LO1K,LO2K,LO3K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LO4K,LO5K,LO6K,LO7K,LO8K,LO9K,LP0K,LP1K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LP2K,LP3K,LP4K,LP5K,LP6K,LP7K,LP8K,LP9K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LQ0K,LQ1K,LQ2K,LQ3K,LQ4K,LQ5K,LQ6K,LQ7K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LQ8K,LQ9K,LR0K,LR1K,LR2K,LR3K,LR4K,LR5K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LR6K,LR7K,LR8K,LR9K,LS0K,LS1K,LS2K,LS3K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LS4K,LS5K,LS6K,LS7K,LS8K,LS9K,LT0K,LT1K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LT2K,LT3K,LT4K,LT5K,LT6K,LT7K,LT8K,LT9K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LU0K,LU1K,LU2K,LU3K,LU4K,LU5K,LU6K,LU7K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LU8K,LU9K,LV0K,LV1K,LV2K,LV3K,LV4K,LV5K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LV6K,LV7K,LV8K,LV9K,LW0K,LW1K,LW2K,LW3K Tucuman-LU    124 14 13   3.00 26 56  0 S  65 20  0 W
+LW4K,LW5K,LW6K,LW7K,LW8K,LW9K Tucuman-LU              124 14 13   3.00 26 56  0 S  65 20  0 W
+LU-L Corrientes-LU                                    124 14 13   3.00 28 40  0 S  57 38  0 W
+LU Corrientes-LU-L                                    124 14 13   3.00 28 40  0 S  57 38  0 W
+AY0L,AY1L,AY2L,AY3L,AY4L,AY5L,AY6L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+AY7L,AY8L,AY9L,AZ0L,AZ1L,AZ2L,AZ3L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+AZ4L,AZ5L,AZ6L,AZ7L,AZ8L,AZ9L,L20L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L21L,L22L,L23L,L24L,L25L,L26L,L27L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L28L,L29L,L30L,L31L,L32L,L33L,L34L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L35L,L36L,L37L,L38L,L39L,L40L,L41L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L42L,L43L,L44L,L45L,L46L,L47L,L48L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L49L,L50L,L51L,L52L,L53L,L54L,L55L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L56L,L57L,L58L,L59L,L60L,L61L,L62L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L63L,L64L,L65L,L66L,L67L,L68L,L69L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L70L,L71L,L72L,L73L,L74L,L75L,L76L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L77L,L78L,L79L,L80L,L81L,L82L,L83L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L84L,L85L,L86L,L87L,L88L,L89L,L90L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L91L,L92L,L93L,L94L,L95L,L96L,L97L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+L98L,L99L,LO0L,LO1L,LO2L,LO3L,LO4L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LO5L,LO6L,LO7L,LO8L,LO9L,LP0L,LP1L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LP2L,LP3L,LP4L,LP5L,LP6L,LP7L,LP8L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LP9L,LQ0L,LQ1L,LQ2L,LQ3L,LQ4L,LQ5L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LQ6L,LQ7L,LQ8L,LQ9L,LR0L,LR1L,LR2L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LR3L,LR4L,LR5L,LR6L,LR7L,LR8L,LR9L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LS0L,LS1L,LS2L,LS3L,LS4L,LS5L,LS6L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LS7L,LS8L,LS9L,LT0L,LT1L,LT2L,LT3L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LT4L,LT5L,LT6L,LT7L,LT8L,LT9L,LU0L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LU1L,LU2L,LU3L,LU4L,LU5L,LU6L,LU7L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LU8L,LU9L,LV0L,LV1L,LV2L,LV3L,LV4L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LV5L,LV6L,LV7L,LV8L,LV9L,LW0L,LW1L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LW2L,LW3L,LW4L,LW5L,LW6L,LW7L,LW8L Corrientes-LU      124 14 13   3.00 28 40  0 S  57 38  0 W
+LW9L Corrientes-LU                                    124 14 13   3.00 28 40  0 S  57 38  0 W
+LU-M Mendoza-LU                                       124 14 13   3.00 32 53  0 S  68 51  0 W
+LU Mendoza-LU-M                                       124 14 13   3.00 32 53  0 S  68 51  0 W
+AY0M,AY1M,AY2M,AY3M,AY4M,AY5M,AY6M,AY7M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+AY8M,AY9M,AZ0M,AZ1M,AZ2M,AZ3M,AZ4M,AZ5M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+AZ6M,AZ7M,AZ8M,AZ9M,L20M,L21M,L22M,L23M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L24M,L25M,L26M,L27M,L28M,L29M,L30M,L31M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L32M,L33M,L34M,L35M,L36M,L37M,L38M,L39M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L40M,L41M,L42M,L43M,L44M,L45M,L46M,L47M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L48M,L49M,L50M,L51M,L52M,L53M,L54M,L55M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L56M,L57M,L58M,L59M,L60M,L61M,L62M,L63M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L64M,L65M,L66M,L67M,L68M,L69M,L70M,L71M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L72M,L73M,L74M,L75M,L76M,L77M,L78M,L79M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L80M,L81M,L82M,L83M,L84M,L85M,L86M,L87M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L88M,L89M,L90M,L91M,L92M,L93M,L94M,L95M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+L96M,L97M,L98M,L99M,LO0M,LO1M,LO2M,LO3M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LO4M,LO5M,LO6M,LO7M,LO8M,LO9M,LP0M,LP1M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LP2M,LP3M,LP4M,LP5M,LP6M,LP7M,LP8M,LP9M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LQ0M,LQ1M,LQ2M,LQ3M,LQ4M,LQ5M,LQ6M,LQ7M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LQ8M,LQ9M,LR0M,LR1M,LR2M,LR3M,LR4M,LR5M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LR6M,LR7M,LR8M,LR9M,LS0M,LS1M,LS2M,LS3M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LS4M,LS5M,LS6M,LS7M,LS8M,LS9M,LT0M,LT1M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LT2M,LT3M,LT4M,LT5M,LT6M,LT7M,LT8M,LT9M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LU0M,LU1M,LU2M,LU3M,LU4M,LU5M,LU6M,LU7M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LU8M,LU9M,LV0M,LV1M,LV2M,LV3M,LV4M,LV5M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LV6M,LV7M,LV8M,LV9M,LW0M,LW1M,LW2M,LW3M Mendoza-LU    124 14 13   3.00 32 53  0 S  68 51  0 W
+LW4M,LW5M,LW6M,LW7M,LW8M,LW9M Mendoza-LU              124 14 13   3.00 32 53  0 S  68 51  0 W
+LU-N Santiago-del-Estero-LU                           124 14 13   3.00 27 47  0 S  64 16  0 W
+LU Santiago-del-Estero-LU-N                           124 14 13   3.00 27 47  0 S  64 16  0 W
+AY0N,AY1N,AY2N,AY3N,AY4N,AY5N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+AY6N,AY7N,AY8N,AY9N,AZ0N,AZ1N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+AZ2N,AZ3N,AZ4N,AZ5N,AZ6N,AZ7N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+AZ8N,AZ9N,L20N,L21N,L22N,L23N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L24N,L25N,L26N,L27N,L28N,L29N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L30N,L31N,L32N,L33N,L34N,L35N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L36N,L37N,L38N,L39N,L40N,L41N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L42N,L43N,L44N,L45N,L46N,L47N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L48N,L49N,L50N,L51N,L52N,L53N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L54N,L55N,L56N,L57N,L58N,L59N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L60N,L61N,L62N,L63N,L64N,L65N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L66N,L67N,L68N,L69N,L70N,L71N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L72N,L73N,L74N,L75N,L76N,L77N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L78N,L79N,L80N,L81N,L82N,L83N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L84N,L85N,L86N,L87N,L88N,L89N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L90N,L91N,L92N,L93N,L94N,L95N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+L96N,L97N,L98N,L99N,LO0N,LO1N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LO2N,LO3N,LO4N,LO5N,LO6N,LO7N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LO8N,LO9N,LP0N,LP1N,LP2N,LP3N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LP4N,LP5N,LP6N,LP7N,LP8N,LP9N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LQ0N,LQ1N,LQ2N,LQ3N,LQ4N,LQ5N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LQ6N,LQ7N,LQ8N,LQ9N,LR0N,LR1N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LR2N,LR3N,LR4N,LR5N,LR6N,LR7N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LR8N,LR9N,LS0N,LS1N,LS2N,LS3N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LS4N,LS5N,LS6N,LS7N,LS8N,LS9N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LT0N,LT1N,LT2N,LT3N,LT4N,LT5N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LT6N,LT7N,LT8N,LT9N,LU0N,LU1N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LU2N,LU3N,LU4N,LU5N,LU6N,LU7N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LU8N,LU9N,LV0N,LV1N,LV2N,LV3N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LV4N,LV5N,LV6N,LV7N,LV8N,LV9N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LW0N,LW1N,LW2N,LW3N,LW4N,LW5N Santiago-del-Estero-LU  124 14 13   3.00 27 47  0 S  64 16  0 W
+LW6N,LW7N,LW8N,LW9N Santiago-del-Estero-LU            124 14 13   3.00 27 47  0 S  64 16  0 W
+LU-O Salta-LU                                         124 14 13   3.00 24 47  0 S  65 25  0 W
+LU Salta-LU-O                                         124 14 13   3.00 24 47  0 S  65 25  0 W
+AY0O,AY1O,AY2O,AY3O,AY4O,AY5O,AY6O,AY7O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+AY8O,AY9O,AZ0O,AZ1O,AZ2O,AZ3O,AZ4O,AZ5O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+AZ6O,AZ7O,AZ8O,AZ9O,L20O,L21O,L22O,L23O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L24O,L25O,L26O,L27O,L28O,L29O,L30O,L31O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L32O,L33O,L34O,L35O,L36O,L37O,L38O,L39O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L40O,L41O,L42O,L43O,L44O,L45O,L46O,L47O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L48O,L49O,L50O,L51O,L52O,L53O,L54O,L55O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L56O,L57O,L58O,L59O,L60O,L61O,L62O,L63O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L64O,L65O,L66O,L67O,L68O,L69O,L70O,L71O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L72O,L73O,L74O,L75O,L76O,L77O,L78O,L79O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L80O,L81O,L82O,L83O,L84O,L85O,L86O,L87O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L88O,L89O,L90O,L91O,L92O,L93O,L94O,L95O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+L96O,L97O,L98O,L99O,LO0O,LO1O,LO2O,LO3O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LO4O,LO5O,LO6O,LO7O,LO8O,LO9O,LP0O,LP1O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LP2O,LP3O,LP4O,LP5O,LP6O,LP7O,LP8O,LP9O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LQ0O,LQ1O,LQ2O,LQ3O,LQ4O,LQ5O,LQ6O,LQ7O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LQ8O,LQ9O,LR0O,LR1O,LR2O,LR3O,LR4O,LR5O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LR6O,LR7O,LR8O,LR9O,LS0O,LS1O,LS2O,LS3O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LS4O,LS5O,LS6O,LS7O,LS8O,LS9O,LT0O,LT1O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LT2O,LT3O,LT4O,LT5O,LT6O,LT7O,LT8O,LT9O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LU0O,LU1O,LU2O,LU3O,LU4O,LU5O,LU6O,LU7O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LU8O,LU9O,LV0O,LV1O,LV2O,LV3O,LV4O,LV5O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LV6O,LV7O,LV8O,LV9O,LW0O,LW1O,LW2O,LW3O Salta-LU      124 14 13   3.00 24 47  0 S  65 25  0 W
+LW4O,LW5O,LW6O,LW7O,LW8O,LW9O Salta-LU                124 14 13   3.00 24 47  0 S  65 25  0 W
+LU-P San-Juan-LU                                      124 14 13   3.00 30 52  0 S  68 59  0 W
+LU San-Juan-LU-P                                      124 14 13   3.00 30 52  0 S  68 59  0 W
+AY0P,AY1P,AY2P,AY3P,AY4P,AY5P,AY6P,AY7P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+AY8P,AY9P,AZ0P,AZ1P,AZ2P,AZ3P,AZ4P,AZ5P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+AZ6P,AZ7P,AZ8P,AZ9P,L20P,L21P,L22P,L23P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L24P,L25P,L26P,L27P,L28P,L29P,L30P,L31P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L32P,L33P,L34P,L35P,L36P,L37P,L38P,L39P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L40P,L41P,L42P,L43P,L44P,L45P,L46P,L47P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L48P,L49P,L50P,L51P,L52P,L53P,L54P,L55P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L56P,L57P,L58P,L59P,L60P,L61P,L62P,L63P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L64P,L65P,L66P,L67P,L68P,L69P,L70P,L71P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L72P,L73P,L74P,L75P,L76P,L77P,L78P,L79P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L80P,L81P,L82P,L83P,L84P,L85P,L86P,L87P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L88P,L89P,L90P,L91P,L92P,L93P,L94P,L95P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+L96P,L97P,L98P,L99P,LO0P,LO1P,LO2P,LO3P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LO4P,LO5P,LO6P,LO7P,LO8P,LO9P,LP0P,LP1P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LP2P,LP3P,LP4P,LP5P,LP6P,LP7P,LP8P,LP9P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LQ0P,LQ1P,LQ2P,LQ3P,LQ4P,LQ5P,LQ6P,LQ7P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LQ8P,LQ9P,LR0P,LR1P,LR2P,LR3P,LR4P,LR5P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LR6P,LR7P,LR8P,LR9P,LS0P,LS1P,LS2P,LS3P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LS4P,LS5P,LS6P,LS7P,LS8P,LS9P,LT0P,LT1P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LT2P,LT3P,LT4P,LT5P,LT6P,LT7P,LT8P,LT9P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LU0P,LU1P,LU2P,LU3P,LU4P,LU5P,LU6P,LU7P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LU8P,LU9P,LV0P,LV1P,LV2P,LV3P,LV4P,LV5P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LV6P,LV7P,LV8P,LV9P,LW0P,LW1P,LW2P,LW3P San-Juan-LU   124 14 13   3.00 30 52  0 S  68 59  0 W
+LW4P,LW5P,LW6P,LW7P,LW8P,LW9P San-Juan-LU             124 14 13   3.00 30 52  0 S  68 59  0 W
+LU-Q San-Luis-LU                                      124 14 13   3.00 33 18  0 S  66 21  0 W
+LU San-Luis-LU-Q                                      124 14 13   3.00 33 18  0 S  66 21  0 W
+AY0Q,AY1Q,AY2Q,AY3Q,AY4Q,AY5Q,AY6Q,AY7Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+AY8Q,AY9Q,AZ0Q,AZ1Q,AZ2Q,AZ3Q,AZ4Q,AZ5Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+AZ6Q,AZ7Q,AZ8Q,AZ9Q,L20Q,L21Q,L22Q,L23Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L24Q,L25Q,L26Q,L27Q,L28Q,L29Q,L30Q,L31Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L32Q,L33Q,L34Q,L35Q,L36Q,L37Q,L38Q,L39Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L40Q,L41Q,L42Q,L43Q,L44Q,L45Q,L46Q,L47Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L48Q,L49Q,L50Q,L51Q,L52Q,L53Q,L54Q,L55Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L56Q,L57Q,L58Q,L59Q,L60Q,L61Q,L62Q,L63Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L64Q,L65Q,L66Q,L67Q,L68Q,L69Q,L70Q,L71Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L72Q,L73Q,L74Q,L75Q,L76Q,L77Q,L78Q,L79Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L80Q,L81Q,L82Q,L83Q,L84Q,L85Q,L86Q,L87Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L88Q,L89Q,L90Q,L91Q,L92Q,L93Q,L94Q,L95Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+L96Q,L97Q,L98Q,L99Q,LO0Q,LO1Q,LO2Q,LO3Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LO4Q,LO5Q,LO6Q,LO7Q,LO8Q,LO9Q,LP0Q,LP1Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LP2Q,LP3Q,LP4Q,LP5Q,LP6Q,LP7Q,LP8Q,LP9Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LQ0Q,LQ1Q,LQ2Q,LQ3Q,LQ4Q,LQ5Q,LQ6Q,LQ7Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LQ8Q,LQ9Q,LR0Q,LR1Q,LR2Q,LR3Q,LR4Q,LR5Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LR6Q,LR7Q,LR8Q,LR9Q,LS0Q,LS1Q,LS2Q,LS3Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LS4Q,LS5Q,LS6Q,LS7Q,LS8Q,LS9Q,LT0Q,LT1Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LT2Q,LT3Q,LT4Q,LT5Q,LT6Q,LT7Q,LT8Q,LT9Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LU0Q,LU1Q,LU2Q,LU3Q,LU4Q,LU5Q,LU6Q,LU7Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LU8Q,LU9Q,LV0Q,LV1Q,LV2Q,LV3Q,LV4Q,LV5Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LV6Q,LV7Q,LV8Q,LV9Q,LW0Q,LW1Q,LW2Q,LW3Q San-Luis-LU   124 14 13   3.00 33 18  0 S  66 21  0 W
+LW4Q,LW5Q,LW6Q,LW7Q,LW8Q,LW9Q San-Luis-LU             124 14 13   3.00 33 18  0 S  66 21  0 W
+LU-R Catamarca-LU                                     124 14 13   3.00 28 26  0 S  65 47  0 W
+LU Catamarca-LU-R                                     124 14 13   3.00 28 26  0 S  65 47  0 W
+AY0R,AY1R,AY2R,AY3R,AY4R,AY5R,AY6R,AY7R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+AY8R,AY9R,AZ0R,AZ1R,AZ2R,AZ3R,AZ4R,AZ5R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+AZ6R,AZ7R,AZ8R,AZ9R,L20R,L21R,L22R,L23R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L24R,L25R,L26R,L27R,L28R,L29R,L30R,L31R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L32R,L33R,L34R,L35R,L36R,L37R,L38R,L39R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L40R,L41R,L42R,L43R,L44R,L45R,L46R,L47R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L48R,L49R,L50R,L51R,L52R,L53R,L54R,L55R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L56R,L57R,L58R,L59R,L60R,L61R,L62R,L63R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L64R,L65R,L66R,L67R,L68R,L69R,L70R,L71R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L72R,L73R,L74R,L75R,L76R,L77R,L78R,L79R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L80R,L81R,L82R,L83R,L84R,L85R,L86R,L87R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L88R,L89R,L90R,L91R,L92R,L93R,L94R,L95R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+L96R,L97R,L98R,L99R,LO0R,LO1R,LO2R,LO3R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LO4R,LO5R,LO6R,LO7R,LO8R,LO9R,LP0R,LP1R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LP2R,LP3R,LP4R,LP5R,LP6R,LP7R,LP8R,LP9R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LQ0R,LQ1R,LQ2R,LQ3R,LQ4R,LQ5R,LQ6R,LQ7R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LQ8R,LQ9R,LR0R,LR1R,LR2R,LR3R,LR4R,LR5R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LR6R,LR7R,LR8R,LR9R,LS0R,LS1R,LS2R,LS3R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LS4R,LS5R,LS6R,LS7R,LS8R,LS9R,LT0R,LT1R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LT2R,LT3R,LT4R,LT5R,LT6R,LT7R,LT8R,LT9R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LU0R,LU1R,LU2R,LU3R,LU4R,LU5R,LU6R,LU7R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LU8R,LU9R,LV0R,LV1R,LV2R,LV3R,LV4R,LV5R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LV6R,LV7R,LV8R,LV9R,LW0R,LW1R,LW2R,LW3R Catamarca-LU  124 14 13   3.00 28 26  0 S  65 47  0 W
+LW4R,LW5R,LW6R,LW7R,LW8R,LW9R Catamarca-LU            124 14 13   3.00 28 26  0 S  65 47  0 W
+LU-S La-Rioja-LU                                      124 14 13   3.00 29 26  0 S  66 51  0 W
+LU La-Rioja-LU-S                                      124 14 13   3.00 29 26  0 S  66 51  0 W
+AY0S,AY1S,AY2S,AY3S,AY4S,AY5S,AY6S,AY7S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+AY8S,AY9S,AZ0S,AZ1S,AZ2S,AZ3S,AZ4S,AZ5S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+AZ6S,AZ7S,AZ8S,AZ9S,L20S,L21S,L22S,L23S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L24S,L25S,L26S,L27S,L28S,L29S,L30S,L31S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L32S,L33S,L34S,L35S,L36S,L37S,L38S,L39S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L40S,L41S,L42S,L43S,L44S,L45S,L46S,L47S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L48S,L49S,L50S,L51S,L52S,L53S,L54S,L55S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L56S,L57S,L58S,L59S,L60S,L61S,L62S,L63S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L64S,L65S,L66S,L67S,L68S,L69S,L70S,L71S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L72S,L73S,L74S,L75S,L76S,L77S,L78S,L79S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L80S,L81S,L82S,L83S,L84S,L85S,L86S,L87S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L88S,L89S,L90S,L91S,L92S,L93S,L94S,L95S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+L96S,L97S,L98S,L99S,LO0S,LO1S,LO2S,LO3S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LO4S,LO5S,LO6S,LO7S,LO8S,LO9S,LP0S,LP1S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LP2S,LP3S,LP4S,LP5S,LP6S,LP7S,LP8S,LP9S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LQ0S,LQ1S,LQ2S,LQ3S,LQ4S,LQ5S,LQ6S,LQ7S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LQ8S,LQ9S,LR0S,LR1S,LR2S,LR3S,LR4S,LR5S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LR6S,LR7S,LR8S,LR9S,LS0S,LS1S,LS2S,LS3S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LS4S,LS5S,LS6S,LS7S,LS8S,LS9S,LT0S,LT1S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LT2S,LT3S,LT4S,LT5S,LT6S,LT7S,LT8S,LT9S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LU0S,LU1S,LU2S,LU3S,LU4S,LU5S,LU6S,LU7S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LU8S,LU9S,LV0S,LV1S,LV2S,LV3S,LV4S,LV5S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LV6S,LV7S,LV8S,LV9S,LW0S,LW1S,LW2S,LW3S La-Rioja-LU   124 14 13   3.00 29 26  0 S  66 51  0 W
+LW4S,LW5S,LW6S,LW7S,LW8S,LW9S La-Rioja-LU             124 14 13   3.00 29 26  0 S  66 51  0 W
+LU-T Jujuy-LU                                         124 14 13   3.00 23 45  0 S  65 30  0 W
+LU Jujuy-LU-T                                         124 14 13   3.00 23 45  0 S  65 30  0 W
+AY0T,AY1T,AY2T,AY3T,AY4T,AY5T,AY6T,AY7T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+AY8T,AY9T,AZ0T,AZ1T,AZ2T,AZ3T,AZ4T,AZ5T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+AZ6T,AZ7T,AZ8T,AZ9T,L20T,L21T,L22T,L23T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L24T,L25T,L26T,L27T,L28T,L29T,L30T,L31T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L32T,L33T,L34T,L35T,L36T,L37T,L38T,L39T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L40T,L41T,L42T,L43T,L44T,L45T,L46T,L47T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L48T,L49T,L50T,L51T,L52T,L53T,L54T,L55T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L56T,L57T,L58T,L59T,L60T,L61T,L62T,L63T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L64T,L65T,L66T,L67T,L68T,L69T,L70T,L71T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L72T,L73T,L74T,L75T,L76T,L77T,L78T,L79T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L80T,L81T,L82T,L83T,L84T,L85T,L86T,L87T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L88T,L89T,L90T,L91T,L92T,L93T,L94T,L95T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+L96T,L97T,L98T,L99T,LO0T,LO1T,LO2T,LO3T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LO4T,LO5T,LO6T,LO7T,LO8T,LO9T,LP0T,LP1T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LP2T,LP3T,LP4T,LP5T,LP6T,LP7T,LP8T,LP9T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LQ0T,LQ1T,LQ2T,LQ3T,LQ4T,LQ5T,LQ6T,LQ7T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LQ8T,LQ9T,LR0T,LR1T,LR2T,LR3T,LR4T,LR5T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LR6T,LR7T,LR8T,LR9T,LS0T,LS1T,LS2T,LS3T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LS4T,LS5T,LS6T,LS7T,LS8T,LS9T,LT0T,LT1T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LT2T,LT3T,LT4T,LT5T,LT6T,LT7T,LT8T,LT9T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LU0T,LU1T,LU2T,LU3T,LU4T,LU5T,LU6T,LU7T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LU8T,LU9T,LV0T,LV1T,LV2T,LV3T,LV4T,LV5T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LV6T,LV7T,LV8T,LV9T,LW0T,LW1T,LW2T,LW3T Jujuy-LU      124 14 13   3.00 23 45  0 S  65 30  0 W
+LW4T,LW5T,LW6T,LW7T,LW8T,LW9T Jujuy-LU                124 14 13   3.00 23 45  0 S  65 30  0 W
+LU-U La-Pampa-LU                                      124 14 13   3.00 36 37  0 S  64 17  0 W
+LU La-Pampa-LU-U                                      124 14 13   3.00 36 37  0 S  64 17  0 W
+AY0U,AY1U,AY2U,AY3U,AY4U,AY5U,AY6U,AY7U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+AY8U,AY9U,AZ0U,AZ1U,AZ2U,AZ3U,AZ4U,AZ5U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+AZ6U,AZ7U,AZ8U,AZ9U,L20U,L21U,L22U,L23U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L24U,L25U,L26U,L27U,L28U,L29U,L30U,L31U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L32U,L33U,L34U,L35U,L36U,L37U,L38U,L39U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L40U,L41U,L42U,L43U,L44U,L45U,L46U,L47U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L48U,L49U,L50U,L51U,L52U,L53U,L54U,L55U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L56U,L57U,L58U,L59U,L60U,L61U,L62U,L63U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L64U,L65U,L66U,L67U,L68U,L69U,L70U,L71U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L72U,L73U,L74U,L75U,L76U,L77U,L78U,L79U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L80U,L81U,L82U,L83U,L84U,L85U,L86U,L87U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L88U,L89U,L90U,L91U,L92U,L93U,L94U,L95U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+L96U,L97U,L98U,L99U,LO0U,LO1U,LO2U,LO3U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LO4U,LO5U,LO6U,LO7U,LO8U,LO9U,LP0U,LP1U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LP2U,LP3U,LP4U,LP5U,LP6U,LP7U,LP8U,LP9U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LQ0U,LQ1U,LQ2U,LQ3U,LQ4U,LQ5U,LQ6U,LQ7U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LQ8U,LQ9U,LR0U,LR1U,LR2U,LR3U,LR4U,LR5U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LR6U,LR7U,LR8U,LR9U,LS0U,LS1U,LS2U,LS3U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LS4U,LS5U,LS6U,LS7U,LS8U,LS9U,LT0U,LT1U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LT2U,LT3U,LT4U,LT5U,LT6U,LT7U,LT8U,LT9U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LU0U,LU1U,LU2U,LU3U,LU4U,LU5U,LU6U,LU7U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LU8U,LU9U,LV0U,LV1U,LV2U,LV3U,LV4U,LV5U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LV6U,LV7U,LV8U,LV9U,LW0U,LW1U,LW2U,LW3U La-Pampa-LU   124 14 13   3.00 36 37  0 S  64 17  0 W
+LW4U,LW5U,LW6U,LW7U,LW8U,LW9U La-Pampa-LU             124 14 13   3.00 36 37  0 S  64 17  0 W
+LU-V Rio-Negro-LU                                     124 16 13   3.00 40 48  0 S  63  0  0 W
+LU Rio-Negro-LU-V                                     124 16 13   3.00 40 48  0 S  63  0  0 W
+AY0V,AY1V,AY2V,AY3V,AY4V,AY5V,AY6V,AY7V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+AY8V,AY9V,AZ0V,AZ1V,AZ2V,AZ3V,AZ4V,AZ5V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+AZ6V,AZ7V,AZ8V,AZ9V,L20V,L21V,L22V,L23V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L24V,L25V,L26V,L27V,L28V,L29V,L30V,L31V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L32V,L33V,L34V,L35V,L36V,L37V,L38V,L39V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L40V,L41V,L42V,L43V,L44V,L45V,L46V,L47V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L48V,L49V,L50V,L51V,L52V,L53V,L54V,L55V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L56V,L57V,L58V,L59V,L60V,L61V,L62V,L63V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L64V,L65V,L66V,L67V,L68V,L69V,L70V,L71V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L72V,L73V,L74V,L75V,L76V,L77V,L78V,L79V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L80V,L81V,L82V,L83V,L84V,L85V,L86V,L87V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L88V,L89V,L90V,L91V,L92V,L93V,L94V,L95V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+L96V,L97V,L98V,L99V,LO0V,LO1V,LO2V,LO3V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LO4V,LO5V,LO6V,LO7V,LO8V,LO9V,LP0V,LP1V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LP2V,LP3V,LP4V,LP5V,LP6V,LP7V,LP8V,LP9V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LQ0V,LQ1V,LQ2V,LQ3V,LQ4V,LQ5V,LQ6V,LQ7V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LQ8V,LQ9V,LR0V,LR1V,LR2V,LR3V,LR4V,LR5V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LR6V,LR7V,LR8V,LR9V,LS0V,LS1V,LS2V,LS3V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LS4V,LS5V,LS6V,LS7V,LS8V,LS9V,LT0V,LT1V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LT2V,LT3V,LT4V,LT5V,LT6V,LT7V,LT8V,LT9V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LU0V,LU1V,LU2V,LU3V,LU4V,LU5V,LU6V,LU7V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LU8V,LU9V,LV0V,LV1V,LV2V,LV3V,LV4V,LV5V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LV6V,LV7V,LV8V,LV9V,LW0V,LW1V,LW2V,LW3V Rio-Negro-LU  124 16 13   3.00 40 48  0 S  63  0  0 W
+LW4V,LW5V,LW6V,LW7V,LW8V,LW9V Rio-Negro-LU            124 16 13   3.00 40 48  0 S  63  0  0 W
+LU-W Chubut-LU                                        124 16 13   3.00 43 18  0 S  65  6  0 W
+LU Chubut-LU-W                                        124 16 13   3.00 43 18  0 S  65  6  0 W
+AY0W,AY1W,AY2W,AY3W,AY4W,AY5W,AY6W,AY7W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+AY8W,AY9W,AZ0W,AZ1W,AZ2W,AZ3W,AZ4W,AZ5W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+AZ6W,AZ7W,AZ8W,AZ9W,L20W,L21W,L22W,L23W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L24W,L25W,L26W,L27W,L28W,L29W,L30W,L31W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L32W,L33W,L34W,L35W,L36W,L37W,L38W,L39W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L40W,L41W,L42W,L43W,L44W,L45W,L46W,L47W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L48W,L49W,L50W,L51W,L52W,L53W,L54W,L55W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L56W,L57W,L58W,L59W,L60W,L61W,L62W,L63W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L64W,L65W,L66W,L67W,L68W,L69W,L70W,L71W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L72W,L73W,L74W,L75W,L76W,L77W,L78W,L79W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L80W,L81W,L82W,L83W,L84W,L85W,L86W,L87W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L88W,L89W,L90W,L91W,L92W,L93W,L94W,L95W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+L96W,L97W,L98W,L99W,LO0W,LO1W,LO2W,LO3W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LO4W,LO5W,LO6W,LO7W,LO8W,LO9W,LP0W,LP1W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LP2W,LP3W,LP4W,LP5W,LP6W,LP7W,LP8W,LP9W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LQ0W,LQ1W,LQ2W,LQ3W,LQ4W,LQ5W,LQ6W,LQ7W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LQ8W,LQ9W,LR0W,LR1W,LR2W,LR3W,LR4W,LR5W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LR6W,LR7W,LR8W,LR9W,LS0W,LS1W,LS2W,LS3W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LS4W,LS5W,LS6W,LS7W,LS8W,LS9W,LT0W,LT1W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LT2W,LT3W,LT4W,LT5W,LT6W,LT7W,LT8W,LT9W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LU0W,LU1W,LU2W,LU3W,LU4W,LU5W,LU6W,LU7W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LU8W,LU9W,LV0W,LV1W,LV2W,LV3W,LV4W,LV5W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LV6W,LV7W,LV8W,LV9W,LW0W,LW1W,LW2W,LW3W Chubut-LU     124 16 13   3.00 43 18  0 S  65  6  0 W
+LW4W,LW5W,LW6W,LW7W,LW8W,LW9W Chubut-LU               124 16 13   3.00 43 18  0 S  65  6  0 W
+LU-X Santa-Cruz-Tierra-del-Fuego-LU                   124 16 13   3.00 50 26  0 S  69 15  0 W
+LU Santa-Cruz-Tierra-del-Fuego-LU-X                   124 16 13   3.00 50 26  0 S  69 15  0 W
+AY0X,AY1X,AY2X,AY3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+AY4X,AY5X,AY6X,AY7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+AY8X,AY9X,AZ0X,AZ1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+AZ2X,AZ3X,AZ4X,AZ5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+AZ6X,AZ7X,AZ8X,AZ9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L20X,L21X,L22X,L23X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L24X,L25X,L26X,L27X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L28X,L29X,L30X,L31X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L32X,L33X,L34X,L35X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L36X,L37X,L38X,L39X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L40X,L41X,L42X,L43X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L44X,L45X,L46X,L47X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L48X,L49X,L50X,L51X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L52X,L53X,L54X,L55X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L56X,L57X,L58X,L59X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L60X,L61X,L62X,L63X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L64X,L65X,L66X,L67X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L68X,L69X,L70X,L71X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L72X,L73X,L74X,L75X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L76X,L77X,L78X,L79X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L80X,L81X,L82X,L83X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L84X,L85X,L86X,L87X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L88X,L89X,L90X,L91X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L92X,L93X,L94X,L95X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+L96X,L97X,L98X,L99X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LO0X,LO1X,LO2X,LO3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LO4X,LO5X,LO6X,LO7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LO8X,LO9X,LP0X,LP1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LP2X,LP3X,LP4X,LP5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LP6X,LP7X,LP8X,LP9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LQ0X,LQ1X,LQ2X,LQ3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LQ4X,LQ5X,LQ6X,LQ7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LQ8X,LQ9X,LR0X,LR1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LR2X,LR3X,LR4X,LR5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LR6X,LR7X,LR8X,LR9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LS0X,LS1X,LS2X,LS3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LS4X,LS5X,LS6X,LS7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LS8X,LS9X,LT0X,LT1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LT2X,LT3X,LT4X,LT5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LT6X,LT7X,LT8X,LT9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LU0X,LU1X,LU2X,LU3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LU4X,LU5X,LU6X,LU7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LU8X,LU9X,LV0X,LV1X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LV2X,LV3X,LV4X,LV5X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LV6X,LV7X,LV8X,LV9X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LW0X,LW1X,LW2X,LW3X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LW4X,LW5X,LW6X,LW7X Santa-Cruz-Tierra-del-Fuego-LU    124 16 13   3.00 50 26  0 S  69 15  0 W
+LW8X,LW9X Santa-Cruz-Tierra-del-Fuego-LU              124 16 13   3.00 50 26  0 S  69 15  0 W
+LU-Y Neuquen-LU                                       124 16 13   3.00 38 57  0 S  68  4  0 W
+LU Neuquen-LU-Y                                       124 16 13   3.00 38 57  0 S  68  4  0 W
+AY0Y,AY1Y,AY2Y,AY3Y,AY4Y,AY5Y,AY6Y,AY7Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+AY8Y,AY9Y,AZ0Y,AZ1Y,AZ2Y,AZ3Y,AZ4Y,AZ5Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+AZ6Y,AZ7Y,AZ8Y,AZ9Y,L20Y,L21Y,L22Y,L23Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L24Y,L25Y,L26Y,L27Y,L28Y,L29Y,L30Y,L31Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L32Y,L33Y,L34Y,L35Y,L36Y,L37Y,L38Y,L39Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L40Y,L41Y,L42Y,L43Y,L44Y,L45Y,L46Y,L47Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L48Y,L49Y,L50Y,L51Y,L52Y,L53Y,L54Y,L55Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L56Y,L57Y,L58Y,L59Y,L60Y,L61Y,L62Y,L63Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L64Y,L65Y,L66Y,L67Y,L68Y,L69Y,L70Y,L71Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L72Y,L73Y,L74Y,L75Y,L76Y,L77Y,L78Y,L79Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L80Y,L81Y,L82Y,L83Y,L84Y,L85Y,L86Y,L87Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L88Y,L89Y,L90Y,L91Y,L92Y,L93Y,L94Y,L95Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+L96Y,L97Y,L98Y,L99Y,LO0Y,LO1Y,LO2Y,LO3Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LO4Y,LO5Y,LO6Y,LO7Y,LO8Y,LO9Y,LP0Y,LP1Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LP2Y,LP3Y,LP4Y,LP5Y,LP6Y,LP7Y,LP8Y,LP9Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LQ0Y,LQ1Y,LQ2Y,LQ3Y,LQ4Y,LQ5Y,LQ6Y,LQ7Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LQ8Y,LQ9Y,LR0Y,LR1Y,LR2Y,LR3Y,LR4Y,LR5Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LR6Y,LR7Y,LR8Y,LR9Y,LS0Y,LS1Y,LS2Y,LS3Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LS4Y,LS5Y,LS6Y,LS7Y,LS8Y,LS9Y,LT0Y,LT1Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LT2Y,LT3Y,LT4Y,LT5Y,LT6Y,LT7Y,LT8Y,LT9Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LU0Y,LU1Y,LU2Y,LU3Y,LU4Y,LU5Y,LU6Y,LU7Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LU8Y,LU9Y,LV0Y,LV1Y,LV2Y,LV3Y,LV4Y,LV5Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LV6Y,LV7Y,LV8Y,LV9Y,LW0Y,LW1Y,LW2Y,LW3Y Neuquen-LU    124 16 13   3.00 38 57  0 S  68  4  0 W
+LW4Y,LW5Y,LW6Y,LW7Y,LW8Y,LW9Y Neuquen-LU              124 16 13   3.00 38 57  0 S  68  4  0 W
 LX Luxembourg-LX                                      125 27 14  -1.00 50  0  0 N   6  0  0 E @
 LY Lithuania-LY                                       194 29 15  -2.00 55 27  0 N  23 38  0 E @
 LZ Bulgaria-LZ                                        126 28 20  -2.00 42 50  0 N  25  5  0 E @
@@ -2667,23 +2668,23 @@ OE8 Karnten-OE                                        129 28 15  -1.00 46 46  0
 OE Karnten-OE8                                        129 28 15  -1.00 46 46  0 N  13 49  0 E
 OE9 Vorarlberg-OE                                     129 28 15  -1.00 47 15  0 N   9 54  0 E
 OE Vorarlberg-OE9                                     129 28 15  -1.00 47 15  0 N   9 54  0 E
-OH Finland-OH                                         130 18 15  -2.00 63 47  0 N  27  5  0 E @
-OF,OG,OI,OJ Finland-OH                                130 18 15  -2.00 63 47  0 N  27  5  0 E
+OH Finland-OH                                         130 18 15  -2.00 61 23  0 N  24 49  0 E @
+OF,OG,OI,OJ Finland-OH                                130 18 15  -2.00 61 23  0 N  24 49  0 E
 OH1 Turku-Pori-OH                                     130 18 15  -2.00 60 27  0 N  22 15  0 E
 OH Turku-Pori-OH1                                     130 18 15  -2.00 60 27  0 N  22 15  0 E
 OF1,OG1,OI1 Turku-Pori-OH                             130 18 15  -2.00 60 27  0 N  22 15  0 E
-OH2 Uusimaa-OH                                        130 18 15  -2.00 60 14  0 N  24 47  0 E
-OH Uusimaa-OH2                                        130 18 15  -2.00 60 14  0 N  24 47  0 E
-OF2,OG2,OI2 Uusimaa-OH                                130 18 15  -2.00 60 14  0 N  24 47  0 E
-OH3 Hame-OH                                           130 18 15  -2.00 61 32  0 N  23 45  0 E
-OH Hame-OH3                                           130 18 15  -2.00 61 32  0 N  23 45  0 E
-OF3,OG3,OI3 Hame-OH                                   130 18 15  -2.00 61 32  0 N  23 45  0 E
+OH2 Uudenmaa-OH                                       130 18 15  -2.00 60 14  0 N  24 47  0 E
+OH Uudenmaa-OH2                                       130 18 15  -2.00 60 14  0 N  24 47  0 E
+OF2,OG2,OI2 Uudenmaa-OH                               130 18 15  -2.00 60 14  0 N  24 47  0 E
+OH3 Haeme-OH                                          130 18 15  -2.00 61 32  0 N  23 45  0 E
+OH Haeme-OH3                                          130 18 15  -2.00 61 32  0 N  23 45  0 E
+OF3,OG3,OI3 Haeme-OH                                  130 18 15  -2.00 61 32  0 N  23 45  0 E
 OH4 Mikkeli-OH                                        130 18 15  -2.00 62 30  0 N  28  0  0 E
 OH Mikkeli-OH4                                        130 18 15  -2.00 62 30  0 N  28  0  0 E
 OF4,OG4,OI4 Mikkeli-OH                                130 18 15  -2.00 62 30  0 N  28  0  0 E
-OH5 Kymenlaakso-OH                                    130 18 15  -2.00 61  0  0 N  28 12  0 E
-OH Kymenlaakso-OH5                                    130 18 15  -2.00 61  0  0 N  28 12  0 E
-OF5,OG5,OI5 Kymenlaakso-OH                            130 18 15  -2.00 61  0  0 N  28 12  0 E
+OH5 Kymi-OH                                           130 18 15  -2.00 61  0  0 N  28 12  0 E
+OH Kymi-OH5                                           130 18 15  -2.00 61  0  0 N  28 12  0 E
+OF5,OG5,OI5 Kymi-OH                                   130 18 15  -2.00 61  0  0 N  28 12  0 E
 OH6 Keski-Suomi-Vaasa-OH                              130 18 15  -2.00 63  0  0 N  22  0  0 E
 OH Keski-Suomi-Vaasa-OH6                              130 18 15  -2.00 63  0  0 N  22  0  0 E
 OF6,OG6,OI6 Keski-Suomi-Vaasa-OH                      130 18 15  -2.00 63  0  0 N  22  0  0 E
@@ -2872,72 +2873,70 @@ S9/P Principe-S9                                      150 47 36   0.00  1 37  0
 S9 Principe-S9/P                                      150 47 36   0.00  1 37  0 N   7 24  0 E
 S9/S Sao-Tome-S9                                      150 47 36   0.00  0 14  0 N   6 36  0 E
 S9 Sao-Tome-S9/S                                      150 47 36   0.00  0 14  0 N   6 36  0 E
-SM Sweden-SM                                          151 18 14  -1.00 61 12  0 N  14 34  0 E @
-7S,8S,SA,SB,SC,SD,SE,SF,SG,SH,SI,SJ,SK,SL Sweden-SM   151 18 14  -1.00 61 12  0 N  14 34  0 E
-SM0 Stockholm-SM                                      151 18 14  -1.00 59 26  0 N  17 57  0 E
-SM Stockholm-SM0                                      151 18 14  -1.00 59 26  0 N  17 57  0 E
-7S0,8S0,SA0,SB0,SC0,SD0,SE0,SF0,SG0,SH0 Stockholm-SM  151 18 14  -1.00 59 26  0 N  17 57  0 E
-SI0,SJ0,SK0,SL0 Stockholm-SM                          151 18 14  -1.00 59 26  0 N  17 57  0 E
-SM1 Gotland-SM                                        151 18 14  -1.00 57 30  0 N  18 24  0 E
-SM Gotland-SM1                                        151 18 14  -1.00 57 30  0 N  18 24  0 E
-7S1,8S1,SA1,SB1,SC1,SD1,SE1,SF1,SG1,SH1 Gotland-SM    151 18 14  -1.00 57 30  0 N  18 24  0 E
-SI1,SJ1,SK1,SL1 Gotland-SM                            151 18 14  -1.00 57 30  0 N  18 24  0 E
-SM2 Norrbotten-Vasterbotten-SM                        151 18 14  -1.00 65  0  0 N  20  0  0 E
-SM Norrbotten-Vasterbotten-SM2                        151 18 14  -1.00 65  0  0 N  20  0  0 E
-7S2,8S2,SA2,SB2,SC2,SD2 Norrbotten-Vasterbotten-SM    151 18 14  -1.00 65  0  0 N  20  0  0 E
-SE2,SF2,SG2,SH2,SI2,SJ2 Norrbotten-Vasterbotten-SM    151 18 14  -1.00 65  0  0 N  20  0  0 E
-SK2,SL2 Norrbotten-Vasterbotten-SM                    151 18 14  -1.00 65  0  0 N  20  0  0 E
-SM3 Gavleborg-Jarntland-Vasternorrland-SM             151 18 14  -1.00 62  0  0 N  19  0  0 E
-SM Gavleborg-Jarntland-Vasternorrland-SM3             151 18 14  -1.00 62  0  0 N  19  0  0 E
-7S3,8S3,SA3 Gavleborg-Jarntland-Vasternorrland-SM     151 18 14  -1.00 62  0  0 N  19  0  0 E
-SB3,SC3,SD3 Gavleborg-Jarntland-Vasternorrland-SM     151 18 14  -1.00 62  0  0 N  19  0  0 E
-SE3,SF3,SG3 Gavleborg-Jarntland-Vasternorrland-SM     151 18 14  -1.00 62  0  0 N  19  0  0 E
-SH3,SI3,SJ3 Gavleborg-Jarntland-Vasternorrland-SM     151 18 14  -1.00 62  0  0 N  19  0  0 E
-SK3,SL3 Gavleborg-Jarntland-Vasternorrland-SM         151 18 14  -1.00 62  0  0 N  19  0  0 E
-SM4 Kopparberg-Orebo-Varmland-SM                      151 18 14  -1.00 59 18  0 N  15  5  0 E
-SM Kopparberg-Orebo-Varmland-SM4                      151 18 14  -1.00 59 18  0 N  15  5  0 E
-7S4,8S4,SA4,SB4,SC4,SD4 Kopparberg-Orebo-Varmland-SM  151 18 14  -1.00 59 18  0 N  15  5  0 E
-SE4,SF4,SG4,SH4,SI4,SJ4 Kopparberg-Orebo-Varmland-SM  151 18 14  -1.00 59 18  0 N  15  5  0 E
-SK4,SL4 Kopparberg-Orebo-Varmland-SM                  151 18 14  -1.00 59 18  0 N  15  5  0 E
-SM5 Ostergottland-Sodermanland-Uppsala-SM             151 18 14  -1.00 58 25  0 N  15 35  0 E
-SM Ostergottland-Sodermanland-Uppsala-SM5             151 18 14  -1.00 58 25  0 N  15 35  0 E
-7S5,8S5,SA5 Ostergottland-Sodermanland-Uppsala-SM     151 18 14  -1.00 58 25  0 N  15 35  0 E
-SB5,SC5,SD5 Ostergottland-Sodermanland-Uppsala-SM     151 18 14  -1.00 58 25  0 N  15 35  0 E
-SE5,SF5,SG5 Ostergottland-Sodermanland-Uppsala-SM     151 18 14  -1.00 58 25  0 N  15 35  0 E
-SH5,SI5,SJ5 Ostergottland-Sodermanland-Uppsala-SM     151 18 14  -1.00 58 25  0 N  15 35  0 E
-SK5,SL5 Ostergottland-Sodermanland-Uppsala-SM         151 18 14  -1.00 58 25  0 N  15 35  0 E
-SM6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SM Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM6  151 18 14  -1.00 57 45  0 N  12  0  0 E
-7S6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-8S6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SA6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SB6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SC6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SD6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SE6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SF6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SG6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SH6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SI6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SJ6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SK6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SL6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 45  0 N  12  0  0 E
-SM7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SM Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM7 151 18 14  -1.00 55 35  0 N  13  6  0 E
-7S7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-8S7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SA7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SB7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SC7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SD7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SE7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SF7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SG7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SH7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SI7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SJ7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SK7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
-SL7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 55 35  0 N  13  6  0 E
+SM Sweden-SM                                          151 18 14  -1.00 58 54  0 N  15 20  0 E @
+7S,8S,SA,SB,SC,SD,SE,SF,SG,SH,SI,SJ,SK,SL Sweden-SM   151 18 14  -1.00 58 54  0 N  15 20  0 E
+SM0 Stockholm-SM                                      151 18 14  -1.00 59 20  0 N  18 10  0 E
+SM Stockholm-SM0                                      151 18 14  -1.00 59 20  0 N  18 10  0 E
+7S0,8S0,SA0,SB0,SC0,SD0,SE0,SF0,SG0,SH0 Stockholm-SM  151 18 14  -1.00 59 20  0 N  18 10  0 E
+SI0,SJ0,SK0,SL0 Stockholm-SM                          151 18 14  -1.00 59 20  0 N  18 10  0 E
+SM1 Gotland-SM                                        151 18 14  -1.00 57 30  0 N  18 31  0 E
+SM Gotland-SM1                                        151 18 14  -1.00 57 30  0 N  18 31  0 E
+7S1,8S1,SA1,SB1,SC1,SD1,SE1,SF1,SG1,SH1 Gotland-SM    151 18 14  -1.00 57 30  0 N  18 31  0 E
+SI1,SJ1,SK1,SL1 Gotland-SM                            151 18 14  -1.00 57 30  0 N  18 31  0 E
+SM2 Norrbotten-Vasterbotten-SM                        151 18 14  -1.00 65 41  0 N  18 24  0 E
+SM Norrbotten-Vasterbotten-SM2                        151 18 14  -1.00 65 41  0 N  18 24  0 E
+7S2,8S2,SA2,SB2,SC2,SD2 Norrbotten-Vasterbotten-SM    151 18 14  -1.00 65 41  0 N  18 24  0 E
+SE2,SF2,SG2,SH2,SI2,SJ2 Norrbotten-Vasterbotten-SM    151 18 14  -1.00 65 41  0 N  18 24  0 E
+SK2,SL2 Norrbotten-Vasterbotten-SM                    151 18 14  -1.00 65 41  0 N  18 24  0 E
+SM3 Gavleborg-Jamtland-Vasternorrland-SM              151 18 14  -1.00 62  0  0 N  16 17  0 E
+SM Gavleborg-Jamtland-Vasternorrland-SM3              151 18 14  -1.00 62  0  0 N  16 17  0 E
+7S3,8S3,SA3,SB3 Gavleborg-Jamtland-Vasternorrland-SM  151 18 14  -1.00 62  0  0 N  16 17  0 E
+SC3,SD3,SE3,SF3 Gavleborg-Jamtland-Vasternorrland-SM  151 18 14  -1.00 62  0  0 N  16 17  0 E
+SG3,SH3,SI3,SJ3 Gavleborg-Jamtland-Vasternorrland-SM  151 18 14  -1.00 62  0  0 N  16 17  0 E
+SK3,SL3 Gavleborg-Jamtland-Vasternorrland-SM          151 18 14  -1.00 62  0  0 N  16 17  0 E
+SM4 Kopparberg-Orebro-Varmland-SM                     151 18 14  -1.00 59 47  0 N  14 43  0 E
+SM Kopparberg-Orebro-Varmland-SM4                     151 18 14  -1.00 59 47  0 N  14 43  0 E
+7S4,8S4,SA4,SB4,SC4 Kopparberg-Orebro-Varmland-SM     151 18 14  -1.00 59 47  0 N  14 43  0 E
+SD4,SE4,SF4,SG4,SH4 Kopparberg-Orebro-Varmland-SM     151 18 14  -1.00 59 47  0 N  14 43  0 E
+SI4,SJ4,SK4,SL4 Kopparberg-Orebro-Varmland-SM         151 18 14  -1.00 59 47  0 N  14 43  0 E
+SM5 Ostergotland-Sodermanland-Uppsala-SM              151 18 14  -1.00 59  9  0 N  16 28  0 E
+SM Ostergotland-Sodermanland-Uppsala-SM5              151 18 14  -1.00 59  9  0 N  16 28  0 E
+7S5,8S5,SA5,SB5 Ostergotland-Sodermanland-Uppsala-SM  151 18 14  -1.00 59  9  0 N  16 28  0 E
+SC5,SD5,SE5,SF5 Ostergotland-Sodermanland-Uppsala-SM  151 18 14  -1.00 59  9  0 N  16 28  0 E
+SG5,SH5,SI5,SJ5 Ostergotland-Sodermanland-Uppsala-SM  151 18 14  -1.00 59  9  0 N  16 28  0 E
+SK5,SL5 Ostergotland-Sodermanland-Uppsala-SM          151 18 14  -1.00 59  9  0 N  16 28  0 E
+SM6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SM Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM6  151 18 14  -1.00 57 58  0 N  11 54  0 E
+7S6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+8S6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SA6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SB6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SC6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SD6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SE6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SF6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SG6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SH6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SI6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SJ6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SK6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SL6 Alvsborg-Goteborg-och-Bohus-Halland-Skaraborg-SM  151 18 14  -1.00 57 58  0 N  11 54  0 E
+SM7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SM Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM7 151 18 14  -1.00 56 26  0 N  14  0  0 E
+7S7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+8S7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SA7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SB7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SC7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SD7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SE7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SF7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SG7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SH7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SI7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SJ7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SK7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
+SL7 Jonkoping-Kronoberg-Kalmar-Blekinge-Kristianstad-Malmohus-SM 151 18 14  -1.00 56 26  0 N  14  0  0 E
 SP Poland-SP                                          152 28 15  -1.00 52 17  0 N  18 40  0 E @
 3Z,HF,SN,SO,SQ,SR Poland-SP                           152 28 15  -1.00 52 17  0 N  18 40  0 E
 SP1 Zachodniopomorskie-SP                             152 28 15  -1.00 53 25  0 N  14 32  0 E
@@ -5014,10 +5013,10 @@ VE7 British-Columbia-VE                               197  2  3   7.00 49 32  0
 VE British-Columbia-VE7                               197  2  3   7.00 49 32  0 N 122 40  0 W
 CF7,CG7,CJ7,CK7,VA7,VB7,VC7,VG7 British-Columbia-VE   197  2  3   7.00 49 32  0 N 122 40  0 W
 VX7,XL7,XM7 British-Columbia-VE                       197  2  3   7.00 49 32  0 N 122 40  0 W
-VE8 Northwest-Territories-VE                          197  3  1   7.00 62 27  0 N 147 46  0 W
-VE Northwest-Territories-VE8                          197  3  1   7.00 62 27  0 N 147 46  0 W
-CF8,CG8,CJ8,CK8,VA8,VB8,VC8 Northwest-Territories-VE  197  3  1   7.00 62 27  0 N 147 46  0 W
-VG8,VX8,XL8,XM8 Northwest-Territories-VE              197  3  1   7.00 62 27  0 N 147 46  0 W
+VE8 Northwest-Territories-VE                          197  3  1   7.00 62 27  0 N 114 24  0 W
+VE Northwest-Territories-VE8                          197  3  1   7.00 62 27  0 N 114 24  0 W
+CF8,CG8,CJ8,CK8,VA8,VB8,VC8 Northwest-Territories-VE  197  3  1   7.00 62 27  0 N 114 24  0 W
+VG8,VX8,XL8,XM8 Northwest-Territories-VE              197  3  1   7.00 62 27  0 N 114 24  0 W
 VE9 New-Brunswick-VE                                  197  9  5   4.00 45 45  0 N  65 48  0 W
 VE New-Brunswick-VE9                                  197  9  5   4.00 45 45  0 N  65 48  0 W
 CF9,CG9,CJ9,CK9,VA9,VB9,VC9,VG9,VX9 New-Brunswick-VE  197  9  5   4.00 45 45  0 N  65 48  0 W
@@ -5040,36 +5039,33 @@ VY2 Prince-Edward-Island-VE                           197  9  5   4.00 46 22  0
 VE Prince-Edward-Island-VY2                           197  9  5   4.00 46 22  0 N  63 26  0 W
 CI2,CZ2,VF2,XK2,XO2 Prince-Edward-Island-VE           197  9  5   4.00 46 22  0 N  63 26  0 W
 VK Australia-VK                                       198 59 30 -10.00 23 42  0 S 132 20  0 E @
-AX,VH,VI,VJ,VL,VM,VN,VZ Australia-VK                  198 59 30 -10.00 23 42  0 S 132 20  0 E
+AX,VI,VJ,VL Australia-VK                              198 59 30 -10.00 23 42  0 S 132 20  0 E
 VK1 Australian-Capital-Territory-VK                   198 59 30 -10.00 35 30  0 S 149  0  0 E
 VK Australian-Capital-Territory-VK1                   198 59 30 -10.00 35 30  0 S 149  0  0 E
-AX1,VH1,VI1,VJ1,VL1 Australian-Capital-Territory-VK   198 59 30 -10.00 35 30  0 S 149  0  0 E
-VM1,VN1,VZ1 Australian-Capital-Territory-VK           198 59 30 -10.00 35 30  0 S 149  0  0 E
+AX1,VI1,VJ1,VL1 Australian-Capital-Territory-VK       198 59 30 -10.00 35 30  0 S 149  0  0 E
 VK2 New-South-Wales-VK                                198 59 30 -10.00 34  0  0 S 151  0  0 E
 VK New-South-Wales-VK2                                198 59 30 -10.00 34  0  0 S 151  0  0 E
-AX2,VH2,VI2,VJ2,VL2,VM2,VN2,VZ2 New-South-Wales-VK    198 59 30 -10.00 34  0  0 S 151  0  0 E
+AX2,VI2,VJ2,VL2 New-South-Wales-VK                    198 59 30 -10.00 34  0  0 S 151  0  0 E
 VK3 Victoria-VK                                       198 59 30 -10.00 38  0  0 S 145  0  0 E
 VK Victoria-VK3                                       198 59 30 -10.00 38  0  0 S 145  0  0 E
-AX3,VH3,VI3,VJ3,VL3,VM3,VN3,VZ3 Victoria-VK           198 59 30 -10.00 38  0  0 S 145  0  0 E
+AX3,VI3,VJ3,VL3 Victoria-VK                           198 59 30 -10.00 38  0  0 S 145  0  0 E
 VK4 Queensland-VK                                     198 55 30 -10.00 27 30  0 S 153  0  0 E
 VK Queensland-VK4                                     198 55 30 -10.00 27 30  0 S 153  0  0 E
-AX4,VH4,VI4,VJ4,VL4,VM4,VN4,VZ4 Queensland-VK         198 55 30 -10.00 27 30  0 S 153  0  0 E
+AX4,VI4,VJ4,VL4 Queensland-VK                         198 55 30 -10.00 27 30  0 S 153  0  0 E
 VK5 South-Australia-VK                                198 59 30  -9.00 34 54  0 S 138 36  0 E
 VK South-Australia-VK5                                198 59 30  -9.00 34 54  0 S 138 36  0 E
-AX5,VH5,VI5,VJ5,VL5,VM5,VN5,VZ5 South-Australia-VK    198 59 30  -9.00 34 54  0 S 138 36  0 E
+AX5,VI5,VJ5,VL5 South-Australia-VK                    198 59 30  -9.00 34 54  0 S 138 36  0 E
 VK6 Western-Australia-VK                              198 58 29  -8.00 32  0  0 S 115 54  0 E
 VK Western-Australia-VK6                              198 58 29  -8.00 32  0  0 S 115 54  0 E
-AX6,VH6,VI6,VJ6,VL6,VM6,VN6,VZ6 Western-Australia-VK  198 58 29  -8.00 32  0  0 S 115 54  0 E
+AX6,VI6,VJ6,VL6 Western-Australia-VK                  198 58 29  -8.00 32  0  0 S 115 54  0 E
 VK7 Tasmania-VK                                       198 59 30 -10.00 42 54  0 S 147 18  0 E
 VK Tasmania-VK7                                       198 59 30 -10.00 42 54  0 S 147 18  0 E
-AX7,VH7,VI7,VJ7,VL7,VM7,VN7,VZ7 Tasmania-VK           198 59 30 -10.00 42 54  0 S 147 18  0 E
+AX7,VI7,VJ7,VL7 Tasmania-VK                           198 59 30 -10.00 42 54  0 S 147 18  0 E
 VK8 Northern-Territory-VK                             198 55 29  -9.00 12 30  0 S 130 54  0 E
 VK Northern-Territory-VK8                             198 55 29  -9.00 12 30  0 S 130 54  0 E
-AX8,VH8,VI8,VJ8,VL8,VM8,VN8 Northern-Territory-VK     198 55 29  -9.00 12 30  0 S 130 54  0 E
-VZ8 Northern-Territory-VK                             198 55 29  -9.00 12 30  0 S 130 54  0 E
+AX8,VI8,VJ8,VL8 Northern-Territory-VK                 198 55 29  -9.00 12 30  0 S 130 54  0 E
 VK9N Norfolk-Island-VK9N                              203 60 32 -11.50 29  2  0 S 167 56  0 E @
-AX9,VH9,VI9,VJ9,VK9,VL9,VM9,VN9 Norfolk-Island-VK9N   203 60 32 -11.50 29  2  0 S 167 56  0 E
-VZ9 Norfolk-Island-VK9N                               203 60 32 -11.50 29  2  0 S 167 56  0 E
+AX9,VI9,VK9 Norfolk-Island-VK9N                       203 60 32 -11.50 29  2  0 S 167 56  0 E
 VP2E Anguilla-VP2E                                    207 11  8   4.00 18 14  0 N  63  0  0 W @
 VP2 Anguilla-VP2E                                     207 11  8   4.00 18 14  0 N  63  0  0 W
 VP2M Montserrat-VP2M                                  208 11  8   4.00 16 45  0 N  62 11  0 W @
@@ -5826,28 +5822,21 @@ VK0M Macquarie-Island-VK0M                            206 60 30 -10.00 54 36  0
 VK0 Macquarie-Island-VK0M                             206 60 30 -10.00 54 36  0 S 158 53  0 E
 VK9C Cocos-Keeling-Islands-VK9C                       201 54 29  -6.50 12  9  0 S  96 49  0 E @
 VK9 Cocos-Keeling-Islands-VK9C                        201 54 29  -6.50 12  9  0 S  96 49  0 E
-AX9C,AX9Y,VH9C,VH9Y,VI9C Cocos-Keeling-Islands-VK9C   201 54 29  -6.50 12  9  0 S  96 49  0 E
-VI9Y,VJ9C,VJ9Y,VK9FC Cocos-Keeling-Islands-VK9C       201 54 29  -6.50 12  9  0 S  96 49  0 E
-VK9KC,VK9Y,VK9ZY,VL9C Cocos-Keeling-Islands-VK9C      201 54 29  -6.50 12  9  0 S  96 49  0 E
-VL9Y,VM9C,VM9Y,VN9C,VN9Y Cocos-Keeling-Islands-VK9C   201 54 29  -6.50 12  9  0 S  96 49  0 E
-VZ9C,VZ9Y Cocos-Keeling-Islands-VK9C                  201 54 29  -6.50 12  9  0 S  96 49  0 E
+AX9C,AX9Y,VI9C,VI9Y,VK9FC Cocos-Keeling-Islands-VK9C  201 54 29  -6.50 12  9  0 S  96 49  0 E
+VK9KC,VK9Y,VK9ZY,VZ9Y Cocos-Keeling-Islands-VK9C      201 54 29  -6.50 12  9  0 S  96 49  0 E
 VK9L Lord-Howe-Island-VK9L                            199 60 30 -10.50 31 33  0 S 159  5  0 E @
 VK9 Lord-Howe-Island-VK9L                             199 60 30 -10.50 31 33  0 S 159  5  0 E
-AX9L,VH9L,VI9L,VJ9L,VK9FL Lord-Howe-Island-VK9L       199 60 30 -10.50 31 33  0 S 159  5  0 E
-VK9ZL,VL9L,VM9L,VN9L,VZ9L Lord-Howe-Island-VK9L       199 60 30 -10.50 31 33  0 S 159  5  0 E
+AX9L,VI9L,VK9FL,VK9ZL,VZ9L Lord-Howe-Island-VK9L      199 60 30 -10.50 31 33  0 S 159  5  0 E
 VK9M Mellish-Reef-VK9M                                202 56 30 -10.00 17 24  0 S 155 51  0 E @
 VK9 Mellish-Reef-VK9M                                 202 56 30 -10.00 17 24  0 S 155 51  0 E
-AX9M,VH9M,VI9M,VJ9M,VL9M,VM9M,VN9M Mellish-Reef-VK9M  202 56 30 -10.00 17 24  0 S 155 51  0 E
-VZ9M Mellish-Reef-VK9M                                202 56 30 -10.00 17 24  0 S 155 51  0 E
+AX9M,VI9M,VZ9M Mellish-Reef-VK9M                      202 56 30 -10.00 17 24  0 S 155 51  0 E
 VK9W Willis-Island-VK9W                               204 55 30 -10.00 16 13  0 S 150  1  0 E @
 VK9 Willis-Island-VK9W                                204 55 30 -10.00 16 13  0 S 150  1  0 E
-AX9W,AX9Z,VH9W,VH9Z,VI9W,VI9Z Willis-Island-VK9W      204 55 30 -10.00 16 13  0 S 150  1  0 E
-VJ9W,VJ9Z,VK9FW,VK9Z,VL9W,VL9Z Willis-Island-VK9W     204 55 30 -10.00 16 13  0 S 150  1  0 E
-VM9W,VM9Z,VN9W,VN9Z,VZ9W,VZ9Z Willis-Island-VK9W      204 55 30 -10.00 16 13  0 S 150  1  0 E
+AX9W,AX9Z,VI9W,VI9Z,VK9FW,VK9Z Willis-Island-VK9W     204 55 30 -10.00 16 13  0 S 150  1  0 E
+VZ9W Willis-Island-VK9W                               204 55 30 -10.00 16 13  0 S 150  1  0 E
 VK9X Christmas-Island-VK9X                            200 54 29  -7.00 10 29  0 S 105 38  0 E @
 VK9 Christmas-Island-VK9X                             200 54 29  -7.00 10 29  0 S 105 38  0 E
-AX9X,VH9X,VI9X,VJ9X,VK9FX Christmas-Island-VK9X       200 54 29  -7.00 10 29  0 S 105 38  0 E
-VK9KX,VL9X,VM9X,VN9X,VZ9X Christmas-Island-VK9X       200 54 29  -7.00 10 29  0 S 105 38  0 E
+AX9X,VI9X,VK9FX,VK9KX,VZ9X Christmas-Island-VK9X      200 54 29  -7.00 10 29  0 S 105 38  0 E
 VP8/G South-Georgia-Island-VP8/G                      211 73 13   2.00 54 29  0 S  37  5  0 W @
 VP8 South-Georgia-Island-VP8/G                        211 73 13   2.00 54 29  0 S  37  5  0 W
 VP8/H South-Shetland-Islands-VP8/H                    214 73 13   4.00 62  5  0 S  58 40  0 W @
index c35d21ca1517d7d286185fbb1d1426d685793397..a0bc6ab9d9e7c3e1400709e9473037e745fd890e 100644 (file)
@@ -128,6 +128,8 @@ $count = 0;
                  next_pc92_update => '9,Next PC92 Update,atime',
                  next_pc92_keepalive => '9,Next PC92 KeepAlive,atime',
                  hostname => '0,Hostname',
+                 isslugged => '9,Still Slugged,yesno',
+                 sluggedpcs => '9,Slugged PCxx Queue,parray',
                 );
 
 $maxerrors = 20;                               # the maximum number of concurrent errors allowed before disconnection
@@ -162,12 +164,14 @@ sub alloc
                $user->new_buddies unless $user->buddies;
                $self->{group} = $user->group;
                $self->{sort} = $user->sort;
+               $self->{width} = $user->width;
        }
        $self->{startt} = $self->{t} = $main::systime;
        $self->{state} = 0;
        $self->{oldstate} = 0;
        $self->{lang} = $main::lang if !$self->{lang};
        $self->{func} = "";
+       $self->{width} ||=  80;
 
        # add in all the dxcc, itu, zone info
        my @dxcc = Prefix::extract($call);
@@ -718,6 +722,8 @@ sub process_one
                        $self->enhanced($line);
                } elsif ($sort eq 'A' || $sort eq 'O' || $sort eq 'W') {
                        $self->start($line, $sort);
+               } elsif ($sort eq 'C') {
+                       $self->width($line); # change number of columns
                } elsif ($sort eq 'Z') {
                        $self->disconnect;
                } elsif ($sort eq 'D') {
@@ -759,6 +765,20 @@ sub error_handler
 }
 
 
+sub isregistered
+{
+       my $self = shift;
+
+       # the sysop is registered!
+       return 1 if $self->{call} eq $main::myalias || $self->{call} eq $main::mycall;
+       
+       if ($main::reqreg) {
+               return $self->{registered};
+       } else {
+               return 1;
+       }
+}
+
 #no strict;
 sub AUTOLOAD
 {
index bef5626d9e30a998aabbb6ccf70115a77362bdc2..00c82125097dcea4fe077ff4bafc3322d3ea8ccd 100644 (file)
@@ -111,7 +111,8 @@ sub start
        my $pagelth = $user->pagelth;
        $pagelth = $default_pagelth unless defined $pagelth;
        $self->{pagelth} = $pagelth;
-       ($self->{width}) = $line =~ /width=(\d+)/; $line =~ s/\s*width=\d+\s*//;
+       ($self->{width}) = $line =~ /\s*width=(\d+)/; $line =~ s/\s*width=\d+//;
+       $self->{enhanced} = $line =~ /\s+enhanced/; $line =~ s/\s*enhanced//;
        if ($line =~ /host=/) {
                my ($h) = $line =~ /host=(\d+\.\d+\.\d+\.\d+)/;
                $line =~ s/\s*host=\d+\.\d+\.\d+\.\d+// if $h;
@@ -124,7 +125,7 @@ sub start
        $self->{width} = 80 unless $self->{width} && $self->{width} > 80;
        $self->{consort} = $line;       # save the connection type
 
-       LogDbg('DXCommand', "$call connected from $self->{hostname}");
+       LogDbg('DXCommand', "$call connected from $self->{hostname} cols $self->{width}" . ($self->{enhanced}?" enhanced":''));
 
        # set some necessary flags on the user if they are connecting
        $self->{beep} = $user->wantbeep;
@@ -147,13 +148,16 @@ sub start
        $user->wantusstate(0) unless defined $user->{wantusstate};
 
        # sort out registration
-       if ($main::reqreg == 1) {
-               $self->{registered} = $user->registered;
-       } elsif ($main::reqreg == 2) {
+       if ($main::reqreg == 2) {
                $self->{registered} = !$user->registered;
        } else {
-               $self->{registered} = 1;
-       }
+               $self->{registered} = $user->registered;
+       } 
+
+       # establish slug queue, if required
+       $self->{sluggedpcs} = [];
+       $self->{isslugged} = $DXProt::pc92_slug_changes + $DXProt::last_pc92_slug + 5 if $DXProt::pc92_slug_changes;
+       $self->{isslugged} = 0 if $self->{priv} > 0 || $user->registered || $user->homenode eq $main::mycall;
 
        # send the relevant MOTD
        $self->send_motd;
@@ -609,11 +613,17 @@ sub process
                }
                ++$users;
                $maxusers = $users if $users > $maxusers;
-       }
 
-       while (my ($k, $v) = each %nothereslug) {
-               if ($main::systime >= $v + 300) {
-                       delete $nothereslug{$k};
+               if ($dxchan->{isslugged} && $main::systime > $dxchan->{isslugged}) {
+                       foreach my $ref (@{$dxchan->{sluggedpcs}}) {
+                               if ($ref->[0] == 61) {
+                                       Spot::add(@{$ref->[2]});
+                                       DXProt::send_dx_spot($dxchan, $ref->[1], @{$ref->[2]});
+                               }
+                       }
+
+                       $dxchan->{isslugged} = 0;
+                       $dxchan->{sluggedpcs} = [];
                }
        }
 
@@ -959,7 +969,7 @@ sub announce
                $buf = dd(['ann', $to, $target, $text, @_])
        } else {
                $buf = "$to$target de $_[0]: $text";
-               $buf =~ s/\%5E/^/g;
+               #$buf =~ s/\%5E/^/g;
                $buf .= "\a\a" if $self->{beep};
        }
        $self->local_send($target eq 'WX' ? 'W' : 'N', $buf);
@@ -984,7 +994,7 @@ sub chat
                $buf = dd(['chat', $to, $target, $text, @_])
        } else {
                $buf = "$target de $_[0]: $text";
-               $buf =~ s/\%5E/^/g;
+               #$buf =~ s/\%5E/^/g;
                $buf .= "\a\a" if $self->{beep};
        }
        $self->local_send('C', $buf);
@@ -995,40 +1005,54 @@ sub format_dx_spot
        my $self = shift;
 
        my $t = ztime($_[2]);
-       my $loc = '';
-       my $clth = 30;
-       #       --$clth if $self->{consort} eq 'local';
+       my ($slot1, $slot2) = ('', '');
        
+       my $clth = 30 + $self->{width} - 80;    # allow comment to grow according the screen width 
        my $comment = substr (($_[3] || ''), 0, $clth);
+       $comment =~ s/\t/ /g;
        $comment .= ' ' x ($clth - (length($comment)));
        
-    if ($self->{user}->wantgrid) {
+    if (!$slot1 && $self->{user}->wantgrid) {
                my $ref = DXUser::get_current($_[1]);
                if ($ref && $ref->qra) {
-                       my $cloc = ' ' . substr($ref->qra, 0, 4);
-                       $comment = substr $comment, 0,  ($clth - (length($comment)+length($cloc)));
-                       $comment .= $cloc;
+                       $slot1 = ' ' . substr($ref->qra, 0, 4);
                }
+       }
+       if (!$slot1 && $self->{user}->wantusstate) {
+               $slot1 = " $_[12]" if $_[12];
+       }
+       unless ($slot1) {
+               if ($self->{user}->wantdxitu) {
+                       $slot1 = sprintf(" %2d", $_[8]) if defined $_[8]; 
+               } elsif ($self->{user}->wantdxcq) {
+                       $slot1 = sprintf(" %2d", $_[9]) if defined $_[9];
+               }
+       }
+       $comment = substr($comment, 0,  $clth-length($slot1)) . $slot1 if $slot1;
+       
+    if (!$slot2 && $self->{user}->wantgrid) {
                my $origin = $_[4];
                $origin =~ s/-#$//;                     # sigh......
-               $ref = DXUser::get_current($origin);
+               my $ref = DXUser::get_current($origin);
                if ($ref && $ref->qra) {
-                       $loc = ' ' . substr($ref->qra, 0, 4);
+                       $slot2 = ' ' . substr($ref->qra, 0, 4);
+               }
+       }
+       if (!$slot2 && $self->{user}->wantusstate) {
+               $slot2 = " $_[13]" if $_[13];
+       }
+       unless ($slot2) {
+               if ($self->{user}->wantdxitu) {
+                       $slot2 = sprintf(" %2d", $_[10]) if defined $_[10]; 
+               } elsif ($self->{user}->wantdxcq) {
+                       $slot2 = sprintf(" %2d", $_[11]) if defined $_[11]; 
                }
-       } elsif ($self->{user}->wantdxitu) {
-               $loc = ' ' . sprintf("%2d", $_[10]) if defined $_[10];
-               $comment = substr($comment, 0,  $clth-3) . ' ' . sprintf("%2d", $_[8]) if defined $_[8]; 
-       } elsif ($self->{user}->wantdxcq) {
-               $loc = ' ' . sprintf("%2d", $_[11]) if defined $_[11];
-               $comment = substr($comment, 0, $clth-3) . ' ' . sprintf("%2d", $_[9]) if defined $_[9]; 
-       } elsif ($self->{user}->wantusstate) {
-               $loc = ' ' . $_[13] if $_[13];
-               $comment = substr($comment, 0,  $clth-3) . ' ' . $_[12] if $_[12]; 
        }
 
-       return sprintf "DX de %-9.9s%10.1f %-12.12s %-s $t$loc", "$_[4]:", $_[0], $_[1], $comment;
+       return sprintf "DX de %-8.8s%10.1f  %-12.12s %-s $t$slot2", "$_[4]:", $_[0], $_[1], $comment;
 }
 
+
 # send a dx spot
 sub dx_spot
 {
@@ -1070,7 +1094,7 @@ sub dx_spot
        } else {
                $buf = $self->format_dx_spot(@_);
                $buf .= "\a\a" if $self->{beep};
-               $buf =~ s/\%5E/^/g;
+               #$buf =~ s/\%5E/^/g;
        }
 
        $self->local_send('X', $buf);
@@ -1273,7 +1297,7 @@ sub send_motd
        my $self = shift;
        my $motd;
 
-       unless ($self->{registered}) {
+       unless ($self->isregistered) {
                $motd = "${main::motd}_nor_$self->{lang}";
                $motd = "${main::motd}_nor" unless -e $motd;
        }
@@ -1335,11 +1359,16 @@ sub spawn_cmd
                         sub {
                                 my $subpro = shift;
                                 if (isdbg('progress')) {
-                                        my $s = qq{line: "$line"};
+                                        my $s = qq{$call line: "$line"};
                                         $s .= ", args: " . join(', ', map { defined $_ ? qq{'$_'} : q{'undef'} } @$args) if $args && @$args;
                                         dbg($s);
                                 }
-                                eval { @out = $cmdref->(@$args); };
+                                eval {
+                                        ++$self->{_in_sub_process};
+                                        dbg "\$self->{_in_sub_process} = $self->{_in_sub_process}";
+                                        @out = $cmdref->(@$args);
+                                        --$self->{_in_sub_process} if $self->{_in_sub_process} > 0;
+                                };
                                 if ($@) {
                                         DXDebug::dbgprintring(25);
                                         push @out, DXDebug::shortmess($@);
@@ -1379,5 +1408,6 @@ sub user_count
 {
        return ($users, $maxusers);
 }
+
 1;
 __END__
index c31e46f51d9a4ea47fdc4c885e03ead835ce4d47..4cfabc0eb07ade4c866ce8a1eded6296299b231d 100644 (file)
@@ -68,7 +68,7 @@ sub cread
                $line++;
                chomp $l;
                next if $l =~ /^\s*#/o or $l =~ /^\s*$/o;
-               my ($min, $hour, $mday, $month, $wday, $cmd) = $l =~ /^\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)$/o;
+               my ($min, $hour, $mday, $month, $wday, $cmd) = $l =~ /^\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)$/;
                next unless defined $min;
                my $ref = bless {};
                my $err = '';
@@ -110,7 +110,7 @@ sub parse
        # handle '*' values
        if ($val eq '*') {
                $ref->{$sort} = 0;
-               return;
+               return '';
        }
 
        # handle comma delimited values
@@ -131,7 +131,7 @@ sub parse
        }
        $ref->{$sort} = \@req;
        
-       return;
+       return '';
 }
 
 # process the cronjobs
@@ -159,7 +159,7 @@ sub process
                                
                                if ($cron->{cmd}) {
                                        dbg("cron: $min $hour $mday $mon $wday -> doing '$cron->{cmd}'") if isdbg('cron');
-                                       eval "$cron->{cmd}";
+                                       eval $cron->{cmd};
                                        dbg("cron: cmd error $@") if $@ && isdbg('cron');
                                }
                        }
@@ -288,14 +288,15 @@ sub spawn_cmd
        my $fc = DXSubprocess->new();
        $fc->run(
                         sub {
-                                $main::me->{_nospawn} = 1;
+                                ++$main::me->{_nospawn};
                                 my @res = $main::me->run_cmd($line);
-                                delete $main::me->{_nospawn};
 #                               diffms("DXCron spawn_cmd 1", $line, $t0, scalar @res) if isdbg('chan');
                                 return @res;
                         },
                         sub {
                                 my ($fc, $err, @res) = @_; 
+                                --$main::me->{_nospawn};
+                                delete $main::me->{_nospawn} if exists $main::me->{_nospawn} && $main::me->{_nospawn} <= 0;
                                 if ($err) {
                                         my $s = "DXCron::spawn_cmd: error $err";
                                         dbg($s);
@@ -326,10 +327,10 @@ sub rcmd
 sub run_cmd
 {
        my $line = shift;
-       my @in = $main::me->run_cmd($line);
        dbg("DXCron::run_cmd: $line") if isdbg('cron');
+       my @in = $main::me->run_cmd($line);
        for (@in) {
-               s/\s*$//og;
+               s/\s*$//;
                dbg("DXCron::cmd out: $_") if isdbg('cron');
        }
 }
index 9084062c0226020bd9c7aea2f32e2354b466ee48..c2e5f28f1adb81a009f087a067e26f1f0b22debb 100644 (file)
@@ -104,7 +104,7 @@ sub dbgtrace
                last if $pkg =~ /Mojo/;
 #              say "*** in dbgtrace $i after mojo";
                $_isdbg = 'trace';
-               dbg("Stack ($i): $pkg::$subr in $fn line: $l");
+               dbg("Stack ($i): ${pkg}::$subr in $fn line: $l");
        }
        $_isdbg = '';
 }
@@ -135,6 +135,7 @@ sub dbg
 
 sub dbginit
 {
+       my $basename = shift || 'debug';
        $callback = shift;
        
        # add sig{__DIE__} handling
@@ -161,7 +162,7 @@ sub dbginit
                }
        }
 
-       $fp = DXLog::new('debug', 'dat', 'd');
+       $fp = DXLog::new($basename, 'dat', 'd');
        dbgclearring();
 }
 
index 1a26f1aa4f3a694a9781aa1ea902dc4afea7edc3..1091f2f10a07180f75fcff05ed906ff02cb93c4e 100644 (file)
@@ -11,6 +11,7 @@ use warnings;
 
 use JSON;
 use Data::Structure::Util qw(unbless);
+use Scalar::Util qw(blessed);
 use DXDebug;
 use DXUtil;
 
@@ -25,14 +26,13 @@ sub encode
 {
        my $json = shift;
        my $ref = shift;
-       my $name = ref $ref;
-       
-       unbless($ref) if $name && $name ne 'HASH';
+       my $name = blessed $ref;
+       unbless($ref) if $name;
        my $s;
        
        eval {$s = $json->SUPER::encode($ref) };
        if ($s && !$@) {
-               bless $ref, $name if $name && $name ne 'HASH';
+               bless $ref, $name if $name;
                return $s;
        }
        else {
index 0d99eb41804a740a9d0e95a18c13cabdf2a93b36..244402d6962493e685edb147cd734e83427284f3 100644 (file)
@@ -60,7 +60,7 @@ sub print
        }
        if ($who) {
                $hint .= ' && ' if $hint;
-               $hint .= q{m{\Q$who\E}oi};
+               $hint .= q{m{\Q$who\E}i};
        } 
        $hint = "next unless $hint" if $hint;
        $hint .= "; next unless m{^\\d+\\^$pattern\\^}" if $pattern;
index 38d89bbc7d4b772c5c985ac3f9b73b4a72cf5a3f..174a98a4792697ee7513f8298c03e7710b97d671 100644 (file)
@@ -216,7 +216,7 @@ sub handle_29
        
        my $ref = get_fwq($fromnode, $stream);
        if ($ref) {
-               $_[4] =~ s/\%5E/^/g;
+               $_[4] =~ s/\%5E/~/g;
                if (@{$ref->{lines}}) {
                        push @{$ref->{lines}}, $_[4];
                } else {
index b5606eff609d9d61896f2b8558a1bb0444efef91..95940e58690084d097dfcf9ed4006c38921faab0 100644 (file)
@@ -49,7 +49,7 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim
                        %pc92_find $pc92_find_timeout $pc92_short_update_period
                        $next_pc92_obs_timeout $pc92_slug_changes $last_pc92_slug
                        $pc92_extnode_update_period $pc50_interval
-                       $pc92_keepalive_period
+                       $pc92_keepalive_period $senderverify
                   );
 
 $pc11_max_age = 1*3600;                        # the maximum age for an incoming 'real-time' pc11
@@ -82,6 +82,8 @@ $pc92_extnode_update_period = 1*60*60; # the update period for external nodes
 $pc92_keepalive_period = 1*60*60;      # frequency of PC92 K (keepalive) records
 %pc92_find = ();                               # outstanding pc92 find operations
 $pc92_find_timeout = 30;               # maximum time to wait for a reply
+$senderverify = 1;                             # 1 = check spotter is on node it says it is and check ip address if available
+                                # 2 = do 1 and dump if check 
 
 
 @checklist =
@@ -537,6 +539,8 @@ sub process
        if ($main::systime - 3600 > $last_hour) {
                $last_hour = $main::systime;
        }
+
+    pc11_process();
 }
 
 #
@@ -561,6 +565,7 @@ sub send_dx_spot
        foreach $dxchan (@dxchan) {
                next if $dxchan == $main::me;
                next if $dxchan == $self && $self->is_node;
+               next if $dxchan == $self;
                next if $dxchan->is_rbn;
                if ($line =~ /PC61/ && !($dxchan->is_spider || $dxchan->is_user)) {
                        unless ($pc11) {
@@ -928,7 +933,7 @@ sub gen_my_pc92_config
                clear_pc92_changes();           # remove any slugged data, we are generating it as now
                my @dxchan = grep { $_->call ne $main::mycall && !$_->{isolate} } DXChannel::get_all();
                dbg("ROUTE: all dxchan: " . join(',', map{$_->{call}} @dxchan)) if isdbg('routelow');
-               my @localnodes = map { my $r = Route::get($_->{call}); $r ? $r : () } @dxchan;
+               my @localnodes = map { my $r = Route::get($_->{call}); ($_->is_node || $_->is_user) && $r ? $r : () } @dxchan;
                dbg("ROUTE: localnodes: " . join(',', map{$_->{call}} @localnodes)) if isdbg('routelow');
                return pc92c($node, @localnodes);
        } else {
index c0711ceee0820cecb59d484971a730c502a763e6..b22fea82586a2bd75f75a48bb9f922a50728e89c 100644 (file)
@@ -44,17 +44,20 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim
                        $eph_pc15_restime $pc9x_past_age $pc9x_dupe_age
                        $pc10_dupe_age $pc92_slug_changes $last_pc92_slug
                        $pc92Ain $pc92Cin $pc92Din $pc92Kin $pc9x_time_tolerance
-                       $pc92filterdef
+                       $pc92filterdef $senderverify
                   );
 
 $pc9x_dupe_age = 60;                   # catch loops of circular (usually) D records
 $pc10_dupe_age = 45;                   # just something to catch duplicate PC10->PC93 conversions
-$pc92_slug_changes = 60*5;             # slug any changes going outward for this long
+$pc92_slug_changes = 60*1;             # slug any changes going outward for this long
 $last_pc92_slug = 0;                   # the last time we sent out any delayed add or del PC92s
 $pc9x_time_tolerance = 15*60;  # the time on a pc9x is allowed to be out by this amount
 $pc9x_past_age = (122*60)+             # maximum age in the past of a px9x (a config record might be the only
-       $pc9x_time_tolerance;           # thing a node might send - once an hour and we allow an extra hour for luck)
+$pc9x_time_tolerance;           # thing a node might send - once an hour and we allow an extra hour for luck)
                                 # this is actually the partition between "yesterday" and "today" but old.
+$senderverify = 1;                             # 1 - check for forged PC11 or PC61.
+                                # 2 - if forged, dump them.
+
 
 $pc92filterdef = bless ([
                          # tag, sort, field, priv, special parser
@@ -65,6 +68,10 @@ $pc92filterdef = bless ([
                          ['zone', 'nz', 3],
                         ], 'Filter::Cmd');
 
+our %pc11q;
+# this is a place to park an incoming PC11 in the sure and certain hope that
+# a PC61 will be along soon. This has the side benefit that it will delay a
+# a PC11 for one second - assuming that it is not removed by a PC61 version
 
 # incoming talk commands
 sub handle_10
@@ -125,6 +132,8 @@ sub handle_10
        $main::me->normal(pc93($to, $from, $via, $pc->[3], $pc->[6]));
 }
 
+my $last;
+
 # DX Spot handling
 sub handle_11
 {
@@ -169,10 +178,6 @@ sub handle_11
                dbg("PCPROT: Bad Spotter $pc->[6], dropped") if isdbg('chanerr');
                return;
        }
-#      unless (is_ipaddr($pc->[8]) || DXUser::get_current($pc->[6])) {
-#              dbg("PCPROT: Unknown Spotter $pc->[6], dropped") if isdbg('chanerr');
-#              return;
-#      }
 
        # convert the date to a unix date
        my $d = cltounix($pc->[3], $pc->[4]);
@@ -202,8 +207,10 @@ sub handle_11
                        return;
                }
        }
+       
 
        my @spot = Spot::prepare($pc->[1], $pc->[2], $d, $pc->[5], $nossid, $pc->[7], $pc->[8]);
+
        # global spot filtering on INPUT
        if ($self->{inspotsfilter}) {
                my ($filter, $hops) = $self->{inspotsfilter}->it(@spot);
@@ -216,11 +223,41 @@ sub handle_11
        # this goes after the input filtering, but before the add
        # so that if it is input filtered, it isn't added to the dup
        # list. This allows it to come in from a "legitimate" source
-       if (Spot::dup(@spot[0..4,5])) {
-               dbg("PCPROT: Duplicate Spot ignored\n") if isdbg('chanerr');
+       if (my $key = Spot::dup(@spot[0..4,7])) {
+               dbg("PCPROT: Duplicate Spot $pc->[0] $key ignored\n") if isdbg('chanerr') || isdbg('dupespot');
                return;
        }
 
+       # here we verify the spotter is currently connected to the node it says it is one. AKA email sender verify
+       # but without the explicit probe to the node. We are relying on "historical" information, but it very likely
+       # to be current once we have seen the first PC92C from that node.
+       #
+       # As for spots generated from non-PC92 nodes, we'll see after about  do_pc9x3h20m...
+       #
+       if ($senderverify) {
+               my $nroute = Route::Node::get($pc->[7]);
+               my $uroute = Route::Node::get($pc->[6]);
+               my $local = DXChannel::get($pc->[7]);
+               
+               if ($nroute && ($nroute->last_PC92C || ($local && !$local->do_pc9x))) {
+                       my $s = '';
+                       my $ip = $pcno == 61 ?  $pc->[8] : '';
+#                      $s .= "User $pc->[6] not logged in, " unless $uroute;
+                       $s .= "User $pc->[6] not on node $pc->[7], " unless $nroute->is_user($pc->[6]);
+#                      $s .= "Node $pc->[7] at '$ip' not on Node's IP " . $nroute->ip if $ip && $nroute && $nroute->ip && $nroute->ip ne $ip;
+                       if ($s) {
+                               my $action = $senderverify > 1 ? ", DUMPED" : '';
+                               $s =~ s/, $//;
+                               dbg("PCProt: Suspicious Spot $pc->[2] on $pc->[1] by $pc->[6]($ip)\@$pc->[7] $s$action");
+                               return unless $senderverify < 2;
+                       }
+               }
+       }
+
+       # If is a new PC11, store it, releasing the one that is there (if any),
+       # if a PC61 comes along then dump the stored PC11
+       # If there is a different PC11 stored, release that one and store this PC11 instead,
+       
        # add it
        Spot::add(@spot);
 
@@ -272,8 +309,8 @@ sub handle_11
                                } else {
                                        route(undef, $to, pc34($main::mycall, $to, $cmd));
                                }
-                               if ($to ne $pc->[7]) {
-                                       $to = $pc->[7];
+                               if ($to ne $origin) {
+                                       $to = $origin;
                                        $node = Route::Node::get($to);
                                        if ($node) {
                                                $dxchan = $node->dxchan;
@@ -306,6 +343,12 @@ sub handle_11
        send_dx_spot($self, $line, @spot) if @spot;
 }
 
+# used to kick outstanding PC11 if required
+sub pc11_process
+{
+
+}
+
 # announces
 sub handle_12
 {
@@ -660,6 +703,8 @@ sub handle_18
 sub check_add_node
 {
        my $call = shift;
+       my $type = shift;
+       
 
        # add this station to the user database, if required (don't remove SSID from nodes)
        my $user = DXUser::get_current($call);
@@ -669,7 +714,7 @@ sub check_add_node
                $user->lockout(1);
                $user->homenode($call);
                $user->node($call);
-               $user->sort('A');
+               $user->sort($type || 'A');
                $user->lastin($main::systime); # this make it last longer than just this invocation
                $user->put;                             # just to make sure it gets written away!!!
        }
@@ -1435,7 +1480,7 @@ sub _decode_pc92_call
        my $is_extnode = $flag & 2;
        my $here = $flag & 1;
        my $ip  = $part[3];
-       $ip ||= $part[1] if $part[1] && ($part[1] =~ /^(?:\d+\.)+/ || $part[1] =~ /^(?:(?:[abcdef\d]+)?,)+/);
+       $ip ||= $part[1] if $part[1] && $part[1] !~ /^\d+$/ && ($part[1] =~ /^(?:\d+\.)+/ || $part[1] =~ /^(?:(?:[abcdef\d]+)?,)+/);
        $ip =~ s/,/:/g if $ip;
        return ($call, $is_node, $is_extnode, $here, $part[1], $part[2], $ip);
 }
@@ -1490,6 +1535,14 @@ sub _add_thingy
        if ($call) {
                my $ncall = $parent->call;
                if ($ncall ne $call) {
+                       my $user;
+                       unless (DXChannel::get($call)) { # i.e. external entity - create an user entry for it - ALL entities will appear in ALL user files from now on.
+                               $user = DXUser::get($call);
+                               unless ($user) {
+                                       $user = DXUser->new($call);
+                                       dbg("PCProt::_add_thingy new user $call");
+                               }
+                       }
                        if ($is_node) {
                                dbg("ROUTE: added node $call to $ncall") if isdbg('routelow');
                                @rout = $parent->add($call, $version, Route::here($here), $ip);
@@ -1499,8 +1552,19 @@ sub _add_thingy
                                        $r->ip($ip);
                                        Log('DXProt', "PC92A $call -> $ip on $ncall");
                                }
+                               if ($user && $user->sort eq 'U') {
+                                       if (defined $version) {
+                                               if ($version >= 5455 && $build > 0 || $version >= 3000 ) {
+                                                       $user->sort('S');
+                                               } else {
+                                                       $user->sort('A');
+                                               }
+                                               dbg("PCProt::_add_thingy node $call sort updated " . $user->sort15);
+                                       }
+                               }
                        } else {
                                dbg("ROUTE: added user $call to $ncall") if isdbg('routelow');
+                               my $user = check_add_node($call, 'U');
                                @rout = $parent->add_user($call, Route::here($here), $ip);
                                $dxchan->tell_buddies('loginb', $call, $ncall) if $dxchan;
                                my $r = Route::User::get($call);
@@ -1513,7 +1577,8 @@ sub _add_thingy
                                $things_add{$call} = Route::get($call);
                                delete $things_del{$call};
                        }
-               } else {
+                       $user->close($main::systime, $ip) if $user;             # this just updates lastseen and the connlist list containing the IP address
+               } else {                                
                        dbgprintring(10) if isdbg('nologchan');
                        dbg("DXProt::add_thingy: Trying to add parent $call to itself $ncall, ignored");
                }
@@ -1839,7 +1904,10 @@ sub handle_92
                        push @radd, $add if $add;
                        $parent->reset_obs;
                        $parent->version($ent[4]) if $ent[4];
-                       $parent->build($ent[5]) if $ent[5];
+                       if ($ent[5]) {
+                               $ent[5] =~ s/^0.//;
+                               $parent->build($ent[5]);
+                       }
 
                        dbg("ROUTE: reset obscount on $parent->{call} now " . $parent->obscount) if isdbg('obscount');
                }
index ec2201cee725b941dcff95c9c8f682dcd5cea038..7629ca1676c4ae09b62c5c109640b6ded392fe84 100644 (file)
@@ -43,7 +43,7 @@ sub pc10
        $origin ||= $main::mycall;
        $text = unpad($text);
        $text = ' ' unless $text && length $text > 0;
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        return "PC10^$from^$user1^$text^*^$user2^$origin^~";
 }
 
@@ -54,7 +54,7 @@ sub pc11
        my $hops = get_hops(11);
        my $t = time;
        $text = ' ' if !$text;
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        return sprintf "PC11^%.1f^$dxcall^%s^%s^$text^$mycall^$main::mycall^$hops^~", $freq, cldate($t), ztime($t);
 }
 
@@ -65,7 +65,7 @@ sub pc61
        my $hops = get_hops(61) || get_hops(11);
        my $t = time;
        $text = ' ' if !$text;
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        return sprintf "PC61^%.1f^$dxcall^%s^%s^$text^$mycall^$main::mycall^$ipaddr^$hops^~", $freq, cldate($t), ztime($t);
 }
 
@@ -75,7 +75,7 @@ sub pc12
        my ($call, $text, $tonode, $sysop, $wx, $origin) = @_;
        my $hops = get_hops(12);
        $text ||= ' ';
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        $tonode ||= '*';
        $sysop ||= ' ';
        $wx ||= '0';
@@ -232,7 +232,7 @@ sub pc29
 {
        my ($fromnode, $tonode, $stream, $text) = @_;
        $text = ' ' unless defined $text && length $text > 0;
-       $text =~ s/\^/%5E/og;                   # remove ^
+       $text =~ s/\^/~/g;                      # remove ^
        return "PC29^$fromnode^$tonode^$stream^$text^~";
 }
 
@@ -474,7 +474,7 @@ sub pc93
        my $origin = shift;                     # this will be present on proxying from PC10
 
        $line = unpad($line);
-       $line =~ s/\^/\\5E/g;           # remove any ^ characters
+       $line =~ s/\^/~/g;              # remove any ^ characters
        my $s = "PC93^$main::mycall^" . gen_pc9x_t() . "^$to^$from^$via^$line";
        $s .= "^$origin" if $origin;
        $s .= "^H99^";
index 842e30054fc1a8c00db5f483d8593ef02b25e10b..242ab0a8d54dbb3120b33ae5af6570f106a563e3 100644 (file)
@@ -60,7 +60,8 @@ sub connect
        my $dbh;
        eval {
                no strict 'refs';
-               $dbh = DBI->connect($dsn, $user, $passwd); 
+               $dbh = DBI->connect($dsn, $user, $passwd);
+               dbg "DXSql $dsn " . $dbh? "connected" : "NOT connected" if isdbg('dxsql');
        };
        unless ($dbh) {
                $active = 0;
@@ -149,33 +150,37 @@ sub spot_insert
 sub spot_search
 {
        my $self = shift;
-       my $expr = shift;
-       my $dayfrom = shift;
-       my $dayto = shift;
-       my $n = shift;
-       my $dxchan = shift;
+       my ($expr, $dayfrom, $dayto, $from, $to, $hint, $dofilter, $dxchan) = @_;
+       $dayfrom = 0 if !$dayfrom;
+       $dayto = $Spot::maxdays unless $dayto;
+       $dayto = $dayfrom + $Spot::maxdays if $dayto < $dayfrom;
+       my $today = Julian::Day->new(time());
+       my $fromdate = $today->sub($dayfrom);
+       my $todate = $fromdate->sub($dayto);
+       $from = 0 unless $from;
+       $to = $Spot::defaultspots unless $to;
        
-       dbg("expr: $expr") if isdbg('search');
-       if ($expr =~ /\$f/) {
+       dbg("DXSql expr: $expr") if isdbg('search');
+       if ($expr =~ /\$r->/) {
                $expr =~ s/(?:==|eq)/ = /g;
-               $expr =~ s/\$f10/spotteritu/g;
-               $expr =~ s/\$f11/spottercq/g;
-               $expr =~ s/\$f12/spotstate/g;
-               $expr =~ s/\$f13/spotterstate/g;
-               $expr =~ s/\$f14/ipaddr/g;
-               $expr =~ s/\$f0/freq/g;
-               $expr =~ s/\$f1/spotcall/g;
-               $expr =~ s/\$f2/time/g;
-               $expr =~ s/\$f3/comment/g;
-               $expr =~ s/\$f4/spotter/g;
-               $expr =~ s/\$f5/spotdxcc/g;
-               $expr =~ s/\$f6/spotterdxcc/g;
-               $expr =~ s/\$f7/origin/g;
-               $expr =~ s/\$f8/spotitu/g;
-               $expr =~ s/\$f9/spotcq/g;
+               $expr =~ s/\$r->\[10\]/spotteritu/g;
+               $expr =~ s/\$r->\[11\]/spottercq/g;
+               $expr =~ s/\$r->\[12\]/spotstate/g;
+               $expr =~ s/\$r->\[13\]/spotterstate/g;
+               $expr =~ s/\$r->\[14\]/ipaddr/g;
+               $expr =~ s/\$r->\[0\]/freq/g;
+               $expr =~ s/\$r->\[1\]/spotcall/g;
+               $expr =~ s/\$r->\[2\]/time/g;
+               $expr =~ s/\$r->\[3\]/comment/g;
+               $expr =~ s/\$r->\[4\]/spotter/g;
+               $expr =~ s/\$r->\[5\]/spotdxcc/g;
+               $expr =~ s/\$r->\[6\]/spotterdxcc/g;
+               $expr =~ s/\$r->\[7\]/origin/g;
+               $expr =~ s/\$r->\[8\]/spotitu/g;
+               $expr =~ s/\$r->\[9\]/spotcq/g;
                $expr =~ s/\|\|/ or /g;
                $expr =~ s/\&\&/ and /g;
-               $expr =~ s/=~\s+m\{\^([%\w]+)[^\}]*\}/ like '$1'/g;
+               $expr =~ s/=~\s*m\{\^([%\w]+)[^\}]*\}/ like '$1\%'/g;
        } else {
                $expr = '';
        }  
@@ -185,8 +190,8 @@ sub spot_search
        $expr .= $expr ? " and $trange" : $trange;
     my $s = qq{select freq,spotcall,time,comment,spotter,spotdxcc,spotterdxcc,
 origin,spotitu,spotcq,spotteritu,spottercq,spotstate,spotterstate,ipaddr from spot
-where $expr order by time desc limit $n};
-    dbg("sql expr: $s") if isdbg('search');
+where $expr limit $to};
+    dbg("DXSql expr: $s") if isdbg('search');
        my $ref = $self->{dbh}->selectall_arrayref($s);
        return @$ref;
 }
index 2330837f41cd4b2192dc2821f926ff917c00653b..36bcc46da72554ae53721a85b147f8f6868b0e6b 100644 (file)
@@ -80,9 +80,13 @@ sub spot_add_indexes
 {
        my $self = shift;
        dbg('adding spot index ix1');
-       $self->do('create index spot_ix1 on spot(time desc)');
+       $self->do('create index spot_ix1 on spot(time asc)');
        dbg('adding spot index ix2');
        $self->do('create index spot_ix2 on spot(spotcall asc)');
+       dbg('adding spot index ix3');
+       $self->do('create index spot_ix3 on spot(freq asc)');
+       dbg('adding spot index ix4');
+       $self->do('create index spot_ix4 on spot(spotter asc)');
 }
 
 
diff --git a/perl/DXTimer.pm b/perl/DXTimer.pm
new file mode 100644 (file)
index 0000000..9dd2607
--- /dev/null
@@ -0,0 +1,67 @@
+#
+# Polled Timer handling
+#
+# This uses callbacks. BE CAREFUL!!!!
+#
+#
+#
+# Copyright (c) 2001 Dirk Koopman G1TLH
+#
+
+package DXTimer;
+
+use Mojo::IOLoop;
+
+use vars qw(@timerchain $notimers $lasttime);
+use DXDebug;
+
+@timerchain = ();
+$notimers = 0;
+
+$lasttime = 0;
+
+sub new
+{
+    my ($pkg, $time, $proc, $recur) = @_;
+       my $obj = ref($pkg);
+       my $class = $obj || $pkg;
+       my $self = bless { t=>$time + $main::systime, proc=>$proc }, $class;
+       $self->{interval} = $time if $recur;
+       push @timerchain, $self;
+       $notimers = @timerchain;
+       dbg("Timer created (notimers: $notimers)") if isdbg('connll');
+       return $self;
+}
+
+sub del
+{
+       my $self = shift;
+       delete $self->{proc};
+       @timerchain = grep {$_ != $self} @timerchain;
+       $notimers = @timerchain;
+       dbg("Timer deleted (notimers: $notimers)") if isdbg('connll');
+}
+
+sub handler
+{
+       my $now = $main::systime;
+
+       return unless $now != $lasttime;
+
+       # handle things on the timer chain
+       my $t;
+       foreach $t (@timerchain) {
+               if ($now >= $t->{t}) {
+                       &{$t->{proc}}();
+                       $t->{t} = $now + $t->{interval} if exists $t->{interval};
+               }
+       }
+
+       $lasttime = $now;
+}
+
+sub DESTROY
+{
+       dbg("timer destroyed ($DXTimer::notimers)") if isdbg('connll');
+}
+1;
diff --git a/perl/DXUDP.pm b/perl/DXUDP.pm
new file mode 100644 (file)
index 0000000..fda14c6
--- /dev/null
@@ -0,0 +1,161 @@
+package DXUDP;
+
+=head1 NAME
+
+DXUDP - A Mojo compatible UDP thingy
+
+=head1 VERSION
+
+0.01
+
+=head1 SYNOPSIS
+
+    use DXUDP;
+    my $handle = DXUDP->new;
+
+    $handle->on(read => sub {
+        my ($handle, $data) = @_;
+        ...
+    });
+
+    $handle->on(error => sub {
+        warn "DXUDP: $_[1]\n";
+    });
+
+    $handle->on(finish => sub {
+        my($handle, $c, $error) = @_;
+        warn "Connection: $error\n" if $error;
+    });
+
+    $handle->start;
+    $handle->ioloop->start unless $handle->ioloop->is_running;
+
+=head1 DESCRIPTION
+
+A simple Mojo compatible UDP thingy
+
+=cut
+
+use Mojo::Base 'Mojo::EventEmitter';
+use Mojo::IOLoop;
+use Scalar::Util qw(weaken);
+use IO::Socket::INET6;
+
+our $VERSION = '0.04';
+
+=head1 EVENTS
+
+=head2 error
+
+    $self->on(error => sub {
+        my($self, $str) = @_;
+    });
+
+This event is emitted when something goes wrong: Fail to L</listen> to socket,
+read from socket or other internal errors.
+
+=head2 finish
+
+    $self->on(finish => sub {
+        my($self, $c, $error) = @_;
+    });
+
+This event is emitted when the client finish, either successfully or due to an
+error. C<$error> will be an empty string on success.
+
+=head2 read
+
+    $self->on(read => sub {
+        my($self, $data) = @_;
+    });
+
+This event is emitted when a new read request arrives from a client.
+
+=head1 ATTRIBUTES
+
+=head2 ioloop
+
+Holds an instance of L<Mojo::IOLoop>.
+
+=cut
+
+has ioloop => sub { Mojo::IOLoop->singleton };
+
+=head2 inactive_timeout
+
+How long a L<connection|Mojo::TFTPd::Connection> can stay idle before
+being dropped. Default is 0 (no timeout).
+
+=cut
+
+has inactive_timeout => 0;
+
+
+=head1 METHODS
+
+=head2 start
+
+Starts listening to the address and port set in L</Listen>. The L</error>
+event will be emitted if the server fail to start.
+
+=cut
+
+sub start {
+    my ($self, $args) = (shift, ref $_[0] ? $_[0] : {@_});
+    my $reactor = $self->ioloop->reactor;
+    my $socket;
+
+       my $host = $args->{LocalAddr} || $args->{host} || '0.0.0.0';
+       my $port = $args->{LocalPort} || $args->{port} || 1234;
+       
+    $socket = IO::Socket::IP->new(
+                  LocalAddr => $host,
+                  LocalPort => $port,
+                  Proto => 'udp',
+              );
+
+    if(!$socket) {
+        return $self->emit(error => "Can't create listen socket: $!");
+    };
+
+    Scalar::Util::weaken($self);
+
+    $socket->blocking(0);
+    $reactor->io($socket, sub { $self->_incoming });
+    $reactor->watch($socket, 1, 0); # watch read events
+    $self->{socket} = $socket;
+
+    return $self;
+}
+
+sub _incoming {
+    my $self = shift;
+    my $socket = $self->{socket};
+    my $read = $socket->recv(my $datagram, 65534); 
+
+    if(!defined $read) {
+        $self->emit(error => "Read: $!");
+    }
+
+       $self->emit(read => $datagram);
+}      
+
+has peerhost => sub { return $_[0]->{socket}->peerhost };
+has peerport => sub { return $_[0]->{socket}->peerport };
+
+sub DEMOLISH {
+    my $self = shift;
+    my $reactor = eval { $self->ioloop->reactor } or return; # may be undef during global destruction
+
+    $reactor->remove($self->{socket}) if $self->{socket};
+}
+
+=head1 AUTHOR
+
+Svetoslav Naydenov - C<harryl@cpan.org>
+
+Jan Henning Thorsen - C<jhthorsen@cpan.org>
+
+=cut
+
+1;
index 8890fae9185b4d990bf9f0d6737304d22b6088a6..4af135e7e795aefe0a7a39bc2f8a189828d442df 100644 (file)
@@ -31,7 +31,7 @@ $dbm = undef;
 $filename = undef;
 $lastoperinterval = 60*24*60*60;
 $lasttime = 0;
-$lrusize = 10000;
+$lrusize = 5000;
 $tooold = 86400 * 365;         # this marks an old user who hasn't given enough info to be useful
 $v3 = 0;
 our $maxconnlist = 3;                  # remember this many connection time (duration) [start, end] pairs
@@ -108,6 +108,7 @@ my $json;
                  startt => '0,Start Time,cldatetime',
                  connlist => '1,Connections,parraydifft',
                  width => '0,Preferred Width',
+                 rbnseeme => '0,RBN See Me',
                 );
 
 #no strict;
@@ -135,17 +136,19 @@ sub init
 {
        my $mode = shift;
   
-   $json = DXJSON->new->canonical(1);
+       $json = DXJSON->new->canonical(1);
        my $fn = "users";
        $filename = localdata("$fn.v3j");
-       unless (-e $filename || $mode == 2) {
-               LogDbg('DXUser', "New User File version $filename does not exist, running conversion from users.v3 or v2, please wait");
-               system('/spider/perl/convert-users-v3-to-v3j.pl');
-               init(1);
-               export();
-               return;
+       unless (-e $filename || $mode == 2 ) {
+               if (-e localdata("$fn.v3") || -e localdata("$fn.v2")) {
+                       LogDbg('DXUser', "New User File version $filename does not exist, running conversion from users.v3 or v2, please wait");
+                       system('/spider/perl/convert-users-v3-to-v3j.pl');
+                       init(1);
+                       export();
+                       return;
+               }
        }
-       if (-e $filename || $mode == 2) {
+       if (-e $filename || $mode) {
                $lru = LRU->newbase("DXUser", $lrusize);
                if ($mode) {
                        $dbm = tie (%u, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!) [rebuild it from user_json?]";
@@ -833,6 +836,16 @@ sub lastping
        $b->{$call} = shift if @_;
        return $b->{$call};     
 }
+
+sub registered
+{
+       my $self = shift;
+       if (exists $self->{registered}) {
+               return $self->{registered} || 0;
+       }
+       return '';                                      # to stop undef warnings
+}
+
 1;
 __END__
 
index f7e52c9a92cb727e8c5431c4f9cd4d2d63e3d5e7..6d115a7b6273540810e42bdb8ea6c1728951c153 100644 (file)
@@ -14,6 +14,7 @@ use IO::File;
 use File::Copy;
 use Data::Dumper;
 use Time::HiRes qw(gettimeofday tv_interval);
+use Text::Wrap;
 
 use strict;
 
@@ -27,7 +28,7 @@ require Exporter;
              print_all_fields cltounix unpad is_callsign is_latlong
                         is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem
                         is_prefix dd is_ipaddr $pi $d2r $r2d localdata localdata_mv
-                        diffms _diffms difft parraydifft is_ztime
+                        diffms _diffms _diffus difft parraydifft is_ztime basecall
             );
 
 
@@ -155,7 +156,7 @@ sub dd
 # format a prompt with its current value and return it with its privilege
 sub promptf
 {
-       my ($line, $value) = @_;
+       my ($line, $value, $promptl) = @_;
        my ($priv, $prompt, $action) = split ',', $line;
 
        # if there is an action treat it as a subroutine and replace $value
@@ -165,7 +166,8 @@ sub promptf
        } elsif (ref $value) {
                $value = dd($value);
        }
-       $prompt = sprintf "%15s: %s", $prompt, $value;
+       $promptl ||= 15;
+       $prompt = sprintf "%${promptl}s: %s", $prompt, $value;
        return ($priv, $prompt);
 }
 
@@ -193,7 +195,7 @@ sub ptimelist
 sub parray
 {
        my $ref = shift;
-       return ref $ref ? join(', ', @{$ref}) : $ref;
+       return ref $ref ? join(', ', sort @{$ref}) : $ref;
 }
 
 # take the arg as an array reference and print as a list of pairs
@@ -219,11 +221,10 @@ sub phash
        my $ref = shift;
        my $out;
 
-       while (my ($k,$v) = each %$ref) {
-               $out .= "${k}=>$v, ";
+       while (my $k = sort keys %$ref) {
+               $out .= "${k}=>$ref->{$k}, ";
        }
-       chop $out;                                      # remove last space
-       chop $out;                                      # remove last comma
+       $out =~ s/, $// if $out;
        return $out;
 }
 
@@ -248,23 +249,26 @@ sub print_all_fields
        my @fields = $ref->fields;
        my $field;
        my $width = $self->width - 1;
+       my $promptl = 0;
        $width ||= 80;
 
+       # find the maximum length of the prompt
+       foreach $field (@fields) {
+               if (defined $ref->{$field}) {
+                       my (undef, $prompt, undef) = split ',', $ref->field_prompt($field);
+                       $promptl = length $prompt if length $prompt > $promptl;
+               }
+       }
+
+       # now do print
        foreach $field (sort {_sort_fields($ref, $a, $b)} @fields) {
                if (defined $ref->{$field}) {
-                       my ($priv, $ans) = promptf($ref->field_prompt($field), $ref->{$field});
+                       my ($priv, $ans) = promptf($ref->field_prompt($field), $ref->{$field}, $promptl);
                        my @tmp;
                        if (length $ans > $width) {
+                               $Text::Wrap::columns = $width-2;
                                my ($p, $a) = split /: /, $ans, 2;
-                               my $l = (length $p) + 2;
-                               my $al = ($width - 1) - $l;
-                               my $bit;
-                               while (length $a > $al ) {
-                                       ($bit, $a) = unpack "A$al A*", $a;
-                                       push @tmp, "$p: $bit";
-                                       $p = ' ' x ($l - 2);
-                               }
-                               push @tmp, "$p: $a" if length $a;
+                               @tmp = split/\n/, Text::Wrap::wrap("$p: ", (' ' x $promptl) . ': ', $a);
                        } else {
                                push @tmp, $ans;
                        }
@@ -280,6 +284,7 @@ sub shellregex
 {
        my $in = shift;
        $in =~ s{(.)} { $patmap{$1} || "\Q$1" }ge;
+       $in =~ s|\\/|/|g;
        return '^' . $in . "\$";
 }
 
@@ -388,9 +393,10 @@ sub is_callsign
                                          [A-Z]{1,8}                # callsign letters (required)
                                          (?:-(?:\d{1,2}))?         # - nn possibly (eg G8BPQ-8)
                                          (?:/[0-9A-Z]{1,7})?       # / another prefix, callsign or special label (including /MM, /P as well as /EURO or /LGT) possibly
-                                         $!x;
+                                         (?:/(?:AM?|MM?|P))?       # finally /A /AM /M /MM /P 
+                                         $!xo;
 
-       # longest callign allowed is 1X11/1Y11XXXXX-11/XXXXXXX
+       # longest callign allowed is 1X11/1Y11XXXXX-11/XXXXXXX/MM
 }
 
 sub is_prefix
@@ -478,19 +484,20 @@ sub deleteitem
 sub localdata
 {
        my $ifn = shift;
-       my $ofn = "$main::local_data/$ifn";
-       my $tfn;
+       my $lfn = "$main::local_data/$ifn";
+       my $dfn =  "$main::data/$ifn";
        
        if (-e "$main::local_data") {
-               $tfn = "$main::data/$ifn";
-               if ((-e $tfn) && (-e $ofn)) {
-                       $ofn = $tfn if -M $ofn < -M $tfn;
+               if ((-e $dfn) && (-e $lfn)) {
+                       $lfn = $dfn if -M $dfn < -M $lfn;
                } else {
-                       $ofn = $tfn if -e $tfn;
+                       $lfn = $dfn if -e $dfn;
                }
+       } else {
+               $lfn = $dfn;
        }
 
-       return $ofn;
+       return $lfn;
 }
 
 # move a file or a directory from data -> local_data if isn't there already
@@ -514,6 +521,16 @@ sub _diffms
        return $b - $a;
 }
 
+# and in microseconds
+sub _diffus
+{
+       my $ta = shift;
+       my $tb = shift || [gettimeofday];
+       my $a = int($ta->[0] * 1000000) + int($ta->[1]); 
+       my $b = int($tb->[0] * 1000000) + int($tb->[1]);
+       return $b - $a;
+}
+
 sub diffms
 {
        my $call = shift;
@@ -539,7 +556,7 @@ sub difft
        if (ref $b eq 'ARRAY') {
                $t = $b->[1] - $b->[0];
        } else {
-               if ($adds >= $b) {
+               if ($adds && $adds =~ /^\d+$/ && $adds >= $b) {
                        $t = $adds - $b;
                        $adds = shift;
                } else {
@@ -562,6 +579,7 @@ sub difft
                $out .= sprintf ("%s${s}s", $adds?' ':'') if $s;
                $out ||= sprintf ("%s0s", $adds?' ':'');
        }
+       $out = '0s' unless length $out;
        return $out;
 }
 
@@ -577,3 +595,9 @@ sub parraydifft
        $out =~ s/,\s*$//;
        return $out;
 }
+
+sub basecall
+{
+       my ($r) = $_[0] =~ m|^(?:[\w\d]+/)?([\w\d]+).*$|;
+       return $r;
+}
index 2fa7a593e960bf4edb61333f33831b74b317084f..3117aabaee61aba69c9d187fffc35e0635b21742 100644 (file)
@@ -18,6 +18,8 @@ use Msg;
 use DXVars;
 use DXUtil;
 use DXDebug;
+use DXTimer;
+
 use IO::File;
 use IO::Socket;
 use IPC::Open3;
@@ -61,6 +63,8 @@ sub dequeue
                        $conn->{msg} =~ s/([^\cM\cJ]*)\cM?\cJ//g;
                }
 
+               $conn->{linesin} += @lines;
+               $Msg::total_lines_in += @lines;
                while (defined ($msg = shift @lines)) {
                        dbg("connect $conn->{cnum}: $msg") if $conn->{state} ne 'C' && isdbg('connect');
 
@@ -127,7 +131,7 @@ sub _dotimeout
        dbg("connect $conn->{cnum}: timeout set to $val") if isdbg('connect');
        $conn->{timeout}->del if $conn->{timeout};
        $conn->{timeval} = $val;
-       $conn->{timeout} = Timer->new($val, sub{ &_timedout($conn) });
+       $conn->{timeout} = DXTimer->new($val, sub{ &_timedout($conn) });
 }
 
 
index 6b3a30b1c0f00624fa573fc79c35cba28eb314a4..74a2cfcd0dc8ea0c18956b005574899930ad91f2 100644 (file)
@@ -19,6 +19,8 @@ use Msg;
 use DXVars;
 use DXUtil;
 use DXDebug;
+use DXTimer;
+
 use IO::File;
 use IO::Socket;
 use IPC::Open3;
@@ -107,6 +109,8 @@ sub dequeue
                } else {
                        $conn->{msg} =~ s/([^\cM\cJ]*)\cM?\cJ//g;
                }
+               $conn->{linesin} += @lines;
+               $Msg::total_lines_in += @lines;
                while (defined ($msg = shift @lines)) {
                        dbg("connect $conn->{cnum}: $msg") if $conn->{state} ne 'C' && isdbg('connect');
                
@@ -300,7 +304,7 @@ sub _dotimeout
        dbg("connect $conn->{cnum}: timeout set to $val") if isdbg('connect');
        $conn->{timeout}->del if $conn->{timeout};
        $conn->{timeval} = $val;
-       $conn->{timeout} = Timer->new($val, sub{ &_timedout($conn) });
+       $conn->{timeout} = DXTimer->new($val, sub{ &_timedout($conn) });
 }
 
 sub _dolineend
index 64d05508a5311b63661aeab0095c7f9e3735aca2..7119ed13e113a5ca84b05d0c6831a8e1e4b83a61 100644 (file)
@@ -416,7 +416,8 @@ sub parse
        
        # check the line for non legal characters
        dbg("Filter::parse line: '$line'") if isdbg('filter');
-       return ('ill', $dxchan->msg('e19')) if $line !~ /{.*}/ && $line =~ /[^\s\w,_\-\*\/\(\)\$!]/;
+       my @ch = $line =~ m|([^\s\w,_\.:\/\-\*\(\)\$!])|g;
+       return ('ill', $dxchan->msg('e19', join(' ', @ch))) if $line !~ /{.*}/ && @ch;
 
        $line = lc $line;
 
index e5f05ff12f1e5dd48f2bbca56a40683675549912..4361b7b59c13a50c84e3e86e4cc561ae9aba719c 100644 (file)
@@ -40,6 +40,8 @@ sub dequeue
                } else {
                        $conn->{msg} =~ s/([^\cM\cJ]*)\cM?\cJ//g;
                }
+               $conn->{linesin} += @lines;
+               $Msg::total_lines_in += @lines;
                for (@lines) {
                        if (defined $_) {
                                s/\%([0-9A-F][0-9A-F])/chr(hex($1))/eg;
index 5002908fac3f42d7d80c63940595eb23400370bb..80b4f46df5b41f7d7e9c092acb1cc1522616e58f 100644 (file)
@@ -34,7 +34,7 @@ package DXM;
                                chatinst => 'Entering Chatmode on $_[0], /EX to end, /<cmd> to run a command',
                                chatprompt => 'Chat ($_[0])>',
                                chattoomany => 'Not allowed, already in $_[1], use /chat $_[0]',
-                               cluster => 'Nodes: $_[0]/$_[1] Clr - Users: $_[2]/$_[3] Clr Max: $_[4]/$_[5] Clr - Uptime: $_[6]',
+                               cluster => 'Nodes: $_[0]/$_[1] Users [Loc/Clr]: $_[2]/$_[3] Max: $_[4]/$_[5] - Uptime: $_[6]',
                                conother => 'Sorry $_[0] you are connected to me on another port',
                                concluster => 'Sorry $_[0] you are already connected elsewhere on the cluster (on $_[1])',
                                contomany => 'Sorry $_[0] but you are already connected to $_[1] other nodes (on $_[2])',
@@ -92,7 +92,7 @@ package DXM;
                                e16 => 'File \"$_[0]\" exists',
                                e17 => 'Please don\'t use the words: @_ on here',
                                e18 => 'Cannot connect to $_[0] ($!)',
-                               e19 => 'Invalid character in line',
+                               e19 => 'Invalid character(s) in line $_[0]',
                                e20 => qq{token '$_[0]' not recognised},
                                e21 => '$_[0] is not numeric',
                                e22 => '$_[0] is not a callsign',
@@ -248,7 +248,8 @@ package DXM;
                                ok => 'Operation successful',
                                outconn => 'Outstanding connect to $_[0]',
                                page => 'Press Enter to continue, A to abort ($_[0] lines) >',
-                               pagelth => 'Page Length is now $_[0]',
+                               pagelth => 'Page Length is now $_[0] lines',
+                               pagewidth => 'Page width is now $_[0] columns',
                                passerr => 'Please use: SET/PASS <password> <callsign>',
                                passphrase => 'Passphrase set or changed for $_[0]',
                                passphraseu => 'Passphrase removed for $_[0]',
@@ -278,6 +279,7 @@ package DXM;
                                qrashe1 => 'Please enter a QRA locator, eg sh/qra JO02LQ or sh/qra JO02LQ IO93NS',
                                qrae2 => 'Don\'t recognise \"$_[0]\" as a QRA locator (eg JO02LQ)',
                                qra => 'Your QRA Locator is now \"$_[0]\"',
+                               rbnusers => qq{RBN User List},
                                qsl1 => 'Call           Manager   Times  Last Time Seen      De',
                                rcmdo => 'RCMD \"$_[0]\" sent to $_[1]',
                                read1 => 'Sorry, no new messages for you',
@@ -532,7 +534,7 @@ package DXM;
                                e16 => 'Le fichier \"$_[0]\" existe déjà',
                                e17 => 'Prière de ne pas utiliser les mots : @_ ici !', 
                                e18 => 'Connexion impossible avec $_[0] ($!)',
-                               e19 => 'Caractère non valide dans la ligne',
+                               e19 => 'Caractère non valide dans la ligne $_[0]',
                                e20 => 'Symbole $_[0] non reconnu',
                                e21 => '$_[0] n\'est pas une valeur numérique',
                                e22 => '$_[0] n\'est pas un indicatif',
@@ -854,7 +856,7 @@ package DXM;
                                e16 => 'El fichero \"$_[0]\" ya existe',
                                e17 => 'Por favor no uses la palabra: @_ aquí',
                                e18 => 'No se puede conectar con $_[0] ($!)',
-                               e19 => 'Carácter no válido en la línea',
+                               e19 => 'Carácter no válido en la línea $_[0]',
                                e20 => 'Símbolo $_[0] no reconocido',
                                e21 => '$_[0] no es numérico',
                                e22 => '$_[0] no es un indicativo',
@@ -1179,7 +1181,7 @@ package DXM;
                                e16 => 'Datei \"$_[0]\" existiert',
                                e17 => 'Bitte gebrauche dieses Wort: @_ nicht hier',
                                e18 => 'Kann nicht verbinden mit $_[0] ($!)',
-                               e19 => 'Ungueltiger Character in der Zeile',
+                               e19 => 'Ungueltiger Character in der Zeile $_[0]',
                                e20 => 'Kuerzel $_[0] nicht erkannt',
                                e21 => '$_[0] nicht numerisch',
                                e22 => '$_[0] kein Rufzeichen',
@@ -1453,7 +1455,7 @@ package DXM;
                                e16 => 'Il file \"$_[0]\" esiste',
                                e17 => 'Non usare le parole: @_ qui', 
                                e18 => 'Impossibile connettere $_[0] ($!)',
-                               e19 => 'Carattere non valido nella linea',
+                               e19 => 'Carattere non valido nella linea  $_[0]',
                                e20 => 'separatore $_[0] non riconosciuto',
                                e21 => '$_[0] non e\' numerico',
                                e22 => '$_[0] non e\' un nominativo',
@@ -1726,7 +1728,7 @@ package DXM;
                                e16 => 'Soubor \"$_[0]\" uz existuje',
                                e17 => 'Prosim nepouzivej zde toto slovo: @_', 
                                e18 => 'Nemohu se pripojit na $_[0] ($!)',
-                               e19 => 'neplatny znak v radku',
+                               e19 => 'neplatny znak v radku  $_[0]',
                                e20 => 'retezec $_0] nebyl rozpoznan',
                                e21 => '$_[0] neni cislo',
                                e22 => '$_[0] neni znacka',
@@ -2018,7 +2020,7 @@ package DXM;
                                e16 => 'O ficheiro \"$_[0]\" existe',
                                e17 => 'Por favor no use as palavras: @_ aqui', 
                                e18 => 'No posso ligar a $_[0] ($!)',
-                               e19 => 'Caracter invlido na linha',
+                               e19 => 'Caracter invlido na linha $_[0]',
                                e20 => 'sinal $_[0] no reconhecido',
                                e21 => '$_[0] no  numrico',
                                e22 => '$_[0] no  um indicativo',
index 3e30372ff1111bbac4923b6837c5a01618d8d620..8992d3c108b85d94886bd3b2d0bf213740eeec94 100644 (file)
@@ -18,11 +18,12 @@ use Mojo::IOLoop;
 use Mojo::IOLoop::Stream;
 
 use DXDebug;
-use Timer;
+use DXTimer;
 
-use vars qw($now %conns $noconns $cnum $total_in $total_out $connect_timeout $disc_waittime);
+use vars qw($now %conns $noconns $cnum $total_in $total_out $total_lines_in $total_lines_out $connect_timeout $disc_waittime);
 
 $total_in = $total_out = 0;
+$total_lines_in = $total_lines_out = 0;
 
 $now = time;
 
@@ -43,15 +44,19 @@ sub new
        my $class = $obj || $pkg;
 
     my $conn = {
-        rproc => $rproc,
-               inqueue => [],
-               outqueue => [],
-               state => 0,
-               lineend => "\r\n",
-               csort => 'telnet',
-               timeval => 60,
-               blocking => 0,
-               cnum => (($cnum < 999) ? (++$cnum) : ($cnum = 1)),
+                               rproc => $rproc,
+                               inqueue => [],
+                               outqueue => [],
+                               state => 0,
+                               lineend => "\r\n",
+                               csort => 'telnet',
+                               timeval => 60,
+                               blocking => 0,
+                               cnum => (($cnum < 999) ? (++$cnum) : ($cnum = 1)),
+                               linesin => 0,
+                               linesout => 0,
+                               datain => 0,
+                               dataout => 0,
     };
 
        $noconns++;
@@ -286,7 +291,8 @@ sub disconnect
                        dbg("Buffer empty, just close $call") if $dbg;
                        _close_it($conn);
                }
-       } else {
+       }
+       else {
                dbg((ref $conn) . " socket missing on $conn->{call}") if $dbg;
                _close_it($conn);
        }
@@ -315,7 +321,7 @@ sub _close_it
 
        if ($sock) {
                dbg((ref $conn) . " Connection $conn->{cnum} $call closing gracefully") if isdbg('connll');
-               $sock->close_gracefully;
+               $sock->close_gracefully if $sock->can('close_gracefully');
        }
        
        # get rid of any references
@@ -350,6 +356,9 @@ sub _send_stuff
                if (defined $sock) {
                        $sock->write($data);
                        $total_out += $lth;
+                       $conn->{dataout} += $lth;
+                       ++$conn->{linesout};
+                       ++$total_lines_out;
                } else {
                        dbg("_send_stuff $call ending data ignored: $data");
                }
@@ -425,6 +434,8 @@ sub dequeue
                } else {
                        $conn->{msg} = pop @lines;
                }
+               $conn->{linesin} += @lines;
+               $total_lines_in += @lines;
                for (@lines) {
                        last if $conn->{disconnecting};
                        &{$conn->{rproc}}($conn, defined $_ ? $_ : '');
@@ -440,8 +451,8 @@ sub _rcv {                     # Complement to _send
        return if $conn->{disconnecting};
 
        $total_in += length $msg;
+       $conn->{datain} += length $msg;
 
-       my @lines;
        if (isdbg('raw')) {
                my $call = $conn->{call} || 'none';
                my $lth = length $msg;
@@ -560,7 +571,8 @@ sub DESTROY
        my $sock = $conn->{sock};
 
        if ($sock) {
-               $sock->close_gracefully;
+               $sock->close_gracefully if $sock->can('close_gracefully');
+               delete $conn->{sock};
        }
        
        $noconns--;
index 659178fbbd09c5b86d3bcd7cc92d370cc9c973f3..2fab0e0b4f9437812f5737a77034c8b815f36955 100644 (file)
@@ -26,7 +26,7 @@ $db = undef;                                  # the DB_File handle
 %prefix_loc = ();                              # the meat of the info
 %pre = ();                                             # the prefix list
 $hits = $misses = $matchtotal = 1;             # cache stats
-$lrusize = 10000;                              # size of prefix LRU cache
+$lrusize = 5000;                               # size of prefix LRU cache
 
 sub init
 {
index 03efc0d380734b575eac63007196e40c7af0305b..0b3dfe5a937dc245c9b67958476212a9610d7664 100644 (file)
@@ -18,7 +18,7 @@ use DXUtil;
 use DXLog;
 use DXUser;
 use DXChannel;
-use Math::Round qw(nearest);
+use Math::Round qw(nearest nearest_floor);
 use Date::Parse;
 use Time::HiRes qw(gettimeofday);
 use Spot;
@@ -35,44 +35,39 @@ use constant {
                          RUtz => 6,
                          Respot => 7,
                          RQra => 8,
+                         RSpotData => 9,
                         };
 
-# at least one whole spot per cache entry is necessary
 use constant {
                          SQrg => 0,
                          SCall => 1,
                          STime => 2,
                          SComment => 3,
                          SOrigin => 4,
-                         SODxcc => 6,
-                         SOItu => 8,
-                         SOZone => 11,
-                         SOState => 13,
-                         SQra => 15,           # i.e. extra after the IP address
+                         SZone => 11,
                         };
-
-
-# Standard Cache entries
-# key Spot|normalised freq
 use constant {
-                         CTime => 0,           # time of latest spot in a tranch
-                         CQual => 1,           # Qualitee
-                         CSpot => 3,           # the Spot::Prepare data for this spot
-                         CSkims => 3,          # the list of skimmers (hcalls) is [[...]...]
+                         OQual => 0,
+                         OAvediff => 1,
+                         OSpare => 2,
+                         ODiff => 3,
+                        };
+use constant {
+                         CTime => 0,
+                         CQual => 1,
+                         CData => 2,
                         };
 
-
-
-# key SK|<call>
 use constant {
-                         SKTime =>0,           # last time seen
-                         SKOffset => 1,
-                         SKQual => 2,
-                         SKSpot =>3,           # the Spot::Prepare data for this skimmer
+                         DScore => 0,
+                         DGood => 1,
+                         DBad => 2,
+                         DLastin => 3,
+                         DEviants => 4,
                         };
 
-       
-our $CACHE_VERSION = 2;
+
+our $DATA_VERSION = 1;
 
 our @ISA = qw(DXChannel);
 
@@ -80,7 +75,7 @@ our $startup_delay = 5*60;            # don't send anything out until this timer has expir
                                 # this is to allow the feed to "warm up" with duplicates
                                 # so that the "big rush" doesn't happen.
 
-our $minspottime = 60*60;              # the time between respots of a callsign - if a call is
+our $minspottime = 30*60;              # the time between respots of a callsign - if a call is
                                 # still being spotted (on the same freq) and it has been
                                 # spotted before, it's spotted again after this time
                                 # until the next minspottime has passed.
@@ -90,6 +85,11 @@ our $beacontime = 5*60;                      # same as minspottime, but for beacons (and shorter)
 our $dwelltime = 10;                   # the amount of time to wait for duplicates before issuing
                                 # a spot to the user (no doubt waiting with bated breath).
 
+our $limbotime = 5*60;                         # if there are fewer than $minqual candidates and $dwelltime
+                                # has expired then allow this spot to live a bit longer. It may
+                                # simply be that it is not in standard spot coverage. (ask G4PIQ
+                                # about this).
+
 our $filterdef = $Spot::filterdef; # we use the same filter as the Spot system. Can't think why :-).
 
 my $spots;                                             # the GLOBAL spot cache
@@ -99,20 +99,28 @@ my %runtime;                                        # how long each channel has been running
 our $cachefn = localdata('rbn_cache');
 our $cache_valid = 4*60;               # The cache file is considered valid if it is not more than this old
 
+our $maxqrgdiff = 10;                  # the maximum
+our $minqual = 2;                              # the minimum quality we will accept for output
+our $maxqual = 9;                              # if there is enough quality, then short circuit any remaining dwelltime.
+
 my $json;
 my $noinrush = 0;                              # override the inrushpreventor if set
+our $maxdeviants = 5;                  # the number of deviant QRGs to record for skimmer records
 
 sub init
 {
        $json = DXJSON->new;
-       $spots = {};
+       $json->canonical(0);
        if (check_cache()) {
                $noinrush = 1;
+       } else {
+               $spots = {VERSION=>$DATA_VERSION};
        }
        if (defined $DB::VERSION) {
                $noinrush = 1;
                $json->indent(1);
        }
+       
 }
 
 sub new 
@@ -143,6 +151,7 @@ sub new
        $self->{showstats} = 0;
        $self->{pingint} = 0;
        $self->{nopings} = 0;
+       $self->{queue} = {};
 
        return $self;
 }
@@ -213,7 +222,7 @@ sub normal
        my $self = shift;
        my $line = shift;
        my @ans;
-#      my $spots = $self->{spot};
+       my $dbgrbn = isdbg('rbn');
        
        # remove leading and trailing spaces
        chomp $line;
@@ -222,7 +231,7 @@ sub normal
 
        # add base RBN
 
-       my $tim = $main::systime;
+       my $now = $main::systime;
 
        # parse line
        dbg "RBN:RAW,$line" if isdbg('rbnraw');
@@ -242,20 +251,32 @@ sub normal
                return;
        }
 
-       $origin =~ s/\-(?:\d{1,2}\-)?\#$//; # get rid of all the crap we aren't interested in
+       # remove all extraneous crap from the origin - just leave the base callsign
+       $origin = basecall($origin);
 
+       # is this callsign in badspotter list?
+       if ($DXProt::badspotter->in($origin) || $DXProt::badnode->in($origin)) {
+               dbg("RBN: ERROR $origin is a bad spotter/node, dumped");
+               return;
+       }
+       
+       # is the qrg valid
+       unless ($qrg =~ /^\d+\.\d{1,2}$/) {
+               dbg("RBN: ERROR qrg $qrg from $origin invalid, dumped");
+               return;
+       }
 
        $sort ||= '';
        $tx ||= '';
        $qra ||= '';
-    dbg qq{RBN:input decode or:$origin qr:$qrg ca:$call mo:$mode s:$s m:$m sp:$spd u:$u sort:$sort t:$t tx:$tx qra:$qra} if isdbg('rbn');
+    dbg qq{RBN:input decode or:$origin qr:$qrg ca:$call mo:$mode s:$s m:$m sp:$spd u:$u sort:$sort t:$t tx:$tx qra:$qra} if $dbgrbn && isdbg('rbn');
 
        ++$self->{noraw};
        ++$self->{noraw10};
        ++$self->{norawhour};
        
        my $b;
-
+       
        if ($t || $tx) {
 
                # fix up times for things like 'NXDXF B' etc
@@ -301,28 +322,48 @@ sub normal
                # process to just the standard "message passing" which has been shown to be able to sustain over 5000 
                # per second (limited by the test program's output and network speed, rather than DXSpider's handling).
 
-               my $nqrg = nearest(5, $qrg*10);  # normalised to nearest .5 Khz (but multipled by 10 to get an integer)
-#              my $nqrg = nearest_even($qrg);  # normalised to nearest Khz
+               my $search = 5;
+               my $nqrg = nearest(1, $qrg * 10);  # normalised to nearest Khz
                my $sp = "$call|$nqrg";           # hopefully the skimmers will be calibrated at least this well!
-               my $spp = sprintf("$call|%d", $nqrg+1); # but, clearly, my hopes are rudely dashed
-               my $spm = sprintf("$call|%d", $nqrg-1); # in BOTH directions!
 
-               # do we have it?
+               # find it?
                my $cand = $spots->{$sp};
-               $cand = $spots->{$spp}, $sp = $spp, dbg(qq{RBN: SPP using $spp for $sp}) if isdbg('rbn') && !$cand && exists $spots->{$spp};
-               $cand = $spots->{$spm}, $sp = $spm, dbg(qq{RBN: SPM using $spm for $sp}) if isdbg('rbn') && !$cand && exists $spots->{$spm};
-
+               unless ($cand) {
+                       my ($i, $new);
+                       for ($i = $nqrg; !$cand && $i <= $nqrg+$search; $i += 1) {
+                               $new = "$call|$i";
+                               $cand = $spots->{$new}, last if exists $spots->{$new};
+                       }
+                       if ($cand) {
+                               my $diff = $i - $nqrg;
+                               dbg(qq{RBN: QRG Diff using $new (+$diff) for $sp for qrg $qrg}) if (isdbg('rbnqrg') || ($dbgrbn && isdbg('rbn')));
+                               $sp = $new;
+                       }
+               }
+               unless ($cand) {
+                       my ($i, $new);
+                       for ($i = $nqrg; !$cand && $i >= $nqrg-$search; $i -= 1) {
+                               $new = "$call|$i";
+                               $cand = $spots->{$new}, last if exists $spots->{$new};
+                       }
+                       if ($cand) {
+                               my $diff = $nqrg - $i;
+                               dbg(qq{RBN: QRG Diff using $new (-$diff) for $sp for qrg $qrg}) if (isdbg('rbnqrg') || ($dbgrbn && isdbg('rbn')));
+                               $sp = $new;
+                       }
+               }
+               
                # if we have one and there is only one slot and that slot's time isn't expired for respot then return
                my $respot = 0;
                if ($cand && ref $cand) {
-                       if (@$cand <= CEMPTY) {
-                               unless ($self->{minspottime} > 0 && $tim - $cand->[0] >= $self->{minspottime}) {
-                                       dbg("RBN: key: '$sp' call: $call qrg: $qrg DUPE \@ ". atime(int $cand->[0])) if isdbg('rbn');
+                       if (@$cand <= CData) {
+                               if ($self->{minspottime} > 0 && $now - $cand->[CTime] < $self->{minspottime}) {
+                                       dbg("RBN: key: '$sp' call: $call qrg: $qrg DUPE \@ ". atime(int $cand->[CTime])) if $dbgrbn && isdbg('rbn');
                                        return;
                                }
                                
-                               dbg("RBN: key: '$sp' RESPOTTING call: $call qrg: $qrg last seen \@ ". atime(int $cand->[0])) if isdbg('rbn');
-                               undef $cand;    # it's about to be recreated (in one place)
+                               dbg("RBN: key: '$sp' RESPOTTING call: $call qrg: $qrg last seen \@ ". atime(int $cand->[CTime])) if $dbgrbn && isdbg('rbn');
+                               $cand->[CTime] = $now;
                                ++$respot;
                        }
 
@@ -330,12 +371,10 @@ sub normal
                } elsif ($cand) {
                        dbg("RBN: key '$sp' = '$cand' not ref");
                        return;
-               }
-
-               # here we either have an existing spot record buildup on the go, or we need to create the first one
-               unless ($cand) {
-                       $spots->{$sp} = $cand = [$main::systime, 0, 0];
-                       dbg("RBN: key: '$sp' call: $call qrg: $qrg NEW" . ($respot ? ' RESPOT' : '')) if isdbg('rbn');
+               } else {
+                       # new spot / frequency
+                       $spots->{$sp} = $cand = [$now, 0];
+                       dbg("RBN: key: '$sp' call: $call qrg: $qrg NEW" . ($respot ? ' RESPOT' : '')) if $dbgrbn && isdbg('rbn');
                }
 
                # add me to the display queue unless we are waiting for initial in rush to finish
@@ -345,81 +384,30 @@ sub normal
                # deal with the unix time
                my ($hh,$mm) = $t =~ /(\d\d)(\d\d)Z$/;
                my $utz = $hh*3600 + $mm*60 + $main::systime_daystart; # possible issue with late spot from previous day
-               $utz -= 86400 if $utz > $tim+3600;                                         # too far ahead, drag it back one day
+               $utz -= 86400 if $utz > $now+3600;                                         # too far ahead, drag it back one day
 
                # create record and add into the buildup
                my $r = [$origin, nearest(.1, $qrg), $call, $mode, $s, $t, $utz, $respot, $u];
-               unless ($cand->[CSpot]) {
-                       my @s = Spot::prepare($r->[RQrg], $r->[RCall], $r->[RUtz], '', $r->[ROrigin]);
-                       if ($s[5] == 666) {
-                               dbg("RBN: ERROR invalid prefix/callsign $call from $origin-# on $qrg, dumped");
-                               return;
-                       }
-                       $cand->[CSpot] = \@s;
+               my @s =  Spot::prepare($r->[RQrg], $r->[RCall], $r->[RUtz], '', $r->[ROrigin]);
+               if ($s[5] == 666) {
+                       dbg("RBN: ERROR invalid prefix/callsign $call from $origin-# on $qrg, dumped");
+                       return;
                }
                
                if ($self->{inrbnfilter}) {
                        my ($want, undef) = $self->{inrbnfilter}->it($s);
                        return unless $want;    
                }
+               $r->[RSpotData] = \@s;
 
-               # add/set up the skimmer record
-               my $skimkey = "SK|$origin";
-               my $skim = $spots->{$skimkey};
-               unless ($skim) {
-                       my $ur = DXUser::get($origin);
-                       $spots->{$skimkey} = [$main::systime, 0, 0, $s->[SODxcc], $s->[SOItu], $s->[SOZone], $s->[SOState], ($ur ? $ur->qra : undef) ];
-               }
+               ++$self->{queue}->{$sp};# unless @$cand>= CData; # queue the KEY (not the record)
 
-               
-               
-               push @{$self->{queue}}, $sp if @$cand == 1; # queue the KEY (not the record)
-
-               dbg("RBN: key: '$sp' ADD RECORD call: $call qrg: $qrg origin: $origin") if isdbg('rbn');
+               dbg("RBN: key: '$sp' ADD RECORD call: $call qrg: $qrg origin: $origin respot: $respot") if $dbgrbn && isdbg('rbn');
 
                push @$cand, $r;
 
-               # At this point we run the queue to see if anything can be sent onwards to the punter
-               my $now = $main::systime;
-
-               # now run the waiting queue which just contains KEYS ($call|$qrg)
-               foreach $sp (@{$self->{queue}}) {
-                       my $cand = $spots->{$sp};
-                       unless ($cand && $cand->[0]) {
-                               dbg "RBN Cand " . ($cand ? 'def' : 'undef') . " [0] " . ($cand->[0] ? 'def' : 'undef') . " dwell $dwelltime";
-                               next;
-                       } 
-                       if ($now >= $cand->[CTime] + $dwelltime ) {
-                               # we have a candidate, create qualitee value(s);
-                               unless (@$cand > CEMPTY) {
-                                       dbg "RBN: QUEUE key '$sp' MISSING RECORDS " . dd($cand) if isdbg 'rbn';
-                                       shift @{$self->{queue}};
-                                       next;
-                               }
-                               my $savedtime = shift @$cand; # save the start time
-                               my $r = $cand->[0];
-                               my $quality = @$cand;
-                               $quality = 9 if $quality > 9;
-                               $quality = "Q:$quality";
-                               if (isdbg('progress')) {
-                                       my $s = "RBN: SPOT key: '$sp' = $r->[RCall] on $r->[RQrg] by $r->[ROrigin] \@ $r->[RTime] $quality";
-                                       $s .=  " route: $self->{call}";
-                                       dbg($s);
-                               }
-                               
-                               send_dx_spot($self, $quality, $cand);
-                               
-                               # clear out the data and make this now just "spotted", but no further action required until respot time
-                               dbg "RBN: QUEUE key '$sp' cleared" if isdbg 'rbn';
-                               
-                               $spots->{$sp} = [$savedtime];
-                               shift @{$self->{queue}};
-                       } else {
-                               dbg sprintf("RBN: QUEUE key: '$sp' SEND time not yet reached %.1f secs left", $cand->[0] + $dwelltime - $now) if isdbg 'rbnqueue'; 
-                       }
-               }
        } else {
-               dbg "RBN:DATA,$line" if isdbg('rbn');
+               dbg "RBN:DATA,$line" if $dbgrbn && isdbg('rbn');
        }
 }
 
@@ -436,7 +424,7 @@ sub send_dx_spot
        
        # $r = [$origin, $qrg, $call, $mode, $s, $utz, $respot];
 
-       my $mode = $cand->[0]->[3]; # as all the modes will be the same;
+       my $mode = $cand->[CData]->[RMode]; # as all the modes will be the same;
        
        my @dxchan = DXChannel::get_all();
 
@@ -474,13 +462,10 @@ sub dx_spot
        my $quality = shift;
        my $cand = shift;
        my $call = $dxchan->{call};
-       
-
+       my $seeme = $dxchan->user->rbnseeme();
        my $strength = 100;             # because it could if we talk about FTx
        my $saver;
-
        my %zone;
-       my %qrg;
        my $respot;
        my $qra;
 
@@ -490,22 +475,27 @@ sub dx_spot
 
        my $filtered;
        my $rf = $dxchan->{rbnfilter} || $dxchan->{spotsfilter};
+       my $comment;
+       
        foreach my $r (@$cand) {
                # $r = [$origin, $qrg, $call, $mode, $s, $t, $utz, $respot, $qra];
                # Spot::prepare($qrg, $call, $utz, $comment, $origin);
+               next unless $r && ref $r;
 
-               my $comment = sprintf "%-3s %2ddB $quality", $r->[RMode], $r->[RStrength];
-               $respot = 1 if $r->[Respot];
                $qra = $r->[RQra] if !$qra && $r->[RQra] && is_qra($r->[RQra]);
 
+               $comment = sprintf "%-3s %2ddB $quality", $r->[RMode], $r->[RStrength];
                my $s = $r->[RSpotData];                # the prepared spot
                $s->[SComment] = $comment;              # apply new generated comment
-               
-               
+
                ++$zone{$s->[SZone]};           # save the spotter's zone
-               ++$qrg{$s->[SQrg]};             # and the qrg
 
+               # if the 'see me' flag is set, then show all the spots without further adornment (see set/rbnseeme for more info)
+               if ($seeme) {
+                       send_final($dxchan, $s);
+                       next;
+               }
+
                # save the lowest strength one
                if ($r->[RStrength] < $strength) {
                        $strength = $r->[RStrength];
@@ -513,12 +503,11 @@ sub dx_spot
                        dbg("RBN: STRENGTH spot: $s->[SCall] qrg: $s->[SQrg] origin: $s->[SOrigin] dB: $r->[RStrength] < $strength") if isdbg 'rbnll';
                }
 
-               if ($rf && !$want) {
+               if ($rf) {
                        my ($want, undef) = $rf->it($s);
                        dbg("RBN: FILTERING for $call spot: $s->[SCall] qrg: $s->[SQrg] origin: $s->[SOrigin] dB: $r->[RStrength] com: '$s->[SComment]' want: " . ($want ? 'YES':'NO')) if isdbg 'rbnll';
                        next unless $want;
                        $filtered = $s;
-#                      last;
                }
        }
 
@@ -532,35 +521,11 @@ sub dx_spot
                delete $zone{$saver->[SZone]};  # remove this spotter's zone (leaving all the other zones)
                my $z = join ',', sort {$a <=> $b} keys %zone;
 
-               # determine the most likely qrg and then set it
-               my $mv = 0;
-               my $fk;
-               my $c = 0;
-               while (my ($k, $v) = each %qrg) {
-                       $fk = $k, $mv = $v if $v > $mv;
-                       ++$c;
-               }
-               $saver->[SQrg] = $fk;
-               $saver->[SComment] .= '*' if $c > 1;
-               $saver->[SComment] .= '+' if $respot;
+               # alter spot data accordingly
                $saver->[SComment] .= " Z:$z" if $z;
                
-               dbg("RBN: SENDING to $call spot: $saver->[SCall] qrg: $saver->[SQrg] origin: $saver->[SOrigin] $saver->[SComment]") if isdbg 'rbnll';
-               if ($dxchan->{ve7cc}) {
-                       my $call = $saver->[SOrigin];
-                       $saver->[SOrigin] .= '-#';
-                       $buf = VE7CC::dx_spot($dxchan, @$saver);
-                       $saver->[SOrigin] = $call;
-               } else {
-                       my $call = $saver->[SOrigin];
-                       $saver->[SOrigin] = substr($call, 0, 6);
-                       $saver->[SOrigin] .= '-#';
-                       $buf = $dxchan->format_dx_spot(@$saver);
-                       $saver->[SOrigin] = $call;
-               }
-#              $buf =~ s/^DX/RB/;
-               $dxchan->local_send('N', $buf);
-
+               send_final($dxchan, $saver);
+               
                ++$self->{nospot};
                ++$self->{nospot10};
                ++$self->{nospothour};
@@ -576,12 +541,277 @@ sub dx_spot
        }
 }
 
+sub send_final
+{
+       my $dxchan = shift;
+       my $saver = shift;
+       my $call = $dxchan->{call};
+       my $buf;
+       
+       dbg("RBN: SENDING to $call spot: $saver->[SCall] qrg: $saver->[SQrg] origin: $saver->[SOrigin] $saver->[SComment]") if isdbg 'rbnll';
+       if ($dxchan->{ve7cc}) {
+               my $call = $saver->[SOrigin];
+               $saver->[SOrigin] .= '-#';
+               $buf = VE7CC::dx_spot($dxchan, @$saver);
+               $saver->[SOrigin] = $call;
+       } else {
+               my $call = $saver->[SOrigin];
+               $saver->[SOrigin] = substr($call, 0, 6);
+               $saver->[SOrigin] .= '-#';
+               $buf = $dxchan->format_dx_spot(@$saver);
+               $saver->[SOrigin] = $call;
+       }
+       $dxchan->local_send('N', $buf);
+}
+
+# per second
+sub process
+{
+       my $rbnskim = isdbg('rbnskim');
+       
+       foreach my $dxchan (DXChannel::get_all()) {
+               next unless $dxchan->is_rbn;
+
+               # At this point we run the queue to see if anything can be sent onwards to the punter
+               my $now = $main::systime;
+               my $ta = [gettimeofday];
+               my $items = 0;
+               
+               # now run the waiting queue which just contains KEYS ($call|$qrg)
+               foreach my $sp (keys %{$dxchan->{queue}}) {
+                       my $cand = $spots->{$sp};
+                       ++$items;
+                       
+                       unless ($cand && $cand->[CTime]) {
+                               dbg "RBN Cand $sp " . ($cand ? 'def' : 'undef') . " [CTime] " . ($cand->[CTime] ? 'def' : 'undef') . " dwell $dwelltime";
+                               delete $spots->{$sp};
+                               delete $dxchan->{queue}->{$sp};    # remove
+                               next;
+                       }
+                       
+                       my $ctime = $cand->[CTime];
+                       my $quality = @$cand - CData;
+                       my $dwellsecs =  $now - $ctime;
+                       if ($quality >= $maxqual || $dwellsecs >= $dwelltime || $dwellsecs >= $limbotime) {
+                               # we have a candidate, create qualitee value(s);
+                               unless (@$cand > CData) {
+                                       dbg "RBN: QUEUE key '$sp' MISSING RECORDS, IGNORED" . dd($cand) if isdbg 'rbnqueue';
+                                       delete $spots->{$sp}; # don't remember it either - this means that a spot HAS to come in with sufficient spotters to be processed.
+                                       delete $dxchan->{queue}->{$sp};
+                                       next;
+                               }
+                               dbg "RBN: QUEUE PROCESSING key: '$sp' $now >= $cand->[CTime]" if isdbg 'rbnqueue'; 
+                               my $spotters = $quality;
+
+                               # dump it and remove it from the queue if it is of unadequate quality, but only if it is no longer in Limbo and can be reasonably passed on to its demise
+                               my $r = $cand->[CData];
+                               if ($dwellsecs > $limbotime && $quality < $minqual) {
+                                       if ( $rbnskim && isdbg('rbnskim')) {
+                                               $r = $cand->[CData];
+                                               if ($r) {
+                                                       my $lastin = difft($ctime, $now, 2);
+                                                       my $s = "RBN:SKIM time in Limbo exceeded DUMPED (lastin: $lastin Q:$quality < Q:$minqual) key: '$sp' = $r->[RCall] on $r->[RQrg] by $r->[ROrigin] \@ $r->[RTime] route: $dxchan->{call}";
+                                                       dbg($s);
+                                               }
+                                       }
+                                       delete $spots->{$sp}; # don't remember it either - this means that a spot HAS to come in with sufficient spotters to be processed.
+                                       delete $dxchan->{queue}->{$sp};
+                                       next;
+                               }
+
+                               # we have a possible removal from Limbo, check for more than one skimmer and reset the quality if required
+                               # DOES THIS TEST CAUSE RACES?
+                               if (!$r->[Respot] && $quality >= $minqual && $dwellsecs > $dwelltime+1) {
+
+                                       # because we don't need to check for repeats by the same skimmer in the normal case, we do here
+                                       my %seen;
+                                       my @origin;
+                                       foreach my $wr (@$cand) {
+                                               next unless ref $wr;
+                                               push @origin, $wr->[ROrigin];
+                                               if (exists $seen{$wr->[ROrigin]}) {
+                                                       next;
+                                               }
+                                               $seen{$wr->[ROrigin]} = $wr;
+                                       }
+                                       # reset the quality to ignore dupes
+                                       my $oq = $quality;
+                                       $quality = keys %seen;
+                                       if ($quality >= $minqual) {
+                                               if ( $rbnskim && isdbg('rbnskim')) {
+                                                       my $lastin = difft($ctime, $now, 2);
+                                                       my $sk = join ' ', keys %seen;
+                                                       my $or = join ' ', @origin;
+                                                       my $s = "RBN:SKIM promoted from Limbo - key: '$sp' (lastin: $lastin Q now: $quality was $oq skimmers now: $sk";
+                                                       $s .= " was $or" if $or ne $sk;
+                                                       $s .= ')';
+                                                       dbg($s);
+                                               } 
+                                       } elsif ($oq != $quality) {
+                                               if ( $rbnskim && isdbg('rbnskim')) {
+                                                       my $lastin = difft($ctime, $now, 2);
+                                                       my $sk = join ' ', keys %seen;
+                                                       my $or = join ' ', @origin;
+                                                       my $s = "RBN:SKIM quality reset key: '$sp' (lastin: $lastin Q now: $quality was $oq skimmers now: $sk was: $or)";
+                                                       dbg($s);
+                                               }
+                                               # remove the excess
+                                               my @ncand = (@$cand[CTime, CQual], values %seen);
+                                               $spots->{$sp} = \@ncand;
+                                       }
+                               }
+
+                               # we now kick this spot into Limbo 
+                               if ($quality < $minqual) {
+                                       next;
+                               }
+
+                               $quality = 9 if $quality > 9;
+                               $cand->[CQual] = $quality if $quality > $cand->[CQual];
+
+                               # this scores each candidate according to its skimmer's QRG score (i.e. how often it agrees with its peers)
+                               # what happens is hash of all QRGs in candidates are incremented by that skimmer's reputation for "accuracy"
+                               # or, more exactly, past agreement with the consensus. This score can be from -5 -> +5. 
+                               my %qrg = ();
+                               my $skimmer;
+                               my $sk;
+                               my $band;
+                               my %seen = ();
+                               foreach $r (@$cand) {
+                                       next unless ref $r;
+                                       if (exists $seen{$r->[ROrigin]}) {
+                                               $r = 0;
+                                               next;
+                                       }
+                                       $seen{$r->[ROrigin]} = 1;
+                                       $band ||= int $r->[RQrg] / 1000;
+                                       $sk = "SKIM|$r->[ROrigin]|$band"; # thus only once per set of candidates
+                                       $skimmer = $spots->{$sk};
+                                       unless ($skimmer) {
+                                               $skimmer = $spots->{$sk} = [1, 0, 0, $now, []]; # this first time, this new skimmer gets the benefit of the doubt on frequency.
+                                               dbg("RBN:SKIM new slot $sk " . $json->encode($skimmer)) if  $rbnskim && isdbg('rbnskim');
+                                       }
+                                       $qrg{$r->[RQrg]} += ($skimmer->[DScore] || 1);
+                               }
+                               
+                               # determine the most likely qrg and then set it - NOTE (-)ve votes, generated by the skimmer scoring system above, are ignored
+                               my @deviant;
+                               my $c = 0;
+                               my $mv = 0;
+                               my $qrg = 0;
+                               while (my ($k, $votes) = each %qrg) {
+                                       if ($votes >= $mv) {
+                                               $qrg = $k;
+                                               $mv = $votes;
+                                       }
+                                       ++$c;
+                               }
+
+                               # Ignore possible spots with 0 QRG score - as determined by the skimmer scoring system above -  as they are likely to be wrong 
+                               unless ($qrg > 0) {
+                                       if ( $rbnskim && isdbg('rbnskim')) {
+                                               my $keys;
+                                               while (my ($k, $v) = (each %qrg)) {
+                                                       $keys .= "$k=>$v, ";
+                                               }
+                                               $keys =~ /,\s*$/;
+                                               my $i = 0;
+                                               foreach $r (@$cand) {
+                                                       next unless $r && ref $r;
+                                                       dbg "RBN:SKIM cand $i QRG likely wrong from '$sp' = $r->[RCall] on $r->[RQrg] by $r->[ROrigin] \@ $r->[RTime] (qrgs: $keys c: $c) route: $dxchan->{call}, ignored";
+                                                       ++$i;
+                                               }
+                                       }
+                                       delete $spots->{$sp}; # get rid
+                                       delete $dxchan->{queue}->{$sp};
+                                       next;
+                               }
+
+                               # detemine and spit out the deviants. Then adjust the scores according to whether it is a deviant or good
+                               # NOTE: deviant nodes can become good (or less bad), and good nodes bad (or less good) on each spot that
+                               # they generate. This is based solely on each skimmer's agreement (or not) with the "consensus" score generated
+                               # above ($qrg). The resultant score + good + bad is stored per band and will be used the next time a spot
+                               # appears on this band from each skimmer.
+                               foreach $r (@$cand) {
+                                       next unless $r && ref $r;
+                                       my $diff = $c > 1 ? nearest(.1, $r->[RQrg] - $qrg) : 0;
+                                       $sk = "SKIM|$r->[ROrigin]|$band";
+                                       $skimmer = $spots->{$sk};
+                                       if ($diff) {
+                                               ++$skimmer->[DBad] if $skimmer->[DBad] < $maxdeviants;
+                                               --$skimmer->[DGood] if $skimmer->[DGood] > 0;
+                                               push @deviant, sprintf("$r->[ROrigin]:%+.1f", $diff);
+                                               push @{$skimmer->[DEviants]}, $diff;
+                                               shift @{$skimmer->[DEviants]} while @{$skimmer->[DEviants]} > $maxdeviants;
+                                       } else {
+                                               ++$skimmer->[DGood] if $skimmer->[DGood] < $maxdeviants;
+                                               --$skimmer->[DBad] if $skimmer->[DBad] > 0;
+                                               shift @{$skimmer->[DEviants]};
+                                       }
+                                       $skimmer->[DScore] = $skimmer->[DGood] - $skimmer->[DBad];
+                                       if ($rbnskim && isdbg('rbnskim')) {
+                                               my $lastin = difft($skimmer->[DLastin], $now, 2);
+                                               my $difflist = join(', ', @{$skimmer->[DEviants]});
+                                               $difflist = " band qrg diffs: $difflist" if $difflist;
+                                               dbg("RBN:SKIM key $sp slot $sk $r->[RQrg] - $qrg = $diff Skimmer score: $skimmer->[DGood] - $skimmer->[DBad] = $skimmer->[DScore] lastseen:$lastin ago$difflist"); 
+                                       }
+                                       $skimmer->[DLastin] = $now;
+                                       $r->[RSpotData]->[SQrg] = $qrg if $qrg && $c > 1; # set all the QRGs to the agreed value
+                               }
+
+                               $qrg = (sprintf "%.1f",  $qrg)+0;
+                               $r = $cand->[CData];
+                               $r->[RQrg] = $qrg;
+                               my $squality = "Q:$cand->[CQual]";
+                               $squality .= '*' if $c > 1; 
+                               $squality .= '+' if $r->[Respot];
+
+                               if (isdbg('progress')) {
+                                       my $rt = difft($ctime, $now, 2);
+                                       my $s = "RBN: SPOT key: '$sp' = $r->[RCall] on $r->[RQrg] by $r->[ROrigin] \@ $r->[RTime] $squality route: $dxchan->{call} dwell:$rt";
+                                       my $td = @deviant;
+                                       $s .= " QRGScore: $mv Deviants: $td/$spotters";
+                                       $s .= ' (' . join(', ', sort @deviant) . ')' if $td;
+                                       dbg($s);
+                               }
+
+                               # finally send it out to any waiting public
+                               send_dx_spot($dxchan, $squality, $cand);
+                               
+                               # clear out the data and make this now just "spotted", but no further action required until respot time
+                               dbg "RBN: QUEUE key '$sp' cleared" if isdbg 'rbn';
+
+                               delete $dxchan->{queue}->{$sp};
+
+                               # calculate new sp (which will be 70% likely the same as the old one)
+                               # we do this to cope with the fact that the first spotter may well be "wrongly calibrated" giving a qrg that disagrees with the majority.
+                               # and we want to store the key that corresponds to majority opinion. 
+                               my $nqrg = nearest(1, $qrg * 10);  # normalised to nearest Khz
+                               my $nsp = "$r->[RCall]|$nqrg";
+                               if ($sp ne $nsp) {
+                                       dbg("RBN:SKIM CHANGE KEY sp '$sp' -> '$nsp' for storage") if  $rbnskim && isdbg('rbnskim');
+                                       delete $spots->{$sp};
+                                       $spots->{$nsp} = [$now, $cand->[CQual]];
+                               } else {
+                                       $spots->{$sp} = [$now, $cand->[CQual]];
+                               }
+                       }
+                       else {
+                               dbg sprintf("RBN: QUEUE key: '$sp' SEND time not yet reached %.1f secs left", $cand->[CTime] + $dwelltime - $now) if isdbg 'rbnqueue'; 
+                       }
+               }
+               if (isdbg('rbntimer')) {
+                       my $diff = _diffus($ta);
+                       dbg "RBN: TIMER process queue for call: $dxchan->{call} $items spots $diff uS";
+               }
+       }
+}
 
 sub per_minute
 {
        foreach my $dxchan (DXChannel::get_all()) {
                next unless $dxchan->is_rbn;
-               dbg "RBN:STATS minute $dxchan->{call} raw: $dxchan->{noraw} sent: $dxchan->{norbn} delivered: $dxchan->{nospot} users: " . scalar keys %{$dxchan->{nousers}} if isdbg('rbnstats');
+               dbg "RBN:STATS minute $dxchan->{call} raw: $dxchan->{noraw} retrieved spots: $dxchan->{norbn} delivered: $dxchan->{nospot} after filtering to users: " . scalar keys %{$dxchan->{nousers}} if isdbg('rbnstats');
                if ($dxchan->{noraw} == 0 && $dxchan->{lasttime} > 60) {
                        LogDbg('RBN', "RBN: no input from $dxchan->{call}, disconnecting");
                        $dxchan->disconnect;
@@ -598,8 +828,12 @@ sub per_10_minute
 {
        my $count = 0;
        my $removed = 0;
-       while (my ($k,$v) = each %{$spots}) {
-               if ($main::systime - $v->[0] > $minspottime*2) {
+       while (my ($k,$cand) = each %{$spots}) {
+               next if $k eq 'VERSION';
+               next if $k =~ /^O\|/;
+               next if $k =~ /^SKIM\|/;
+               
+               if ($main::systime - $cand->[CTime] > $minspottime*2) {
                        delete $spots->{$k};
                        ++$removed;
                }
@@ -610,7 +844,9 @@ sub per_10_minute
        dbg "RBN:STATS spot cache remain: $count removed: $removed"; # if isdbg('rbn');
        foreach my $dxchan (DXChannel::get_all()) {
                next unless $dxchan->is_rbn;
-               dbg "RBN:STATS 10-minute $dxchan->{call} raw: $dxchan->{noraw10} sent: $dxchan->{norbn10} delivered: $dxchan->{nospot10} users: " . scalar keys %{$dxchan->{nousers10}};
+               my $nq = keys %{$dxchan->{queue}};
+               my $pc = $dxchan->{noraw10} ? sprintf("%.1f%%",$dxchan->{norbn10}*100/$dxchan->{noraw10}) : '0.0%';
+               dbg "RBN:STATS 10-minute $dxchan->{call} queue: $nq raw: $dxchan->{noraw10} retrieved spots: $dxchan->{norbn10} ($pc) delivered: $dxchan->{nospot10} after filtering to  users: " . scalar keys %{$dxchan->{nousers10}};
                $dxchan->{noraw10} = $dxchan->{norbn10} = $dxchan->{nospot10} = 0; $dxchan->{nousers10} = {};
        }
 }
@@ -619,7 +855,9 @@ sub per_hour
 {
        foreach my $dxchan (DXChannel::get_all()) {
                next unless $dxchan->is_rbn;
-               dbg "RBN:STATS hour $dxchan->{call} raw: $dxchan->{norawhour} sent: $dxchan->{norbnhour} delivered: $dxchan->{nospothour} users: " . scalar keys %{$dxchan->{nousershour}};
+               my $nq = keys %{$dxchan->{queue}};
+               my $pc = $dxchan->{norawhour} ? sprintf("%.1f%%",$dxchan->{norbnhour}*100/$dxchan->{norawhour}) : '0.0%';
+               dbg "RBN:STATS hour $dxchan->{call} queue: $nq raw: $dxchan->{norawhour} retrieved spots: $dxchan->{norbnhour} ($pc) delivered: $dxchan->{nospothour} after filtering to users: " . scalar keys %{$dxchan->{nousershour}};
                $dxchan->{norawhour} = $dxchan->{norbnhour} = $dxchan->{nospothour} = 0; $dxchan->{nousershour} = {};
        }
 }
@@ -631,11 +869,21 @@ sub finish
 
 sub write_cache
 {
-       my $fh = IO::File->new(">$cachefn") or confess("writing $cachefn $!");
-       $spots->{version} = $CACHE_VERSION;
-       my $s = $json->encode($spots);
-       $fh->print($s);
-       $fh->close;
+       my $ta = [ gettimeofday ];
+       $json->indent(1)->canonical(1) if isdbg 'rbncache';
+       my $s = eval {$json->encode($spots)};
+       if ($s) {
+               my $fh = IO::File->new(">$cachefn") or confess("writing $cachefn $!");
+               $fh->print($s);
+               $fh->close;
+       } else {
+               dbg("RBN:Write_cache error '$@'");
+               return;
+       }
+       $json->indent(0)->canonical(0);
+       my $diff = _diffms($ta);
+       my $size = sprintf('%.3fKB', (length($s) / 1000));
+       dbg("RBN:WRITE_CACHE size: $size time to write: $diff mS");
 }
 
 sub check_cache
@@ -643,7 +891,7 @@ sub check_cache
        if (-e $cachefn) {
                my $mt = (stat($cachefn))[9];
                my $t = $main::systime - $mt || 1;
-               my $p = difft($mt);
+               my $p = difft($mt, 2);
                if ($t < $cache_valid) {
                        dbg("RBN:check_cache '$cachefn' spot cache exists, created $p ago and not too old");
                        my $fh = IO::File->new($cachefn);
@@ -659,19 +907,23 @@ sub check_cache
                        }
                        if ($s) {
                                eval {$spots = $json->decode($s)};
-                               if ($spots && ref $spots) {
-                                       my $version = $spots->{version} || 0;
-                                       unless ($version != $CACHE_VERSION) {
-                                               # wrong version number
-                                               dbg("RBN:check_cache version number mismatch got: $version want: $CACHE_VERSION, reseting");
-                                               $spots = {};
-                                               return undef;
-                                       }
-                                       dbg("RBN:check_cache spot cache restored");
-                                       return 1;
+                               if ($spots && ref $spots) {     
+                                       if (exists $spots->{VERSION} && $spots->{VERSION} == $DATA_VERSION) {
+                                               # now clean out anything that has spot build ups in progress
+                                               while (my ($k, $cand) = each %$spots) {
+                                                       next if $k eq 'VERSION';
+                                                       next if $k =~ /^O\|/;
+                                                       next if $k =~ /^SKIM\|/;
+                                                       if (@$cand > CData) {
+                                                               $spots->{$k} = [$cand->[CTime], $cand->[CQual]];
+                                                       }
+                                               }
+                                               dbg("RBN:check_cache spot cache restored");
+                                               return 1;
+                                       } 
                                }
+                               dbg("RBN::checkcache error decoding $@");
                        }
-                       dbg("RBN::checkcache error decoding $@");
                } else {
                        my $d = difft($main::systime-$cache_valid);
                        dbg("RBN::checkcache '$cachefn' created $p ago is too old (> $d), ignored");
index 3f264846bd74ff4210b9276e7c6ce7e4e542ab44..304b9c6830b97f77bde4767cc64ad954c2a310e1 100644 (file)
@@ -224,12 +224,14 @@ sub config
                                        my $c;
                                        if ($uref) {
                                                $c = $uref->user_call;
-                                       } else {
+                                       }
+                                       else {
                                                $c = "$ucall?";
                                        }
                                        if ((length $line) + (length $c) + 1 < $width) {
                                                $line .= $c . ' ';
-                                       } else {
+                                       }
+                                       else {
                                                $line =~ s/\s+$//;
                                                push @out, $line;
                                                $line = ' ' x ($level*2) . "$pcall->$c ";
@@ -240,7 +242,8 @@ sub config
                $line =~ s/->$//g;
                $line =~ s/\s+$//;
                push @out, $line if length $line;
-       } else {
+       }
+       else {
                # recursion detector
                if ((DXChannel::get($call) && $level > 1) || $seen->{$call} || $level > $maxlevel) {
                        return @out;
index 193fb8de3d29ae55c2a4cf21fa67e879319d690c..76d987572e3e789f6beee90ba9a0ed0bfcddbcf3 100644 (file)
@@ -203,6 +203,14 @@ sub del_user
        return @out;
 }
 
+# is a user on this node
+sub is_user
+{
+       my $self = shift;
+       my $call = shift;
+       return scalar grep {$_ eq $call} @{$self->{users}};
+}
+
 sub usercount
 {
        my $self = shift;
@@ -270,6 +278,7 @@ sub calc_config_changes
        return (\@dnodes, \@dusers, \@nnodes, \@nusers);
 }
 
+
 sub new
 {
        my $pkg = shift;
index e99def158bcedfa087028790ae74882160c4ed44..8c1c824de5f58d4bf5e389aee4b40d675f259c65 100644 (file)
@@ -94,8 +94,6 @@ sub delparent
     return $self->_dellist('parent', @_);
 }
 
-
-
 #
 # generic AUTOLOAD for accessors
 #
index 763c60bda86747a30df086dac5c10f2f11e3c14c..92ce5249051480710fe009aeb1c81feab51bbb28 100644 (file)
@@ -18,6 +18,9 @@ use Prefix;
 use DXDupe;
 use Data::Dumper;
 use QSL;
+use DXSql;
+use Time::HiRes qw(gettimeofday tv_interval);
+
 
 use strict;
 
@@ -66,6 +69,10 @@ $filterdef = bless ([
 $totalspots = $hfspots = $vhfspots = 0;
 $use_db_for_search = 0;
 
+our %spotcache;                                        # the cache of data within the last $spotcachedays 0 or 2+ days
+our $spotcachedays = 2;                        # default 2 days worth
+our $minselfspotqrg = 1240000; # minimum freq above which self spotting is allowed
+
 our $readback = 1;
 
 if ($readback) {
@@ -124,6 +131,7 @@ sub init
        mkdir "$dirprefix", 0777 if !-e "$dirprefix";
        $fp = DXLog::new($dirprefix, "dat", 'd');
        $statp = DXLog::new($dirprefix, "dys", 'd');
+       my $today = Julian::Day->new(time);
 
        # load up any old spots 
        if ($main::dbh) {
@@ -134,7 +142,6 @@ sub init
                        $main::dbh->spot_create_table;
                        
                        my $now = Julian::Day->alloc(1995, 0);
-                       my $today = Julian::Day->new(time);
                        my $sth = $main::dbh->spot_insert_prepare;
                        while ($now->cmp($today) <= 0) {
                                my $fh = $fp->open($now);
@@ -177,6 +184,39 @@ sub init
                        dbg("added ipaddr field to spot table");
                }
        }
+
+       # initialise the cache if required
+       if ($spotcachedays > 0) {
+               my $t0 = [gettimeofday];
+               $spotcachedays = 2 if $spotcachedays < 2;
+               dbg "Spot::init - reading in $spotcachedays days of spots into cache"; 
+               for (my $i = 0; $i < $spotcachedays; ++$i) {
+                       my $now = $today->sub($i);
+                       my $fh = $fp->open($now);
+                       if ($fh) {
+                               my @in;
+                               my $rec;
+                               for ($rec = 0; <$fh>; ++$rec) {
+                                       chomp;
+                                       my @s = split /\^/;
+                                       if (@s < 14) {
+                                               my @a = (Prefix::cty_data($s[1]))[1..3];
+                                               my @b = (Prefix::cty_data($s[4]))[1..3];
+                                               push @s, $b[1] if @s < 7;
+                                               push @s, '' if @s < 8;
+                                               push @s, @a[0,1], @b[0,1] if @s < 12;
+                                               push @s,  $a[2], $b[2] if @s < 14;
+                                       }
+                                       unshift @in, \@s; 
+                               }
+                               $fh->close;
+                               dbg("Spot::init read $rec spots from " . _cachek($now));
+                               $spotcache{_cachek($now)} = \@in;
+                       }
+                       $now->add(1);
+               }
+               dbg("Spot::init $spotcachedays files of spots read into cache in " . _diffms($t0) . "mS")
+       }
 }
 
 sub prefix
@@ -220,6 +260,12 @@ sub add
 {
        my $buf = join('^', @_);
        $fp->writeunix($_[2], $buf);
+       if ($spotcachedays > 0) {
+               my $now = Julian::Day->new($_[2]);
+               my $day = _cachek($now);
+               my $r = (exists $spotcache{$day}) ? $spotcache{$day} : ($spotcache{$day} = []);
+               unshift @$r, \@_;
+       }
        if ($main::dbh) {
                $main::dbh->begin_work;
                $main::dbh->spot_insert(\@_);
@@ -270,7 +316,7 @@ sub add
 
 sub search
 {
-       my ($expr, $dayfrom, $dayto, $from, $to, $hint, $dxchan) = @_;
+       my ($expr, $dayfrom, $dayto, $from, $to, $hint, $dofilter, $dxchan) = @_;
        my @out;
        my $ref;
        my $i;
@@ -292,7 +338,7 @@ sub search
        $to = $from + $maxspots if $to - $from > $maxspots || $to - $from <= 0;
 
        if ($main::dbh && $use_db_for_search) {
-               return $main::dbh->spot_search($hint, $dayfrom, $dayto, $to-$from, $dxchan);
+               return $main::dbh->spot_search($expr, $dayfrom, $dayto, $from, $to, $hint, $dofilter, $dxchan);
        }
 
        #       $expr =~ s/\$f(\d\d?)/\$ref->[$1]/g; # swap the letter n for the correct field name
@@ -312,49 +358,70 @@ sub search
        
        my $fh;
        my $now = $fromdate;
-       my @spots;
-       my $recs;
+       my $today = Julian::Day->new($main::systime);
        
        for ($i = $count = 0; $count < $to && $i < $maxdays; ++$i) { # look thru $maxdays worth of files only
                last if $now->cmp($todate) <= 0;
-               
-               my $fn = $fp->fn($now->sub($i));
-               if ($readback) {
-                       dbg("Spot::search search using tac fn: $fn $i") if isdbg('search');
-                       $fh = IO::File->new("$readback $fn |");
-               }
-               else {
-                       dbg("Spot::search search fn: $fp->{fn} $i") if isdbg('search');
-                       $fh = $fp->open($now->sub($i)); # get the next file
-               }
-               if ($fh) {
-                       my $rec = 0;
-                       my $in;
-                       while (<$fh>) {
-                               my @r = split /\^/;
+
+
+               my $this = $now->sub($i);
+               my $fn = $fp->fn($this);
+               my $cachekey = _cachek($this); 
+               my $rec = 0;
+
+               if ($spotcachedays > 0 && $spotcache{$cachekey}) {
+                       foreach my $r (@{$spotcache{$cachekey}}) {
                                ++$rec;
-                               if ($dxchan) {
-                                       my ($gotone, undef) = $dxchan->{spotsfilter}->it(@r);
+                               if ($dofilter && $dxchan && $dxchan->{spotsfilter}) {
+                                       my ($gotone, undef) = $dxchan->{spotsfilter}->it(@$r);
                                        next unless $gotone;
                                }
-                               if (&$ecode(\@r)) {
+                               if (&$ecode($r)) {
                                        ++$count;
                                        next if $count < $from;
-                                       if ($readback) {
-                                               push @out, \@r;
-                                               last if $count >= $to;
-                                       } else {
-                                               push @out, \@r;
-                                               shift @out if $count >= $to;
+                                       push @out, $r;
+                                       last if $count >= $to;
+                               }
+                       }
+                       dbg("Spot::search cache recs read: $rec") if isdbg('search');
+               } else {
+                       if ($readback) {
+                               dbg("Spot::search search using tac fn: $fn $i") if isdbg('search');
+                               $fh = IO::File->new("$readback $fn |");
+                       }
+                       else {
+                               dbg("Spot::search search fn: $fp->{fn} $i") if isdbg('search');
+                               $fh = $fp->open($now->sub($i)); # get the next file
+                       }
+                       if ($fh) {
+                               my $in;
+                               while (<$fh>) {
+                                       chomp;
+                                       my @r = split /\^/;
+                                       ++$rec;
+                                       if ($dofilter && $dxchan && $dxchan->{spotsfilter}) {
+                                               my ($gotone, undef) = $dxchan->{spotsfilter}->it(@r);
+                                               next unless $gotone;
+                                       }
+                                       if (&$ecode(\@r)) {
+                                               ++$count;
+                                               next if $count < $from;
+                                               if ($readback) {
+                                                       push @out, \@r;
+                                                       last if $count >= $to;
+                                               } else {
+                                                       push @out, \@r;
+                                                       shift @out if $count >= $to;
+                                               }
                                        }
                                }
+                               dbg("Spot::search file recs read: $rec") if isdbg('search');
+                               last if $count >= $to; # stop after to
                        }
-                       dbg("Spot::search recs read: $rec") if isdbg('search');
-                       last if $count >= $to; # stop after to
-                       
-                       return ("Spot search error", $@) if $@;
                }
        }
+       return ("Spot search error", $@) if $@;
+
        @out = sort {$b->[2] <=> $a->[2]} @out if @out;
        return @out;
 }
@@ -391,15 +458,26 @@ sub ftor
 # format a spot for user output in list mode
 sub formatl
 {
-       my $t = ztime($_[2]);
-       my $d = cldate($_[2]);
-       return sprintf "%8.1f  %-11s %s %s  %-28.28s%7s>", $_[0], $_[1], $d, $t, ($_[3]||''), "<$_[4]" ;
+       my $t = ztime($_[3]);
+       my $d = cldate($_[3]);
+       my $spotter = "<$_[5]>";
+       my $comment = $_[4] || '';
+       $comment =~ s/\t+/ /g;
+       my $cl = length $comment;
+       my $s = sprintf "%9.1f %-11s %s %s", $_[1], $_[2], $d, $t;
+       my $width = ($_[0] ? $_[0] : 80) - length($spotter) - length($s) - 4;
+       
+       $comment = substr $comment, 0, $width if $cl > $width;
+       $comment .= ' ' x ($width-$cl) if $cl < $width;
+
+#      return sprintf "%8.1f  %-11s %s %s  %-28.28s%7s>", $_[0], $_[1], $d, $t, ($_[3]||''), "<$_[4]" ;
+       return "$s $comment$spotter";
 }
 
 # enter the spot for dup checking and return true if it is already a dup
 sub dup
 {
-       my ($freq, $call, $d, $text, $by, $cty) = @_; 
+       my ($freq, $call, $d, $text, $by, $node) = @_; 
 
        # dump if too old
        return 2 if $d < $main::systime - $dupage;
@@ -418,21 +496,16 @@ sub dup
        chomp $text;
        $text =~ s/\%([0-9A-F][0-9A-F])/chr(hex($1))/eg;
        $text = uc unpad($text);
-       if ($cty && $text && length $text <= 4) {
-               unless ($text =~ /^C?Q/ || $text =~ /^[\d\W]+$/) {
-                       my @try = Prefix::cty_data($text);
-                       $text = "" if $cty == $try[0];
-               }
-       }
        my $otext = $text;
 #      $text = Encode::encode("iso-8859-1", $text) if $main::can_encode && Encode::is_utf8($text, 1);
        $text =~ s/^\+\w+\s*//;                 # remove leading LoTW callsign
        $text =~ s/\s{2,}[\dA-Z]?[A-Z]\d?$// if length $text > 24;
        $text =~ s/[\W\x00-\x2F\x7B-\xFF]//g; # tautology, just to make quite sure!
        $text = substr($text, 0, $duplth) if length $text > $duplth; 
-       my $ldupkey = "X$freq|$call|$by|$text";
+       my $ldupkey = "X$|$call|$by|$node|$freq|$d||$text";
        my $t = DXDupe::find($ldupkey);
-       return 1 if $t && $t - $main::systime > 0;
+       return $ldupkey if $t && $t - $main::systime > 0;
+       
        DXDupe::add($ldupkey, $main::systime+$dupage);
        $otext = substr($otext, 0, $duplth) if length $otext > $duplth; 
        $otext =~ s/\s+$//;
@@ -442,7 +515,7 @@ sub dup
                return 1 if $t && $t - $main::systime > 0;
                DXDupe::add($ldupkey, $main::systime+$dupage);
        }
-       return 0;
+       return undef;
 }
 
 sub listdups
@@ -510,6 +583,26 @@ sub daily
 {
        my $date = Julian::Day->new($main::systime)->sub(1);
        genstats($date) unless checkstats($date);
+       clean_cache();
+}
+
+sub _cachek
+{
+       return "$_[0]->[0]|$_[0]->[1]";
+}
+
+sub clean_cache
+{
+       if ($spotcachedays > 0) {
+               my $now = Julian::Day->new($main::systime);
+               for (my $i = $spotcachedays; $i < $spotcachedays + 5; ++$i ) {
+                       my $k = _cachek($now->sub($i));
+                       if (exists $spotcache{$k}) {
+                               dbg("Spot::spotcache deleting day $k, more than $spotcachedays days old");
+                               delete $spotcache{$k};
+                       }
+               }
+       }
 }
 1;
 
index a45218781f4bfde4fba7675144bbbc6bf6d85141..37da05b232f4301db0f8a84cadb0c94639d17f4b 100644 (file)
@@ -31,4 +31,4 @@ $localcmd = "$root/local_cmd";
 $userfn = "$local_data/users";
 
 # the "message of the day" file
-$motd = "$local_data/motd";
+$motd = "motd";
diff --git a/perl/Timer.pm b/perl/Timer.pm
deleted file mode 100644 (file)
index fb429f6..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Polled Timer handling
-#
-# This uses callbacks. BE CAREFUL!!!!
-#
-#
-#
-# Copyright (c) 2001 Dirk Koopman G1TLH
-#
-
-package Timer;
-
-use vars qw(@timerchain $notimers $lasttime);
-use DXDebug;
-
-@timerchain = ();
-$notimers = 0;
-
-$lasttime = 0;
-
-sub new
-{
-    my ($pkg, $time, $proc, $recur) = @_;
-       my $obj = ref($pkg);
-       my $class = $obj || $pkg;
-       my $self = bless { t=>$time + time, proc=>$proc }, $class;
-       $self->{interval} = $time if $recur;
-       push @timerchain, $self;
-       $notimers++;
-       dbg("Timer created ($notimers)") if isdbg('connll');
-       return $self;
-}
-
-sub del
-{
-       my $self = shift;
-       delete $self->{proc};
-       @timerchain = grep {$_ != $self} @timerchain;
-}
-
-sub handler
-{
-       my $now = time;
-
-       return unless $now != $lasttime;
-
-       # handle things on the timer chain
-       my $t;
-       foreach $t (@timerchain) {
-               if ($now >= $t->{t}) {
-                       &{$t->{proc}}();
-                       $t->{t} = $now + $t->{interval} if exists $t->{interval};
-               }
-       }
-
-       $lasttime = $now;
-}
-
-sub DESTROY
-{
-       dbg("timer destroyed ($Timer::notimers)") if isdbg('connll');
-       $Timer::notimers--;
-}
-1;
index 478763efb534bb511a4e38c5bf056fa9cccc1c59..2ecb8ce015af736d1d923700018698a196aac522 100644 (file)
@@ -10,6 +10,7 @@ package USDB;
 use strict;
 
 use DXVars;
+use SysVar;
 use DB_File;
 use File::Copy;
 use DXDebug;
@@ -120,9 +121,10 @@ sub load
        
        my %dbn;
        if (-e $dbfn ) {
-               copy($dbfn, "$dbfn.new") or return "cannot copy $dbfn -> $dbfn.new $!";
+               copy($dbfn, "$dbfn.old") or return "cannot copy $dbfn -> $dbfn.old $!";
        }
-       
+
+       unlink "$dbfn.new";
        tie %dbn, 'DB_File', "$dbfn.new", O_RDWR|O_CREAT, 0664, $a or return "cannot tie $dbfn.new $!";
        
        # now write away all the files
index 81a11144b8f3ed4b1fbd0e538c77da67d9207eaa..729b91c07f43359a6856f9b831ff4857cf6f8e8f 100644 (file)
@@ -47,8 +47,10 @@ sub dx_spot
                my $loc = $ref->qra || '';
                $loc_spotter = substr($loc, 0, 4) if $loc;
        }
+       my $text = $_[4];
+       $text =~ s/\^/~/g;
        
-       return sprintf("CC11^%0.1f^%s^", $freq, $spotted) . join('^', cldate($t), ztime($t), @_, $spotted_cc, $spotter_cc, $loc_spotted, $loc_spotter);
+       return sprintf("CC11^%0.1f^%s^", $freq, $spotted) . join('^', cldate($t), ztime($t), @_[0..3], $text, @_[5..10], $spotted_cc, $spotter_cc, $loc_spotted, $loc_spotter);
 }
 
 1;
diff --git a/perl/WSJTX.pm b/perl/WSJTX.pm
new file mode 100644 (file)
index 0000000..b421620
--- /dev/null
@@ -0,0 +1,333 @@
+#
+# WSJTX logging and control protocol decoder etc
+#
+#
+
+package WSJTX;
+
+use strict;
+use warnings;
+use 5.10.1;
+
+use JSON;
+use DXDebug;
+
+my $json;
+
+our %spec = (
+                        '0' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['schema', 'int32'],
+                                        ['version', 'utf'],
+                                        ['revision', 'utf'],
+                                       ],
+                        '1' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['qrg', 'int64', '_myqrg'],
+                                        ['mode', 'utf'],
+                                        ['dxcall', 'utf'],
+                                        ['report', 'utf'],
+                                        ['txmode', 'utf'],
+                                        ['txenabled', 'bool'],
+                                        ['txing', 'bool'],
+                                        ['decoding', 'bool'],
+                                        ['rxdf', 'int32'],
+                                        ['txdf', 'int32'],
+                                        ['mycall', 'utf', '_mycall'],
+                                        ['mygrid', 'utf', '_mygrid'],
+                                        ['dxgrid', 'utf'],
+                                        ['txwd', 'bool'],
+                                        ['submode', 'utf'],
+                                        ['fastmode', 'bool'],
+                                        ['som', 'int8', \&_som],
+                                        ['qrgtol', 'int32'],
+                                        ['trperiod', 'int32'],
+                                        ['confname', 'utf'],
+                                       ],
+                        '2' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['new', 'bool'],
+                                        ['tms', 'int32'],
+                                        ['snr', 'int32'],
+                                        ['deltat', 'float'],
+                                        ['deltaqrg', 'int32'],
+                                        ['mode', 'utf'],
+                                        ['msg', 'utf'],
+                                        ['lowconf', 'bool'],
+                                        ['offair', 'bool'],
+                                       ],
+                        '3' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['window', 'int8'],
+                                       ],
+                        '4' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['tms', 'int32'],
+                                        ['snr', 'int32'],
+                                        ['deltat', 'float'],
+                                        ['deltaqrg', 'int32'],
+                                        ['mode', 'utf'],
+                                        ['msg', 'utf'],
+                                        ['lowconf', 'bool'],
+                                        ['modifiers', 'int8'],
+                                       ],
+                        '5' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['toff', 'qdate'],
+                                        ['dxcall', 'utf'],
+                                        ['dxgrid', 'utf'],
+                                        ['qrg', 'int64'],
+                                        ['mode', 'utf'],
+                                        ['repsent', 'utf'],
+                                        ['reprcvd', 'utf'],
+                                        ['txpower', 'utf'],
+                                        ['comment', 'utf'],
+                                        ['name', 'utf'],
+                                        ['ton', 'qdate'],
+                                        ['opcall', 'utf'],
+                                        ['mycall', 'utf'],
+                                        ['mysent', 'utf'],
+                                        ['xchgsent', 'utf'],
+                                        ['reprcvd', 'utf'],
+                                       ],
+                        '6' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                       ],
+                        '7' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                       ],
+                        '8' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['autotx', 'bool'],
+                                       ],
+                        '9' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['txt', 'utf'],
+                                        ['send', 'bool'],
+                                       ],
+                        '10' => [
+                                         ['type', 'int32'],
+                                         ['id', 'utf'],
+                                         ['new', 'bool'],
+                                         ['tms', 'int32'],
+                                         ['snr', 'int32'],
+                                         ['deltat', 'float'],
+                                         ['qrg', 'int64'],
+                                         ['drift', 'int32'],
+                                         ['call', 'utf'],
+                                         ['grid', 'utf'],
+                                         ['power', 'int32'],
+                                         ['offair', 'bool'],
+                                        ],
+                        '11' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['grid', 'utf'],
+                                       ],
+                        '12' => [
+                                        ['type', 'int32'],
+                                        ['id', 'utf'],
+                                        ['adif', 'utf'],
+                                       ],
+                        
+                       );
+
+sub new
+{
+       my $name = shift;
+       my $args =  ref $_[0] ? $_[0] : {@_};
+
+       $json = JSON->new->canonical unless $json;
+
+       my $self = bless {}, $name;
+       if (exists $args->{handle}) {
+               my $v = $args->{handle};
+               for (split ',', $v) {
+                       $self->{"h_$_"} = 1;
+               }
+       }
+       return $self;
+       
+}
+
+sub handle
+{
+       my ($self, $handle, $data, $origin) = @_;
+
+       my $lth = length $data;
+       dbgdump('udp', "UDP IN lth: $lth", $data);
+
+       my ($magic, $schema, $type) = eval {unpack 'N N N', $data};
+       return 0 unless $magic == 0xadbccbda && $schema >= 0 && $schema <= 3 && $spec{$type};
+       my $out = $self->unpack($data, $spec{$type}, $origin);
+       dbg($out) if $out && $type != 0;
+       
+       return $out;
+}
+
+use constant NAME => 0;
+use constant SORT => 1;
+use constant FUNC => 2;
+use constant LASTTIME => 0;
+use constant MYCALL => 1;
+use constant MYGRID => 2;
+use constant MYQRG => 3;
+
+sub unpack
+{
+       my $self = shift;
+       my $data = shift;
+       my $spec = shift;
+       my $ip = shift;
+
+       my $now = time;
+       my $mycall;
+       my $mygrid;
+       my $myqrg;
+               
+       if ($ip) {
+               my $cr = $self->{CR}->{$ip};
+               if ($cr) {
+                       $mycall = $cr->[MYCALL];
+                       $mygrid = $cr->[MYGRID];
+                       $myqrg = $cr->[MYQRG];
+                       $cr->[LASTTIME] = $now;
+               }
+               $self->{ip} = $ip
+       } else {
+               delete $self->{ip};
+       }
+       
+       my $pos = $self->{unpackpos} || 8;
+       my $out = $pos ? '{' : '';
+
+       foreach my $r (@$spec) {
+               my $v = 'NULL';
+               my $l;
+               my $alpha;
+
+               last if $pos >= length $data;
+               
+               if ($r->[SORT] eq 'int32') {
+                       $l = 4;
+                       ($v) = unpack 'l>', substr $data, $pos, $l;
+               } elsif ($r->[SORT] eq 'int64') {
+                       $l = 8;
+                       ($v) = unpack 'Q>', substr $data, $pos, $l;
+               } elsif ($r->[SORT] eq 'int8') {
+                       $l = 1;
+                       ($v) = unpack 'c', substr $data, $pos, $l;
+                       
+               } elsif ($r->[SORT] eq 'bool') {
+                       $l = 1;
+                       ($v) = unpack 'c', substr $data, $pos, $l;
+                       $v += 0;
+               } elsif ($r->[SORT] eq 'float') {
+                       $l = 8;
+                       ($v) = unpack 'd>', substr $data, $pos, $l;
+                       $v = sprintf '%.3f', $v;
+                       $v += 0;
+               } elsif ($r->[SORT] eq 'utf') {
+                       $l = 4;
+                       ($v) = unpack 'l>', substr $data, $pos, 4;
+                       if ($v > 0) {
+                               ($v) = unpack "a$v", substr $data, $pos+4;
+                               $l += length $v;
+                               ++$alpha;
+                       } else {
+                               $pos += 4;
+                               next;                   # null alpha field
+                       } 
+               }
+
+               $out .= qq{"$r->[NAME]":};
+               if ($r->[FUNC]) {
+                       no strict 'refs';
+                       ($v, $alpha) = $r->[FUNC]($self, $v);
+               }
+               $out .= $alpha ? qq{"$v"} : $v;
+               $out .= ',';
+               $pos += $l;
+       }
+
+       return undef unless $mycall;
+       
+       $out .= qq{"ocall":"$mycall",} if $mycall;
+       $out .= qq{"ogrid":"$mygrid",} if $mygrid;
+       $out .= qq{"oqrg":"$myqrg",} if $myqrg;
+#      $out .= qq{"oip":"$ip",} if $ip;
+
+       $out =~ s/,$//;
+       $out .= '}';
+       
+       delete $self->{unpackpos};
+
+       return $out;
+}
+
+sub finish
+{
+
+}
+
+sub per_sec
+{
+       
+}
+
+sub per_minute
+{
+
+}
+
+sub _som
+{
+       my $self = shift;
+       
+       my @s = qw{NONE NA-VHF EU-VHF FIELD-DAY RTTY-RU WW-DIGI FOX HOUND};
+       my $v = $s[shift];
+       $v ||= 'UNKNOWN';
+       return ($v, 1);
+}
+
+sub _mycall
+{
+       my $self = shift;
+       my $v = shift;
+       my $ip = $self->{ip};
+       my $cr = $self->{CR}->{$ip} ||= [];
+       $v = $cr->[MYCALL] //= $v;
+       return ($v, 1); 
+}
+
+sub _mygrid
+{
+       my $self = shift;
+       my $v = shift;
+       my $ip = $self->{ip};
+       my $cr = $self->{CR}->{$ip} ||= [];
+       $v = $cr->[MYGRID] //= $v;
+       return ($v, 1); 
+}
+
+sub _myqrg
+{
+       my $self = shift;
+       my $v = shift;
+       my $ip = $self->{ip};
+       my $cr = $self->{CR}->{$ip} ||= [];
+       $v = $cr->[MYQRG] = $v;
+       return ($v, 1); 
+}
+
+1;
diff --git a/perl/call.pl b/perl/call.pl
deleted file mode 100755 (executable)
index 8c089e0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Query the PineKnot Database server for a callsign
-#
-# from an idea by Steve Franke K9AN and information from Angel EA7WA
-#
-#
-#
-my ($self, $line) = @_;
-my @list = split /\s+/, $line;               # generate a list of callsigns
-my $l;
-my $call = $self->call;
-my @out;
-
-return (1, "SHOW/CALL <callsign>, e.g. SH/CALL g1tlh") unless @list;
-
-use Net::Telnet;
-
-my $t = new Net::Telnet;
-
-push @out, $self->msg('call1', 'AA6HF');
-foreach $l (@list) {
-       $t->open(Host     =>  "jeifer.pineknot.com",
-                        Port     =>  1235,
-                        Timeout  =>  5);
-       if ($t) {
-               $t->print(uc $l);
-               Log('call', "$call: show/call \U$l");
-               while (my $result = $t->getline) {
-                       push @out,$result;
-               }
-               $t->close;
-       } else {
-               push @out, $self->msg('e18', 'AA6HF');
-       }
-}
-
-return (1, @out);
index a38e5a1095d2e325c1c35ecf9160544841303af4..818718f870d3459a7aa648a342c2c10f2a136fa0 100755 (executable)
@@ -31,7 +31,6 @@ $yes = 'Yes';                                 # visual representation of yes
 $no = 'No';                                            # ditto for no
 $user_interval = 11*60;                        # the interval between unsolicited prompts if no traffic
 
-
 # make sure that modules are searched in the order local then perl
 BEGIN {
        umask 002;
@@ -41,12 +40,16 @@ BEGIN {
        eval {
                require local::lib;
        };
-       import local::lib unless ($@);
+       unless ($@) {
+#              import local::lib;
+               import local::lib qw(/spider/perl5lib);
+       } 
 
        # root of directory tree for this system
        $root = "/spider";
        $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
 
+       unshift @INC, "$root/perl5lib" unless grep {$_ eq "$root/perl5lib"} @INC;
        unshift @INC, "$root/perl";     # this IS the right way round!
        unshift @INC, "$root/local";
 
@@ -87,6 +90,7 @@ BEGIN {
        
 }
 
+
 use DXVars;
 use SysVar;
 
@@ -134,7 +138,7 @@ use AnnTalk;
 use BBS;
 use WCY;
 use BadWords;
-use Timer;
+use DXTimer;
 use Route;
 use Route::Node;
 use Route::User;
@@ -250,18 +254,18 @@ sub new_channel
                }
 
                # is he locked out ?
+               my $lock;
                $user = DXUser::get_current($call);
                $conn->conns($call);
                my $basecall = $call;
-               $basecall =~ s/-\d+$//; # remember this for later multiple user processing
-               my $lock;
+               $basecall =~ s/-\d+$//; # remember this for later multiple user processing, it's used for other stuff than checking lockout status
                if ($user) {
                        # make sure we act on any locked status that the actual incoming call has.
                        $lock = $user->lockout;
-               } elsif ($allowmultiple && $call ne $basecall) {
-                   # if we are allowing multiple connections and there is a basecall minus incoming ssid, use the basecall's lock status
-                       $user = DXUser::get_current($basecall);
-                       $lock = $user->lockout if $user;
+               } elsif ($basecall ne $call) {
+                       # if there isn't a SSID on the $call, then try the base
+                       my $luser = DXUser::get_current($basecall);
+                       $lock = $luser->lockout if $luser;
                }
 
                # now deal with the lock
@@ -424,7 +428,7 @@ sub cease
                $l->close_server;
        }
 
-       LogDbg('cluster', "DXSpider V$version, build $build (git: $gitbranch/$gitversion) ended");
+       LogDbg('cluster', "DXSpider v$version build $build (git: $gitbranch/$gitversion) using perl $^V on $^O ended");
        dbg("bye bye everyone - bye bye");
        dbgclose();
        Logclose();
@@ -475,6 +479,8 @@ sub setup_start
        #
        #############################################################
 
+       chdir $root;
+       
        $starttime = $systime = time;
        $systime_days = int ($systime / 86400);
        $systime_daystart = $systime_days * 86400;
@@ -485,12 +491,14 @@ sub setup_start
        }
 
        # open the debug file, set various FHs to be unbuffered
-       dbginit($broadcast_debug ? \&DXCommandmode::broadcast_debug : undef);
+       dbginit(undef, $broadcast_debug ? \&DXCommandmode::broadcast_debug : undef);
        foreach (@debug) {
                dbgadd($_);
        }
        STDOUT->autoflush(1);
 
+       # log our path
+       dbg "Perl path: " . join(':', @INC);
        
        # try to load the database
        if (DXSql::init($dsn)) {
@@ -508,26 +516,25 @@ sub setup_start
                        import Encode;
                        $can_encode = 1;
                }
+
                $gitbranch = 'none';
                $gitversion = 'none';
-               eval { require Git; };
-               unless ($@) {
-                       import Git;
                
-                       # determine the real version number
-                       my $repo = Git->repository(Directory => "$root/.git");
-                       if ($repo) {
-                               my $desc = $repo->command_oneline(['describe', '--long'], STDERR => 0);
-                               if ($desc) {
-                                       my ($v, $s, $b, $g) = $desc =~ /^([\d.]+)(?:\.(\d+))?-(\d+)-g([0-9a-f]+)/;
-                                       $s ||= '';
-                                       dbg("Git: $desc") if isdbg('git');
-                                       dbg("Git: V=$v S=$s B=$b g=$g") if isdbg('git');
-                                       $version = $v;
-                                       $build = $b || 0;
-                                       $gitversion = "$g\[r]";
-                               }
-                               my @branch = $repo->command([qw{branch}], STDERR=>0);
+               # determine the real Git build number and branch
+               my $desc;
+               eval {$desc = `git --git-dir=$root/.git describe --long`};
+               if (!$@ && $desc) {
+                       my ($v, $s, $b, $g) = $desc =~ /^([\d\.]+)(?:\.(\d+))?-(\d+)-g([0-9a-f]+)/;
+                       $version = $v;
+                       my $subversion = $s || 0; # not used elsewhere
+                       $build = $b || 0;
+                       $gitversion = "$g\[r]";
+               }
+               if (!$@) {
+                       my @branch;
+
+                       eval {@branch = `git --git-dir=$root/.git branch`};
+                       unless ($@) {
                                for (@branch) {
                                        my ($star, $b) = split /\s+/;
                                        if ($star eq '*') {
@@ -537,16 +544,23 @@ sub setup_start
                                }
                        }
                }
+
                $SIG{__DIE__} = $w;
        }
 
+       # setup location of motd & issue
+       localdata_mv($motd);
+       $motd = localdata($motd);
+       localdata_mv("issue");
+       
+
        # try to load XML::Simple
        DXXml::init();
 
        # banner
        my ($year) = (gmtime)[5];
        $year += 1900;
-       LogDbg('cluster', "DXSpider V$version, build $build (git: $gitbranch/$gitversion) started");
+       LogDbg('cluster', "DXSpider v$version build $build (git: $gitbranch/$gitversion) using perl $^V on $^O started");
        dbg("Copyright (c) 1998-$year Dirk Koopman G1TLH");
 
        # load Prefixes
@@ -655,14 +669,14 @@ sub setup_start
        dbg("Start WCY");
        WCY->init();
 
-       # initial the Spot stuff
-       dbg("Starting DX Spot system");
-       Spot->init();
-
        # initialise the protocol engine
        dbg("Start Protocol Engines ...");
        DXProt->init();
 
+       # read startup script
+       my $script = new Script "startup";
+       $script->run($main::me) if $script;
+
        # put in a DXCluster node for us here so we can add users and take them away
        $routeroot = Route::Node->new($mycall, $version*100+5300, Route::here($main::me->here)|Route::conf($main::me->conf));
        $routeroot->do_pc9x(1);
@@ -674,6 +688,10 @@ sub setup_start
        #       $Route::filterdef->cmd($main::me, 'route', 'accept', "node_default call $mycall" );
        #}
 
+       # initial the Spot stuff
+       dbg("Starting DX Spot system");
+       Spot->init();
+
        # read in any existing message headers and clean out old crap
        dbg("reading existing message headers ...");
        DXMsg->init();
@@ -703,8 +721,6 @@ sub setup_start
 
        # this, such as it is, is the main loop!
        dbg("orft we jolly well go ...");
-       my $script = new Script "startup";
-       $script->run($main::me) if $script;
 
        #open(DB::OUT, "|tee /tmp/aa");
 }
@@ -744,7 +760,7 @@ sub idle_loop
                        $main::me->disconnect;
                }
 
-               Mojo::IOLoop->stop if --$ending <= 0;
+               Mojo::IOLoop->stop_gracefully if --$ending <= 0;
        }
 }
 
@@ -773,8 +789,9 @@ sub per_sec
        DXUser::process();
        AGWMsg::process();
        DXCron::process();                      # do cron jobs
-       
-       Timer::handler();
+       RBN::process();
+
+       DXTimer::handler();
        DXLog::flushall();
 }
 
index d01cd5390e8a88af39b8324dfe67c76ecd66a999..7e725029b0fb79919dcf7dfda141aef98b2f3602 100755 (executable)
@@ -13,7 +13,7 @@
 #
 # 
 
-require 5.004;
+require 5.16.1;
 use warnings;
 
 # search local then perl directories
@@ -134,6 +134,7 @@ sub doresize
        $inscroll = 0;
        $spos = @sh < $pagel ? 0 :  @sh - $pagel;
        show_screen();
+       $conn->send_later("C$call|$cols") if $conn;
 }
 
 # cease communications
@@ -166,17 +167,6 @@ sub setattr
        }
 }
 
-# measure the no of screen lines a line will take
-sub measure
-{
-       my $line = shift;
-       return 0 unless $line;
-
-       my $l = length $line;
-       my $lines = int ($l / $cols);
-       $lines++ if $l / $cols > $lines;
-       return $lines;
-}
 
 # display the top screen
 sub show_screen
@@ -185,11 +175,6 @@ sub show_screen
                
                dbg("B: s:$spos h:" . scalar @sh) if isdbg('console');
                my ($i, $l);
-#              for ($i = 0; $i < $pagel && $p >= 0; ) {
-#                      $l = measure($sh[$p]);
-#                      $i += $l;
-#                      $p-- if $i < $pagel;
-               #               }
 
                $spos = 0 if $spos < 0;
                my $y = $spos;
@@ -198,7 +183,6 @@ sub show_screen
                $top->clrtobot();
                for ($i = 0; $i < $pagel && $y < @sh; ++$y) {
                        my $line = $sh[$y];
-#                      my $lines = measure($line);
                        my $lines = 1;
                        $top->move($i, 0);
                        dbg("C: s:$spos y:$i sh:" . scalar @sh . " l:" . length($line) . " '$line'") if isdbg('console');
@@ -295,18 +279,13 @@ sub rec_stdin
                        $bot->clrtoeol();
                        $bot->addstr(substr($inbuf, 0, $cols));
 
-                       # add it to the monitor window
-#                      unless ($spos == @sh) {
-#                              $spos = @sh;
-#                              show_screen();
-#                      }
                        if ($inscroll && $spos < @sh) {
                                $spos = @sh - $pagel;
                                $inscroll = 0;
                                show_screen();
                        }
 
-                       addtotop($inbuf);
+                       addtotop(' ', $inbuf);
                
                        # send it to the cluster
                        $conn->send_later("I$call|$inbuf");
@@ -330,12 +309,6 @@ sub rec_stdin
                        }
                } elsif ($r eq KEY_PPAGE || $r eq "\032") {
                        if ($spos > 0 && @sh > $pagel) {
-#                              my ($i, $l);
-#                              for ($i = 0; $i < $pagel-1 && $spos >= 0; ) {
-#                                      $l = measure($sh[$spos]);
-#                                      $i += $l;
-#                                      --$spos if $i <= $pagel;
-#                              }
                                $spos -= $pagel+int($pagel/2); 
                                $spos = 0 if $spos < 0;
                                $inscroll = 1;
@@ -345,12 +318,6 @@ sub rec_stdin
                        }
                } elsif ($r eq KEY_NPAGE || $r eq "\026") {
                        if ($inscroll && $spos < @sh) {
-#                              my ($i, $l);
-#                              for ($i = 0; $i <= $pagel && $spos < @sh; ) {
-#                                      $l = measure($sh[$spos]);
-#                                      $i += $l;
-#                                      ++$spos if $i <= $pagel && $spos < @sh;
-#                              }
 
                                dbg("NPAGE sp:$spos $sh:". scalar @sh . " pl: $pagel") if isdbg('console');
                                $spos += int($pagel/2);
@@ -451,17 +418,26 @@ sub rec_stdin
 # add a line to the end of the top screen
 sub addtotop
 {
+       my $sort = shift;
        while (@_) {
                my $inbuf = shift;
                my $l = length $inbuf;
                if ($l > $cols) {
-#                      $Text::Wrap::Columns = $cols;
-#                      push @sh, wrap('',"\t", $inbuf);
-                       push @sh, $inbuf;
+                       $inbuf =~ s/\s+/ /g;
+                       if (length $inbuf > $cols) {
+                               $Text::Wrap::columns = $cols;
+                               my $token;
+                               ($token) = $inbuf =~ m!^(.* de [-\w\d/\#]+:?\s+|\w{9}\@\d\d:\d\d:\d\d )!;
+                               $token ||= ' ' x 19;
+                               push @sh, split /\n/, wrap('', ' ' x length($token), $inbuf);
+                       } else {
+                               push @sh, $inbuf;
+                       }
                } else {
                        push @sh, $inbuf;
                }
        }
+       
        show_screen() unless $inscroll;
 }
 
@@ -473,8 +449,8 @@ sub rec_socket
                cease(1);
        }
        if (defined $msg) {
-               dbg("msg: " . length($msg) . " '$msg'") if isdbg('console');
                my ($sort, $incall, $line) = $msg =~ /^(\w)([^\|]+)\|(.*)$/;
+               dbg("msg: " . length($msg) . " '$msg'") if isdbg('console');
                if ($line =~ s/\x07+$//) {
                        beep();
                }
@@ -484,17 +460,13 @@ sub rec_socket
                $call = $incall if $call ne $incall;
                
                $line =~ s/[\x00-\x06\x08\x0a-\x19\x1b-\x1f\x80-\x9f]/./g;         # immutable CSI sequence + control characters
-               if ($sort && $sort eq 'D') {
-                       $line = " " unless length($line);
-                       addtotop($line);
-               } elsif ($sort && $sort eq 'Z') { # end, disconnect, go, away .....
+               if ($sort && $sort eq 'Z') { # end, disconnect, go, away .....
                        cease(0);
-               }         
-               # ******************************************************
-               # ******************************************************
-               # any other sorts that might happen are silently ignored.
-               # ******************************************************
-               # ******************************************************
+               } else {
+                       $line = " " unless length($line);
+                       addtotop($sort, $line);
+               }
+
        } else {
                cease(0);
        }
@@ -531,7 +503,7 @@ sub idle_loop
 sub on_connect
 {
        my $conn = shift;
-       $conn->send_later("A$call|$connsort width=$cols");
+       $conn->send_later("A$call|$connsort width=$cols enhanced");
        $conn->send_later("I$call|set/page $maxshist");
        #$conn->send_later("I$call|set/nobeep");
 }
@@ -551,7 +523,7 @@ sub on_disconnect
 while (@ARGV && $ARGV[0] =~ /^-/) {
        my $arg = shift;
        if ($arg eq '-x') {
-               dbginit();
+               dbginit('console');
                dbgadd('console');
                $maxshist = 200;
        }
@@ -580,13 +552,13 @@ unless ($DB::VERSION) {
 
 $SIG{'HUP'} = \&sig_term;
 
-# start up
+
+# start upb
+$Text::Wrap::columns = $cols;
 doresize();
 
 $SIG{__DIE__} = \&sig_term;
 
-#$Text::Wrap::Columns = $cols;
-
 my $lastmin = 0;
 
 
index 80a918a07cc7a0a6a998d15240dd26746711bd75..06f7df635d630e44944a7154cc6243e2038e4823 100755 (executable)
@@ -12,7 +12,9 @@
 # ten lines including the line matching the regular expression. 
 #
 # <regexp> is the regular expression you are searching for, 
-# a caseless search is done
+# a caseless search is done. There can be more than one <regexp>
+# a <regexp> preceeded by a '!' is treated as NOT <regexp>. Each
+# <regexp> is implcitly ANDed together. 
 #
 # If you specify something that likes a filename and that filename
 # has a .pm on the end of it and it exists then rather than doing
@@ -47,8 +49,9 @@ $fp = DXLog::new('debug', 'dat', 'd');
 $today = $fp->unixtoj(time()); 
 my $nolines = 1;
 my @prev;
+my @patt;
 
-for my $arg (@ARGV) {
+foreach my $arg (@ARGV) {
        if ($arg =~ /^-/) {
                $arg =~ s/^-//o;
                if ($arg =~ /^\s*\-+(?:[h\?]e?l?p?)/) {
@@ -68,12 +71,11 @@ for my $arg (@ARGV) {
                        die "$arg not found";
                }
        } else {
-               $string = $arg;
-               last;
+               push @patt, $arg;
        }
 }
 
-$string ||= '.*';
+push @patt, '.*' unless @patt;
 
 push @list, "0" unless @list;
 for my $entry (@list) {
@@ -104,7 +106,17 @@ sub process
        chomp $line;
        push @prev, $line;
        shift @prev while @prev > $nolines;
-       if ($line =~ m{$string}io) {
+       my $flag = 0;
+       foreach my $p (@patt) {
+               if ($p =~ /^!/) {
+                       my $r = substr $p, 1;
+                       last if $line =~ m{$r}i;
+               } else {
+                       last unless $line =~ m{$p}i;
+               }
+               ++$flag;
+       }               
+       if ($flag == @patt) {
                for (@prev) {
                        s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
                        my ($t, $l) =  split /\^/, $_, 2;
@@ -117,6 +129,6 @@ sub process
        
 sub usage
 {
-       die "usage: grepdbg [nn days before] [-nnn lines before] [<regexp>|<perl file name>]\n";
+       die "usage: grepdbg [nn days before] [-nnn lines before] [<perl file name>] [<regexp>|!<regexp>]...\n";
 }
 exit(0);
diff --git a/perl/grepwsjtl b/perl/grepwsjtl
new file mode 100755 (executable)
index 0000000..364f936
--- /dev/null
@@ -0,0 +1,134 @@
+#!/usr/bin/perl
+#
+# Program to do a grep with dates and times on the debug
+# files
+#
+# grepwsjtl [nn] [-mm] <regular expression>
+#
+# nn - is the day you what to look at: 1 is yesterday, 0 is today
+# and is optional if there is only one argument
+#
+# -mmm - print the mmm lines before the match. So -10 will print
+# ten lines including the line matching the regular expression. 
+#
+# <regexp> is the regular expression you are searching for, 
+# a caseless search is done. There can be more than one <regexp>
+# a <regexp> preceeded by a '!' is treated as NOT <regexp>. Each
+# <regexp> is implcitly ANDed together. 
+#
+# If you specify something that likes a filename and that filename
+# has a .pm on the end of it and it exists then rather than doing
+# the regex match it executes the "main::handle()" function passing
+# it one line at a time.
+#
+#
+
+require 5.004;
+
+# search local then perl directories
+BEGIN {
+       # root of directory tree for this system
+       $root = "/spider"; 
+       $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
+       
+       unshift @INC, "$root/perl";     # this IS the right way round!
+       unshift @INC, "$root/local";
+}
+
+use SysVar;
+use DXUtil;
+use DXLog;
+use Julian;
+
+use strict;
+
+use vars qw(@list $fp $today $string);
+
+
+$fp = DXLog::new('wsjtl', 'dat', 'd');
+$today = $fp->unixtoj(time()); 
+my $nolines = 1;
+my @prev;
+my @patt;
+
+foreach my $arg (@ARGV) {
+       if ($arg =~ /^-/) {
+               $arg =~ s/^-//o;
+               if ($arg =~ /^\s*\-+(?:[h\?]e?l?p?)/) {
+                       usage();
+                       exit(0);
+               }
+               push @list, $arg;
+       } elsif ($arg =~ /^\d+$/) {
+               $nolines = $arg;
+       } elsif ($arg =~ /\.pm$/) {
+               if (-e $arg) {
+                       my $fn = $arg;
+                       $fn =~ s/\.pm$//;
+                       eval { require $arg};
+                       die "requiring $fn failed $@" if $@;
+               } else {
+                       die "$arg not found";
+               }
+       } else {
+               push @patt, $arg;
+       }
+}
+
+push @patt, '.*' unless @patt;
+
+push @list, "0" unless @list;
+for my $entry (@list) {
+       my $now = $today->sub($entry); 
+       my $fh = $fp->open($now); 
+       my $line;
+       my $do;
+
+       if (main->can('handle')) {
+               $do = \&handle;
+       } else {
+               $do = \&process;
+       }
+
+       begin() if main->can('begin');
+       if ($fh) {
+               while (<$fh>) {
+                       &$do($_);
+               }
+               $fp->close();
+       }
+       end() if main->can('end');
+}
+
+sub process
+{
+       my $line = shift;
+       chomp $line;
+       push @prev, $line;
+       shift @prev while @prev > $nolines;
+       my $flag = 0;
+       foreach my $p (@patt) {
+               if ($p =~ /^!/) {
+                       my $r = substr $p, 1;
+                       last if $line =~ m{$r}i;
+               } else {
+                       last unless $line =~ m{$p}i;
+               }
+               ++$flag;
+       }               
+       if ($flag == @patt) {
+               for (@prev) {
+                       s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
+                       my ($t, $l) =  split /\^/, $_, 2;
+                       print atime($t), ' ', $l, "\n";
+                       print '----------------' if $nolines > 1;
+               }
+               @prev = ();
+       }
+}
+       
+sub usage
+{
+       die "usage: grepwsjtl [nn days before] [-nnn lines before] [<perl file name>] [<regexp>|!<regexp>]...\n";
+}
+exit(0);
index 8d9551d3db9e1cb366defc6186484a19a741964c..a497eff92957f5bb269c7c1ce062f08c9acb83cd 100755 (executable)
@@ -3,6 +3,10 @@
 # watch the end of the current debug file (like tail -f) applying
 # any regexes supplied on the command line.
 #
+# There can be more than one <regexp>. a <regexp> preceeded by a '!' is
+# treated as NOT <regexp>. Each <regexp> is implcitly ANDed together.
+# All <regexp> are caseless.
+#
 # examples:-
 # 
 #   watchdbg g1tlh       # watch everything g1tlh does
@@ -35,7 +39,7 @@ my $fh = $fp->open($today) or die $!;
 my $nolines = 1;
 $nolines = shift if $ARGV[0] =~ /^-?\d+$/;
 $nolines = abs $nolines if $nolines < 0;  
-my $exp = join '|', @ARGV;
+my @patt = @ARGV;
 my @prev;
 
 # seek to end of file
@@ -43,10 +47,20 @@ $fh->seek(0, 2);
 for (;;) {
        my $line = $fh->getline;
        if ($line) {
-               if ($exp) {
+               if (@patt) {
                        push @prev, $line;
                        shift @prev while @prev > $nolines; 
-                       if ($line =~ m{(?:$exp)}oi) {
+                       my $flag = 0;
+                       foreach my $p (@patt) {
+                               if ($p =~ /^!/) {
+                                       my $r = substr $p, 1;
+                                       last if $line =~ m{$r}i;
+                               } else {
+                                       last unless $line =~ m{$p}i;
+                               }
+                               ++$flag;
+                       }               
+                       if ($flag == @patt) {
                                printit(@prev); 
                                @prev = ();
                        }
@@ -80,7 +94,7 @@ sub printit
                $line =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
                my ($t, $l) =  split /\^/, $line, 2;
                $t = time unless defined $t;
-               printf "%02d:%02d:%02d %s\n", (gmtime($t))[2,1,0], $l; 
+               printf "%02d:%02d:%02d %s\n", (gmtime($t))[2,1,0], $l;
        }
 }
 exit(0);
diff --git a/perl/watchwsjtl b/perl/watchwsjtl
new file mode 100755 (executable)
index 0000000..2c175f7
--- /dev/null
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+#
+# watch the end of the current debug file (like tail -f) applying
+# any regexes supplied on the command line.
+#
+# There can be more than one <regexp>. a <regexp> preceeded by a '!' is
+# treated as NOT <regexp>. Each <regexp> is implcitly ANDed together.
+# All <regexp> are caseless.
+#
+# examples:-
+# 
+#   watchwsjtl g1tlh       # watch everything g1tlh does
+#   watchwsjtl -2 PCPROT       # watch all PCPROT messages + up to 2 lines before
+#   watchwsjtl gb7baa gb7djk   # watch the conversation between BAA and DJK 
+#
+
+require 5.004;
+
+# search local then perl directories
+BEGIN {
+       # root of directory tree for this system
+       $root = "/spider"; 
+       $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
+       
+       unshift @INC, "$root/perl";     # this IS the right way round!
+       unshift @INC, "$root/local";
+}
+
+use IO::File;
+use SysVar;
+use DXUtil;
+use DXLog;
+
+use strict;
+
+my $fp = DXLog::new('wsjtl', 'dat', 'd');
+my $today = $fp->unixtoj(time()); 
+my $fh = $fp->open($today) or die $!; 
+my $nolines = 1;
+$nolines = shift if $ARGV[0] =~ /^-?\d+$/;
+$nolines = abs $nolines if $nolines < 0;  
+my @patt = @ARGV;
+my @prev;
+
+# seek to end of file
+$fh->seek(0, 2);
+for (;;) {
+       my $line = $fh->getline;
+       if ($line) {
+               if (@patt) {
+                       push @prev, $line;
+                       shift @prev while @prev > $nolines; 
+                       my $flag = 0;
+                       foreach my $p (@patt) {
+                               if ($p =~ /^!/) {
+                                       my $r = substr $p, 1;
+                                       last if $line =~ m{$r}i;
+                               } else {
+                                       last unless $line =~ m{$p}i;
+                               }
+                               ++$flag;
+                       }               
+                       if ($flag == @patt) {
+                               printit(@prev); 
+                               @prev = ();
+                       }
+               } else {
+                       printit($line);
+               }
+       } else {
+               sleep(1);
+               
+               # check that the debug hasn't rolled over to next day
+               # open it if it has
+               my $now = $fp->unixtoj(time()); 
+               if ($today->cmp($now)) {
+                       $fp->close;
+                       my $i;
+                       for ($i = 0; $i < 20; $i++) {
+                               last if $fh = $fp->open($now);
+                               sleep 5;
+                       }
+                       die $! if $i >= 20; 
+                       $today = $now;
+               }
+       }
+}
+
+sub printit
+{
+       while (@_) {
+               my $line = shift;
+               chomp $line;
+               $line =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
+               my ($t, $l) =  split /\^/, $line, 2;
+               $t = time unless defined $t;
+               printf "%02d:%02d:%02d %s\n", (gmtime($t))[2,1,0], $l;
+       }
+}
+exit(0);
diff --git a/perl/wsjtl.pl b/perl/wsjtl.pl
new file mode 100755 (executable)
index 0000000..7bfc8e7
--- /dev/null
@@ -0,0 +1,150 @@
+#!/usr/bin/env perl
+#
+# A basic listener and decoder of wsjtx packets
+#
+#
+
+our ($systime, $root, $local_data);
+
+BEGIN {
+       umask 002;
+       $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN };
+                       
+       # take into account any local::lib that might be present
+       eval {
+               require local::lib;
+       };
+       unless ($@) {
+#              import local::lib;
+               import local::lib qw(/spider/perl5lib);
+       } 
+
+       # root of directory tree for this system
+       $root = "/spider";
+       $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
+
+       unshift @INC, "$root/perl5lib" unless grep {$_ eq "$root/perl5lib"} @INC;
+       unshift @INC, "$root/perl";     # this IS the right way round!
+       unshift @INC, "$root/local";
+
+       # do some validation of the input
+       die "The directory $root doesn't exist, please RTFM" unless -d $root;
+
+       # locally stored data lives here
+       $local_data = "$root/local_data";
+       mkdir $local_data, 02774 unless -d $local_data;
+
+       # try to create and lock a lockfile (this isn't atomic but
+       # should do for now
+       $lockfn = "$root/local_data/wsjtxl.lck";       # lock file name
+       if (-w $lockfn) {
+               open(CLLOCK, "$lockfn") or die "Can't open Lockfile ($lockfn) $!";
+               my $pid = <CLLOCK>;
+               if ($pid) {
+                       chomp $pid;
+                       if (kill 0, $pid) {
+                               warn "Lockfile ($lockfn) and process $pid exist, another cluster running?\n";
+                               exit 1;
+                       }
+               }
+               unlink $lockfn;
+               close CLLOCK;
+       }
+       open(CLLOCK, ">$lockfn") or die "Can't open Lockfile ($lockfn) $!";
+       print CLLOCK "$$\n";
+       close CLLOCK;
+
+       $is_win = ($^O =~ /^MS/ || $^O =~ /^OS-2/) ? 1 : 0; # is it Windows?
+       $systime = time;
+}
+
+use strict;
+use warnings;
+use 5.22.0;
+
+use Mojolicious 8.1;
+use Mojo::IOLoop;
+use Mojo::IOLoop::Server;
+use DXDebug;
+use DXUDP;
+
+use WSJTX;
+
+our $udp_host = '::';
+our $udp_port = 2237;
+our $tcp_host = '::';
+our $tcp_port = 2238;
+
+my $uh;                                                        # the mojo handle for the UDP listener
+my $th;                                                        #  ditto TCP
+my $wsjtx;                                             # the wsjtx decoder
+my $cease;
+
+our %slot;                       # where the connected TCP client structures live
+
+
+dbginit('wsjtl');
+
+my @queue;
+
+$uh = DXUDP->new;
+$uh->start(host => $udp_host, port => $udp_port) or die "Cannot listen on $udp_host:$udp_port $!\n";
+
+$wsjtx = WSJTX->new();
+$uh->on(read => \&_udpread);
+
+$th = Mojo::IOLoop::Server->new;
+$th->on(accept => \&_accept);
+$th->listen(address => $tcp_host, port => $tcp_port);
+$th->start;
+
+Mojo::IOLoop->start() unless Mojo::IOLoop->is_running;
+
+exit;
+
+sub _udpread
+{
+       my ($handle, $data) = @_;
+
+       my $host = $handle->peerhost;
+       my $port = $handle->peerport;
+   
+       my $in = $wsjtx->handle($handle, $data, "$host:$port");
+
+       distribute($in) if $in && length $in;
+}
+
+sub _accept
+{
+       my ($id, $handle) = @_;
+       my $host = $handle->peerhost;
+       my $port = $handle->peerport;
+
+       
+       my $s = $slot{"$host:$port"} = { addr => "$host:$port"};
+       my $stream = $s->{stream} = Mojo::IOLoop::Stream->new($handle);
+       $stream->on(error => sub { $stream->close; delete $s->{addr}});
+       $stream->on(close => sub { delete $s->{addr}});
+       $stream->on(read => sub {_tcpread($s, $_[1])});
+       $stream->timeout(0);
+       $stream->start;
+}
+
+sub _tcpread
+{
+       my $s = shift;
+       my $data = shift;
+       
+       dbg("incoming: $data");
+}
+
+sub distribute
+{
+       my $in = shift;
+       foreach my $c (values %slot) {
+               $c->{stream}->write("$in\r\n");
+       }
+}
+
+
+
diff --git a/perlbrew-dxspider b/perlbrew-dxspider
new file mode 100755 (executable)
index 0000000..cc2546f
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+. ~/perl5/perlbrew/etc/bashrc
+cd /spider/perl
+git reset --hard
+git pull
+~/perl5/perlbrew/perls/perl-5.32.1/bin/perl -w cluster.pl > /dev/null
+
index 0b4aaec174175bc9a537c267cd46f40fff584a85..9a8bde4a6c3d83064101c29df7055480f066507d 100644 (file)
@@ -4,5 +4,9 @@
 blank +
 sh/dx 5
 blank -
+sh/u
+blank -
 sh/wwv 1
+blank -
+sh/wcy 1
 blank +