--- fastest_cvsup.orig	2002-09-19 14:12:17.000000000 +0200
+++ fastest_cvsup	2009-01-04 15:25:33.000000000 +0100
@@ -1,13 +1,15 @@
 #!/usr/bin/perl
 #-----------------------------------------------------------------------------#
 #
-#  Find fastest CVSup server script for FreeBSD - version 0.2.8
+#  Find fastest CVSup server script for FreeBSD - version 0.2.9
 #  Copyright (c) A.J.Robinson (ajr@subdimension.com) 2002
 #  Distributed under the BSD license.
 #
 #-----------------------------------------------------------------------------#
 #
 # Changes:
+# 0.2.9  - added 'us' country code for USA hosts and 'tld' for top-level
+#          domain machines (can be in any country)
 # 0.2.8  - fixed the progress meter, timestamped %FREEBSD_SERVERS
 # 0.2.7  - updated documentation, usage message and progress meter.
 # 0.2.6  - changed from freebsdmirrors.org to the online handbook.
@@ -74,44 +76,50 @@
 # How many FreeBSD CVSup servers has each country got? (well, not strictly
 # true... what's the highest cvsup number in use?
 
-my %FREEBSD_SERVERS = (     # last updated: Thu Sep 19 12:56:23 2002
+my %FREEBSD_SERVERS = (     # last updated: Jan 04 15:02:20 GMT 2009
   'ar' => 1,    # Argentina
-  'at' => 1,    # Austria
-  'au' => 5,    # Australia
-  'br' => 4,    # Brazil
+  'am' => 1,    # Armenia
+  'at' => 2,    # Austria
+  'au' => 1,    # Australia
+  'br' => 3,    # Brazil
   'ca' => 2,    # Canada
-  'cn' => 1,    # China
+  'ch' => 2,    # Switzerland
+  'cn' => 5,    # China
   'cz' => 1,    # Czech Republic
-  'de' => 7,    # Germany
-  'dk' => 1,    # Denmark
-  'ee' => 1,    # Estonia
+  'de' => 8,    # Germany
+  'dk' => 3,    # Denmark
+  'ee' => 2,    # Estonia
   'es' => 3,    # Spain
   'fi' => 2,    # Finland
   'fr' => 8,    # France
-  'gr' => 2,    # Greece
+  'gr' => 1,    # Greece
   'hu' => 1,    # Hungary
-  'ie' => 1,    # Ireland
+  'ie' => 2,    # Ireland
   'is' => 1,    # Iceland
   'jp' => 6,    # Japan
-  'kr' => 2,    # Korea
-  'lt' => 2,    # Lithuania
-  'lv' => 1,    # Latvia
-  'nl' => 3,    # Netherlands
+  'kg' => 1,    # Kyrgyzstan
+  'kr' => 5,    # Korea
+  'kw' => 1,    # Kuwait
+  'lt' => 3,    # Lithuania
+  'lv' => 3,    # Latvia
+  'nl' => 6,    # Netherlands
   'no' => 1,    # Norway
   'nz' => 1,    # New Zealand
   'pl' => 1,    # Poland
-  'pt' => 1,    # Portugal
-  'ro' => 1,    # Romania
-  'ru' => 6,    # Russia
+  'pt' => 3,    # Portugal
+  'ro' => 3,    # Romania
+  'ru' => 7,    # Russia
   'se' => 2,    # Sweden
-  'si' => 1,    # Slovenia
+  'si' => 2,    # Slovenia
   'sk' => 2,    # Slovak Republic
-  'sm' => 1,    # San Marino
-  'tw' => 3,    # Taiwan
-  'ua' => 5,    # Ukraine
-  'uk' => 5,    # United Kingdom
-  'us' => 17,   # USA
+  'th' => 1,    # Thailand
+  'tr' => 2,    # Turkey
+  'tw' => 14,   # Taiwan
+  'ua' => 11,   # Ukraine
+  'uk' => 4,    # United Kingdom
+  'us' => 18,   # USA
   'za' => 2,    # South Africa
+  'tld' => 18,	# Top Level Domain
 );
 
 my %OTHER_SERVERS = (
@@ -141,6 +149,8 @@
                  'rt.fm',
                  'skeleton.phys.spbu.ru',
                  'cvsup.jp.openbsd.org',
+                 'cvsup.tw.openbsd.org',
+                 'openbsd.cc.ntu.edu.tw',
                  'wiretapped.net',
                ],
 );
@@ -177,6 +187,7 @@
         "         -Q           very quiet mode, no progress meter\n",
         "         -r           uses remote server list from FreeBSD Handbook\n",
         "         -c aa,bb,cc  queries servers in countries aa,bb,cc\n",
+        "            tld       queries servers in the top level domain\n",
         "            local     queries servers set as local in the script\n",
         "            all       queries all FreeBSD servers\n\n",
         "  See the man page, fastest_cvsup(7), for more details.\n\n";
@@ -281,6 +292,7 @@
 
       # extract the country name and the rest (what a mess!)
 
+      s/^<a[^>]+><\/a>//;
       if ( m/^(\w+)(\s{1}\w+)?\s*(.*)/s ) {
         my $country = $1.$2; # for two word names
         my $mess = $3;       # the rest
@@ -307,12 +319,12 @@
             unless ( $cc_name{$cc} ) { $cc_name{$cc} = $country }
           }
 
-          # parse US servers
+          # parse TLD servers
 
           elsif ( $server =~ /cvsup([\d]*)\.freebsd\.org/i ) {
             my $i = $1 || 1;
-            if ( !$srv{'us'} or $srv{'us'} < $i ) { $srv{'us'} = $i }
-            unless ( $cc_name{'us'} ) { $cc_name{'us'} = $country }
+            if ( !$srv{'tld'} or $srv{'tld'} < $i ) { $srv{'tld'} = $i }
+            unless ( $cc_name{'tld'} ) { $cc_name{'tld'} = $country }
           }
         }
       }
@@ -419,7 +431,7 @@
 
   for ( my $i=1; $i<=$FREEBSD_SERVERS{$cc}; $i++ ) {
 
-    if ( $cc eq 'us' ) { # use no country code, include the '1'
+    if ( $cc eq 'tld' ) { # use no country code, include the '1'
       if ( $i == 1 ) { push(@first,"cvsup$i.freebsd.org"); }
       else           { push(@others,"cvsup$i.freebsd.org"); }
     }
@@ -575,7 +587,7 @@
 
 =head1 SYNOPSIS
 
-B<fastest_cvsup> [B<-h>] [B<-(q|Q)>] [B<-r>] B<-c> (B<country codes>|B<local>|B<all>)
+B<fastest_cvsup> [B<-h>] [B<-(q|Q)>] [B<-r>] B<-c> (B<country codes>|B<tld>|B<local>|B<all>)
 
 =head1 DESCRIPTION
 
@@ -620,6 +632,11 @@
 NetBSD and OpenBSD servers are lumped together under the 'netbsd' and
 'openbsd' codes respectively.
 
+=item B<-c tld>
+
+checks the servers in the Top Level Domain.  These can be anywhere in the
+world.
+
 =item B<-c local>
 
 uses the countries specifed in the C<@LOCAL_CC> array. Edit the script to
