+
+ foreach my $on (keys %routes) {
+ my $routes= $routes{$on};
+ my $ocean= $oceans{$on};
+ die unless defined $ocean;
+
+ my @allislands;
+ foreach my $an (sort keys %$ocean) {
+ my $arch= $ocean->{$an};
+ push @allislands, sort keys %$arch;
+ }
+ parse_master_map_route_islands($on, \@allislands, $routes);
+ foreach my $route (values %$routes) {
+ parse_master_map_route_islands($on, \@allislands, $route);
+ }
+ }
+}
+
+sub parse_master_map_route_islands ($$$) {
+ my ($on, $allislands, $routemap) = @_;;
+ foreach my $k (sort keys %$routemap) {
+ my @ok= grep { index($_,$k) >= 0 } @$allislands;
+ die "ambiguous $k" if @ok>1;
+ if (!@ok) {
+ $route_mysteries{$on}{$k}++;
+ delete $routemap->{$k};
+ } elsif ($ok[0] ne $k) {
+ $routemap->{$ok[0]}= $routemap->{$k};
+ delete $routemap->{$k};
+ }
+ }