Browse code

update the mirrors page, have the script update the csv list with last status.

Andrew Lewman authored on06/12/2013 16:54:04
Showing1 changed files
... ...
@@ -121,7 +121,7 @@ sub LoadMirrors {
121 121
 
122 122
 sub DumpMirrors {
123 123
     my @m = @_;
124
-    open(CSV, ">", "tor-mirrors.csv") or die "Cannot open tor-mirrors.csv: $!";
124
+    open(CSV, ">", "include/tor-mirrors.csv") or die "Cannot open tor-mirrors.csv: $!";
125 125
     print CSV join(", ", @columns) . "\n";
126 126
     foreach my $server(@m) {
127 127
 	$server->{updateDate} = gmtime($server->{updateDate}) if ($server->{updateDate});
... ...
@@ -153,7 +153,7 @@ print "Using these files for sig matching:\n";
153 153
 print join("\n", keys %randomtorfiles);
154 154
 print "\n";
155 155
 
156
-# Adjust offical Tor time by out-of-date offset: number of days * seconds per day
156
+# Adjust official Tor time by out-of-date offset: number of days * seconds per day
157 157
 $tortime -= 1 * 172800;
158 158
 print "The official time for Tor is $tortime. \n";
159 159
 
... ...
@@ -184,15 +184,11 @@ for(my $server = 0; $server < scalar(@m); $server++) {
184 184
 
185 185
 sub PrintServer {
186 186
      my $server = shift;
187
-     my $time;
188
-     if ( $server->{updateDate} && $server->{sigMatched} ) { $time = "Up to date"; } 
189
-     elsif (!$server->{updateDate}) 			   { $time = "Unknown"; }
190
-     else 			    			   { $time = "Failed signature check"; }
191 187
 print OUT <<"END";
192 188
      \n<tr>\n
193 189
          <td>$server->{isoCC}</td>\n
194 190
          <td>$server->{orgName}</td>\n
195
-         <td>$time</td>\n
191
+         <td>Up to date</td>\n
196 192
 END
197 193
 
198 194
      my %prettyNames = (
... ...
@@ -224,13 +220,6 @@ open(OUT, "> $outFile") or die "Can't open $outFile: $!";
224 220
 foreach my $server ( sort { $b->{updateDate} <=> $a->{updateDate} } grep {$_->{updateDate} && $_->{updateDate} > $tortime && $_->{sigMatched}} @m ) {
225 221
     PrintServer($server);
226 222
 }
227
-foreach my $server ( grep {!$_->{updateDate}}  @m ) {
228
-    PrintServer($server);
229
-}
230
-foreach my $server ( grep {!$_->{sigMatched} && $_->{updateDate} && $_->{updateDate} > $tortime} @m ) {
231
-    PrintServer($server);
232
-}
233
-# That leaves those servers whose updateDate < torTime. Check the csv for those.
234 223
 
235 224
 DumpMirrors(@m);
236 225
 
Browse code

update mirror script again, run it and update mirrors table.

Andrew Lewman authored on06/12/2013 04:49:41
Showing1 changed files
... ...
@@ -59,26 +59,31 @@ sub ExtractDate {
59 59
     my $date    = str2time($content);
60 60
 
61 61
     if ($date) {
62
-    	print "ExtractDate($content) = $date\n";
62
+    	print "\tExtractDate($content) = $date\n";
63 63
         return $date;
64 64
     } else {
65
-    	print "ExtractDate($content) = ?\n";
65
+    	print "\tExtractDate($content) = ?\n";
66 66
 	return undef;
67 67
     }
68 68
 }
69 69
 
70 70
 sub ExtractSig {
71
-    my $content = shift;
72
-    return sha256_hex($content); 
71
+    my $content = shift; 
72
+    my $url     = shift;
73
+    my $sig = sha256_hex($content);
74
+    print "\tExtractSig($url) = $sig\n";
75
+    return $sig;
73 76
 }
74 77
 
75 78
 sub Fetch {
76 79
     my ($url, $sub) = @_; # Base url for mirror
80
+    $|++; # unbuffer stdout to show progress
77 81
 
82
+    print "\nGET $url: ";
78 83
     my $request = new HTTP::Request GET => "$url";
79 84
     my $result = $lua->request($request);
80 85
     my $code = $result->code();
81
-    print "\nGET $url: $code\n";
86
+    print "$code\n";
82 87
 
83 88
     if ($result->is_success && $code eq "200"){
84 89
        my $content = $result->content;
... ...
@@ -146,8 +151,9 @@ for (1 .. 1)
146 151
 
147 152
 print "Using these files for sig matching:\n";
148 153
 print join("\n", keys %randomtorfiles);
154
+print "\n";
149 155
 
150
-# Adjust official Tor time by out-of-date offset: number of days * seconds per day
156
+# Adjust offical Tor time by out-of-date offset: number of days * seconds per day
151 157
 $tortime -= 1 * 172800;
152 158
 print "The official time for Tor is $tortime. \n";
153 159
 
... ...
@@ -163,12 +169,10 @@ for(my $server = 0; $server < scalar(@m); $server++) {
163 169
                 foreach my $randomtorfile(keys %randomtorfiles) {
164 170
                     my $sig = Fetch("$m[$server]->{$serverType}/$randomtorfile", \&ExtractSig);
165 171
             	    if (!$sig) {
166
-		        print STDERR "Unreadable $randomtorfile on $m[$server]->{$serverType}";
167 172
 			$m[$server]->{sigMatched} = 0;
168 173
             	    	last;
169 174
 		    } elsif ($sig ne $randomtorfiles{$randomtorfile}) {
170 175
 			$m[$server]->{sigMatched} = 0;
171
-		        print STDERR "Sig mismatch of $randomtorfile on $m[$server]->{$serverType}";
172 176
             	    	last;
173 177
             	    }
174 178
 		}
... ...
@@ -181,15 +185,13 @@ for(my $server = 0; $server < scalar(@m); $server++) {
181 185
 sub PrintServer {
182 186
      my $server = shift;
183 187
      my $time;
184
-     if ( $server->{'updateDate'} ) {
185
-	  if ( $server->{'updateDate'} > $tortime ) {
186
-	    $time = "Up to date";
187
-	  } else { $time = "DO NOT USE. Out of date."; }
188
-     } else { $time = "Unknown"; }
188
+     if ( $server->{updateDate} && $server->{sigMatched} ) { $time = "Up to date"; } 
189
+     elsif (!$server->{updateDate}) 			   { $time = "Unknown"; }
190
+     else 			    			   { $time = "Failed signature check"; }
189 191
 print OUT <<"END";
190 192
      \n<tr>\n
191
-         <td>$server->{'isoCC'}</td>\n
192
-         <td>$server->{'orgName'}</td>\n
193
+         <td>$server->{isoCC}</td>\n
194
+         <td>$server->{orgName}</td>\n
193 195
          <td>$time</td>\n
194 196
 END
195 197
 
... ...
@@ -204,7 +206,7 @@ END
204 206
 
205 207
      foreach my $precious ( sort keys %prettyNames )
206 208
      {
207
-        if ($server->{"$precious"}) {
209
+        if ($server->{$precious}) {
208 210
             print OUT "    <td><a href=\"" . $server->{$precious} . "\">" .
209 211
                       "$prettyNames{$precious}</a></td>\n";
210 212
         } else { print OUT "    <td> - </td>\n"; }
... ...
@@ -219,12 +221,16 @@ open(OUT, "> $outFile") or die "Can't open $outFile: $!";
219 221
 
220 222
 # Here's where we open a file and print some wml include goodness
221 223
 # This is sorted from last known recent update to unknown update times
222
-foreach my $server ( sort { $b->{'updateDate'} <=> $a->{'updateDate'}} grep {$_->{updateDate} && $_->{sigMatched}} @m ) {
224
+foreach my $server ( sort { $b->{updateDate} <=> $a->{updateDate} } grep {$_->{updateDate} && $_->{updateDate} > $tortime && $_->{sigMatched}} @m ) {
225
+    PrintServer($server);
226
+}
227
+foreach my $server ( grep {!$_->{updateDate}}  @m ) {
223 228
     PrintServer($server);
224 229
 }
225
-foreach my $server ( grep {!$_->{updateDate} || !$_->{sigMatched}} @m ) {
230
+foreach my $server ( grep {!$_->{sigMatched} && $_->{updateDate} && $_->{updateDate} > $tortime} @m ) {
226 231
     PrintServer($server);
227 232
 }
233
+# That leaves those servers whose updateDate < torTime. Check the csv for those.
228 234
 
229 235
 DumpMirrors(@m);
230 236
 
Browse code

update the script some more, do a trial run and update of the live mirrors-table.

Andrew Lewman authored on05/12/2013 18:11:12
Showing1 changed files
... ...
@@ -45,7 +45,7 @@ sub ExtractLinks {
45 45
          	push @links, Fetch($attr_value, \&ExtractLinks);
46 46
          }
47 47
 	 elsif ($attr_value =~ /\.(xpi|dmg|exe|tar\.gz)$/)
48
-	 #elsif ($attr_value =~ /\.(asc)$/)
48
+	 #elsif ($attr_value =~ /\.(asc)$/) # small pgp files easier to test with
49 49
          {
50 50
          	push @links, $attr_value;
51 51
          }
... ...
@@ -58,12 +58,11 @@ sub ExtractDate {
58 58
     $content    = sanitize($content);
59 59
     my $date    = str2time($content);
60 60
 
61
-    print "Extracting possible date from: $content\n";
62 61
     if ($date) {
63
-        print "We've fetched a date $date.\n";
62
+    	print "ExtractDate($content) = $date\n";
64 63
         return $date;
65 64
     } else {
66
-        print "We haven't fetched a date.\n";
65
+    	print "ExtractDate($content) = ?\n";
67 66
 	return undef;
68 67
     }
69 68
 }
... ...
@@ -75,12 +74,11 @@ sub ExtractSig {
75 74
 
76 75
 sub Fetch {
77 76
     my ($url, $sub) = @_; # Base url for mirror
78
-    print "Fetch $url\n";
79 77
 
80 78
     my $request = new HTTP::Request GET => "$url";
81 79
     my $result = $lua->request($request);
82 80
     my $code = $result->code();
83
-    print "\tResult code $code\n";
81
+    print "\nGET $url: $code\n";
84 82
 
85 83
     if ($result->is_success && $code eq "200"){
86 84
        my $content = $result->content;
... ...
@@ -89,1286 +87,52 @@ sub Fetch {
89 87
         } else {
90 88
             print "Unable to fetch $url, empty content returned.\n";
91 89
         }
92
-
93
-    } else {
94
-       print "Our request failed, we had no result.\n";
95 90
     }
96 91
 
97 92
     return undef;
98 93
 }
94
+my @columns;
95
+sub LoadMirrors {
96
+    open(CSV, "<", "include/tor-mirrors.csv") or die "Cannot open tor-mirrors.csv: $!"; 
97
+    my $line = <CSV>;
98
+    chomp($line);
99
+    @columns = split(/\s*,\s*/, $line);
100
+    my @mirrors;
101
+    while ($line = <CSV>)
102
+    {
103
+        chomp($line);
104
+	my @values = split(/\s*,\s*/, $line);
105
+	my %server;
106
+	for (my $i = 0; $i < scalar(@columns); $i++)
107
+	{
108
+	    $server{$columns[$i]} = $values[$i] || '';
109
+	}
110
+	$server{updateDate} = str2time($server{updateDate}) if ($server{updateDate});
111
+	push @mirrors, {%server};
112
+    }
113
+    close(CSV);
114
+    return @mirrors;
115
+}
99 116
 
100
-# This is the list of all known Tor mirrors
101
-# Add new mirrors to the bottom!
102
-my %m = (
103
-
104
-
105
-        mirror000 => {
106
-            adminContact => "coralcdn.org",
107
-            orgName => "CoralCDN",
108
-            isoCC => "INT",
109
-            subRegion => "",
110
-            region => "INT",
111
-            ipv4 => "True",
112
-            ipv6 => "False",
113
-            loadBalanced => "Yes",
114
-            httpWebsiteMirror => "http://www.torproject.org.nyud.net/",
115
-            httpsWebsiteMirror => "",
116
-            rsyncWebsiteMirror => "",
117
-            ftpWebsiteMirror => "",
118
-            httpDistMirror => "http://www.torproject.org.nyud.net/dist/",
119
-            httpsDistMirror => "",
120
-            rsyncDistMirror => "",
121
-            hiddenServiceMirror => ""
122
-        },
123
-
124
-        mirror001 => {
125
-            adminContact => "BarkerJr AT barkerjr DOT net",
126
-            orgName => "BarkerJr",
127
-            isoCC => "FR",
128
-            subRegion => "",
129
-            region => "FR",
130
-            ipv4 => "True",
131
-            ipv6 => "False",
132
-            loadBalanced => "No",
133
-            httpWebsiteMirror => "http://www.oignon.net/",
134
-            httpsWebsiteMirror => "https://www.oignon.net/",
135
-            rsyncWebsiteMirror => "",
136
-            ftpWebsiteMirror => "",
137
-            httpDistMirror => "http://www.oignon.net/dist/",
138
-            httpsDistMirror => "https://www.oignon.net/dist/",
139
-            rsyncDistMirror => "",
140
-            hiddenServiceMirror => ""
141
-        },
142
-
143
-       mirror003 => {
144
-            adminContact => "citizen428 AT gmail DOT com",
145
-            orgName => "[[:bbs:]]",
146
-            isoCC => "DE",
147
-            subRegion => "",
148
-            region => "Europe",
149
-            ipv4 => "True",
150
-            ipv6 => "False",
151
-            loadBalanced => "Unknown",
152
-            httpWebsiteMirror => "http://tor.blingblingsquad.net/",
153
-            httpsWebsiteMirror => "https://tor.blingblingsquad.net/",
154
-            ftpWebsiteMirror => "",
155
-            rsyncWebsiteMirror => "",
156
-            httpDistMirror => "http://tor.blingblingsquad.net/dist/",
157
-            httpsDistMirror => "https://tor.blingblingsquad.net/dist/",
158
-            rsyncDistMirror => ""
159
-        },
160
-
161
-       mirror007 => {
162
-            adminContact => "info AT zentrum-der-gesundheit DOT de",
163
-            orgName => "Zentrum der Gesundheit",
164
-            isoCC => "DK",
165
-            subRegion => "",
166
-            region => "Europe",
167
-            ipv4 => "True",
168
-            ipv6 => "False",
169
-            loadBalanced => "Unknown",
170
-            httpWebsiteMirror => "http://tor.idnr.ws/",
171
-            ftpWebsiteMirror => "",
172
-            rsyncWebsiteMirror => "",
173
-            httpDistMirror => "http://tor.idnr.ws/dist/",
174
-            rsyncDistMirror => ""
175
-        },
176
-
177
-       mirror008 => {
178
-            adminContact => "root AT amorphis DOT eu",
179
-            orgName => "Amorphis",
180
-            isoCC => "NL",
181
-            subRegion => "",
182
-            region => "Europe",
183
-            ipv4 => "True",
184
-            ipv6 => "False",
185
-            loadBalanced => "Unknown",
186
-            httpWebsiteMirror => "http://tor.amorphis.eu/",
187
-            rsyncWebsiteMirror => "",
188
-            ftpWebsiteMirror => "",
189
-            httpDistMirror => "http://tor.amorphis.eu/dist/",
190
-            rsyncDistMirror => ""
191
-        },
192
-       mirror010 => {
193
-            adminContact => "webmaster AT ccc DOT de",
194
-            orgName => "CCC",
195
-            isoCC => "NL",
196
-            subRegion => "",
197
-            region => "Europe",
198
-            ipv4 => "True",
199
-            ipv6 => "False",
200
-            loadBalanced => "Unknown",
201
-            httpWebsiteMirror => "http://tor.ccc.de/",
202
-            rsyncWebsiteMirror => "",
203
-            ftpWebsiteMirror => "",
204
-            httpDistMirror => "http://tor.ccc.de/dist/",
205
-            rsyncDistMirror => ""
206
-        },
207
-
208
-       mirror013 => {
209
-	    adminContact => "hostmaster AT zombiewerks DOT com",
210
-            orgName => "TheOnionRouter",
211
-            isoCC => "IS",
212
-            subRegion => "",
213
-            region => "Iceland",
214
-            ipv4 => "True",
215
-            ipv6 => "False",
216
-            loadBalanced => "Unknown",
217
-            httpWebsiteMirror => "http://theonionrouter.com/",
218
-            httpsWebsiteMirror => "",
219
-            rsyncWebsiteMirror => "",
220
-            ftpWebsiteMirror => "",
221
-            httpDistMirror => "http://theonionrouter.com/dist/",
222
-            httpsDistMirror => "",
223
-            rsyncDistMirror => ""
224
-        },
225
-    mirror014 => {
226
-        adminContact => "tormaster AT xpdm DOT us",
227
-        orgName => "Xpdm",
228
-        isoCC => "US",
229
-        subRegion => "",
230
-        region => "North America",
231
-        ipv4 => "True",
232
-        ipv6 => "False",
233
-        loadBalanced => "Unknown",
234
-        httpWebsiteMirror => "http://torproj.xpdm.us/",
235
-        httpsWebsiteMirror => "https://torproj.xpdm.us/",
236
-        rsyncWebsiteMirror => "",
237
-        ftpWebsiteMirror => "",
238
-        httpDistMirror => "http://torproj.xpdm.us/dist/",
239
-        httpsDistMirror => "https://torproj.xpdm.us/dist/",
240
-        rsyncDistMirror => "",
241
-        hiddenServiceMirror => "http://h3prhz46uktgm4tt.onion/"
242
-        },
243
-     mirror016 => {
244
-            adminContact => "security AT hostoffice DOT hu",
245
-            orgName => "Unknown",
246
-            isoCC => "HU",
247
-            subRegion => "Hungary",
248
-            region => "Europe",
249
-            ipv4 => "True",
250
-            ipv6 => "False",
251
-            loadBalanced => "No",
252
-            httpWebsiteMirror => "http://mirror.tor.hu/",
253
-            httpsWebsiteMirror => "",
254
-            rsyncWebsiteMirror => "",
255
-            ftpWebsiteMirror => "",
256
-            httpDistMirror => "http://mirror.tor.hu/dist/",
257
-            httpsDistMirror => "",
258
-            rsyncDistMirror => "",
259
-            hiddenServiceMirror => ""
260
-        },
261
-   mirror018 => {
262
-            adminContact => "",
263
-            orgName => "chaos darmstadt",
264
-            isoCC => "DE",
265
-            subRegion => "Germany",
266
-            region => "Europe",
267
-            ipv4 => "True",
268
-            ipv6 => "False",
269
-            loadBalanced => "No",
270
-            httpWebsiteMirror => "http://mirrors.chaos-darmstadt.de/tor-mirror/",
271
-            httpsWebsiteMirror => "",
272
-            rsyncWebsiteMirror => "",
273
-            ftpWebsiteMirror => "",
274
-            httpDistMirror => "http://mirrors.chaos-darmstadt.de/tor-mirror/dist/",
275
-            httpsDistMirror => "",
276
-            rsyncDistMirror => "",
277
-            hiddenServiceMirror => ""
278
-        },
279
-
280
-	mirror019 => {
281
-            adminContact => "webmaster AT askapache DOT com",
282
-            orgName => "AskApache",
283
-            isoCC => "US",
284
-            subRegion => "California",
285
-            region => "US",
286
-            ipv4 => "True",
287
-            ipv6 => "False",
288
-            loadBalanced => "No",
289
-            httpWebsiteMirror => "http://tor.askapache.com/",
290
-            httpsWebsiteMirror => "",
291
-            rsyncWebsiteMirror => "",
292
-            ftpWebsiteMirror => "",
293
-            httpDistMirror => "http://tor.askapache.com/dist/",
294
-            httpsDistMirror => "",
295
-            rsyncDistMirror => "",
296
-            hiddenServiceMirror => ""
297
-        },
298
-
299
-	mirror020 => {
300
-            adminContact => " mail AT benjamin-meier DOT info ",
301
-            orgName => "beme it",
302
-            isoCC => "DE",
303
-            subRegion => "",
304
-            region => "DE",
305
-            ipv4 => "True",
306
-            ipv6 => "False",
307
-            loadBalanced => "No",
308
-            httpWebsiteMirror => "http://tor.beme-it.de/",
309
-            httpsWebsiteMirror => "https://tor.beme-it.de/",
310
-            rsyncWebsiteMirror => "rsync://tor.beme-it.de/tor",
311
-            ftpWebsiteMirror => "",
312
-            httpDistMirror => "http://tor.beme-it.de/dist/",
313
-            httpsDistMirror => "https://tor.beme-it.de/dist/",
314
-            rsyncDistMirror => "rsync://tor.beme-it.de/tor/dist",
315
-            hiddenServiceMirror => ""
316
-        },
317
-
318
-        mirror021 => {
319
-            adminContact => "",
320
-            orgName => "India Tor Fans",
321
-            isoCC => "IN",
322
-            subRegion => "",
323
-            region => "IN",
324
-            ipv4 => "True",
325
-            ipv6 => "False",
326
-            loadBalanced => "No",
327
-            httpWebsiteMirror => "http://www.torproject.org.in/",
328
-            httpsWebsiteMirror => "",
329
-            rsyncWebsiteMirror => "",
330
-            ftpWebsiteMirror => "",
331
-            httpDistMirror => "http://www.torproject.org.in/dist/",
332
-            httpsDistMirror => "",
333
-            rsyncDistMirror => "",
334
-            hiddenServiceMirror => ""
335
-        },
336
-
337
-        mirror024 => {
338
-            adminContact => "",
339
-            orgName => "homosu",
340
-            isoCC => "SE",
341
-            subRegion => "",
342
-            region => "SE",
343
-            ipv4 => "True",
344
-            ipv6 => "False",
345
-            loadBalanced => "No",
346
-            httpWebsiteMirror => "http://tor.homosu.net/",
347
-            httpsWebsiteMirror => "",
348
-            rsyncWebsiteMirror => "",
349
-            ftpWebsiteMirror => "",
350
-            httpDistMirror => "http://tor.homosu.net/dist/",
351
-            httpsDistMirror => "",
352
-            rsyncDistMirror => "",
353
-            hiddenServiceMirror => ""
354
-        },
355
-
356
-        mirror025 => {
357
-            adminContact => "margus.random at mail.ee",
358
-            orgName => "CyberSIDE",
359
-            isoCC => "EE",
360
-            subRegion => "",
361
-            region => "EE",
362
-            ipv4 => "True",
363
-            ipv6 => "False",
364
-            loadBalanced => "No",
365
-            httpWebsiteMirror => "http://cyberside.planet.ee/tor/",
366
-            httpsWebsiteMirror => "",
367
-            rsyncWebsiteMirror => "",
368
-            ftpWebsiteMirror => "",
369
-            httpDistMirror => "http://cyberside.net.ee/tor/",
370
-            httpsDistMirror => "",
371
-            rsyncDistMirror => "",
372
-            hiddenServiceMirror => ""
373
-        },
374
-
375
-        mirror028 => {
376
-            adminContact => "",
377
-            orgName => "NW Linux",
378
-            isoCC => "US",
379
-            subRegion => "WA",
380
-            region => "US",
381
-            ipv4 => "True",
382
-            ipv6 => "False",
383
-            loadBalanced => "No",
384
-            httpWebsiteMirror => "http://torproject.nwlinux.us/",
385
-            httpsWebsiteMirror => "",
386
-            rsyncWebsiteMirror => "rsync://nwlinux.us/tor-web",
387
-            ftpWebsiteMirror => "",
388
-            httpDistMirror => "http://torproject.nwlinux.us/dist/",
389
-            httpsDistMirror => "",
390
-            rsyncDistMirror => "rsync://nwlinux.us/tor-dist",
391
-            hiddenServiceMirror => "",
392
-        },
393
-        mirror029 => {
394
-            adminContact => "",
395
-            orgName => "LazyTiger",
396
-            isoCC => "FR",
397
-            subRegion => "",
398
-            region => "FR",
399
-            ipv4 => "True",
400
-            ipv6 => "False",
401
-            loadBalanced => "No",
402
-            httpWebsiteMirror => "http://tor.taiga-san.net/",
403
-            httpsWebsiteMirror => "",
404
-            rsyncWebsiteMirror => "",
405
-            ftpWebsiteMirror => "",
406
-            httpDistMirror => "http://tor.taiga-san.net/dist/",
407
-            httpsDistMirror => "",
408
-            rsyncDistMirror => "",
409
-            hiddenServiceMirror => "",
410
-        },
411
-        mirror030 => {
412
-            adminContact => "",
413
-            orgName => "searchprivate",
414
-            isoCC => "US",
415
-            subRegion => "TX",
416
-            region => "US",
417
-            ipv4 => "True",
418
-            ipv6 => "False",
419
-            loadBalanced => "No",
420
-            httpWebsiteMirror => "http://tor.searchprivate.com/",
421
-            httpsWebsiteMirror => "",
422
-            rsyncWebsiteMirror => "",
423
-            ftpWebsiteMirror => "",
424
-            httpDistMirror => "http://tor.searchprivate.com/dist/",
425
-            httpsDistMirror => "",
426
-            rsyncDistMirror => "",
427
-            hiddenServiceMirror => "",
428
-        },
429
-        mirror031 => {
430
-            adminContact => "",
431
-            orgName => "cyberarmy",
432
-            isoCC => "AT",
433
-            subRegion => "",
434
-            region => "AT",
435
-            ipv4 => "True",
436
-            ipv6 => "False",
437
-            loadBalanced => "No",
438
-            httpWebsiteMirror => "http://tor.cyberarmy.at/",
439
-            httpsWebsiteMirror => "",
440
-            rsyncWebsiteMirror => "",
441
-            ftpWebsiteMirror => "",
442
-            httpDistMirror => "",
443
-            httpsDistMirror => "",
444
-            rsyncDistMirror => "",
445
-            hiddenServiceMirror => "",
446
-        },
447
-        mirror032 => {
448
-            adminContact => "",
449
-            orgName => "torproject.is",
450
-            isoCC => "IS",
451
-            subRegion => "",
452
-            region => "IS",
453
-            ipv4 => "True",
454
-            ipv6 => "False",
455
-            loadBalanced => "No",
456
-            httpWebsiteMirror => "http://torproject.is/",
457
-            httpsWebsiteMirror => "",
458
-            rsyncWebsiteMirror => "",
459
-            ftpWebsiteMirror => "",
460
-            httpDistMirror => "http://torproject.is/dist/",
461
-            httpsDistMirror => "",
462
-            rsyncDistMirror => "",
463
-            hiddenServiceMirror => "",
464
-        },
465
-        mirror033 => {
466
-            adminContact => "",
467
-            orgName => "torservers",
468
-            isoCC => "DE",
469
-            subRegion => "",
470
-            region => "DE",
471
-            ipv4 => "True",
472
-            ipv6 => "False",
473
-            loadBalanced => "No",
474
-            httpWebsiteMirror => "http://www.torservers.net/mirrors/torproject.org/",
475
-            httpsWebsiteMirror => "https://www.torservers.net/mirrors/torproject.org/",
476
-            rsyncWebsiteMirror => "",
477
-            ftpWebsiteMirror => "",
478
-            httpDistMirror => "http://www.torservers.net/mirrors/torproject.org/dist/",
479
-            httpsDistMirror => "https://www.torservers.net/mirrors/torproject.org/dist/",
480
-            rsyncDistMirror => "",
481
-            hiddenServiceMirror => "http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/",
482
-        },
483
-        mirror036 => {
484
-            adminContact => "",
485
-            orgName => "",
486
-            isoCC => "NL",
487
-            subRegion => "",
488
-            region => "NL",
489
-            ipv4 => "True",
490
-            ipv6 => "False",
491
-            loadBalanced => "No",
492
-            httpWebsiteMirror => "",
493
-            httpsWebsiteMirror => "",
494
-            rsyncWebsiteMirror => "",
495
-            ftpWebsiteMirror => "",
496
-            httpDistMirror => "",
497
-            httpsDistMirror => "https://www.coevoet.nl/tor/dist/",
498
-            rsyncDistMirror => "",
499
-            hiddenServiceMirror => "",
500
-      },
501
-        mirror038 => {
502
-            adminContact => "",
503
-            orgName => "",
504
-            isoCC => "LT",
505
-            subRegion => "",
506
-            region => "LT",
507
-            ipv4 => "True",
508
-            ipv6 => "False",
509
-            loadBalanced => "No",
510
-            httpWebsiteMirror => "http://tor.vesta.nu/",
511
-            httpsWebsiteMirror => "",
512
-            rsyncWebsiteMirror => "",
513
-            ftpWebsiteMirror => "",
514
-            httpDistMirror => "http://tor.vesta.nu/dist/",
515
-            httpsDistMirror => "",
516
-            rsyncDistMirror => "",
517
-            hiddenServiceMirror => "",
518
-      },
519
-        mirror045 => {
520
-            adminContact => "",
521
-            orgName => "",
522
-            isoCC => "TN",
523
-            subRegion => "",
524
-            region => "TN",
525
-            ipv4 => "True",
526
-            ipv6 => "False",
527
-            loadBalanced => "No",
528
-            httpWebsiteMirror => "http://tor.mirror.tn/",
529
-            httpsWebsiteMirror => "",
530
-            rsyncWebsiteMirror => "",
531
-            ftpWebsiteMirror => "",
532
-            httpDistMirror => "http://tor.mirror.tn/dist/",
533
-            httpsDistMirror => "",
534
-            rsyncDistMirror => "",
535
-            hiddenServiceMirror => "",
536
-      },
537
-        mirror045 => {
538
-            adminContact => "",
539
-            orgName => "",
540
-            isoCC => "TN",
541
-            subRegion => "",
542
-            region => "TN",
543
-            ipv4 => "True",
544
-            ipv6 => "False",
545
-            loadBalanced => "No",
546
-            httpWebsiteMirror => "http://torproject.antagonism.org/",
547
-            httpsWebsiteMirror => "https://torproject.antagonism.org/",
548
-            rsyncWebsiteMirror => "",
549
-            ftpWebsiteMirror => "",
550
-            httpDistMirror => "",
551
-            httpsDistMirror => "",
552
-            rsyncDistMirror => "",
553
-            hiddenServiceMirror => "",
554
-      },
555
-        mirror048 => {
556
-            adminContact => "",
557
-            orgName => "",
558
-            isoCC => "AT",
559
-            subRegion => "",
560
-            region => "AT",
561
-            ipv4 => "True",
562
-            ipv6 => "True",
563
-            loadBalanced => "No",
564
-            httpWebsiteMirror => "http://tor.dont-know-me.at/",
565
-            httpsWebsiteMirror => "",
566
-            rsyncWebsiteMirror => "",
567
-            ftpWebsiteMirror => "",
568
-            httpDistMirror => "http://tor.dont-know-me.at/dist/",
569
-            httpsDistMirror => "",
570
-            rsyncDistMirror => "",
571
-            hiddenServiceMirror => "",
572
-        },
573
-        mirror049 => {
574
-            adminContact => "IceBear",
575
-            orgName => "myRL.net",
576
-            isoCC => "IS",
577
-            subRegion => "",
578
-            region => "IS",
579
-            ipv4 => "True",
580
-            ipv6 => "False",
581
-            loadBalanced => "No",
582
-            httpWebsiteMirror => "http://tor.myrl.net/",
583
-            httpsWebsiteMirror => "https://tor.myrl.net/",
584
-            rsyncWebsiteMirror => "",
585
-            ftpWebsiteMirror => "",
586
-            httpDistMirror => "http://tor.myrl.net/dist/",
587
-            httpsDistMirror => "https://tor.myrl.net/dist/",
588
-            rsyncDistMirror => "",
589
-            hiddenServiceMirror => "",
590
-        },
591
-        mirror050 => {
592
-            adminContact => "",
593
-            orgName => "borgmann.tv",
594
-            isoCC => "DE",
595
-            subRegion => "",
596
-            region => "DE",
597
-            ipv4 => "True",
598
-            ipv6 => "False",
599
-            loadBalanced => "No",
600
-            httpWebsiteMirror => "http://tor.borgmann.tv/",
601
-            httpsWebsiteMirror => "",
602
-            rsyncWebsiteMirror => "",
603
-            ftpWebsiteMirror => "",
604
-            httpDistMirror => "http://tor.borgmann.tv/dist/",
605
-            httpsDistMirror => "",
606
-            rsyncDistMirror => "",
607
-            hiddenServiceMirror => "",
608
-        },
609
-        mirror051 => {
610
-            adminContact => "",
611
-            orgName => "torland",
612
-            isoCC => "GB",
613
-            subRegion => "",
614
-            region => "GB",
615
-            ipv4 => "True",
616
-            ipv6 => "False",
617
-            loadBalanced => "No",
618
-            httpWebsiteMirror => "http://mirror.torland.me/torproject.org/",
619
-            httpsWebsiteMirror => "https://mirror.torland.me/torproject.org/",
620
-            rsyncWebsiteMirror => "",
621
-            ftpWebsiteMirror => "",
622
-            httpDistMirror => "http://mirror.torland.me/torproject.org/dist/",
623
-            httpsDistMirror => "https://mirror.torland.me/torproject.org/dist/",
624
-            rsyncDistMirror => "",
625
-            hiddenServiceMirror => "",
626
-        },
627
-        mirror052 => {
628
-            adminContact => "",
629
-            orgName => "spline",
630
-            isoCC => "DE",
631
-            subRegion => "",
632
-            region => "DE",
633
-            ipv4 => "True",
634
-            ipv6 => "False",
635
-            loadBalanced => "No",
636
-            httpWebsiteMirror => "http://tor.spline.de/",
637
-            httpsWebsiteMirror => "https://tor.spline.inf.fu-berlin.de/",
638
-            rsyncWebsiteMirror => "rsync://ftp.spline.de/tor",
639
-            ftpWebsiteMirror => "ftp://ftp.spline.de/pub/tor",
640
-            httpDistMirror => "http://tor.spline.de/dist/",
641
-            httpsDistMirror => "https://tor.spline.inf.fu-berlin.de/dist/",
642
-            rsyncDistMirror => "rsync://ftp.spline.de/tor/dist",
643
-            hiddenServiceMirror => "",
644
-        },
645
-        mirror053 => {
646
-            adminContact => "",
647
-            orgName => "",
648
-            isoCC => "AT",
649
-            subRegion => "",
650
-            region => "AT",
651
-            ipv4 => "True",
652
-            ipv6 => "False",
653
-            loadBalanced => "No",
654
-            httpWebsiteMirror => "http://torproject.ph3x.at/",
655
-            httpsWebsiteMirror => "",
656
-            rsyncWebsiteMirror => "",
657
-            ftpWebsiteMirror => "",
658
-            httpDistMirror => "http://torproject.ph3x.at/dist/",
659
-            httpsDistMirror => "",
660
-            rsyncDistMirror => "",
661
-            hiddenServiceMirror => "",
662
-        },
663
-        mirror054 => {
664
-            adminContact => "",
665
-            orgName => "hessmo",
666
-            isoCC => "US",
667
-            subRegion => "",
668
-            region => "US",
669
-            ipv4 => "True",
670
-            ipv6 => "False",
671
-            loadBalanced => "No",
672
-            httpWebsiteMirror => "http://mirror.hessmo.com/tor/",
673
-            httpsWebsiteMirror => "",
674
-            rsyncWebsiteMirror => "",
675
-            ftpWebsiteMirror => "",
676
-            httpDistMirror => "http://mirror.hessmo.com/tor/dist/",
677
-            httpsDistMirror => "",
678
-            rsyncDistMirror => "",
679
-            hiddenServiceMirror => "",
680
-        },
681
-        mirror058 => {
682
-            adminContact => "",
683
-            orgName => "",
684
-            isoCC => "US",
685
-            subRegion => "",
686
-            region => "US",
687
-            ipv4 => "True",
688
-            ipv6 => "True",
689
-            loadBalanced => "No",
690
-            httpWebsiteMirror => "http://tor.loritsu.com/",
691
-            httpsWebsiteMirror => "",
692
-            rsyncWebsiteMirror => "",
693
-            ftpWebsiteMirror => "",
694
-            httpDistMirror => "http://tor.loritsu.com/dist/",
695
-            httpsDistMirror => "",
696
-            rsyncDistMirror => "",
697
-            hiddenServiceMirror => "",
698
-        },
699
-        mirror060 => {
700
-            adminContact => "",
701
-            orgName => "",
702
-            isoCC => "DE",
703
-            subRegion => "",
704
-            region => "DE",
705
-            ipv4 => "True",
706
-            ipv6 => "False",
707
-            loadBalanced => "No",
708
-            httpWebsiteMirror => "http://torproject.cryptowars.info/",
709
-            httpsWebsiteMirror => "https://torproject.cryptowars.info/",
710
-            rsyncWebsiteMirror => "rsync://torproject.cryptowars.info/",
711
-            ftpWebsiteMirror => "",
712
-            httpDistMirror => "http://torproject.cryptowars.info/dist/",
713
-            httpsDistMirror => "https://torproject.cryptowars.info/dist/",
714
-            rsyncDistMirror => "",
715
-            hiddenServiceMirror => "",
716
-        },
717
-        mirror062 => {
718
-            adminContact => "",
719
-            orgName => "",
720
-            isoCC => "DE",
721
-            subRegion => "",
722
-            region => "DE",
723
-            ipv4 => "True",
724
-            ipv6 => "False",
725
-            loadBalanced => "No",
726
-            httpWebsiteMirror => "http://tor.dev-random.de/",
727
-            httpsWebsiteMirror => "https://tor.dev-random.de/",
728
-            rsyncWebsiteMirror => "",
729
-            ftpWebsiteMirror => "",
730
-            httpDistMirror => "http://tor.dev-random.de/dist/",
731
-            httpsDistMirror => "https://tor.dev-random.de/dist/",
732
-            rsyncDistMirror => "",
733
-            hiddenServiceMirror => "",
734
-    },
735
-        mirror063 => {
736
-            adminContact => "",
737
-            orgName => "crazyhaze.de",
738
-            isoCC => "DE",
739
-            subRegion => "",
740
-            region => "DE",
741
-            ipv4 => "True",
742
-            ipv6 => "False",
743
-            loadBalanced => "No",
744
-            httpWebsiteMirror => "http://tor.crazyhaze.de/",
745
-            httpsWebsiteMirror => "https://tor.crazyhaze.de/",
746
-            rsyncWebsiteMirror => "",
747
-            ftpWebsiteMirror => "",
748
-            httpDistMirror => "http://tor.crazyhaze.de/dist/",
749
-            httpsDistMirror => "https://tor.crazyhaze.de/dist/",
750
-            rsyncDistMirror => "",
751
-            hiddenServiceMirror => "",
752
-    },
753
-        mirror066 => {
754
-            adminContact => "",
755
-            orgName => "Lightning-bolt.net",
756
-            isoCC => "CZ",
757
-            subRegion => "",
758
-            region => "CZ",
759
-            ipv4 => "True",
760
-            ipv6 => "False",
761
-            loadBalanced => "No",
762
-            httpWebsiteMirror => "http://torproject.lightning-bolt.net/",
763
-            httpsWebsiteMirror => "",
764
-            rsyncWebsiteMirror => "",
765
-            ftpWebsiteMirror => "",
766
-            httpDistMirror => "http://torproject.lightning-bolt.net/dist/",
767
-            httpsDistMirror => "",
768
-            rsyncDistMirror => "",
769
-            hiddenServiceMirror => "",
770
-    },
771
-        mirror067 => {
772
-            adminContact => "",
773
-            orgName => "",
774
-            isoCC => "US",
775
-            subRegion => "",
776
-            region => "US",
777
-            ipv4 => "True",
778
-            ipv6 => "False",
779
-            loadBalanced => "No",
780
-            httpWebsiteMirror => "http://tor.mirrors.whitedholdings.org/",
781
-            httpsWebsiteMirror => "https://tor.mirrors.whitedholdings.org/",
782
-            rsyncWebsiteMirror => "rsync://mirrors.whitedholdings.org/tor",
783
-            ftpWebsiteMirror => "",
784
-            httpDistMirror => "http://tor.mirrors.whitedholdings.org/dist/",
785
-            httpsDistMirror => "https://tor.mirrors.whitedholdings.org/dist/",
786
-            rsyncDistMirror => "rsync://tor.mirrors.whitedholdings.org/tor-dist",
787
-            hiddenServiceMirror => "",
788
-     },
789
-        mirror069 => {
790
-            adminContact => "",
791
-            orgName => "",
792
-            isoCC => "FR",
793
-            subRegion => "",
794
-            region => "FR",
795
-            ipv4 => "True",
796
-            ipv6 => "False",
797
-            loadBalanced => "No",
798
-            httpWebsiteMirror => "http://tor.mirror.chekanov.net/",
799
-            httpsWebsiteMirror => "",
800
-            rsyncWebsiteMirror => "",
801
-            ftpWebsiteMirror => "",
802
-            httpDistMirror => "http://tor.mirror.chekanov.net/dist/",
803
-            httpsDistMirror => "",
804
-            rsyncDistMirror => "",
805
-            hiddenServiceMirror => "",
806
-    },
807
-        mirror072 => {
808
-            adminContact => "",
809
-            orgName => "",
810
-            isoCC => "US",
811
-            subRegion => "",
812
-            region => "US",
813
-            ipv4 => "True",
814
-            ipv6 => "False",
815
-            loadBalanced => "No",
816
-            httpWebsiteMirror => "http://tor.minibofh.org/",
817
-            httpsWebsiteMirror => "",
818
-            rsyncWebsiteMirror => "",
819
-            ftpWebsiteMirror => "",
820
-            httpDistMirror => "http://tor.minibofh.org/dist/",
821
-            httpsDistMirror => "",
822
-            rsyncDistMirror => "",
823
-            hiddenServiceMirror => "",
824
-    },
825
-        mirror073 => {
826
-            adminContact => "",
827
-            orgName => "",
828
-            isoCC => "UA",
829
-            subRegion => "",
830
-            region => "UA",
831
-            ipv4 => "True",
832
-            ipv6 => "False",
833
-            loadBalanced => "No",
834
-            httpWebsiteMirror => "http://torua.reactor-xg.kiev.ua/",
835
-            httpsWebsiteMirror => "",
836
-            rsyncWebsiteMirror => "",
837
-            ftpWebsiteMirror => "",
838
-            httpDistMirror => "http://torua.reactor-xg.kiev.ua/dist/",
839
-            httpsDistMirror => "",
840
-            rsyncDistMirror => "",
841
-            hiddenServiceMirror => "",
842
-    },
843
-        mirror075 => {
844
-            adminContact => "",
845
-            orgName => "me0w.cc",
846
-            isoCC => "RO",
847
-            subRegion => "",
848
-            region => "RO",
849
-            ipv4 => "True",
850
-            ipv6 => "False",
851
-            loadBalanced => "No",
852
-            httpWebsiteMirror => "http://tor.me0w.cc/",
853
-            httpsWebsiteMirror => "",
854
-            rsyncWebsiteMirror => "",
855
-            ftpWebsiteMirror => "",
856
-            httpDistMirror => "http://tor.me0w.cc/dist/",
857
-            httpsDistMirror => "",
858
-            rsyncDistMirror => "",
859
-            hiddenServiceMirror => "",
860
-    },
861
-        mirror076 => {
862
-            adminContact => "",
863
-            orgName => "",
864
-            isoCC => "US",
865
-            subRegion => "",
866
-            region => "US",
867
-            ipv4 => "True",
868
-            ipv6 => "False",
869
-            loadBalanced => "No",
870
-            httpWebsiteMirror => "http://mirror.nametoday.me/tor/",
871
-            httpsWebsiteMirror => "",
872
-            rsyncWebsiteMirror => "",
873
-            ftpWebsiteMirror => "",
874
-            httpDistMirror => "http://mirror.nametoday.me/tor/dist/",
875
-            httpsDistMirror => "",
876
-            rsyncDistMirror => "",
877
-            hiddenServiceMirror => "",
878
-        },
879
-        mirror077 => {
880
-            adminContact => "",
881
-            orgName => "",
882
-            isoCC => "UK",
883
-            subRegion => "",
884
-            region => "UK",
885
-            ipv4 => "True",
886
-            ipv6 => "False",
887
-            loadBalanced => "No",
888
-            httpWebsiteMirror => "http://tor.mage.me.uk/",
889
-            httpsWebsiteMirror => "",
890
-            rsyncWebsiteMirror => "",
891
-            ftpWebsiteMirror => "",
892
-            httpDistMirror => "http://tor.mage.me.uk/dist/",
893
-            httpsDistMirror => "",
894
-            rsyncDistMirror => "",
895
-            hiddenServiceMirror => "",
896
-    },
897
-        mirror078 => {
898
-            adminContact => "",
899
-            orgName => "",
900
-            isoCC => "CH",
901
-            subRegion => "",
902
-            region => "CH",
903
-            ipv4 => "True",
904
-            ipv6 => "False",
905
-            loadBalanced => "No",
906
-            httpWebsiteMirror => "http://torproject.pillo-srv.ch/",
907
-            httpsWebsiteMirror => "https://torproject.pillo-srv.ch/",
908
-            rsyncWebsiteMirror => "",
909
-            ftpWebsiteMirror => "",
910
-            httpDistMirror => "http://torproject.pillo-srv.ch/dist/",
911
-            httpsDistMirror => "https://torproject.pillo-srv.ch/dist/",
912
-            rsyncDistMirror => "",
913
-            hiddenServiceMirror => "",
914
-    },
915
-        mirror079 => {
916
-            adminContact => "",
917
-            orgName => "",
918
-            isoCC => "LU",
919
-            subRegion => "",
920
-            region => "LU",
921
-            ipv4 => "True",
922
-            ipv6 => "False",
923
-            loadBalanced => "No",
924
-            httpWebsiteMirror => "http://torproject.adamas.ai/",
925
-            httpsWebsiteMirror => "",
926
-            rsyncWebsiteMirror => "",
927
-            ftpWebsiteMirror => "",
928
-            httpDistMirror => "http://torproject.adamas.ai/dist/",
929
-            httpsDistMirror => "",
930
-            rsyncDistMirror => "",
931
-            hiddenServiceMirror => "",
932
-    },
933
-        mirror080 => {
934
-            adminContact => "",
935
-            orgName => "",
936
-            isoCC => "FR",
937
-            subRegion => "",
938
-            region => "FR",
939
-            ipv4 => "True",
940
-            ipv6 => "False",
941
-            loadBalanced => "No",
942
-            httpWebsiteMirror => "http://torproject.c3l.lu/",
943
-            httpsWebsiteMirror => "",
944
-            rsyncWebsiteMirror => "",
945
-            ftpWebsiteMirror => "",
946
-            httpDistMirror => "http://torproject.c3l.lu/dist/",
947
-            httpsDistMirror => "",
948
-            rsyncDistMirror => "",
949
-            hiddenServiceMirror => "",
950
-    },
951
-        mirror081 => {
952
-            adminContact => "",
953
-            orgName => "",
954
-            isoCC => "EE",
955
-            subRegion => "",
956
-            region => "EE",
957
-            ipv4 => "True",
958
-            ipv6 => "False",
959
-            loadBalanced => "No",
960
-            httpWebsiteMirror => "http://tor.li/",
961
-            httpsWebsiteMirror => "https://tor.li/",
962
-            rsyncWebsiteMirror => "",
963
-            ftpWebsiteMirror => "",
964
-            httpDistMirror => "http://tor.li/dist/",
965
-            httpsDistMirror => "https://tor.li/dist/",
966
-            rsyncDistMirror => "",
967
-            hiddenServiceMirror => "",
968
-    },
969
-        mirror082 => {
970
-            adminContact => "",
971
-            orgName => "",
972
-            isoCC => "US",
973
-            subRegion => "",
974
-            region => "US",
975
-            ipv4 => "True",
976
-            ipv6 => "True",
977
-            loadBalanced => "No",
978
-            httpWebsiteMirror => "http://mirror.nametoday.me/tor/",
979
-            httpsWebsiteMirror => "",
980
-            rsyncWebsiteMirror => "",
981
-            ftpWebsiteMirror => "",
982
-            httpDistMirror => "http://mirror.nametoday.me/tor/dist/",
983
-            httpsDistMirror => "",
984
-            rsyncDistMirror => "",
985
-            hiddenServiceMirror => "",
986
-    },
987
-        mirror085 => {
988
-            adminContact => "",
989
-            orgName => "Soviet Anonymous",
990
-            isoCC => "RU",
991
-            subRegion => "",
992
-            region => "RU",
993
-            ipv4 => "True",
994
-            ipv6 => "False",
995
-            loadBalanced => "No",
996
-            httpWebsiteMirror => "http://creep.im/tor",
997
-            httpsWebsiteMirror => "https://creep.im/tor",
998
-            rsyncWebsiteMirror => "rsync://creep.im/tor",
999
-            ftpWebsiteMirror => "ftp://creep.im/mirrors/tor",
1000
-            httpDistMirror => "http://creep.im/tor/dist/",
1001
-            httpsDistMirror => "https://creep.im/tor/dist/",
1002
-            rsyncDistMirror => "rsync://creep.im/tor-dist",
1003
-            hiddenServiceMirror => "",
1004
-    },
1005
-        mirror086 => {
1006
-            adminContact => "",
1007
-            orgName => "",
1008
-            isoCC => "US",
1009
-            subRegion => "",
1010
-            region => "US",
1011
-            ipv4 => "True",
1012
-            ipv6 => "False",
1013
-            loadBalanced => "No",
1014
-            httpWebsiteMirror => "http://199.175.55.215/",
1015
-            httpsWebsiteMirror => "",
1016
-            rsyncWebsiteMirror => "",
1017
-            ftpWebsiteMirror => "",
1018
-            httpDistMirror => "http://199.175.55.215/dist/",
1019
-            httpsDistMirror => "",
1020
-            rsyncDistMirror => "",
1021
-            hiddenServiceMirror => "",
1022
-    },
1023
-        mirror087 => {
1024
-            adminContact => "",
1025
-            orgName => "",
1026
-            isoCC => "DE",
1027
-            subRegion => "",
1028
-            region => "DE",
1029
-            ipv4 => "True",
1030
-            ipv6 => "False",
1031
-            loadBalanced => "No",
1032
-            httpWebsiteMirror => "http://tor.linuxlounge.net/",
1033
-            httpsWebsiteMirror => "https://tor.linuxlounge.net/",
1034
-            rsyncWebsiteMirror => "",
1035
-            ftpWebsiteMirror => "",
1036
-            httpDistMirror => "http://tor.linuxlounge.net/dist/",
1037
-            httpsDistMirror => "https://tor.linuxlounge.net/dist/",
1038
-            rsyncDistMirror => "",
1039
-            hiddenServiceMirror => "",
1040
-    },
1041
-        mirror088 => {
1042
-            adminContact => "",
1043
-            orgName => "",
1044
-            isoCC => "US",
1045
-            subRegion => "",
1046
-            region => "US",
1047
-            ipv4 => "True",
1048
-            ipv6 => "False",
1049
-            loadBalanced => "No",
1050
-            httpWebsiteMirror => "",
1051
-            httpsWebsiteMirror => "",
1052
-            rsyncWebsiteMirror => "",
1053
-            ftpWebsiteMirror => "ftp://mirrors.go-parts.com/tor/",
1054
-            httpDistMirror => "http://mirrors.go-parts.com/tor/dist/",
1055
-            httpsDistMirror => "",
1056
-            rsyncDistMirror => "rsync://mirrors.go-parts.com/mirrors/tor/",
1057
-            hiddenServiceMirror => "",
1058
-    },
1059
-        mirror089 => {
1060
-            adminContact => "",
1061
-            orgName => "",
1062
-            isoCC => "US",
1063
-            subRegion => "",
1064
-            region => "US",
1065
-            ipv4 => "True",
1066
-            ipv6 => "False",
1067
-            loadBalanced => "No",
1068
-            httpWebsiteMirror => "",
1069
-            httpsWebsiteMirror => "",
1070
-            rsyncWebsiteMirror => "",
1071
-            ftpWebsiteMirror => "",
1072
-            httpDistMirror => "http://www.netgull.com/torproject/",
1073
-            httpsDistMirror => "",
1074
-            rsyncDistMirror => "",
1075
-            hiddenServiceMirror => "",
1076
-    },
1077
-        mirror090 => {
1078
-            adminContact => "",
1079
-            orgName => "",
1080
-            isoCC => "US",
1081
-            subRegion => "",
1082
-            region => "US",
1083
-            ipv4 => "True",
1084
-            ipv6 => "False",
1085
-            loadBalanced => "No",
1086
-            httpWebsiteMirror => "http://torproject.guilhem.org/",
1087
-            httpsWebsiteMirror => "https://torproject.guilhem.org/",
1088
-            rsyncWebsiteMirror => "",
1089
-            ftpWebsiteMirror => "",
1090
-            httpDistMirror => "http://torproject.guilhem.org/dist/",
1091
-            httpsDistMirror => "https://torproject.guilhem.org/dist/",
1092
-            rsyncDistMirror => "",
1093
-            hiddenServiceMirror => "",
1094
-    },
1095
-        mirror091 => {
1096
-            adminContact => "",
1097
-            orgName => "",
1098
-            isoCC => "MX",
1099
-            subRegion => "",
1100
-            region => "MX",
1101
-            ipv4 => "True",
1102
-            ipv6 => "False",
1103
-            loadBalanced => "No",
1104
-            httpWebsiteMirror => "http://fbnaia.homelinux.net/torproject/",
1105
-            httpsWebsiteMirror => "https://fbnaia.homelinux.net/torproject/",
1106
-            rsyncWebsiteMirror => "",
1107
-            ftpWebsiteMirror => "",
1108
-            httpDistMirror => "http://fbnaia.homelinux.net/torproject/dist/",
1109
-            httpsDistMirror => "https://fbnaia.homelinux.net/torproject//dist/",
1110
-            rsyncDistMirror => "",
1111
-            hiddenServiceMirror => "",
1112
-    },
1113
-	mirror092 => {
1114
-	    adminContact => "hackthissite.org",
1115
-	    orgName => "HackThisSite.org",
1116
-	    isoCC => "US",
1117
-	    subRegion => "",
1118
-	    region => "US",
1119
-	    ipv4 => "True",
1120
-	    ipv6 => "True",
1121
-	    loadBalanced => "No",
1122
-	    httpWebsiteMirror => "http://tor.hackthissite.org/",
1123
-	    httpsWebsiteMirror => "https://tor.hackthissite.org/",
1124
-	    rsyncWebsiteMirror => "",
1125
-	    ftpWebsiteMirror => "",
1126
-	    httpDistMirror => "http://mirror.hackthissite.org/tor",
1127
-	    httpsDistMirror => "https://mirror.hackthissite.org/tor",
1128
-	    rsyncDistMirror => "",
1129
-	    hiddenServiceMirror => ""
1130
-    },
1131
-	mirror093 => {
1132
-	  adminContact => "http://sebastian.pfeifer.or.at/",
1133
-	  orgName => "TechAsk.IT",
1134
-	  isoCC => "AT",
1135
-	  subRegion => "Favoriten",
1136
-	  region => "Wien",
1137
-	  ipv4 => "True",
1138
-	  ipv6 => "True",
1139
-	  loadBalanced => "No",
1140
-	  httpWebsiteMirror => "http://www.unicorncloud.org/public/torproject.org/",
1141
-	  httpsWebsiteMirror => "https://www.unicorncloud.org/public/torproject.org/",
1142
-	  rsyncWebsiteMirror => "",
1143
-	  ftpWebsiteMirror => "",
1144
-	  httpDistMirror => "http://www.unicorncloud.org/public/torproject.org/dist",
1145
-	  httpsDistMirror => "https://www.unicorncloud.org/public/torproject.org/dist",
1146
-	  rsyncDistMirror => "",
1147
-	  hiddenServiceMirror => ""
1148
-    },
1149
-      mirror094 => {
1150
-	adminContact =>"http://www.multinet.no",
1151
-	orgName => "MultiNet AS",
1152
-	isoCC => "NO",
1153
-	subRegion => "Trondheim",
1154
-	region => "Trondheim",
1155
-	ipv4 => "True",
1156
-	ipv6 => "True",
1157
-	loadBalanced => "No",
1158
-	httpWebsiteMirror =>"http://tor.multinet.no/",
1159
-	httpsWebsiteMirror => "",
1160
-	rsyncWebsiteMirror => "",
1161
-	ftpWebsiteMirror => "",
1162
-	httpDistMirror =>"http://tor.multinet.no/dist/",
1163
-	httpsDistMirror => "",
1164
-	rsyncDistMirror => "",
1165
-	hiddenServiceMirror => ""
1166
-    },
1167
-      mirror095 => {
1168
-	adminContact => "mirror-admin\@linsrv.net",
1169
-	orgName => "linsrv",
1170
-	isoCC => "FR",
1171
-	subRegion => "France",
1172
-	region => "Europe",
1173
-	ipv4 => "True",
1174
-	ipv6 => "False",
1175
-	loadBalanced => "No",
1176
-	httpWebsiteMirror => "http://mirrors.linsrv.net/torproject/",
1177
-	httpsWebsiteMirror => "",
1178
-	rsyncWebsiteMirror => "mirrors.linsrv.net::pub/torproject",
1179
-	ftpWebsiteMirror => "ftp://ftp.linsrv.net/pub/torproject/",
1180
-	httpDistMirror => "http://mirrors.linsrv.net/torproject/dist/",
1181
-	httpsDistMirror => "",
1182
-	rsyncDistMirror => "mirrors.linsrv.net::pub/torproject/dist",
1183
-	hiddenServiceMirror => ""
1184
-    },
1185
-      mirror097 => {
1186
-	adminContact => "marz.michael at gmail.com",
1187
-	orgName => "",
1188
-	isoCC => "DE",
1189
-	subRegion => "",
1190
-	region => "",
1191
-	ipv4 => "True",
1192
-	ipv6 => "False",
1193
-	loadBalanced => "No",
1194
-	httpWebsiteMirror => "http://tor.taskserver.de/",
1195
-	httpsWebsiteMirror => "",
1196
-	rsyncWebsiteMirror => "",
1197
-	ftpWebsiteMirror => "",
1198
-	httpDistMirror => "http://tor.taskserver.de/dist/",
1199
-	httpsDistMirror => "",
1200
-	rsyncDistMirror => "",
1201
-	hiddenServiceMirror => ""
1202
-    },
1203
-      mirror098 => {
1204
-	adminContact => "",
1205
-	orgName => "",
1206
-	isoCC => "FR",
1207
-	subRegion => "",
1208
-	region => "",
1209
-	ipv4 => "True",
1210
-	ipv6 => "False",
1211
-	loadBalanced => "No",
1212
-	httpWebsiteMirror => "http://37.187.0.127/tormirror/",
1213
-	httpsWebsiteMirror => "",
1214
-	rsyncWebsiteMirror => "",
1215
-	ftpWebsiteMirror => "",
1216
-	httpDistMirror => "http://37.187.0.127/tormirror/dist/",
1217
-	httpsDistMirror => "",
1218
-	rsyncDistMirror => "",
1219
-	hiddenServiceMirror => ""
1220
-    },
1221
-      mirror099 => {
1222
-	adminContact => "paul at coffswifi.net",
1223
-	orgName => "CoffsWiFi",
1224
-	isoCC => "AU",
1225
-	subRegion => "Australia and New Zealand",
1226
-	region => "APNIC",
1227
-	ipv4 => "True",
1228
-	ipv6 => "False",
1229
-	loadBalanced => "No",
1230
-	httpWebsiteMirror => "http://torproject.coffswifi.net",
1231
-	httpsWebsiteMirror => "",
1232
-	rsyncWebsiteMirror => "",
1233
-	ftpWebsiteMirror => "",
1234
-	httpDistMirror => "http://torproject.coffswifi.net/dist",
1235
-	httpsDistMirror => "",
1236
-	rsyncDistMirror => "",
1237
-	hiddenServiceMirror => ""
1238
-    },
1239
-      mirror100 => {
1240
-	adminContact => "nsane2307 eml cc",
1241
-	orgName => "tor-mirror.de",
1242
-	isoCC => "DE",
1243
-	subRegion => "Germany",
1244
-	region => "Europe",
1245
-	ipv4 => "True",
1246
-	ipv6 => "False",
1247
-	loadBalanced => "No",
1248
-	httpWebsiteMirror => "http://tor-mirror.de/",
1249
-	httpsWebsiteMirror => "https://tor-mirror.de/",
1250
-	rsyncWebsiteMirror => "",
1251
-	ftpWebsiteMirror => "",
1252
-	httpDistMirror => "http://tor-mirror.de/dist/",
1253
-	httpsDistMirror => "https://tor-mirror.de/dist/",
1254
-	rsyncDistMirror => "",
1255
-	hiddenServiceMirror => ""
1256
-    },