File Coverage

blib/lib/Geo/IP.pm
Criterion Covered Total %
statement 272 403 67.4
branch 51 138 36.9
condition 22 50 44.0
subroutine 43 62 69.3
pod 24 29 82.7
total 412 682 60.4


line stmt bran cond sub pod time code
1             package Geo::IP;
2              
3 7     7   6976 use strict;
  7         11  
  7         251  
4              
5 7     7   35 use base qw(Exporter);
  7         8  
  7         1722  
6              
7             our $VERSION;
8              
9             our @ISA;
10              
11             our $GEOIP_PP_ONLY = 0;
12             our $XS_VERSION;
13              
14             our @EXPORT = qw(
15             GEOIP_STANDARD GEOIP_MEMORY_CACHE
16             GEOIP_CHECK_CACHE GEOIP_INDEX_CACHE
17             GEOIP_UNKNOWN_SPEED GEOIP_DIALUP_SPEED
18             GEOIP_CABLEDSL_SPEED GEOIP_CORPORATE_SPEED
19             GEOIP_COUNTRY_EDITION GEOIP_REGION_EDITION_REV0
20             GEOIP_CITY_EDITION_REV0 GEOIP_ORG_EDITION
21             GEOIP_ISP_EDITION GEOIP_CITY_EDITION_REV1
22             GEOIP_REGION_EDITION_REV1 GEOIP_PROXY_EDITION
23             GEOIP_ASNUM_EDITION GEOIP_NETSPEED_EDITION
24             GEOIP_CHARSET_ISO_8859_1 GEOIP_CHARSET_UTF8
25             GEOIP_MMAP_CACHE GEOIP_ACCURACYRADIUS_EDITION
26             GEOIP_COUNTRY_EDITION_V6 GEOIP_DOMAIN_EDITION
27             GEOIP_NETSPEED_EDITION_REV1 GEOIP_SILENCE
28             );
29              
30             BEGIN {
31 7     7   13 $VERSION = '1.45';
32 7 50 33     85 eval {
33              
34             # PERL_DL_NONLAZY must be false, or any errors in loading will just
35             # cause the perl code to be tested
36 7 50       58 local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY};
37              
38 7         32 require DynaLoader;
39 7         132 local @ISA = qw(DynaLoader);
40 7         14892 bootstrap Geo::IP $VERSION;
41             } unless $GEOIP_PP_ONLY || $ENV{GEOIP_PP_ONLY};
42             }
43              
44             require Geo::IP::Record;
45              
46             sub GEOIP_STANDARD() { 0; } # PP
47             sub GEOIP_MEMORY_CACHE() { 1; } # PP
48             sub GEOIP_CHECK_CACHE() { 2; }
49             sub GEOIP_INDEX_CACHE() { 4; }
50             sub GEOIP_MMAP_CACHE() { 8; } # PP
51             sub GEOIP_SILENCE() { 16; }
52              
53             sub GEOIP_UNKNOWN_SPEED() { 0; } #PP
54             sub GEOIP_DIALUP_SPEED() { 1; } #PP
55             sub GEOIP_CABLEDSL_SPEED() { 2; } #PP
56             sub GEOIP_CORPORATE_SPEED() { 3; } #PP
57              
58             BEGIN {
59              
60             #my $pp = !( defined &_XScompiled && &_XScompiled && !$TESTING_PERL_ONLY );
61 7     7   17 my $pp = !defined &open;
62              
63             sub GEOIP_COUNTRY_EDITION() { 1; }
64             sub GEOIP_CITY_EDITION_REV1() { 2; }
65             sub GEOIP_REGION_EDITION_REV1() { 3; }
66             sub GEOIP_ISP_EDITION() { 4; }
67             sub GEOIP_ORG_EDITION() { 5; }
68             sub GEOIP_CITY_EDITION_REV0() { 6; }
69             sub GEOIP_REGION_EDITION_REV0() { 7; }
70             sub GEOIP_PROXY_EDITION() { 8; }
71             sub GEOIP_ASNUM_EDITION() { 9; }
72             sub GEOIP_NETSPEED_EDITION() { 10; }
73             sub GEOIP_DOMAIN_EDITION() { 11; }
74             sub GEOIP_COUNTRY_EDITION_V6() { 12; }
75             sub GEOIP_ACCURACYRADIUS_EDITION() { 14; }
76             sub GEOIP_NETSPEED_EDITION_REV1() { 32; }
77              
78             sub GEOIP_CHARSET_ISO_8859_1() { 0; }
79             sub GEOIP_CHARSET_UTF8() { 1; }
80              
81             #
82             sub api {
83 1 50   1 1 12 defined &Geo::IP::Record::_XScompiled ? 'CAPI' : 'PurePerl';
84             }
85              
86             # cheat --- try to load Sys::Mmap PurePerl only
87 7 50       30 if ($pp) {
88 7         11 eval {
89              
90             # wrap into eval again, as workaround for centos / mod_perl issue
91             # seems they use $@ without eval somewhere
92             eval "require Sys::Mmap"
93             ? Sys::Mmap->import
94 7 50       343 : do {
95 7         18 for (qw/ PROT_READ MAP_PRIVATE MAP_SHARED /) {
96 7     7   41 no strict 'refs';
  7         10  
  7         548  
97 21         24 my $unused_stub = $_; # we must use a copy
98             *$unused_stub
99 21     0   122 = sub { die 'Sys::Mmap required for mmap support' };
  0         0  
100             } # for
101             }; # do
102 7         10751 1;
103             }; # eval
104             } # pp
105             else {
106 0         0 eval << '__CAPI_GLUE__';
107             # threads should not clone or DESTROY the GeoIP object.
108             sub CLONE_SKIP {1}
109              
110             *name_by_name = *isp_by_name = *org_by_name;
111             *name_by_addr = *isp_by_addr = *org_by_addr;
112              
113             *org_by_name_v6 = *name_by_name_v6;
114             *org_by_addr_v6 = *name_by_addr_v6;
115             __CAPI_GLUE__
116             }
117             }
118              
119 7 0 33 7 0 49 eval << '__PP_CODE__' unless defined &open;
  7 50 33 7 1 13  
  7 0 66 7 1 284  
  7 0 100 7 1 4456  
  7 50 66 7 1 74860  
  7 50 66 7 1 50  
  7 50 33 7 1 2732  
  7 50 33 7 1 18  
  7 100 66 7 1 825  
  7 100 66 7 1 5412  
  7 100 66 7 1 255  
  7 50 0 7 0 43  
  7 50 33 7 0 1241  
  7 50 33 7 0 4663  
  7 100 0 7 1 447055  
  0 50 0 7 1 0  
  0 100   7 1 0  
  0 100   7 1 0  
  0 0   7 1 0  
  0 50   7 0 0  
  0 50   7 1 0  
  0 0   7 1 0  
  7 0   6 1 61  
  7 0   0 1 15  
  7 50   1 1 381  
  7 50   7 1 43  
  7 50   6 1 12  
  7 50   7 1 470  
  7 50   4   38  
  7 50   0   13  
  7 50   0   325  
  7 50   0   41  
  7 50   1   12  
  7 50   0   317  
  7 50   1   39  
  7 50   0   120  
  7 0   0   361  
  7 0   0   39  
  7 0   1   10  
  7 0   1   321  
  7 0   2   38  
  7 0   2   10  
  7 50   0   311  
  7 50   0   39  
  7 0   0   12  
  7 0   0   346  
  7 0   0   37  
  7 50   6   27  
  7 0   0   366  
  7 0   3   38  
  7 0   0   9  
  7 0   0   318  
  7 0   1   36  
  7 50   0   10  
  7 50   0   338  
  7 50       38  
  7 50       10  
  7 0       368  
  7 0       37  
  7 50       10  
  7 50       376  
  7 0       37  
  7 50       10  
  7 50       419  
  7         40  
  7         14  
  7         362  
  7         37  
  7         11  
  7         343  
  7         36  
  7         10  
  7         195372  
  6         1447  
  6         236  
  0         0  
  0         0  
  0         0  
  1         3  
  1         3  
  1         3  
  1         6  
  7         11  
  7         15  
  7         8  
  7         10  
  7         48  
  7         24  
  195         267  
  195         316  
  195         433  
  195         195  
  0         0  
  0         0  
  195         223  
  195         177  
  195         237  
  89         130  
  6         11  
  6         26  
  83         131  
  106         154  
  1         2  
  1         3  
  105         172  
  0         0  
  6         12  
  6         10  
  6         11  
  6         7  
  6         10  
  6         33  
  6         13  
  6         13  
  6         21  
  6         17  
  6         25  
  45         196  
  45         63  
  5         16  
  5         8  
  5         18  
  5         8  
  5         96  
  0         0  
  1         3  
  4         13  
  4         14  
  4         14  
  12         33  
  4         33  
  2         3  
  5         17  
  40         94  
  6         44  
  1         3  
  6         18  
  6         11  
  7         92  
  4         18  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         26  
  1         7  
  1         4  
  0         0  
  0         0  
  0         0  
  1         3  
  1         5  
  1         3  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         1  
  1         4  
  1         4  
  1         1  
  0         0  
  0         0  
  1         2  
  1         40  
  1         2  
  1         2  
  1         1  
  1         2  
  1         1  
  1         1  
  1         2  
  1         1  
  1         1  
  1         2  
  1         1  
  1         2  
  1         3  
  1         5  
  0         0  
  1         9  
  1         4  
  1         4  
  1         4  
  1         1  
  0         0  
  0         0  
  1         3  
  1         2  
  1         3  
  1         2  
  1         2  
  1         2  
  1         2  
  1         3  
  2         2  
  2         5  
  1         5  
  1         2  
  1         2  
  1         1  
  1         2  
  1         3  
  10         8  
  10         13  
  1         3  
  1         2  
  1         2  
  1         1  
  1         2  
  1         3  
  5         5  
  5         6  
  1         3  
  1         2  
  1         5  
  1         1  
  1         2  
  1         1  
  1         4  
  3         2  
  3         7  
  1         2  
  1         3  
  3         4  
  3         4  
  1         2  
  1         3  
  1         1  
  1         5  
  1         3  
  3         4  
  3         4  
  1         2  
  1         5  
  1         3  
  1         3  
  1         14  
  1         26  
  1         1  
  1         5  
  1         8  
  2         8  
  2         2  
  2         11  
  2         37  
  0         0  
  2         5  
  2         3  
  2         16  
  2         4  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         230  
  6         13  
  6         53  
  6         313  
  6         237  
  6         19  
  6         29  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         26  
  6         24  
  6         18  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  3         137  
  3         57  
  3         6  
  0         0  
  3         10  
  0         0  
  3         9  
  3         8  
  3         7  
  3         14  
  0         0  
  3         16  
  3         11  
  3         19  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         26  
  1         4  
  1         4  
  1         7  
  0         0  
  0         0  
  0         0  
  0         0  
  1         4  
  1         5  
  0         0  
  1         12  
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
120              
121             use strict;
122             use FileHandle;
123             use File::Spec;
124              
125             require bytes;
126              
127             BEGIN {
128             if ( $] >= 5.008 ) {
129             require Encode;
130             Encode->import(qw/ decode /);
131             }
132             else {
133             *decode = sub {
134             local $_ = $_[1];
135             use bytes;
136             s/([\x80-\xff])/my $c = ord($1);
137             my $p = $c >= 192 ? 1 : 0;
138             pack ( 'CC' => 0xc2 + $p , $c & ~0x40 ); /ge;
139             return $_;
140             };
141             }
142             };
143              
144             use vars qw/$PP_OPEN_TYPE_PATH/;
145              
146             use constant FULL_RECORD_LENGTH => 50;
147             use constant GEOIP_COUNTRY_BEGIN => 16776960;
148             use constant RECORD_LENGTH => 3;
149             use constant GEOIP_STATE_BEGIN_REV0 => 16700000;
150             use constant GEOIP_STATE_BEGIN_REV1 => 16000000;
151             use constant STRUCTURE_INFO_MAX_SIZE => 20;
152             use constant DATABASE_INFO_MAX_SIZE => 100;
153              
154             use constant SEGMENT_RECORD_LENGTH => 3;
155             use constant STANDARD_RECORD_LENGTH => 3;
156             use constant ORG_RECORD_LENGTH => 4;
157             use constant MAX_RECORD_LENGTH => 4;
158             use constant MAX_ORG_RECORD_LENGTH => 300;
159             use constant US_OFFSET => 1;
160             use constant CANADA_OFFSET => 677;
161             use constant WORLD_OFFSET => 1353;
162             use constant FIPS_RANGE => 360;
163              
164             my @continents = qw/
165             --
166             AS EU EU AS AS NA NA EU AS NA
167             AF AN SA OC EU OC NA AS EU NA
168             AS EU AF EU AS AF AF NA AS SA
169             SA NA AS AN AF EU NA NA AS AF
170             AF AF EU AF OC SA AF AS SA NA
171             NA AF AS AS EU EU AF EU NA NA
172             AF SA EU AF AF AF EU AF EU OC
173             SA OC EU EU EU AF EU NA AS SA
174             AF EU NA AF AF NA AF EU AN NA
175             OC AF SA AS AN NA EU NA EU AS
176             EU AS AS AS AS AS EU EU NA AS
177             AS AF AS AS OC AF NA AS AS AS
178             NA AS AS AS NA EU AS AF AF EU
179             EU EU AF AF EU EU AF OC EU AF
180             AS AS AS OC NA AF NA EU AF AS
181             AF NA AS AF AF OC AF OC AF NA
182             EU EU AS OC OC OC AS NA SA OC
183             OC AS AS EU NA OC NA AS EU OC
184             SA AS AF EU EU AF AS OC AF AF
185             EU AS AF EU EU EU AF EU AF AF
186             SA AF NA AS AF NA AF AN AF AS
187             AS OC AS AF OC AS EU NA OC AS
188             AF EU AF OC NA SA AS EU NA SA
189             NA NA AS OC OC OC AS AF EU AF
190             AF EU AF -- -- -- EU EU EU EU
191             NA NA NA AF
192             /;
193              
194             my @countries = (
195             undef, qw/
196             AP EU AD AE AF AG AI
197             AL AM CW AO AQ AR AS AT
198             AU AW AZ BA BB BD BE BF
199             BG BH BI BJ BM BN BO BR
200             BS BT BV BW BY BZ CA CC
201             CD CF CG CH CI CK CL CM
202             CN CO CR CU CV CX CY CZ
203             DE DJ DK DM DO DZ EC EE
204             EG EH ER ES ET FI FJ FK
205             FM FO FR FX GA GB GD GE
206             GF GH GI GL GM GN GP GQ
207             GR GS GT GU GW GY HK HM
208             HN HR HT HU ID IE IL IN
209             IO IQ IR IS IT JM JO JP
210             KE KG KH KI KM KN KP KR
211             KW KY KZ LA LB LC LI LK
212             LR LS LT LU LV LY MA MC
213             MD MG MH MK ML MM MN MO
214             MP MQ MR MS MT MU MV MW
215             MX MY MZ NA NC NE NF NG
216             NI NL NO NP NR NU NZ OM
217             PA PE PF PG PH PK PL PM
218             PN PR PS PT PW PY QA RE
219             RO RU RW SA SB SC SD SE
220             SG SH SI SJ SK SL SM SN
221             SO SR ST SV SY SZ TC TD
222             TF TG TH TJ TK TM TN TO
223             TL TR TT TV TW TZ UA UG
224             UM US UY UZ VA VC VE VG
225             VI VN VU WF WS YE YT RS
226             ZA ZM ME ZW A1 A2 O1 AX
227             GG IM JE BL MF BQ SS O1 /
228             );
229              
230              
231             my %_id_by_code;
232             for ( 1 .. $#countries ) {
233             $_id_by_code{ $countries[$_] } = $_;
234             }
235              
236             my @code3s = ( undef, qw/
237             AP EU AND ARE AFG ATG AIA
238             ALB ARM CUW AGO ATA ARG ASM AUT
239             AUS ABW AZE BIH BRB BGD BEL BFA
240             BGR BHR BDI BEN BMU BRN BOL BRA
241             BHS BTN BVT BWA BLR BLZ CAN CCK
242             COD CAF COG CHE CIV COK CHL CMR
243             CHN COL CRI CUB CPV CXR CYP CZE
244             DEU DJI DNK DMA DOM DZA ECU EST
245             EGY ESH ERI ESP ETH FIN FJI FLK
246             FSM FRO FRA FX GAB GBR GRD GEO
247             GUF GHA GIB GRL GMB GIN GLP GNQ
248             GRC SGS GTM GUM GNB GUY HKG HMD
249             HND HRV HTI HUN IDN IRL ISR IND
250             IOT IRQ IRN ISL ITA JAM JOR JPN
251             KEN KGZ KHM KIR COM KNA PRK KOR
252             KWT CYM KAZ LAO LBN LCA LIE LKA
253             LBR LSO LTU LUX LVA LBY MAR MCO
254             MDA MDG MHL MKD MLI MMR MNG MAC
255             MNP MTQ MRT MSR MLT MUS MDV MWI
256             MEX MYS MOZ NAM NCL NER NFK NGA
257             NIC NLD NOR NPL NRU NIU NZL OMN
258             PAN PER PYF PNG PHL PAK POL SPM
259             PCN PRI PSE PRT PLW PRY QAT REU
260             ROU RUS RWA SAU SLB SYC SDN SWE
261             SGP SHN SVN SJM SVK SLE SMR SEN
262             SOM SUR STP SLV SYR SWZ TCA TCD
263             ATF TGO THA TJK TKL TKM TUN TON
264             TLS TUR TTO TUV TWN TZA UKR UGA
265             UMI USA URY UZB VAT VCT VEN VGB
266             VIR VNM VUT WLF WSM YEM MYT SRB
267             ZAF ZMB MNE ZWE A1 A2 O1 ALA
268             GGY IMN JEY BLM MAF BES SSD O1 /
269             );
270             my @names = (
271             undef,
272             "Asia/Pacific Region",
273             "Europe",
274             "Andorra",
275             "United Arab Emirates",
276             "Afghanistan",
277             "Antigua and Barbuda",
278             "Anguilla",
279             "Albania",
280             "Armenia",
281             "Curacao",
282             "Angola",
283             "Antarctica",
284             "Argentina",
285             "American Samoa",
286             "Austria",
287             "Australia",
288             "Aruba",
289             "Azerbaijan",
290             "Bosnia and Herzegovina",
291             "Barbados",
292             "Bangladesh",
293             "Belgium",
294             "Burkina Faso",
295             "Bulgaria",
296             "Bahrain",
297             "Burundi",
298             "Benin",
299             "Bermuda",
300             "Brunei Darussalam",
301             "Bolivia",
302             "Brazil",
303             "Bahamas",
304             "Bhutan",
305             "Bouvet Island",
306             "Botswana",
307             "Belarus",
308             "Belize",
309             "Canada",
310             "Cocos (Keeling) Islands",
311             "Congo, The Democratic Republic of the",
312             "Central African Republic",
313             "Congo",
314             "Switzerland",
315             "Cote D'Ivoire",
316             "Cook Islands",
317             "Chile",
318             "Cameroon",
319             "China",
320             "Colombia",
321             "Costa Rica",
322             "Cuba",
323             "Cape Verde",
324             "Christmas Island",
325             "Cyprus",
326             "Czech Republic",
327             "Germany",
328             "Djibouti",
329             "Denmark",
330             "Dominica",
331             "Dominican Republic",
332             "Algeria",
333             "Ecuador",
334             "Estonia",
335             "Egypt",
336             "Western Sahara",
337             "Eritrea",
338             "Spain",
339             "Ethiopia",
340             "Finland",
341             "Fiji",
342             "Falkland Islands (Malvinas)",
343             "Micronesia, Federated States of",
344             "Faroe Islands",
345             "France",
346             "France, Metropolitan",
347             "Gabon",
348             "United Kingdom",
349             "Grenada",
350             "Georgia",
351             "French Guiana",
352             "Ghana",
353             "Gibraltar",
354             "Greenland",
355             "Gambia",
356             "Guinea",
357             "Guadeloupe",
358             "Equatorial Guinea",
359             "Greece",
360             "South Georgia and the South Sandwich Islands",
361             "Guatemala",
362             "Guam",
363             "Guinea-Bissau",
364             "Guyana",
365             "Hong Kong",
366             "Heard Island and McDonald Islands",
367             "Honduras",
368             "Croatia",
369             "Haiti",
370             "Hungary",
371             "Indonesia",
372             "Ireland",
373             "Israel",
374             "India",
375             "British Indian Ocean Territory",
376             "Iraq",
377             "Iran, Islamic Republic of",
378             "Iceland",
379             "Italy",
380             "Jamaica",
381             "Jordan",
382             "Japan",
383             "Kenya",
384             "Kyrgyzstan",
385             "Cambodia",
386             "Kiribati",
387             "Comoros",
388             "Saint Kitts and Nevis",
389             "Korea, Democratic People's Republic of",
390             "Korea, Republic of",
391             "Kuwait",
392             "Cayman Islands",
393             "Kazakhstan",
394             "Lao People's Democratic Republic",
395             "Lebanon",
396             "Saint Lucia",
397             "Liechtenstein",
398             "Sri Lanka",
399             "Liberia",
400             "Lesotho",
401             "Lithuania",
402             "Luxembourg",
403             "Latvia",
404             "Libya",
405             "Morocco",
406             "Monaco",
407             "Moldova, Republic of",
408             "Madagascar",
409             "Marshall Islands",
410             "Macedonia",
411             "Mali",
412             "Myanmar",
413             "Mongolia",
414             "Macau",
415             "Northern Mariana Islands",
416             "Martinique",
417             "Mauritania",
418             "Montserrat",
419             "Malta",
420             "Mauritius",
421             "Maldives",
422             "Malawi",
423             "Mexico",
424             "Malaysia",
425             "Mozambique",
426             "Namibia",
427             "New Caledonia",
428             "Niger",
429             "Norfolk Island",
430             "Nigeria",
431             "Nicaragua",
432             "Netherlands",
433             "Norway",
434             "Nepal",
435             "Nauru",
436             "Niue",
437             "New Zealand",
438             "Oman",
439             "Panama",
440             "Peru",
441             "French Polynesia",
442             "Papua New Guinea",
443             "Philippines",
444             "Pakistan",
445             "Poland",
446             "Saint Pierre and Miquelon",
447             "Pitcairn Islands",
448             "Puerto Rico",
449             "Palestinian Territory",
450             "Portugal",
451             "Palau",
452             "Paraguay",
453             "Qatar",
454             "Reunion",
455             "Romania",
456             "Russian Federation",
457             "Rwanda",
458             "Saudi Arabia",
459             "Solomon Islands",
460             "Seychelles",
461             "Sudan",
462             "Sweden",
463             "Singapore",
464             "Saint Helena",
465             "Slovenia",
466             "Svalbard and Jan Mayen",
467             "Slovakia",
468             "Sierra Leone",
469             "San Marino",
470             "Senegal",
471             "Somalia",
472             "Suriname",
473             "Sao Tome and Principe",
474             "El Salvador",
475             "Syrian Arab Republic",
476             "Swaziland",
477             "Turks and Caicos Islands",
478             "Chad",
479             "French Southern Territories",
480             "Togo",
481             "Thailand",
482             "Tajikistan",
483             "Tokelau",
484             "Turkmenistan",
485             "Tunisia",
486             "Tonga",
487             "Timor-Leste",
488             "Turkey",
489             "Trinidad and Tobago",
490             "Tuvalu",
491             "Taiwan",
492             "Tanzania, United Republic of",
493             "Ukraine",
494             "Uganda",
495             "United States Minor Outlying Islands",
496             "United States",
497             "Uruguay",
498             "Uzbekistan",
499             "Holy See (Vatican City State)",
500             "Saint Vincent and the Grenadines",
501             "Venezuela",
502             "Virgin Islands, British",
503             "Virgin Islands, U.S.",
504             "Vietnam",
505             "Vanuatu",
506             "Wallis and Futuna",
507             "Samoa",
508             "Yemen",
509             "Mayotte",
510             "Serbia",
511             "South Africa",
512             "Zambia",
513             "Montenegro",
514             "Zimbabwe",
515             "Anonymous Proxy",
516             "Satellite Provider",
517             "Other",
518             "Aland Islands",
519             "Guernsey",
520             "Isle of Man",
521             "Jersey",
522             "Saint Barthelemy",
523             "Saint Martin",
524             "Bonaire, Saint Eustatius and Saba",
525             "South Sudan",
526             "Other"
527             );
528              
529             my %country_region_names = (
530             'AD' => {
531             '02' => 'Canillo',
532             '03' => 'Encamp',
533             '04' => 'La Massana',
534             '05' => 'Ordino',
535             '06' => 'Sant Julia de Loria',
536             '07' => 'Andorra la Vella',
537             '08' => 'Escaldes-Engordany'
538             },
539             'AE' => {
540             '01' => 'Abu Dhabi',
541             '02' => 'Ajman',
542             '03' => 'Dubai',
543             '04' => 'Fujairah',
544             '05' => 'Ras Al Khaimah',
545             '06' => 'Sharjah',
546             '07' => 'Umm Al Quwain'
547             },
548             'AF' => {
549             '01' => 'Badakhshan',
550             '02' => 'Badghis',
551             '03' => 'Baghlan',
552             '05' => 'Bamian',
553             '06' => 'Farah',
554             '07' => 'Faryab',
555             '08' => 'Ghazni',
556             '09' => 'Ghowr',
557             '10' => 'Helmand',
558             '11' => 'Herat',
559             '13' => 'Kabol',
560             '14' => 'Kapisa',
561             '17' => 'Lowgar',
562             '18' => 'Nangarhar',
563             '19' => 'Nimruz',
564             '23' => 'Kandahar',
565             '24' => 'Kondoz',
566             '26' => 'Takhar',
567             '27' => 'Vardak',
568             '28' => 'Zabol',
569             '29' => 'Paktika',
570             '30' => 'Balkh',
571             '31' => 'Jowzjan',
572             '32' => 'Samangan',
573             '33' => 'Sar-e Pol',
574             '34' => 'Konar',
575             '35' => 'Laghman',
576             '36' => 'Paktia',
577             '37' => 'Khowst',
578             '38' => 'Nurestan',
579             '39' => 'Oruzgan',
580             '40' => 'Parvan',
581             '41' => 'Daykondi',
582             '42' => 'Panjshir'
583             },
584             'AG' => {
585             '01' => 'Barbuda',
586             '03' => 'Saint George',
587             '04' => 'Saint John',
588             '05' => 'Saint Mary',
589             '06' => 'Saint Paul',
590             '07' => 'Saint Peter',
591             '08' => 'Saint Philip',
592             '09' => 'Redonda'
593             },
594             'AL' => {
595             '40' => 'Berat',
596             '41' => 'Diber',
597             '42' => 'Durres',
598             '43' => 'Elbasan',
599             '44' => 'Fier',
600             '45' => 'Gjirokaster',
601             '46' => 'Korce',
602             '47' => 'Kukes',
603             '48' => 'Lezhe',
604             '49' => 'Shkoder',
605             '50' => 'Tirane',
606             '51' => 'Vlore'
607             },
608             'AM' => {
609             '01' => 'Aragatsotn',
610             '02' => 'Ararat',
611             '03' => 'Armavir',
612             '04' => 'Geghark\'unik\'',
613             '05' => 'Kotayk\'',
614             '06' => 'Lorri',
615             '07' => 'Shirak',
616             '08' => 'Syunik\'',
617             '09' => 'Tavush',
618             '10' => 'Vayots\' Dzor',
619             '11' => 'Yerevan'
620             },
621             'AO' => {
622             '01' => 'Benguela',
623             '02' => 'Bie',
624             '03' => 'Cabinda',
625             '04' => 'Cuando Cubango',
626             '05' => 'Cuanza Norte',
627             '06' => 'Cuanza Sul',
628             '07' => 'Cunene',
629             '08' => 'Huambo',
630             '09' => 'Huila',
631             '12' => 'Malanje',
632             '13' => 'Namibe',
633             '14' => 'Moxico',
634             '15' => 'Uige',
635             '16' => 'Zaire',
636             '17' => 'Lunda Norte',
637             '18' => 'Lunda Sul',
638             '19' => 'Bengo',
639             '20' => 'Luanda'
640             },
641             'AR' => {
642             '01' => 'Buenos Aires',
643             '02' => 'Catamarca',
644             '03' => 'Chaco',
645             '04' => 'Chubut',
646             '05' => 'Cordoba',
647             '06' => 'Corrientes',
648             '07' => 'Distrito Federal',
649             '08' => 'Entre Rios',
650             '09' => 'Formosa',
651             '10' => 'Jujuy',
652             '11' => 'La Pampa',
653             '12' => 'La Rioja',
654             '13' => 'Mendoza',
655             '14' => 'Misiones',
656             '15' => 'Neuquen',
657             '16' => 'Rio Negro',
658             '17' => 'Salta',
659             '18' => 'San Juan',
660             '19' => 'San Luis',
661             '20' => 'Santa Cruz',
662             '21' => 'Santa Fe',
663             '22' => 'Santiago del Estero',
664             '23' => 'Tierra del Fuego',
665             '24' => 'Tucuman'
666             },
667             'AT' => {
668             '01' => 'Burgenland',
669             '02' => 'Karnten',
670             '03' => 'Niederosterreich',
671             '04' => 'Oberosterreich',
672             '05' => 'Salzburg',
673             '06' => 'Steiermark',
674             '07' => 'Tirol',
675             '08' => 'Vorarlberg',
676             '09' => 'Wien'
677             },
678             'AU' => {
679             '01' => 'Australian Capital Territory',
680             '02' => 'New South Wales',
681             '03' => 'Northern Territory',
682             '04' => 'Queensland',
683             '05' => 'South Australia',
684             '06' => 'Tasmania',
685             '07' => 'Victoria',
686             '08' => 'Western Australia'
687             },
688             'AZ' => {
689             '01' => 'Abseron',
690             '02' => 'Agcabadi',
691             '03' => 'Agdam',
692             '04' => 'Agdas',
693             '05' => 'Agstafa',
694             '06' => 'Agsu',
695             '07' => 'Ali Bayramli',
696             '08' => 'Astara',
697             '09' => 'Baki',
698             '10' => 'Balakan',
699             '11' => 'Barda',
700             '12' => 'Beylaqan',
701             '13' => 'Bilasuvar',
702             '14' => 'Cabrayil',
703             '15' => 'Calilabad',
704             '16' => 'Daskasan',
705             '17' => 'Davaci',
706             '18' => 'Fuzuli',
707             '19' => 'Gadabay',
708             '20' => 'Ganca',
709             '21' => 'Goranboy',
710             '22' => 'Goycay',
711             '23' => 'Haciqabul',
712             '24' => 'Imisli',
713             '25' => 'Ismayilli',
714             '26' => 'Kalbacar',
715             '27' => 'Kurdamir',
716             '28' => 'Lacin',
717             '29' => 'Lankaran',
718             '30' => 'Lankaran',
719             '31' => 'Lerik',
720             '32' => 'Masalli',
721             '33' => 'Mingacevir',
722             '34' => 'Naftalan',
723             '35' => 'Naxcivan',
724             '36' => 'Neftcala',
725             '37' => 'Oguz',
726             '38' => 'Qabala',
727             '39' => 'Qax',
728             '40' => 'Qazax',
729             '41' => 'Qobustan',
730             '42' => 'Quba',
731             '43' => 'Qubadli',
732             '44' => 'Qusar',
733             '45' => 'Saatli',
734             '46' => 'Sabirabad',
735             '47' => 'Saki',
736             '48' => 'Saki',
737             '49' => 'Salyan',
738             '50' => 'Samaxi',
739             '51' => 'Samkir',
740             '52' => 'Samux',
741             '53' => 'Siyazan',
742             '54' => 'Sumqayit',
743             '55' => 'Susa',
744             '56' => 'Susa',
745             '57' => 'Tartar',
746             '58' => 'Tovuz',
747             '59' => 'Ucar',
748             '60' => 'Xacmaz',
749             '61' => 'Xankandi',
750             '62' => 'Xanlar',
751             '63' => 'Xizi',
752             '64' => 'Xocali',
753             '65' => 'Xocavand',
754             '66' => 'Yardimli',
755             '67' => 'Yevlax',
756             '68' => 'Yevlax',
757             '69' => 'Zangilan',
758             '70' => 'Zaqatala',
759             '71' => 'Zardab'
760             },
761             'BA' => {
762             '01' => 'Federation of Bosnia and Herzegovina',
763             '02' => 'Republika Srpska',
764             '03' => 'Brcko District'
765             },
766             'BB' => {
767             '01' => 'Christ Church',
768             '02' => 'Saint Andrew',
769             '03' => 'Saint George',
770             '04' => 'Saint James',
771             '05' => 'Saint John',
772             '06' => 'Saint Joseph',
773             '07' => 'Saint Lucy',
774             '08' => 'Saint Michael',
775             '09' => 'Saint Peter',
776             '10' => 'Saint Philip',
777             '11' => 'Saint Thomas'
778             },
779             'BD' => {
780             '81' => 'Dhaka',
781             '82' => 'Khulna',
782             '83' => 'Rajshahi',
783             '84' => 'Chittagong',
784             '85' => 'Barisal',
785             '86' => 'Sylhet',
786             '87' => 'Rangpur'
787             },
788             'BE' => {
789             '01' => 'Antwerpen',
790             '03' => 'Hainaut',
791             '04' => 'Liege',
792             '05' => 'Limburg',
793             '06' => 'Luxembourg',
794             '07' => 'Namur',
795             '08' => 'Oost-Vlaanderen',
796             '09' => 'West-Vlaanderen',
797             '10' => 'Brabant Wallon',
798             '11' => 'Brussels Hoofdstedelijk Gewest',
799             '12' => 'Vlaams-Brabant',
800             '13' => 'Flanders',
801             '14' => 'Wallonia'
802             },
803             'BF' => {
804             '15' => 'Bam',
805             '19' => 'Boulkiemde',
806             '20' => 'Ganzourgou',
807             '21' => 'Gnagna',
808             '28' => 'Kouritenga',
809             '33' => 'Oudalan',
810             '34' => 'Passore',
811             '36' => 'Sanguie',
812             '40' => 'Soum',
813             '42' => 'Tapoa',
814             '44' => 'Zoundweogo',
815             '45' => 'Bale',
816             '46' => 'Banwa',
817             '47' => 'Bazega',
818             '48' => 'Bougouriba',
819             '49' => 'Boulgou',
820             '50' => 'Gourma',
821             '51' => 'Houet',
822             '52' => 'Ioba',
823             '53' => 'Kadiogo',
824             '54' => 'Kenedougou',
825             '55' => 'Komoe',
826             '56' => 'Komondjari',
827             '57' => 'Kompienga',
828             '58' => 'Kossi',
829             '59' => 'Koulpelogo',
830             '60' => 'Kourweogo',
831             '61' => 'Leraba',
832             '62' => 'Loroum',
833             '63' => 'Mouhoun',
834             '64' => 'Namentenga',
835             '65' => 'Naouri',
836             '66' => 'Nayala',
837             '67' => 'Noumbiel',
838             '68' => 'Oubritenga',
839             '69' => 'Poni',
840             '70' => 'Sanmatenga',
841             '71' => 'Seno',
842             '72' => 'Sissili',
843             '73' => 'Sourou',
844             '74' => 'Tuy',
845             '75' => 'Yagha',
846             '76' => 'Yatenga',
847             '77' => 'Ziro',
848             '78' => 'Zondoma'
849             },
850             'BG' => {
851             '33' => 'Mikhaylovgrad',
852             '38' => 'Blagoevgrad',
853             '39' => 'Burgas',
854             '40' => 'Dobrich',
855             '41' => 'Gabrovo',
856             '42' => 'Grad Sofiya',
857             '43' => 'Khaskovo',
858             '44' => 'Kurdzhali',
859             '45' => 'Kyustendil',
860             '46' => 'Lovech',
861             '47' => 'Montana',
862             '48' => 'Pazardzhik',
863             '49' => 'Pernik',
864             '50' => 'Pleven',
865             '51' => 'Plovdiv',
866             '52' => 'Razgrad',
867             '53' => 'Ruse',
868             '54' => 'Shumen',
869             '55' => 'Silistra',
870             '56' => 'Sliven',
871             '57' => 'Smolyan',
872             '58' => 'Sofiya',
873             '59' => 'Stara Zagora',
874             '60' => 'Turgovishte',
875             '61' => 'Varna',
876             '62' => 'Veliko Turnovo',
877             '63' => 'Vidin',
878             '64' => 'Vratsa',
879             '65' => 'Yambol'
880             },
881             'BH' => {
882             '01' => 'Al Hadd',
883             '02' => 'Al Manamah',
884             '05' => 'Jidd Hafs',
885             '06' => 'Sitrah',
886             '08' => 'Al Mintaqah al Gharbiyah',
887             '09' => 'Mintaqat Juzur Hawar',
888             '10' => 'Al Mintaqah ash Shamaliyah',
889             '11' => 'Al Mintaqah al Wusta',
890             '12' => 'Madinat',
891             '13' => 'Ar Rifa',
892             '14' => 'Madinat Hamad',
893             '15' => 'Al Muharraq',
894             '16' => 'Al Asimah',
895             '17' => 'Al Janubiyah',
896             '18' => 'Ash Shamaliyah',
897             '19' => 'Al Wusta'
898             },
899             'BI' => {
900             '02' => 'Bujumbura',
901             '09' => 'Bubanza',
902             '10' => 'Bururi',
903             '11' => 'Cankuzo',
904             '12' => 'Cibitoke',
905             '13' => 'Gitega',
906             '14' => 'Karuzi',
907             '15' => 'Kayanza',
908             '16' => 'Kirundo',
909             '17' => 'Makamba',
910             '18' => 'Muyinga',
911             '19' => 'Ngozi',
912             '20' => 'Rutana',
913             '21' => 'Ruyigi',
914             '22' => 'Muramvya',
915             '23' => 'Mwaro'
916             },
917             'BJ' => {
918             '07' => 'Alibori',
919             '08' => 'Atakora',
920             '09' => 'Atlanyique',
921             '10' => 'Borgou',
922             '11' => 'Collines',
923             '12' => 'Kouffo',
924             '13' => 'Donga',
925             '14' => 'Littoral',
926             '15' => 'Mono',
927             '16' => 'Oueme',
928             '17' => 'Plateau',
929             '18' => 'Zou'
930             },
931             'BM' => {
932             '01' => 'Devonshire',
933             '02' => 'Hamilton',
934             '03' => 'Hamilton',
935             '04' => 'Paget',
936             '05' => 'Pembroke',
937             '06' => 'Saint George',
938             '07' => 'Saint George\'s',
939             '08' => 'Sandys',
940             '09' => 'Smiths',
941             '10' => 'Southampton',
942             '11' => 'Warwick'
943             },
944             'BN' => {
945             '07' => 'Alibori',
946             '08' => 'Belait',
947             '09' => 'Brunei and Muara',
948             '10' => 'Temburong',
949             '11' => 'Collines',
950             '12' => 'Kouffo',
951             '13' => 'Donga',
952             '14' => 'Littoral',
953             '15' => 'Tutong',
954             '16' => 'Oueme',
955             '17' => 'Plateau',
956             '18' => 'Zou'
957             },
958             'BO' => {
959             '01' => 'Chuquisaca',
960             '02' => 'Cochabamba',
961             '03' => 'El Beni',
962             '04' => 'La Paz',
963             '05' => 'Oruro',
964             '06' => 'Pando',
965             '07' => 'Potosi',
966             '08' => 'Santa Cruz',
967             '09' => 'Tarija'
968             },
969             'BR' => {
970             '01' => 'Acre',
971             '02' => 'Alagoas',
972             '03' => 'Amapa',
973             '04' => 'Amazonas',
974             '05' => 'Bahia',
975             '06' => 'Ceara',
976             '07' => 'Distrito Federal',
977             '08' => 'Espirito Santo',
978             '11' => 'Mato Grosso do Sul',
979             '13' => 'Maranhao',
980             '14' => 'Mato Grosso',
981             '15' => 'Minas Gerais',
982             '16' => 'Para',
983             '17' => 'Paraiba',
984             '18' => 'Parana',
985             '20' => 'Piaui',
986             '21' => 'Rio de Janeiro',
987             '22' => 'Rio Grande do Norte',
988             '23' => 'Rio Grande do Sul',
989             '24' => 'Rondonia',
990             '25' => 'Roraima',
991             '26' => 'Santa Catarina',
992             '27' => 'Sao Paulo',
993             '28' => 'Sergipe',
994             '29' => 'Goias',
995             '30' => 'Pernambuco',
996             '31' => 'Tocantins'
997             },
998             'BS' => {
999             '05' => 'Bimini',
1000             '06' => 'Cat Island',
1001             '10' => 'Exuma',
1002             '13' => 'Inagua',
1003             '15' => 'Long Island',
1004             '16' => 'Mayaguana',
1005             '18' => 'Ragged Island',
1006             '22' => 'Harbour Island',
1007             '23' => 'New Providence',
1008             '24' => 'Acklins and Crooked Islands',
1009             '25' => 'Freeport',
1010             '26' => 'Fresh Creek',
1011             '27' => 'Governor\'s Harbour',
1012             '28' => 'Green Turtle Cay',
1013             '29' => 'High Rock',
1014             '30' => 'Kemps Bay',
1015             '31' => 'Marsh Harbour',
1016             '32' => 'Nichollstown and Berry Islands',
1017             '33' => 'Rock Sound',
1018             '34' => 'Sandy Point',
1019             '35' => 'San Salvador and Rum Cay'
1020             },
1021             'BT' => {
1022             '05' => 'Bumthang',
1023             '06' => 'Chhukha',
1024             '07' => 'Chirang',
1025             '08' => 'Daga',
1026             '09' => 'Geylegphug',
1027             '10' => 'Ha',
1028             '11' => 'Lhuntshi',
1029             '12' => 'Mongar',
1030             '13' => 'Paro',
1031             '14' => 'Pemagatsel',
1032             '15' => 'Punakha',
1033             '16' => 'Samchi',
1034             '17' => 'Samdrup',
1035             '18' => 'Shemgang',
1036             '19' => 'Tashigang',
1037             '20' => 'Thimphu',
1038             '21' => 'Tongsa',
1039             '22' => 'Wangdi Phodrang'
1040             },
1041             'BW' => {
1042             '01' => 'Central',
1043             '03' => 'Ghanzi',
1044             '04' => 'Kgalagadi',
1045             '05' => 'Kgatleng',
1046             '06' => 'Kweneng',
1047             '08' => 'North-East',
1048             '09' => 'South-East',
1049             '10' => 'Southern',
1050             '11' => 'North-West'
1051             },
1052             'BY' => {
1053             '01' => 'Brestskaya Voblasts\'',
1054             '02' => 'Homyel\'skaya Voblasts\'',
1055             '03' => 'Hrodzyenskaya Voblasts\'',
1056             '04' => 'Minsk',
1057             '05' => 'Minskaya Voblasts\'',
1058             '06' => 'Mahilyowskaya Voblasts\'',
1059             '07' => 'Vitsyebskaya Voblasts\''
1060             },
1061             'BZ' => {
1062             '01' => 'Belize',
1063             '02' => 'Cayo',
1064             '03' => 'Corozal',
1065             '04' => 'Orange Walk',
1066             '05' => 'Stann Creek',
1067             '06' => 'Toledo'
1068             },
1069             'CA' => {
1070             'AB' => 'Alberta',
1071             'BC' => 'British Columbia',
1072             'MB' => 'Manitoba',
1073             'NB' => 'New Brunswick',
1074             'NL' => 'Newfoundland',
1075             'NS' => 'Nova Scotia',
1076             'NT' => 'Northwest Territories',
1077             'NU' => 'Nunavut',
1078             'ON' => 'Ontario',
1079             'PE' => 'Prince Edward Island',
1080             'QC' => 'Quebec',
1081             'SK' => 'Saskatchewan',
1082             'YT' => 'Yukon Territory'
1083             },
1084             'CD' => {
1085             '01' => 'Bandundu',
1086             '02' => 'Equateur',
1087             '04' => 'Kasai-Oriental',
1088             '05' => 'Katanga',
1089             '06' => 'Kinshasa',
1090             '08' => 'Bas-Congo',
1091             '09' => 'Orientale',
1092             '10' => 'Maniema',
1093             '11' => 'Nord-Kivu',
1094             '12' => 'Sud-Kivu'
1095             },
1096             'CF' => {
1097             '01' => 'Bamingui-Bangoran',
1098             '02' => 'Basse-Kotto',
1099             '03' => 'Haute-Kotto',
1100             '04' => 'Mambere-Kadei',
1101             '05' => 'Haut-Mbomou',
1102             '06' => 'Kemo',
1103             '07' => 'Lobaye',
1104             '08' => 'Mbomou',
1105             '09' => 'Nana-Mambere',
1106             '11' => 'Ouaka',
1107             '12' => 'Ouham',
1108             '13' => 'Ouham-Pende',
1109             '14' => 'Cuvette-Ouest',
1110             '15' => 'Nana-Grebizi',
1111             '16' => 'Sangha-Mbaere',
1112             '17' => 'Ombella-Mpoko',
1113             '18' => 'Bangui'
1114             },
1115             'CG' => {
1116             '01' => 'Bouenza',
1117             '04' => 'Kouilou',
1118             '05' => 'Lekoumou',
1119             '06' => 'Likouala',
1120             '07' => 'Niari',
1121             '08' => 'Plateaux',
1122             '10' => 'Sangha',
1123             '11' => 'Pool',
1124             '12' => 'Brazzaville',
1125             '13' => 'Cuvette',
1126             '14' => 'Cuvette-Ouest'
1127             },
1128             'CH' => {
1129             '01' => 'Aargau',
1130             '02' => 'Ausser-Rhoden',
1131             '03' => 'Basel-Landschaft',
1132             '04' => 'Basel-Stadt',
1133             '05' => 'Bern',
1134             '06' => 'Fribourg',
1135             '07' => 'Geneve',
1136             '08' => 'Glarus',
1137             '09' => 'Graubunden',
1138             '10' => 'Inner-Rhoden',
1139             '11' => 'Luzern',
1140             '12' => 'Neuchatel',
1141             '13' => 'Nidwalden',
1142             '14' => 'Obwalden',
1143             '15' => 'Sankt Gallen',
1144             '16' => 'Schaffhausen',
1145             '17' => 'Schwyz',
1146             '18' => 'Solothurn',
1147             '19' => 'Thurgau',
1148             '20' => 'Ticino',
1149             '21' => 'Uri',
1150             '22' => 'Valais',
1151             '23' => 'Vaud',
1152             '24' => 'Zug',
1153             '25' => 'Zurich',
1154             '26' => 'Jura'
1155             },
1156             'CI' => {
1157             '74' => 'Agneby',
1158             '75' => 'Bafing',
1159             '76' => 'Bas-Sassandra',
1160             '77' => 'Denguele',
1161             '78' => 'Dix-Huit Montagnes',
1162             '79' => 'Fromager',
1163             '80' => 'Haut-Sassandra',
1164             '81' => 'Lacs',
1165             '82' => 'Lagunes',
1166             '83' => 'Marahoue',
1167             '84' => 'Moyen-Cavally',
1168             '85' => 'Moyen-Comoe',
1169             '86' => 'N\'zi-Comoe',
1170             '87' => 'Savanes',
1171             '88' => 'Sud-Bandama',
1172             '89' => 'Sud-Comoe',
1173             '90' => 'Vallee du Bandama',
1174             '91' => 'Worodougou',
1175             '92' => 'Zanzan'
1176             },
1177             'CL' => {
1178             '01' => 'Valparaiso',
1179             '02' => 'Aisen del General Carlos Ibanez del Campo',
1180             '03' => 'Antofagasta',
1181             '04' => 'Araucania',
1182             '05' => 'Atacama',
1183             '06' => 'Bio-Bio',
1184             '07' => 'Coquimbo',
1185             '08' => 'Libertador General Bernardo O\'Higgins',
1186             '09' => 'Los Lagos',
1187             '10' => 'Magallanes y de la Antartica Chilena',
1188             '11' => 'Maule',
1189             '12' => 'Region Metropolitana',
1190             '13' => 'Tarapaca',
1191             '14' => 'Los Lagos',
1192             '15' => 'Tarapaca',
1193             '16' => 'Arica y Parinacota',
1194             '17' => 'Los Rios'
1195             },
1196             'CM' => {
1197             '04' => 'Est',
1198             '05' => 'Littoral',
1199             '07' => 'Nord-Ouest',
1200             '08' => 'Ouest',
1201             '09' => 'Sud-Ouest',
1202             '10' => 'Adamaoua',
1203             '11' => 'Centre',
1204             '12' => 'Extreme-Nord',
1205             '13' => 'Nord',
1206             '14' => 'Sud'
1207             },
1208             'CN' => {
1209             '01' => 'Anhui',
1210             '02' => 'Zhejiang',
1211             '03' => 'Jiangxi',
1212             '04' => 'Jiangsu',
1213             '05' => 'Jilin',
1214             '06' => 'Qinghai',
1215             '07' => 'Fujian',
1216             '08' => 'Heilongjiang',
1217             '09' => 'Henan',
1218             '10' => 'Hebei',
1219             '11' => 'Hunan',
1220             '12' => 'Hubei',
1221             '13' => 'Xinjiang',
1222             '14' => 'Xizang',
1223             '15' => 'Gansu',
1224             '16' => 'Guangxi',
1225             '18' => 'Guizhou',
1226             '19' => 'Liaoning',
1227             '20' => 'Nei Mongol',
1228             '21' => 'Ningxia',
1229             '22' => 'Beijing',
1230             '23' => 'Shanghai',
1231             '24' => 'Shanxi',
1232             '25' => 'Shandong',
1233             '26' => 'Shaanxi',
1234             '28' => 'Tianjin',
1235             '29' => 'Yunnan',
1236             '30' => 'Guangdong',
1237             '31' => 'Hainan',
1238             '32' => 'Sichuan',
1239             '33' => 'Chongqing'
1240             },
1241             'CO' => {
1242             '01' => 'Amazonas',
1243             '02' => 'Antioquia',
1244             '03' => 'Arauca',
1245             '04' => 'Atlantico',
1246             '08' => 'Caqueta',
1247             '09' => 'Cauca',
1248             '10' => 'Cesar',
1249             '11' => 'Choco',
1250             '12' => 'Cordoba',
1251             '14' => 'Guaviare',
1252             '15' => 'Guainia',
1253             '16' => 'Huila',
1254             '17' => 'La Guajira',
1255             '19' => 'Meta',
1256             '20' => 'Narino',
1257             '21' => 'Norte de Santander',
1258             '22' => 'Putumayo',
1259             '23' => 'Quindio',
1260             '24' => 'Risaralda',
1261             '25' => 'San Andres y Providencia',
1262             '26' => 'Santander',
1263             '27' => 'Sucre',
1264             '28' => 'Tolima',
1265             '29' => 'Valle del Cauca',
1266             '30' => 'Vaupes',
1267             '31' => 'Vichada',
1268             '32' => 'Casanare',
1269             '33' => 'Cundinamarca',
1270             '34' => 'Distrito Especial',
1271             '35' => 'Bolivar',
1272             '36' => 'Boyaca',
1273             '37' => 'Caldas',
1274             '38' => 'Magdalena'
1275             },
1276             'CR' => {
1277             '01' => 'Alajuela',
1278             '02' => 'Cartago',
1279             '03' => 'Guanacaste',
1280             '04' => 'Heredia',
1281             '06' => 'Limon',
1282             '07' => 'Puntarenas',
1283             '08' => 'San Jose'
1284             },
1285             'CU' => {
1286             '01' => 'Pinar del Rio',
1287             '02' => 'Ciudad de la Habana',
1288             '03' => 'Matanzas',
1289             '04' => 'Isla de la Juventud',
1290             '05' => 'Camaguey',
1291             '07' => 'Ciego de Avila',
1292             '08' => 'Cienfuegos',
1293             '09' => 'Granma',
1294             '10' => 'Guantanamo',
1295             '11' => 'La Habana',
1296             '12' => 'Holguin',
1297             '13' => 'Las Tunas',
1298             '14' => 'Sancti Spiritus',
1299             '15' => 'Santiago de Cuba',
1300             '16' => 'Villa Clara'
1301             },
1302             'CV' => {
1303             '01' => 'Boa Vista',
1304             '02' => 'Brava',
1305             '04' => 'Maio',
1306             '05' => 'Paul',
1307             '07' => 'Ribeira Grande',
1308             '08' => 'Sal',
1309             '10' => 'Sao Nicolau',
1310             '11' => 'Sao Vicente',
1311             '13' => 'Mosteiros',
1312             '14' => 'Praia',
1313             '15' => 'Santa Catarina',
1314             '16' => 'Santa Cruz',
1315             '17' => 'Sao Domingos',
1316             '18' => 'Sao Filipe',
1317             '19' => 'Sao Miguel',
1318             '20' => 'Tarrafal'
1319             },
1320             'CY' => {
1321             '01' => 'Famagusta',
1322             '02' => 'Kyrenia',
1323             '03' => 'Larnaca',
1324             '04' => 'Nicosia',
1325             '05' => 'Limassol',
1326             '06' => 'Paphos'
1327             },
1328             'CZ' => {
1329             '52' => 'Hlavni mesto Praha',
1330             '78' => 'Jihomoravsky kraj',
1331             '79' => 'Jihocesky kraj',
1332             '80' => 'Vysocina',
1333             '81' => 'Karlovarsky kraj',
1334             '82' => 'Kralovehradecky kraj',
1335             '83' => 'Liberecky kraj',
1336             '84' => 'Olomoucky kraj',
1337             '85' => 'Moravskoslezsky kraj',
1338             '86' => 'Pardubicky kraj',
1339             '87' => 'Plzensky kraj',
1340             '88' => 'Stredocesky kraj',
1341             '89' => 'Ustecky kraj',
1342             '90' => 'Zlinsky kraj'
1343             },
1344             'DE' => {
1345             '01' => 'Baden-Wurttemberg',
1346             '02' => 'Bayern',
1347             '03' => 'Bremen',
1348             '04' => 'Hamburg',
1349             '05' => 'Hessen',
1350             '06' => 'Niedersachsen',
1351             '07' => 'Nordrhein-Westfalen',
1352             '08' => 'Rheinland-Pfalz',
1353             '09' => 'Saarland',
1354             '10' => 'Schleswig-Holstein',
1355             '11' => 'Brandenburg',
1356             '12' => 'Mecklenburg-Vorpommern',
1357             '13' => 'Sachsen',
1358             '14' => 'Sachsen-Anhalt',
1359             '15' => 'Thuringen',
1360             '16' => 'Berlin'
1361             },
1362             'DJ' => {
1363             '01' => 'Ali Sabieh',
1364             '04' => 'Obock',
1365             '05' => 'Tadjoura',
1366             '06' => 'Dikhil',
1367             '07' => 'Djibouti',
1368             '08' => 'Arta'
1369             },
1370             'DK' => {
1371             '17' => 'Hovedstaden',
1372             '18' => 'Midtjylland',
1373             '19' => 'Nordjylland',
1374             '20' => 'Sjelland',
1375             '21' => 'Syddanmark'
1376             },
1377             'DM' => {
1378             '02' => 'Saint Andrew',
1379             '03' => 'Saint David',
1380             '04' => 'Saint George',
1381             '05' => 'Saint John',
1382             '06' => 'Saint Joseph',
1383             '07' => 'Saint Luke',
1384             '08' => 'Saint Mark',
1385             '09' => 'Saint Patrick',
1386             '10' => 'Saint Paul',
1387             '11' => 'Saint Peter'
1388             },
1389             'DO' => {
1390             '01' => 'Azua',
1391             '02' => 'Baoruco',
1392             '03' => 'Barahona',
1393             '04' => 'Dajabon',
1394             '05' => 'Distrito Nacional',
1395             '06' => 'Duarte',
1396             '08' => 'Espaillat',
1397             '09' => 'Independencia',
1398             '10' => 'La Altagracia',
1399             '11' => 'Elias Pina',
1400             '12' => 'La Romana',
1401             '14' => 'Maria Trinidad Sanchez',
1402             '15' => 'Monte Cristi',
1403             '16' => 'Pedernales',
1404             '17' => 'Peravia',
1405             '18' => 'Puerto Plata',
1406             '19' => 'Salcedo',
1407             '20' => 'Samana',
1408             '21' => 'Sanchez Ramirez',
1409             '23' => 'San Juan',
1410             '24' => 'San Pedro De Macoris',
1411             '25' => 'Santiago',
1412             '26' => 'Santiago Rodriguez',
1413             '27' => 'Valverde',
1414             '28' => 'El Seibo',
1415             '29' => 'Hato Mayor',
1416             '30' => 'La Vega',
1417             '31' => 'Monsenor Nouel',
1418             '32' => 'Monte Plata',
1419             '33' => 'San Cristobal',
1420             '34' => 'Distrito Nacional',
1421             '35' => 'Peravia',
1422             '36' => 'San Jose de Ocoa',
1423             '37' => 'Santo Domingo'
1424             },
1425             'DZ' => {
1426             '01' => 'Alger',
1427             '03' => 'Batna',
1428             '04' => 'Constantine',
1429             '06' => 'Medea',
1430             '07' => 'Mostaganem',
1431             '09' => 'Oran',
1432             '10' => 'Saida',
1433             '12' => 'Setif',
1434             '13' => 'Tiaret',
1435             '14' => 'Tizi Ouzou',
1436             '15' => 'Tlemcen',
1437             '18' => 'Bejaia',
1438             '19' => 'Biskra',
1439             '20' => 'Blida',
1440             '21' => 'Bouira',
1441             '22' => 'Djelfa',
1442             '23' => 'Guelma',
1443             '24' => 'Jijel',
1444             '25' => 'Laghouat',
1445             '26' => 'Mascara',
1446             '27' => 'M\'sila',
1447             '29' => 'Oum el Bouaghi',
1448             '30' => 'Sidi Bel Abbes',
1449             '31' => 'Skikda',
1450             '33' => 'Tebessa',
1451             '34' => 'Adrar',
1452             '35' => 'Ain Defla',
1453             '36' => 'Ain Temouchent',
1454             '37' => 'Annaba',
1455             '38' => 'Bechar',
1456             '39' => 'Bordj Bou Arreridj',
1457             '40' => 'Boumerdes',
1458             '41' => 'Chlef',
1459             '42' => 'El Bayadh',
1460             '43' => 'El Oued',
1461             '44' => 'El Tarf',
1462             '45' => 'Ghardaia',
1463             '46' => 'Illizi',
1464             '47' => 'Khenchela',
1465             '48' => 'Mila',
1466             '49' => 'Naama',
1467             '50' => 'Ouargla',
1468             '51' => 'Relizane',
1469             '52' => 'Souk Ahras',
1470             '53' => 'Tamanghasset',
1471             '54' => 'Tindouf',
1472             '55' => 'Tipaza',
1473             '56' => 'Tissemsilt'
1474             },
1475             'EC' => {
1476             '01' => 'Galapagos',
1477             '02' => 'Azuay',
1478             '03' => 'Bolivar',
1479             '04' => 'Canar',
1480             '05' => 'Carchi',
1481             '06' => 'Chimborazo',
1482             '07' => 'Cotopaxi',
1483             '08' => 'El Oro',
1484             '09' => 'Esmeraldas',
1485             '10' => 'Guayas',
1486             '11' => 'Imbabura',
1487             '12' => 'Loja',
1488             '13' => 'Los Rios',
1489             '14' => 'Manabi',
1490             '15' => 'Morona-Santiago',
1491             '17' => 'Pastaza',
1492             '18' => 'Pichincha',
1493             '19' => 'Tungurahua',
1494             '20' => 'Zamora-Chinchipe',
1495             '22' => 'Sucumbios',
1496             '23' => 'Napo',
1497             '24' => 'Orellana'
1498             },
1499             'EE' => {
1500             '01' => 'Harjumaa',
1501             '02' => 'Hiiumaa',
1502             '03' => 'Ida-Virumaa',
1503             '04' => 'Jarvamaa',
1504             '05' => 'Jogevamaa',
1505             '06' => 'Kohtla-Jarve',
1506             '07' => 'Laanemaa',
1507             '08' => 'Laane-Virumaa',
1508             '09' => 'Narva',
1509             '10' => 'Parnu',
1510             '11' => 'Parnumaa',
1511             '12' => 'Polvamaa',
1512             '13' => 'Raplamaa',
1513             '14' => 'Saaremaa',
1514             '15' => 'Sillamae',
1515             '16' => 'Tallinn',
1516             '17' => 'Tartu',
1517             '18' => 'Tartumaa',
1518             '19' => 'Valgamaa',
1519             '20' => 'Viljandimaa',
1520             '21' => 'Vorumaa'
1521             },
1522             'EG' => {
1523             '01' => 'Ad Daqahliyah',
1524             '02' => 'Al Bahr al Ahmar',
1525             '03' => 'Al Buhayrah',
1526             '04' => 'Al Fayyum',
1527             '05' => 'Al Gharbiyah',
1528             '06' => 'Al Iskandariyah',
1529             '07' => 'Al Isma\'iliyah',
1530             '08' => 'Al Jizah',
1531             '09' => 'Al Minufiyah',
1532             '10' => 'Al Minya',
1533             '11' => 'Al Qahirah',
1534             '12' => 'Al Qalyubiyah',
1535             '13' => 'Al Wadi al Jadid',
1536             '14' => 'Ash Sharqiyah',
1537             '15' => 'As Suways',
1538             '16' => 'Aswan',
1539             '17' => 'Asyut',
1540             '18' => 'Bani Suwayf',
1541             '19' => 'Bur Sa\'id',
1542             '20' => 'Dumyat',
1543             '21' => 'Kafr ash Shaykh',
1544             '22' => 'Matruh',
1545             '23' => 'Qina',
1546             '24' => 'Suhaj',
1547             '26' => 'Janub Sina\'',
1548             '27' => 'Shamal Sina\'',
1549             '28' => 'Al Uqsur'
1550             },
1551             'ER' => {
1552             '01' => 'Anseba',
1553             '02' => 'Debub',
1554             '03' => 'Debubawi K\'eyih Bahri',
1555             '04' => 'Gash Barka',
1556             '05' => 'Ma\'akel',
1557             '06' => 'Semenawi K\'eyih Bahri'
1558             },
1559             'ES' => {
1560             '07' => 'Islas Baleares',
1561             '27' => 'La Rioja',
1562             '29' => 'Madrid',
1563             '31' => 'Murcia',
1564             '32' => 'Navarra',
1565             '34' => 'Asturias',
1566             '39' => 'Cantabria',
1567             '51' => 'Andalucia',
1568             '52' => 'Aragon',
1569             '53' => 'Canarias',
1570             '54' => 'Castilla-La Mancha',
1571             '55' => 'Castilla y Leon',
1572             '56' => 'Catalonia',
1573             '57' => 'Extremadura',
1574             '58' => 'Galicia',
1575             '59' => 'Pais Vasco',
1576             '60' => 'Comunidad Valenciana'
1577             },
1578             'ET' => {
1579             '44' => 'Adis Abeba',
1580             '45' => 'Afar',
1581             '46' => 'Amara',
1582             '47' => 'Binshangul Gumuz',
1583             '48' => 'Dire Dawa',
1584             '49' => 'Gambela Hizboch',
1585             '50' => 'Hareri Hizb',
1586             '51' => 'Oromiya',
1587             '52' => 'Sumale',
1588             '53' => 'Tigray',
1589             '54' => 'YeDebub Biheroch Bihereseboch na Hizboch'
1590             },
1591             'FI' => {
1592             '01' => 'Aland',
1593             '06' => 'Lapland',
1594             '08' => 'Oulu',
1595             '13' => 'Southern Finland',
1596             '14' => 'Eastern Finland',
1597             '15' => 'Western Finland'
1598             },
1599             'FJ' => {
1600             '01' => 'Central',
1601             '02' => 'Eastern',
1602             '03' => 'Northern',
1603             '04' => 'Rotuma',
1604             '05' => 'Western'
1605             },
1606             'FM' => {
1607             '01' => 'Kosrae',
1608             '02' => 'Pohnpei',
1609             '03' => 'Chuuk',
1610             '04' => 'Yap'
1611             },
1612             'FR' => {
1613             '97' => 'Aquitaine',
1614             '98' => 'Auvergne',
1615             '99' => 'Basse-Normandie',
1616             'A1' => 'Bourgogne',
1617             'A2' => 'Bretagne',
1618             'A3' => 'Centre',
1619             'A4' => 'Champagne-Ardenne',
1620             'A5' => 'Corse',
1621             'A6' => 'Franche-Comte',
1622             'A7' => 'Haute-Normandie',
1623             'A8' => 'Ile-de-France',
1624             'A9' => 'Languedoc-Roussillon',
1625             'B1' => 'Limousin',
1626             'B2' => 'Lorraine',
1627             'B3' => 'Midi-Pyrenees',
1628             'B4' => 'Nord-Pas-de-Calais',
1629             'B5' => 'Pays de la Loire',
1630             'B6' => 'Picardie',
1631             'B7' => 'Poitou-Charentes',
1632             'B8' => 'Provence-Alpes-Cote d\'Azur',
1633             'B9' => 'Rhone-Alpes',
1634             'C1' => 'Alsace'
1635             },
1636             'GA' => {
1637             '01' => 'Estuaire',
1638             '02' => 'Haut-Ogooue',
1639             '03' => 'Moyen-Ogooue',
1640             '04' => 'Ngounie',
1641             '05' => 'Nyanga',
1642             '06' => 'Ogooue-Ivindo',
1643             '07' => 'Ogooue-Lolo',
1644             '08' => 'Ogooue-Maritime',
1645             '09' => 'Woleu-Ntem'
1646             },
1647             'GB' => {
1648             'A1' => 'Barking and Dagenham',
1649             'A2' => 'Barnet',
1650             'A3' => 'Barnsley',
1651             'A4' => 'Bath and North East Somerset',
1652             'A5' => 'Bedfordshire',
1653             'A6' => 'Bexley',
1654             'A7' => 'Birmingham',
1655             'A8' => 'Blackburn with Darwen',
1656             'A9' => 'Blackpool',
1657             'B1' => 'Bolton',
1658             'B2' => 'Bournemouth',
1659             'B3' => 'Bracknell Forest',
1660             'B4' => 'Bradford',
1661             'B5' => 'Brent',
1662             'B6' => 'Brighton and Hove',
1663             'B7' => 'Bristol, City of',
1664             'B8' => 'Bromley',
1665             'B9' => 'Buckinghamshire',
1666             'C1' => 'Bury',
1667             'C2' => 'Calderdale',
1668             'C3' => 'Cambridgeshire',
1669             'C4' => 'Camden',
1670             'C5' => 'Cheshire',
1671             'C6' => 'Cornwall',
1672             'C7' => 'Coventry',
1673             'C8' => 'Croydon',
1674             'C9' => 'Cumbria',
1675             'D1' => 'Darlington',
1676             'D2' => 'Derby',
1677             'D3' => 'Derbyshire',
1678             'D4' => 'Devon',
1679             'D5' => 'Doncaster',
1680             'D6' => 'Dorset',
1681             'D7' => 'Dudley',
1682             'D8' => 'Durham',
1683             'D9' => 'Ealing',
1684             'E1' => 'East Riding of Yorkshire',
1685             'E2' => 'East Sussex',
1686             'E3' => 'Enfield',
1687             'E4' => 'Essex',
1688             'E5' => 'Gateshead',
1689             'E6' => 'Gloucestershire',
1690             'E7' => 'Greenwich',
1691             'E8' => 'Hackney',
1692             'E9' => 'Halton',
1693             'F1' => 'Hammersmith and Fulham',
1694             'F2' => 'Hampshire',
1695             'F3' => 'Haringey',
1696             'F4' => 'Harrow',
1697             'F5' => 'Hartlepool',
1698             'F6' => 'Havering',
1699             'F7' => 'Herefordshire',
1700             'F8' => 'Hertford',
1701             'F9' => 'Hillingdon',
1702             'G1' => 'Hounslow',
1703             'G2' => 'Isle of Wight',
1704             'G3' => 'Islington',
1705             'G4' => 'Kensington and Chelsea',
1706             'G5' => 'Kent',
1707             'G6' => 'Kingston upon Hull, City of',
1708             'G7' => 'Kingston upon Thames',
1709             'G8' => 'Kirklees',
1710             'G9' => 'Knowsley',
1711             'H1' => 'Lambeth',
1712             'H2' => 'Lancashire',
1713             'H3' => 'Leeds',
1714             'H4' => 'Leicester',
1715             'H5' => 'Leicestershire',
1716             'H6' => 'Lewisham',
1717             'H7' => 'Lincolnshire',
1718             'H8' => 'Liverpool',
1719             'H9' => 'London, City of',
1720             'I1' => 'Luton',
1721             'I2' => 'Manchester',
1722             'I3' => 'Medway',
1723             'I4' => 'Merton',
1724             'I5' => 'Middlesbrough',
1725             'I6' => 'Milton Keynes',
1726             'I7' => 'Newcastle upon Tyne',
1727             'I8' => 'Newham',
1728             'I9' => 'Norfolk',
1729             'J1' => 'Northamptonshire',
1730             'J2' => 'North East Lincolnshire',
1731             'J3' => 'North Lincolnshire',
1732             'J4' => 'North Somerset',
1733             'J5' => 'North Tyneside',
1734             'J6' => 'Northumberland',
1735             'J7' => 'North Yorkshire',
1736             'J8' => 'Nottingham',
1737             'J9' => 'Nottinghamshire',
1738             'K1' => 'Oldham',
1739             'K2' => 'Oxfordshire',
1740             'K3' => 'Peterborough',
1741             'K4' => 'Plymouth',
1742             'K5' => 'Poole',
1743             'K6' => 'Portsmouth',
1744             'K7' => 'Reading',
1745             'K8' => 'Redbridge',
1746             'K9' => 'Redcar and Cleveland',
1747             'L1' => 'Richmond upon Thames',
1748             'L2' => 'Rochdale',
1749             'L3' => 'Rotherham',
1750             'L4' => 'Rutland',
1751             'L5' => 'Salford',
1752             'L6' => 'Shropshire',
1753             'L7' => 'Sandwell',
1754             'L8' => 'Sefton',
1755             'L9' => 'Sheffield',
1756             'M1' => 'Slough',
1757             'M2' => 'Solihull',
1758             'M3' => 'Somerset',
1759             'M4' => 'Southampton',
1760             'M5' => 'Southend-on-Sea',
1761             'M6' => 'South Gloucestershire',
1762             'M7' => 'South Tyneside',
1763             'M8' => 'Southwark',
1764             'M9' => 'Staffordshire',
1765             'N1' => 'St. Helens',
1766             'N2' => 'Stockport',
1767             'N3' => 'Stockton-on-Tees',
1768             'N4' => 'Stoke-on-Trent',
1769             'N5' => 'Suffolk',
1770             'N6' => 'Sunderland',
1771             'N7' => 'Surrey',
1772             'N8' => 'Sutton',
1773             'N9' => 'Swindon',
1774             'O1' => 'Tameside',
1775             'O2' => 'Telford and Wrekin',
1776             'O3' => 'Thurrock',
1777             'O4' => 'Torbay',
1778             'O5' => 'Tower Hamlets',
1779             'O6' => 'Trafford',
1780             'O7' => 'Wakefield',
1781             'O8' => 'Walsall',
1782             'O9' => 'Waltham Forest',
1783             'P1' => 'Wandsworth',
1784             'P2' => 'Warrington',
1785             'P3' => 'Warwickshire',
1786             'P4' => 'West Berkshire',
1787             'P5' => 'Westminster',
1788             'P6' => 'West Sussex',
1789             'P7' => 'Wigan',
1790             'P8' => 'Wiltshire',
1791             'P9' => 'Windsor and Maidenhead',
1792             'Q1' => 'Wirral',
1793             'Q2' => 'Wokingham',
1794             'Q3' => 'Wolverhampton',
1795             'Q4' => 'Worcestershire',
1796             'Q5' => 'York',
1797             'Q6' => 'Antrim',
1798             'Q7' => 'Ards',
1799             'Q8' => 'Armagh',
1800             'Q9' => 'Ballymena',
1801             'R1' => 'Ballymoney',
1802             'R2' => 'Banbridge',
1803             'R3' => 'Belfast',
1804             'R4' => 'Carrickfergus',
1805             'R5' => 'Castlereagh',
1806             'R6' => 'Coleraine',
1807             'R7' => 'Cookstown',
1808             'R8' => 'Craigavon',
1809             'R9' => 'Down',
1810             'S1' => 'Dungannon',
1811             'S2' => 'Fermanagh',
1812             'S3' => 'Larne',
1813             'S4' => 'Limavady',
1814             'S5' => 'Lisburn',
1815             'S6' => 'Derry',
1816             'S7' => 'Magherafelt',
1817             'S8' => 'Moyle',
1818             'S9' => 'Newry and Mourne',
1819             'T1' => 'Newtownabbey',
1820             'T2' => 'North Down',
1821             'T3' => 'Omagh',
1822             'T4' => 'Strabane',
1823             'T5' => 'Aberdeen City',
1824             'T6' => 'Aberdeenshire',
1825             'T7' => 'Angus',
1826             'T8' => 'Argyll and Bute',
1827             'T9' => 'Scottish Borders, The',
1828             'U1' => 'Clackmannanshire',
1829             'U2' => 'Dumfries and Galloway',
1830             'U3' => 'Dundee City',
1831             'U4' => 'East Ayrshire',
1832             'U5' => 'East Dunbartonshire',
1833             'U6' => 'East Lothian',
1834             'U7' => 'East Renfrewshire',
1835             'U8' => 'Edinburgh, City of',
1836             'U9' => 'Falkirk',
1837             'V1' => 'Fife',
1838             'V2' => 'Glasgow City',
1839             'V3' => 'Highland',
1840             'V4' => 'Inverclyde',
1841             'V5' => 'Midlothian',
1842             'V6' => 'Moray',
1843             'V7' => 'North Ayrshire',
1844             'V8' => 'North Lanarkshire',
1845             'V9' => 'Orkney',
1846             'W1' => 'Perth and Kinross',
1847             'W2' => 'Renfrewshire',
1848             'W3' => 'Shetland Islands',
1849             'W4' => 'South Ayrshire',
1850             'W5' => 'South Lanarkshire',
1851             'W6' => 'Stirling',
1852             'W7' => 'West Dunbartonshire',
1853             'W8' => 'Eilean Siar',
1854             'W9' => 'West Lothian',
1855             'X1' => 'Isle of Anglesey',
1856             'X2' => 'Blaenau Gwent',
1857             'X3' => 'Bridgend',
1858             'X4' => 'Caerphilly',
1859             'X5' => 'Cardiff',
1860             'X6' => 'Ceredigion',
1861             'X7' => 'Carmarthenshire',
1862             'X8' => 'Conwy',
1863             'X9' => 'Denbighshire',
1864             'Y1' => 'Flintshire',
1865             'Y2' => 'Gwynedd',
1866             'Y3' => 'Merthyr Tydfil',
1867             'Y4' => 'Monmouthshire',
1868             'Y5' => 'Neath Port Talbot',
1869             'Y6' => 'Newport',
1870             'Y7' => 'Pembrokeshire',
1871             'Y8' => 'Powys',
1872             'Y9' => 'Rhondda Cynon Taff',
1873             'Z1' => 'Swansea',
1874             'Z2' => 'Torfaen',
1875             'Z3' => 'Vale of Glamorgan, The',
1876             'Z4' => 'Wrexham',
1877             'Z5' => 'Bedfordshire',
1878             'Z6' => 'Central Bedfordshire',
1879             'Z7' => 'Cheshire East',
1880             'Z8' => 'Cheshire West and Chester',
1881             'Z9' => 'Isles of Scilly'
1882             },
1883             'GD' => {
1884             '01' => 'Saint Andrew',
1885             '02' => 'Saint David',
1886             '03' => 'Saint George',
1887             '04' => 'Saint John',
1888             '05' => 'Saint Mark',
1889             '06' => 'Saint Patrick'
1890             },
1891             'GE' => {
1892             '01' => 'Abashis Raioni',
1893             '02' => 'Abkhazia',
1894             '03' => 'Adigenis Raioni',
1895             '04' => 'Ajaria',
1896             '05' => 'Akhalgoris Raioni',
1897             '06' => 'Akhalk\'alak\'is Raioni',
1898             '07' => 'Akhalts\'ikhis Raioni',
1899             '08' => 'Akhmetis Raioni',
1900             '09' => 'Ambrolauris Raioni',
1901             '10' => 'Aspindzis Raioni',
1902             '11' => 'Baghdat\'is Raioni',
1903             '12' => 'Bolnisis Raioni',
1904             '13' => 'Borjomis Raioni',
1905             '14' => 'Chiat\'ura',
1906             '15' => 'Ch\'khorotsqus Raioni',
1907             '16' => 'Ch\'okhatauris Raioni',
1908             '17' => 'Dedop\'listsqaros Raioni',
1909             '18' => 'Dmanisis Raioni',
1910             '19' => 'Dushet\'is Raioni',
1911             '20' => 'Gardabanis Raioni',
1912             '21' => 'Gori',
1913             '22' => 'Goris Raioni',
1914             '23' => 'Gurjaanis Raioni',
1915             '24' => 'Javis Raioni',
1916             '25' => 'K\'arelis Raioni',
1917             '26' => 'Kaspis Raioni',
1918             '27' => 'Kharagaulis Raioni',
1919             '28' => 'Khashuris Raioni',
1920             '29' => 'Khobis Raioni',
1921             '30' => 'Khonis Raioni',
1922             '31' => 'K\'ut\'aisi',
1923             '32' => 'Lagodekhis Raioni',
1924             '33' => 'Lanch\'khut\'is Raioni',
1925             '34' => 'Lentekhis Raioni',
1926             '35' => 'Marneulis Raioni',
1927             '36' => 'Martvilis Raioni',
1928             '37' => 'Mestiis Raioni',
1929             '38' => 'Mts\'khet\'is Raioni',
1930             '39' => 'Ninotsmindis Raioni',
1931             '40' => 'Onis Raioni',
1932             '41' => 'Ozurget\'is Raioni',
1933             '42' => 'P\'ot\'i',
1934             '43' => 'Qazbegis Raioni',
1935             '44' => 'Qvarlis Raioni',
1936             '45' => 'Rust\'avi',
1937             '46' => 'Sach\'kheris Raioni',
1938             '47' => 'Sagarejos Raioni',
1939             '48' => 'Samtrediis Raioni',
1940             '49' => 'Senakis Raioni',
1941             '50' => 'Sighnaghis Raioni',
1942             '51' => 'T\'bilisi',
1943             '52' => 'T\'elavis Raioni',
1944             '53' => 'T\'erjolis Raioni',
1945             '54' => 'T\'et\'ritsqaros Raioni',
1946             '55' => 'T\'ianet\'is Raioni',
1947             '56' => 'Tqibuli',
1948             '57' => 'Ts\'ageris Raioni',
1949             '58' => 'Tsalenjikhis Raioni',
1950             '59' => 'Tsalkis Raioni',
1951             '60' => 'Tsqaltubo',
1952             '61' => 'Vanis Raioni',
1953             '62' => 'Zestap\'onis Raioni',
1954             '63' => 'Zugdidi',
1955             '64' => 'Zugdidis Raioni'
1956             },
1957             'GH' => {
1958             '01' => 'Greater Accra',
1959             '02' => 'Ashanti',
1960             '03' => 'Brong-Ahafo',
1961             '04' => 'Central',
1962             '05' => 'Eastern',
1963             '06' => 'Northern',
1964             '08' => 'Volta',
1965             '09' => 'Western',
1966             '10' => 'Upper East',
1967             '11' => 'Upper West'
1968             },
1969             'GL' => {
1970             '01' => 'Nordgronland',
1971             '02' => 'Ostgronland',
1972             '03' => 'Vestgronland'
1973             },
1974             'GM' => {
1975             '01' => 'Banjul',
1976             '02' => 'Lower River',
1977             '03' => 'Central River',
1978             '04' => 'Upper River',
1979             '05' => 'Western',
1980             '07' => 'North Bank'
1981             },
1982             'GN' => {
1983             '01' => 'Beyla',
1984             '02' => 'Boffa',
1985             '03' => 'Boke',
1986             '04' => 'Conakry',
1987             '05' => 'Dabola',
1988             '06' => 'Dalaba',
1989             '07' => 'Dinguiraye',
1990             '09' => 'Faranah',
1991             '10' => 'Forecariah',
1992             '11' => 'Fria',
1993             '12' => 'Gaoual',
1994             '13' => 'Gueckedou',
1995             '15' => 'Kerouane',
1996             '16' => 'Kindia',
1997             '17' => 'Kissidougou',
1998             '18' => 'Koundara',
1999             '19' => 'Kouroussa',
2000             '21' => 'Macenta',
2001             '22' => 'Mali',
2002             '23' => 'Mamou',
2003             '25' => 'Pita',
2004             '27' => 'Telimele',
2005             '28' => 'Tougue',
2006             '29' => 'Yomou',
2007             '30' => 'Coyah',
2008             '31' => 'Dubreka',
2009             '32' => 'Kankan',
2010             '33' => 'Koubia',
2011             '34' => 'Labe',
2012             '35' => 'Lelouma',
2013             '36' => 'Lola',
2014             '37' => 'Mandiana',
2015             '38' => 'Nzerekore',
2016             '39' => 'Siguiri'
2017             },
2018             'GQ' => {
2019             '03' => 'Annobon',
2020             '04' => 'Bioko Norte',
2021             '05' => 'Bioko Sur',
2022             '06' => 'Centro Sur',
2023             '07' => 'Kie-Ntem',
2024             '08' => 'Litoral',
2025             '09' => 'Wele-Nzas'
2026             },
2027             'GR' => {
2028             '01' => 'Evros',
2029             '02' => 'Rodhopi',
2030             '03' => 'Xanthi',
2031             '04' => 'Drama',
2032             '05' => 'Serrai',
2033             '06' => 'Kilkis',
2034             '07' => 'Pella',
2035             '08' => 'Florina',
2036             '09' => 'Kastoria',
2037             '10' => 'Grevena',
2038             '11' => 'Kozani',
2039             '12' => 'Imathia',
2040             '13' => 'Thessaloniki',
2041             '14' => 'Kavala',
2042             '15' => 'Khalkidhiki',
2043             '16' => 'Pieria',
2044             '17' => 'Ioannina',
2045             '18' => 'Thesprotia',
2046             '19' => 'Preveza',
2047             '20' => 'Arta',
2048             '21' => 'Larisa',
2049             '22' => 'Trikala',
2050             '23' => 'Kardhitsa',
2051             '24' => 'Magnisia',
2052             '25' => 'Kerkira',
2053             '26' => 'Levkas',
2054             '27' => 'Kefallinia',
2055             '28' => 'Zakinthos',
2056             '29' => 'Fthiotis',
2057             '30' => 'Evritania',
2058             '31' => 'Aitolia kai Akarnania',
2059             '32' => 'Fokis',
2060             '33' => 'Voiotia',
2061             '34' => 'Evvoia',
2062             '35' => 'Attiki',
2063             '36' => 'Argolis',
2064             '37' => 'Korinthia',
2065             '38' => 'Akhaia',
2066             '39' => 'Ilia',
2067             '40' => 'Messinia',
2068             '41' => 'Arkadhia',
2069             '42' => 'Lakonia',
2070             '43' => 'Khania',
2071             '44' => 'Rethimni',
2072             '45' => 'Iraklion',
2073             '46' => 'Lasithi',
2074             '47' => 'Dhodhekanisos',
2075             '48' => 'Samos',
2076             '49' => 'Kikladhes',
2077             '50' => 'Khios',
2078             '51' => 'Lesvos'
2079             },
2080             'GT' => {
2081             '01' => 'Alta Verapaz',
2082             '02' => 'Baja Verapaz',
2083             '03' => 'Chimaltenango',
2084             '04' => 'Chiquimula',
2085             '05' => 'El Progreso',
2086             '06' => 'Escuintla',
2087             '07' => 'Guatemala',
2088             '08' => 'Huehuetenango',
2089             '09' => 'Izabal',
2090             '10' => 'Jalapa',
2091             '11' => 'Jutiapa',
2092             '12' => 'Peten',
2093             '13' => 'Quetzaltenango',
2094             '14' => 'Quiche',
2095             '15' => 'Retalhuleu',
2096             '16' => 'Sacatepequez',
2097             '17' => 'San Marcos',
2098             '18' => 'Santa Rosa',
2099             '19' => 'Solola',
2100             '20' => 'Suchitepequez',
2101             '21' => 'Totonicapan',
2102             '22' => 'Zacapa'
2103             },
2104             'GW' => {
2105             '01' => 'Bafata',
2106             '02' => 'Quinara',
2107             '04' => 'Oio',
2108             '05' => 'Bolama',
2109             '06' => 'Cacheu',
2110             '07' => 'Tombali',
2111             '10' => 'Gabu',
2112             '11' => 'Bissau',
2113             '12' => 'Biombo'
2114             },
2115             'GY' => {
2116             '10' => 'Barima-Waini',
2117             '11' => 'Cuyuni-Mazaruni',
2118             '12' => 'Demerara-Mahaica',
2119             '13' => 'East Berbice-Corentyne',
2120             '14' => 'Essequibo Islands-West Demerara',
2121             '15' => 'Mahaica-Berbice',
2122             '16' => 'Pomeroon-Supenaam',
2123             '17' => 'Potaro-Siparuni',
2124             '18' => 'Upper Demerara-Berbice',
2125             '19' => 'Upper Takutu-Upper Essequibo'
2126             },
2127             'HN' => {
2128             '01' => 'Atlantida',
2129             '02' => 'Choluteca',
2130             '03' => 'Colon',
2131             '04' => 'Comayagua',
2132             '05' => 'Copan',
2133             '06' => 'Cortes',
2134             '07' => 'El Paraiso',
2135             '08' => 'Francisco Morazan',
2136             '09' => 'Gracias a Dios',
2137             '10' => 'Intibuca',
2138             '11' => 'Islas de la Bahia',
2139             '12' => 'La Paz',
2140             '13' => 'Lempira',
2141             '14' => 'Ocotepeque',
2142             '15' => 'Olancho',
2143             '16' => 'Santa Barbara',
2144             '17' => 'Valle',
2145             '18' => 'Yoro'
2146             },
2147             'HR' => {
2148             '01' => 'Bjelovarsko-Bilogorska',
2149             '02' => 'Brodsko-Posavska',
2150             '03' => 'Dubrovacko-Neretvanska',
2151             '04' => 'Istarska',
2152             '05' => 'Karlovacka',
2153             '06' => 'Koprivnicko-Krizevacka',
2154             '07' => 'Krapinsko-Zagorska',
2155             '08' => 'Licko-Senjska',
2156             '09' => 'Medimurska',
2157             '10' => 'Osjecko-Baranjska',
2158             '11' => 'Pozesko-Slavonska',
2159             '12' => 'Primorsko-Goranska',
2160             '13' => 'Sibensko-Kninska',
2161             '14' => 'Sisacko-Moslavacka',
2162             '15' => 'Splitsko-Dalmatinska',
2163             '16' => 'Varazdinska',
2164             '17' => 'Viroviticko-Podravska',
2165             '18' => 'Vukovarsko-Srijemska',
2166             '19' => 'Zadarska',
2167             '20' => 'Zagrebacka',
2168             '21' => 'Grad Zagreb'
2169             },
2170             'HT' => {
2171             '03' => 'Nord-Ouest',
2172             '06' => 'Artibonite',
2173             '07' => 'Centre',
2174             '09' => 'Nord',
2175             '10' => 'Nord-Est',
2176             '11' => 'Ouest',
2177             '12' => 'Sud',
2178             '13' => 'Sud-Est',
2179             '14' => 'Grand\' Anse',
2180             '15' => 'Nippes'
2181             },
2182             'HU' => {
2183             '01' => 'Bacs-Kiskun',
2184             '02' => 'Baranya',
2185             '03' => 'Bekes',
2186             '04' => 'Borsod-Abauj-Zemplen',
2187             '05' => 'Budapest',
2188             '06' => 'Csongrad',
2189             '07' => 'Debrecen',
2190             '08' => 'Fejer',
2191             '09' => 'Gyor-Moson-Sopron',
2192             '10' => 'Hajdu-Bihar',
2193             '11' => 'Heves',
2194             '12' => 'Komarom-Esztergom',
2195             '13' => 'Miskolc',
2196             '14' => 'Nograd',
2197             '15' => 'Pecs',
2198             '16' => 'Pest',
2199             '17' => 'Somogy',
2200             '18' => 'Szabolcs-Szatmar-Bereg',
2201             '19' => 'Szeged',
2202             '20' => 'Jasz-Nagykun-Szolnok',
2203             '21' => 'Tolna',
2204             '22' => 'Vas',
2205             '23' => 'Veszprem',
2206             '24' => 'Zala',
2207             '25' => 'Gyor',
2208             '26' => 'Bekescsaba',
2209             '27' => 'Dunaujvaros',
2210             '28' => 'Eger',
2211             '29' => 'Hodmezovasarhely',
2212             '30' => 'Kaposvar',
2213             '31' => 'Kecskemet',
2214             '32' => 'Nagykanizsa',
2215             '33' => 'Nyiregyhaza',
2216             '34' => 'Sopron',
2217             '35' => 'Szekesfehervar',
2218             '36' => 'Szolnok',
2219             '37' => 'Szombathely',
2220             '38' => 'Tatabanya',
2221             '39' => 'Veszprem',
2222             '40' => 'Zalaegerszeg',
2223             '41' => 'Salgotarjan',
2224             '42' => 'Szekszard',
2225             '43' => 'Erd'
2226             },
2227             'ID' => {
2228             '01' => 'Aceh',
2229             '02' => 'Bali',
2230             '03' => 'Bengkulu',
2231             '04' => 'Jakarta Raya',
2232             '05' => 'Jambi',
2233             '07' => 'Jawa Tengah',
2234             '08' => 'Jawa Timur',
2235             '10' => 'Yogyakarta',
2236             '11' => 'Kalimantan Barat',
2237             '12' => 'Kalimantan Selatan',
2238             '13' => 'Kalimantan Tengah',
2239             '14' => 'Kalimantan Timur',
2240             '15' => 'Lampung',
2241             '17' => 'Nusa Tenggara Barat',
2242             '18' => 'Nusa Tenggara Timur',
2243             '21' => 'Sulawesi Tengah',
2244             '22' => 'Sulawesi Tenggara',
2245             '24' => 'Sumatera Barat',
2246             '26' => 'Sumatera Utara',
2247             '28' => 'Maluku',
2248             '29' => 'Maluku Utara',
2249             '30' => 'Jawa Barat',
2250             '31' => 'Sulawesi Utara',
2251             '32' => 'Sumatera Selatan',
2252             '33' => 'Banten',
2253             '34' => 'Gorontalo',
2254             '35' => 'Kepulauan Bangka Belitung',
2255             '36' => 'Papua',
2256             '37' => 'Riau',
2257             '38' => 'Sulawesi Selatan',
2258             '39' => 'Irian Jaya Barat',
2259             '40' => 'Kepulauan Riau',
2260             '41' => 'Sulawesi Barat'
2261             },
2262             'IE' => {
2263             '01' => 'Carlow',
2264             '02' => 'Cavan',
2265             '03' => 'Clare',
2266             '04' => 'Cork',
2267             '06' => 'Donegal',
2268             '07' => 'Dublin',
2269             '10' => 'Galway',
2270             '11' => 'Kerry',
2271             '12' => 'Kildare',
2272             '13' => 'Kilkenny',
2273             '14' => 'Leitrim',
2274             '15' => 'Laois',
2275             '16' => 'Limerick',
2276             '18' => 'Longford',
2277             '19' => 'Louth',
2278             '20' => 'Mayo',
2279             '21' => 'Meath',
2280             '22' => 'Monaghan',
2281             '23' => 'Offaly',
2282             '24' => 'Roscommon',
2283             '25' => 'Sligo',
2284             '26' => 'Tipperary',
2285             '27' => 'Waterford',
2286             '29' => 'Westmeath',
2287             '30' => 'Wexford',
2288             '31' => 'Wicklow'
2289             },
2290             'IL' => {
2291             '01' => 'HaDarom',
2292             '02' => 'HaMerkaz',
2293             '03' => 'HaZafon',
2294             '04' => 'Hefa',
2295             '05' => 'Tel Aviv',
2296             '06' => 'Yerushalayim'
2297             },
2298             'IN' => {
2299             '01' => 'Andaman and Nicobar Islands',
2300             '02' => 'Andhra Pradesh',
2301             '03' => 'Assam',
2302             '05' => 'Chandigarh',
2303             '06' => 'Dadra and Nagar Haveli',
2304             '07' => 'Delhi',
2305             '09' => 'Gujarat',
2306             '10' => 'Haryana',
2307             '11' => 'Himachal Pradesh',
2308             '12' => 'Jammu and Kashmir',
2309             '13' => 'Kerala',
2310             '14' => 'Lakshadweep',
2311             '16' => 'Maharashtra',
2312             '17' => 'Manipur',
2313             '18' => 'Meghalaya',
2314             '19' => 'Karnataka',
2315             '20' => 'Nagaland',
2316             '21' => 'Orissa',
2317             '22' => 'Puducherry',
2318             '23' => 'Punjab',
2319             '24' => 'Rajasthan',
2320             '25' => 'Tamil Nadu',
2321             '26' => 'Tripura',
2322             '28' => 'West Bengal',
2323             '29' => 'Sikkim',
2324             '30' => 'Arunachal Pradesh',
2325             '31' => 'Mizoram',
2326             '32' => 'Daman and Diu',
2327             '33' => 'Goa',
2328             '34' => 'Bihar',
2329             '35' => 'Madhya Pradesh',
2330             '36' => 'Uttar Pradesh',
2331             '37' => 'Chhattisgarh',
2332             '38' => 'Jharkhand',
2333             '39' => 'Uttarakhand'
2334             },
2335             'IQ' => {
2336             '01' => 'Al Anbar',
2337             '02' => 'Al Basrah',
2338             '03' => 'Al Muthanna',
2339             '04' => 'Al Qadisiyah',
2340             '05' => 'As Sulaymaniyah',
2341             '06' => 'Babil',
2342             '07' => 'Baghdad',
2343             '08' => 'Dahuk',
2344             '09' => 'Dhi Qar',
2345             '10' => 'Diyala',
2346             '11' => 'Arbil',
2347             '12' => 'Karbala\'',
2348             '13' => 'At Ta\'mim',
2349             '14' => 'Maysan',
2350             '15' => 'Ninawa',
2351             '16' => 'Wasit',
2352             '17' => 'An Najaf',
2353             '18' => 'Salah ad Din'
2354             },
2355             'IR' => {
2356             '01' => 'Azarbayjan-e Bakhtari',
2357             '03' => 'Chahar Mahall va Bakhtiari',
2358             '04' => 'Sistan va Baluchestan',
2359             '05' => 'Kohkiluyeh va Buyer Ahmadi',
2360             '07' => 'Fars',
2361             '08' => 'Gilan',
2362             '09' => 'Hamadan',
2363             '10' => 'Ilam',
2364             '11' => 'Hormozgan',
2365             '12' => 'Kerman',
2366             '13' => 'Bakhtaran',
2367             '15' => 'Khuzestan',
2368             '16' => 'Kordestan',
2369             '17' => 'Mazandaran',
2370             '18' => 'Semnan Province',
2371             '19' => 'Markazi',
2372             '21' => 'Zanjan',
2373             '22' => 'Bushehr',
2374             '23' => 'Lorestan',
2375             '24' => 'Markazi',
2376             '25' => 'Semnan',
2377             '26' => 'Tehran',
2378             '27' => 'Zanjan',
2379             '28' => 'Esfahan',
2380             '29' => 'Kerman',
2381             '30' => 'Khorasan',
2382             '31' => 'Yazd',
2383             '32' => 'Ardabil',
2384             '33' => 'East Azarbaijan',
2385             '34' => 'Markazi',
2386             '35' => 'Mazandaran',
2387             '36' => 'Zanjan',
2388             '37' => 'Golestan',
2389             '38' => 'Qazvin',
2390             '39' => 'Qom',
2391             '40' => 'Yazd',
2392             '41' => 'Khorasan-e Janubi',
2393             '42' => 'Khorasan-e Razavi',
2394             '43' => 'Khorasan-e Shemali',
2395             '44' => 'Alborz'
2396             },
2397             'IS' => {
2398             '03' => 'Arnessysla',
2399             '05' => 'Austur-Hunavatnssysla',
2400             '06' => 'Austur-Skaftafellssysla',
2401             '07' => 'Borgarfjardarsysla',
2402             '09' => 'Eyjafjardarsysla',
2403             '10' => 'Gullbringusysla',
2404             '15' => 'Kjosarsysla',
2405             '17' => 'Myrasysla',
2406             '20' => 'Nordur-Mulasysla',
2407             '21' => 'Nordur-Tingeyjarsysla',
2408             '23' => 'Rangarvallasysla',
2409             '28' => 'Skagafjardarsysla',
2410             '29' => 'Snafellsnes- og Hnappadalssysla',
2411             '30' => 'Strandasysla',
2412             '31' => 'Sudur-Mulasysla',
2413             '32' => 'Sudur-Tingeyjarsysla',
2414             '34' => 'Vestur-Bardastrandarsysla',
2415             '35' => 'Vestur-Hunavatnssysla',
2416             '36' => 'Vestur-Isafjardarsysla',
2417             '37' => 'Vestur-Skaftafellssysla',
2418             '38' => 'Austurland',
2419             '39' => 'Hofuoborgarsvaoio',
2420             '40' => 'Norourland Eystra',
2421             '41' => 'Norourland Vestra',
2422             '42' => 'Suourland',
2423             '43' => 'Suournes',
2424             '44' => 'Vestfiroir',
2425             '45' => 'Vesturland'
2426             },
2427             'IT' => {
2428             '01' => 'Abruzzi',
2429             '02' => 'Basilicata',
2430             '03' => 'Calabria',
2431             '04' => 'Campania',
2432             '05' => 'Emilia-Romagna',
2433             '06' => 'Friuli-Venezia Giulia',
2434             '07' => 'Lazio',
2435             '08' => 'Liguria',
2436             '09' => 'Lombardia',
2437             '10' => 'Marche',
2438             '11' => 'Molise',
2439             '12' => 'Piemonte',
2440             '13' => 'Puglia',
2441             '14' => 'Sardegna',
2442             '15' => 'Sicilia',
2443             '16' => 'Toscana',
2444             '17' => 'Trentino-Alto Adige',
2445             '18' => 'Umbria',
2446             '19' => 'Valle d\'Aosta',
2447             '20' => 'Veneto'
2448             },
2449             'JM' => {
2450             '01' => 'Clarendon',
2451             '02' => 'Hanover',
2452             '04' => 'Manchester',
2453             '07' => 'Portland',
2454             '08' => 'Saint Andrew',
2455             '09' => 'Saint Ann',
2456             '10' => 'Saint Catherine',
2457             '11' => 'Saint Elizabeth',
2458             '12' => 'Saint James',
2459             '13' => 'Saint Mary',
2460             '14' => 'Saint Thomas',
2461             '15' => 'Trelawny',
2462             '16' => 'Westmoreland',
2463             '17' => 'Kingston'
2464             },
2465             'JO' => {
2466             '02' => 'Al Balqa\'',
2467             '09' => 'Al Karak',
2468             '12' => 'At Tafilah',
2469             '15' => 'Al Mafraq',
2470             '16' => 'Amman',
2471             '17' => 'Az Zaraqa',
2472             '18' => 'Irbid',
2473             '19' => 'Ma\'an',
2474             '20' => 'Ajlun',
2475             '21' => 'Al Aqabah',
2476             '22' => 'Jarash',
2477             '23' => 'Madaba'
2478             },
2479             'JP' => {
2480             '01' => 'Aichi',
2481             '02' => 'Akita',
2482             '03' => 'Aomori',
2483             '04' => 'Chiba',
2484             '05' => 'Ehime',
2485             '06' => 'Fukui',
2486             '07' => 'Fukuoka',
2487             '08' => 'Fukushima',
2488             '09' => 'Gifu',
2489             '10' => 'Gumma',
2490             '11' => 'Hiroshima',
2491             '12' => 'Hokkaido',
2492             '13' => 'Hyogo',
2493             '14' => 'Ibaraki',
2494             '15' => 'Ishikawa',
2495             '16' => 'Iwate',
2496             '17' => 'Kagawa',
2497             '18' => 'Kagoshima',
2498             '19' => 'Kanagawa',
2499             '20' => 'Kochi',
2500             '21' => 'Kumamoto',
2501             '22' => 'Kyoto',
2502             '23' => 'Mie',
2503             '24' => 'Miyagi',
2504             '25' => 'Miyazaki',
2505             '26' => 'Nagano',
2506             '27' => 'Nagasaki',
2507             '28' => 'Nara',
2508             '29' => 'Niigata',
2509             '30' => 'Oita',
2510             '31' => 'Okayama',
2511             '32' => 'Osaka',
2512             '33' => 'Saga',
2513             '34' => 'Saitama',
2514             '35' => 'Shiga',
2515             '36' => 'Shimane',
2516             '37' => 'Shizuoka',
2517             '38' => 'Tochigi',
2518             '39' => 'Tokushima',
2519             '40' => 'Tokyo',
2520             '41' => 'Tottori',
2521             '42' => 'Toyama',
2522             '43' => 'Wakayama',
2523             '44' => 'Yamagata',
2524             '45' => 'Yamaguchi',
2525             '46' => 'Yamanashi',
2526             '47' => 'Okinawa'
2527             },
2528             'KE' => {
2529             '01' => 'Central',
2530             '02' => 'Coast',
2531             '03' => 'Eastern',
2532             '05' => 'Nairobi Area',
2533             '06' => 'North-Eastern',
2534             '07' => 'Nyanza',
2535             '08' => 'Rift Valley',
2536             '09' => 'Western'
2537             },
2538             'KG' => {
2539             '01' => 'Bishkek',
2540             '02' => 'Chuy',
2541             '03' => 'Jalal-Abad',
2542             '04' => 'Naryn',
2543             '05' => 'Osh',
2544             '06' => 'Talas',
2545             '07' => 'Ysyk-Kol',
2546             '08' => 'Osh',
2547             '09' => 'Batken'
2548             },
2549             'KH' => {
2550             '01' => 'Batdambang',
2551             '02' => 'Kampong Cham',
2552             '03' => 'Kampong Chhnang',
2553             '04' => 'Kampong Speu',
2554             '05' => 'Kampong Thum',
2555             '06' => 'Kampot',
2556             '07' => 'Kandal',
2557             '08' => 'Koh Kong',
2558             '09' => 'Kracheh',
2559             '10' => 'Mondulkiri',
2560             '11' => 'Phnum Penh',
2561             '12' => 'Pursat',
2562             '13' => 'Preah Vihear',
2563             '14' => 'Prey Veng',
2564             '15' => 'Ratanakiri Kiri',
2565             '16' => 'Siem Reap',
2566             '17' => 'Stung Treng',
2567             '18' => 'Svay Rieng',
2568             '19' => 'Takeo',
2569             '22' => 'Phnum Penh',
2570             '25' => 'Banteay Meanchey',
2571             '28' => 'Preah Seihanu',
2572             '29' => 'Batdambang',
2573             '30' => 'Pailin'
2574             },
2575             'KI' => {
2576             '01' => 'Gilbert Islands',
2577             '02' => 'Line Islands',
2578             '03' => 'Phoenix Islands'
2579             },
2580             'KM' => {
2581             '01' => 'Anjouan',
2582             '02' => 'Grande Comore',
2583             '03' => 'Moheli'
2584             },
2585             'KN' => {
2586             '01' => 'Christ Church Nichola Town',
2587             '02' => 'Saint Anne Sandy Point',
2588             '03' => 'Saint George Basseterre',
2589             '04' => 'Saint George Gingerland',
2590             '05' => 'Saint James Windward',
2591             '06' => 'Saint John Capisterre',
2592             '07' => 'Saint John Figtree',
2593             '08' => 'Saint Mary Cayon',
2594             '09' => 'Saint Paul Capisterre',
2595             '10' => 'Saint Paul Charlestown',
2596             '11' => 'Saint Peter Basseterre',
2597             '12' => 'Saint Thomas Lowland',
2598             '13' => 'Saint Thomas Middle Island',
2599             '15' => 'Trinity Palmetto Point'
2600             },
2601             'KP' => {
2602             '01' => 'Chagang-do',
2603             '03' => 'Hamgyong-namdo',
2604             '06' => 'Hwanghae-namdo',
2605             '07' => 'Hwanghae-bukto',
2606             '08' => 'Kaesong-si',
2607             '09' => 'Kangwon-do',
2608             '11' => 'P\'yongan-bukto',
2609             '12' => 'P\'yongyang-si',
2610             '13' => 'Yanggang-do',
2611             '14' => 'Namp\'o-si',
2612             '15' => 'P\'yongan-namdo',
2613             '17' => 'Hamgyong-bukto',
2614             '18' => 'Najin Sonbong-si'
2615             },
2616             'KR' => {
2617             '01' => 'Cheju-do',
2618             '03' => 'Cholla-bukto',
2619             '05' => 'Ch\'ungch\'ong-bukto',
2620             '06' => 'Kangwon-do',
2621             '10' => 'Pusan-jikhalsi',
2622             '11' => 'Seoul-t\'ukpyolsi',
2623             '12' => 'Inch\'on-jikhalsi',
2624             '13' => 'Kyonggi-do',
2625             '14' => 'Kyongsang-bukto',
2626             '15' => 'Taegu-jikhalsi',
2627             '16' => 'Cholla-namdo',
2628             '17' => 'Ch\'ungch\'ong-namdo',
2629             '18' => 'Kwangju-jikhalsi',
2630             '19' => 'Taejon-jikhalsi',
2631             '20' => 'Kyongsang-namdo',
2632             '21' => 'Ulsan-gwangyoksi'
2633             },
2634             'KW' => {
2635             '01' => 'Al Ahmadi',
2636             '02' => 'Al Kuwayt',
2637             '05' => 'Al Jahra',
2638             '07' => 'Al Farwaniyah',
2639             '08' => 'Hawalli',
2640             '09' => 'Mubarak al Kabir'
2641             },
2642             'KY' => {
2643             '01' => 'Creek',
2644             '02' => 'Eastern',
2645             '03' => 'Midland',
2646             '04' => 'South Town',
2647             '05' => 'Spot Bay',
2648             '06' => 'Stake Bay',
2649             '07' => 'West End',
2650             '08' => 'Western'
2651             },
2652             'KZ' => {
2653             '01' => 'Almaty',
2654             '02' => 'Almaty City',
2655             '03' => 'Aqmola',
2656             '04' => 'Aqtobe',
2657             '05' => 'Astana',
2658             '06' => 'Atyrau',
2659             '07' => 'West Kazakhstan',
2660             '08' => 'Bayqonyr',
2661             '09' => 'Mangghystau',
2662             '10' => 'South Kazakhstan',
2663             '11' => 'Pavlodar',
2664             '12' => 'Qaraghandy',
2665             '13' => 'Qostanay',
2666             '14' => 'Qyzylorda',
2667             '15' => 'East Kazakhstan',
2668             '16' => 'North Kazakhstan',
2669             '17' => 'Zhambyl'
2670             },
2671             'LA' => {
2672             '01' => 'Attapu',
2673             '02' => 'Champasak',
2674             '03' => 'Houaphan',
2675             '04' => 'Khammouan',
2676             '05' => 'Louang Namtha',
2677             '07' => 'Oudomxai',
2678             '08' => 'Phongsali',
2679             '09' => 'Saravan',
2680             '10' => 'Savannakhet',
2681             '11' => 'Vientiane',
2682             '13' => 'Xaignabouri',
2683             '14' => 'Xiangkhoang',
2684             '17' => 'Louangphrabang'
2685             },
2686             'LB' => {
2687             '01' => 'Beqaa',
2688             '02' => 'Al Janub',
2689             '03' => 'Liban-Nord',
2690             '04' => 'Beyrouth',
2691             '05' => 'Mont-Liban',
2692             '06' => 'Liban-Sud',
2693             '07' => 'Nabatiye',
2694             '08' => 'Beqaa',
2695             '09' => 'Liban-Nord',
2696             '10' => 'Aakk,r',
2697             '11' => 'Baalbek-Hermel'
2698             },
2699             'LC' => {
2700             '01' => 'Anse-la-Raye',
2701             '02' => 'Dauphin',
2702             '03' => 'Castries',
2703             '04' => 'Choiseul',
2704             '05' => 'Dennery',
2705             '06' => 'Gros-Islet',
2706             '07' => 'Laborie',
2707             '08' => 'Micoud',
2708             '09' => 'Soufriere',
2709             '10' => 'Vieux-Fort',
2710             '11' => 'Praslin'
2711             },
2712             'LI' => {
2713             '01' => 'Balzers',
2714             '02' => 'Eschen',
2715             '03' => 'Gamprin',
2716             '04' => 'Mauren',
2717             '05' => 'Planken',
2718             '06' => 'Ruggell',
2719             '07' => 'Schaan',
2720             '08' => 'Schellenberg',
2721             '09' => 'Triesen',
2722             '10' => 'Triesenberg',
2723             '11' => 'Vaduz',
2724             '21' => 'Gbarpolu',
2725             '22' => 'River Gee'
2726             },
2727             'LK' => {
2728             '29' => 'Central',
2729             '30' => 'North Central',
2730             '32' => 'North Western',
2731             '33' => 'Sabaragamuwa',
2732             '34' => 'Southern',
2733             '35' => 'Uva',
2734             '36' => 'Western',
2735             '37' => 'Eastern',
2736             '38' => 'Northern'
2737             },
2738             'LR' => {
2739             '01' => 'Bong',
2740             '04' => 'Grand Cape Mount',
2741             '05' => 'Lofa',
2742             '06' => 'Maryland',
2743             '07' => 'Monrovia',
2744             '09' => 'Nimba',
2745             '10' => 'Sino',
2746             '11' => 'Grand Bassa',
2747             '12' => 'Grand Cape Mount',
2748             '13' => 'Maryland',
2749             '14' => 'Montserrado',
2750             '17' => 'Margibi',
2751             '18' => 'River Cess',
2752             '19' => 'Grand Gedeh',
2753             '20' => 'Lofa',
2754             '21' => 'Gbarpolu',
2755             '22' => 'River Gee'
2756             },
2757             'LS' => {
2758             '10' => 'Berea',
2759             '11' => 'Butha-Buthe',
2760             '12' => 'Leribe',
2761             '13' => 'Mafeteng',
2762             '14' => 'Maseru',
2763             '15' => 'Mohales Hoek',
2764             '16' => 'Mokhotlong',
2765             '17' => 'Qachas Nek',
2766             '18' => 'Quthing',
2767             '19' => 'Thaba-Tseka'
2768             },
2769             'LT' => {
2770             '56' => 'Alytaus Apskritis',
2771             '57' => 'Kauno Apskritis',
2772             '58' => 'Klaipedos Apskritis',
2773             '59' => 'Marijampoles Apskritis',
2774             '60' => 'Panevezio Apskritis',
2775             '61' => 'Siauliu Apskritis',
2776             '62' => 'Taurages Apskritis',
2777             '63' => 'Telsiu Apskritis',
2778             '64' => 'Utenos Apskritis',
2779             '65' => 'Vilniaus Apskritis'
2780             },
2781             'LU' => {
2782             '01' => 'Diekirch',
2783             '02' => 'Grevenmacher',
2784             '03' => 'Luxembourg'
2785             },
2786             'LV' => {
2787             '01' => 'Aizkraukles',
2788             '02' => 'Aluksnes',
2789             '03' => 'Balvu',
2790             '04' => 'Bauskas',
2791             '05' => 'Cesu',
2792             '06' => 'Daugavpils',
2793             '07' => 'Daugavpils',
2794             '08' => 'Dobeles',
2795             '09' => 'Gulbenes',
2796             '10' => 'Jekabpils',
2797             '11' => 'Jelgava',
2798             '12' => 'Jelgavas',
2799             '13' => 'Jurmala',
2800             '14' => 'Kraslavas',
2801             '15' => 'Kuldigas',
2802             '16' => 'Liepaja',
2803             '17' => 'Liepajas',
2804             '18' => 'Limbazu',
2805             '19' => 'Ludzas',
2806             '20' => 'Madonas',
2807             '21' => 'Ogres',
2808             '22' => 'Preilu',
2809             '23' => 'Rezekne',
2810             '24' => 'Rezeknes',
2811             '25' => 'Riga',
2812             '26' => 'Rigas',
2813             '27' => 'Saldus',
2814             '28' => 'Talsu',
2815             '29' => 'Tukuma',
2816             '30' => 'Valkas',
2817             '31' => 'Valmieras',
2818             '32' => 'Ventspils',
2819             '33' => 'Ventspils'
2820             },
2821             'LY' => {
2822             '03' => 'Al Aziziyah',
2823             '05' => 'Al Jufrah',
2824             '08' => 'Al Kufrah',
2825             '13' => 'Ash Shati\'',
2826             '30' => 'Murzuq',
2827             '34' => 'Sabha',
2828             '41' => 'Tarhunah',
2829             '42' => 'Tubruq',
2830             '45' => 'Zlitan',
2831             '47' => 'Ajdabiya',
2832             '48' => 'Al Fatih',
2833             '49' => 'Al Jabal al Akhdar',
2834             '50' => 'Al Khums',
2835             '51' => 'An Nuqat al Khams',
2836             '52' => 'Awbari',
2837             '53' => 'Az Zawiyah',
2838             '54' => 'Banghazi',
2839             '55' => 'Darnah',
2840             '56' => 'Ghadamis',
2841             '57' => 'Gharyan',
2842             '58' => 'Misratah',
2843             '59' => 'Sawfajjin',
2844             '60' => 'Surt',
2845             '61' => 'Tarabulus',
2846             '62' => 'Yafran'
2847             },
2848             'MA' => {
2849             '45' => 'Grand Casablanca',
2850             '46' => 'Fes-Boulemane',
2851             '47' => 'Marrakech-Tensift-Al Haouz',
2852             '48' => 'Meknes-Tafilalet',
2853             '49' => 'Rabat-Sale-Zemmour-Zaer',
2854             '50' => 'Chaouia-Ouardigha',
2855             '51' => 'Doukkala-Abda',
2856             '52' => 'Gharb-Chrarda-Beni Hssen',
2857             '53' => 'Guelmim-Es Smara',
2858             '54' => 'Oriental',
2859             '55' => 'Souss-Massa-Dr,a',
2860             '56' => 'Tadla-Azilal',
2861             '57' => 'Tanger-Tetouan',
2862             '58' => 'Taza-Al Hoceima-Taounate',
2863             '59' => 'La,youne-Boujdour-Sakia El Hamra'
2864             },
2865             'MC' => {
2866             '01' => 'La Condamine',
2867             '02' => 'Monaco',
2868             '03' => 'Monte-Carlo'
2869             },
2870             'MD' => {
2871             '51' => 'Gagauzia',
2872             '57' => 'Chisinau',
2873             '58' => 'Stinga Nistrului',
2874             '59' => 'Anenii Noi',
2875             '60' => 'Balti',
2876             '61' => 'Basarabeasca',
2877             '62' => 'Bender',
2878             '63' => 'Briceni',
2879             '64' => 'Cahul',
2880             '65' => 'Cantemir',
2881             '66' => 'Calarasi',
2882             '67' => 'Causeni',
2883             '68' => 'Cimislia',
2884             '69' => 'Criuleni',
2885             '70' => 'Donduseni',
2886             '71' => 'Drochia',
2887             '72' => 'Dubasari',
2888             '73' => 'Edinet',
2889             '74' => 'Falesti',
2890             '75' => 'Floresti',
2891             '76' => 'Glodeni',
2892             '77' => 'Hincesti',
2893             '78' => 'Ialoveni',
2894             '79' => 'Leova',
2895             '80' => 'Nisporeni',
2896             '81' => 'Ocnita',
2897             '82' => 'Orhei',
2898             '83' => 'Rezina',
2899             '84' => 'Riscani',
2900             '85' => 'Singerei',
2901             '86' => 'Soldanesti',
2902             '87' => 'Soroca',
2903             '88' => 'Stefan-Voda',
2904             '89' => 'Straseni',
2905             '90' => 'Taraclia',
2906             '91' => 'Telenesti',
2907             '92' => 'Ungheni'
2908             },
2909             'MG' => {
2910             '01' => 'Antsiranana',
2911             '02' => 'Fianarantsoa',
2912             '03' => 'Mahajanga',
2913             '04' => 'Toamasina',
2914             '05' => 'Antananarivo',
2915             '06' => 'Toliara'
2916             },
2917             'MK' => {
2918             '01' => 'Aracinovo',
2919             '02' => 'Bac',
2920             '03' => 'Belcista',
2921             '04' => 'Berovo',
2922             '05' => 'Bistrica',
2923             '06' => 'Bitola',
2924             '07' => 'Blatec',
2925             '08' => 'Bogdanci',
2926             '09' => 'Bogomila',
2927             '10' => 'Bogovinje',
2928             '11' => 'Bosilovo',
2929             '12' => 'Brvenica',
2930             '13' => 'Cair',
2931             '14' => 'Capari',
2932             '15' => 'Caska',
2933             '16' => 'Cegrane',
2934             '17' => 'Centar',
2935             '18' => 'Centar Zupa',
2936             '19' => 'Cesinovo',
2937             '20' => 'Cucer-Sandevo',
2938             '21' => 'Debar',
2939             '22' => 'Delcevo',
2940             '23' => 'Delogozdi',
2941             '24' => 'Demir Hisar',
2942             '25' => 'Demir Kapija',
2943             '26' => 'Dobrusevo',
2944             '27' => 'Dolna Banjica',
2945             '28' => 'Dolneni',
2946             '29' => 'Dorce Petrov',
2947             '30' => 'Drugovo',
2948             '31' => 'Dzepciste',
2949             '32' => 'Gazi Baba',
2950             '33' => 'Gevgelija',
2951             '34' => 'Gostivar',
2952             '35' => 'Gradsko',
2953             '36' => 'Ilinden',
2954             '37' => 'Izvor',
2955             '38' => 'Jegunovce',
2956             '39' => 'Kamenjane',
2957             '40' => 'Karbinci',
2958             '41' => 'Karpos',
2959             '42' => 'Kavadarci',
2960             '43' => 'Kicevo',
2961             '44' => 'Kisela Voda',
2962             '45' => 'Klecevce',
2963             '46' => 'Kocani',
2964             '47' => 'Konce',
2965             '48' => 'Kondovo',
2966             '49' => 'Konopiste',
2967             '50' => 'Kosel',
2968             '51' => 'Kratovo',
2969             '52' => 'Kriva Palanka',
2970             '53' => 'Krivogastani',
2971             '54' => 'Krusevo',
2972             '55' => 'Kuklis',
2973             '56' => 'Kukurecani',
2974             '57' => 'Kumanovo',
2975             '58' => 'Labunista',
2976             '59' => 'Lipkovo',
2977             '60' => 'Lozovo',
2978             '61' => 'Lukovo',
2979             '62' => 'Makedonska Kamenica',
2980             '63' => 'Makedonski Brod',
2981             '64' => 'Mavrovi Anovi',
2982             '65' => 'Meseista',
2983             '66' => 'Miravci',
2984             '67' => 'Mogila',
2985             '68' => 'Murtino',
2986             '69' => 'Negotino',
2987             '70' => 'Negotino-Polosko',
2988             '71' => 'Novaci',
2989             '72' => 'Novo Selo',
2990             '73' => 'Oblesevo',
2991             '74' => 'Ohrid',
2992             '75' => 'Orasac',
2993             '76' => 'Orizari',
2994             '77' => 'Oslomej',
2995             '78' => 'Pehcevo',
2996             '79' => 'Petrovec',
2997             '80' => 'Plasnica',
2998             '81' => 'Podares',
2999             '82' => 'Prilep',
3000             '83' => 'Probistip',
3001             '84' => 'Radovis',
3002             '85' => 'Rankovce',
3003             '86' => 'Resen',
3004             '87' => 'Rosoman',
3005             '88' => 'Rostusa',
3006             '89' => 'Samokov',
3007             '90' => 'Saraj',
3008             '91' => 'Sipkovica',
3009             '92' => 'Sopiste',
3010             '93' => 'Sopotnica',
3011             '94' => 'Srbinovo',
3012             '95' => 'Staravina',
3013             '96' => 'Star Dojran',
3014             '97' => 'Staro Nagoricane',
3015             '98' => 'Stip',
3016             '99' => 'Struga',
3017             'A1' => 'Strumica',
3018             'A2' => 'Studenicani',
3019             'A3' => 'Suto Orizari',
3020             'A4' => 'Sveti Nikole',
3021             'A5' => 'Tearce',
3022             'A6' => 'Tetovo',
3023             'A7' => 'Topolcani',
3024             'A8' => 'Valandovo',
3025             'A9' => 'Vasilevo',
3026             'B1' => 'Veles',
3027             'B2' => 'Velesta',
3028             'B3' => 'Vevcani',
3029             'B4' => 'Vinica',
3030             'B5' => 'Vitoliste',
3031             'B6' => 'Vranestica',
3032             'B7' => 'Vrapciste',
3033             'B8' => 'Vratnica',
3034             'B9' => 'Vrutok',
3035             'C1' => 'Zajas',
3036             'C2' => 'Zelenikovo',
3037             'C3' => 'Zelino',
3038             'C4' => 'Zitose',
3039             'C5' => 'Zletovo',
3040             'C6' => 'Zrnovci',
3041             'C8' => 'Cair',
3042             'C9' => 'Caska',
3043             'D2' => 'Debar',
3044             'D3' => 'Demir Hisar',
3045             'D4' => 'Gostivar',
3046             'D6' => 'Kavadarci',
3047             'D7' => 'Kumanovo',
3048             'D8' => 'Makedonski Brod',
3049             'E2' => 'Ohrid',
3050             'E3' => 'Prilep',
3051             'E5' => 'Dojran',
3052             'E6' => 'Struga',
3053             'E7' => 'Strumica',
3054             'E8' => 'Tetovo',
3055             'E9' => 'Valandovo',
3056             'F1' => 'Veles',
3057             'F2' => 'Aerodrom'
3058             },
3059             'ML' => {
3060             '01' => 'Bamako',
3061             '03' => 'Kayes',
3062             '04' => 'Mopti',
3063             '05' => 'Segou',
3064             '06' => 'Sikasso',
3065             '07' => 'Koulikoro',
3066             '08' => 'Tombouctou',
3067             '09' => 'Gao',
3068             '10' => 'Kidal'
3069             },
3070             'MM' => {
3071             '01' => 'Rakhine State',
3072             '02' => 'Chin State',
3073             '03' => 'Irrawaddy',
3074             '04' => 'Kachin State',
3075             '05' => 'Karan State',
3076             '06' => 'Kayah State',
3077             '07' => 'Magwe',
3078             '08' => 'Mandalay',
3079             '09' => 'Pegu',
3080             '10' => 'Sagaing',
3081             '11' => 'Shan State',
3082             '12' => 'Tenasserim',
3083             '13' => 'Mon State',
3084             '14' => 'Rangoon',
3085             '17' => 'Yangon'
3086             },
3087             'MN' => {
3088             '01' => 'Arhangay',
3089             '02' => 'Bayanhongor',
3090             '03' => 'Bayan-Olgiy',
3091             '05' => 'Darhan',
3092             '06' => 'Dornod',
3093             '07' => 'Dornogovi',
3094             '08' => 'Dundgovi',
3095             '09' => 'Dzavhan',
3096             '10' => 'Govi-Altay',
3097             '11' => 'Hentiy',
3098             '12' => 'Hovd',
3099             '13' => 'Hovsgol',
3100             '14' => 'Omnogovi',
3101             '15' => 'Ovorhangay',
3102             '16' => 'Selenge',
3103             '17' => 'Suhbaatar',
3104             '18' => 'Tov',
3105             '19' => 'Uvs',
3106             '20' => 'Ulaanbaatar',
3107             '21' => 'Bulgan',
3108             '22' => 'Erdenet',
3109             '23' => 'Darhan-Uul',
3110             '24' => 'Govisumber',
3111             '25' => 'Orhon'
3112             },
3113             'MO' => {
3114             '01' => 'Ilhas',
3115             '02' => 'Macau'
3116             },
3117             'MR' => {
3118             '01' => 'Hodh Ech Chargui',
3119             '02' => 'Hodh El Gharbi',
3120             '03' => 'Assaba',
3121             '04' => 'Gorgol',
3122             '05' => 'Brakna',
3123             '06' => 'Trarza',
3124             '07' => 'Adrar',
3125             '08' => 'Dakhlet Nouadhibou',
3126             '09' => 'Tagant',
3127             '10' => 'Guidimaka',
3128             '11' => 'Tiris Zemmour',
3129             '12' => 'Inchiri'
3130             },
3131             'MS' => {
3132             '01' => 'Saint Anthony',
3133             '02' => 'Saint Georges',
3134             '03' => 'Saint Peter'
3135             },
3136             'MU' => {
3137             '12' => 'Black River',
3138             '13' => 'Flacq',
3139             '14' => 'Grand Port',
3140             '15' => 'Moka',
3141             '16' => 'Pamplemousses',
3142             '17' => 'Plaines Wilhems',
3143             '18' => 'Port Louis',
3144             '19' => 'Riviere du Rempart',
3145             '20' => 'Savanne',
3146             '21' => 'Agalega Islands',
3147             '22' => 'Cargados Carajos',
3148             '23' => 'Rodrigues'
3149             },
3150             'MV' => {
3151             '01' => 'Seenu',
3152             '05' => 'Laamu',
3153             '30' => 'Alifu',
3154             '31' => 'Baa',
3155             '32' => 'Dhaalu',
3156             '33' => 'Faafu ',
3157             '34' => 'Gaafu Alifu',
3158             '35' => 'Gaafu Dhaalu',
3159             '36' => 'Haa Alifu',
3160             '37' => 'Haa Dhaalu',
3161             '38' => 'Kaafu',
3162             '39' => 'Lhaviyani',
3163             '40' => 'Maale',
3164             '41' => 'Meemu',
3165             '42' => 'Gnaviyani',
3166             '43' => 'Noonu',
3167             '44' => 'Raa',
3168             '45' => 'Shaviyani',
3169             '46' => 'Thaa',
3170             '47' => 'Vaavu'
3171             },
3172             'MW' => {
3173             '02' => 'Chikwawa',
3174             '03' => 'Chiradzulu',
3175             '04' => 'Chitipa',
3176             '05' => 'Thyolo',
3177             '06' => 'Dedza',
3178             '07' => 'Dowa',
3179             '08' => 'Karonga',
3180             '09' => 'Kasungu',
3181             '11' => 'Lilongwe',
3182             '12' => 'Mangochi',
3183             '13' => 'Mchinji',
3184             '15' => 'Mzimba',
3185             '16' => 'Ntcheu',
3186             '17' => 'Nkhata Bay',
3187             '18' => 'Nkhotakota',
3188             '19' => 'Nsanje',
3189             '20' => 'Ntchisi',
3190             '21' => 'Rumphi',
3191             '22' => 'Salima',
3192             '23' => 'Zomba',
3193             '24' => 'Blantyre',
3194             '25' => 'Mwanza',
3195             '26' => 'Balaka',
3196             '27' => 'Likoma',
3197             '28' => 'Machinga',
3198             '29' => 'Mulanje',
3199             '30' => 'Phalombe'
3200             },
3201             'MX' => {
3202             '01' => 'Aguascalientes',
3203             '02' => 'Baja California',
3204             '03' => 'Baja California Sur',
3205             '04' => 'Campeche',
3206             '05' => 'Chiapas',
3207             '06' => 'Chihuahua',
3208             '07' => 'Coahuila de Zaragoza',
3209             '08' => 'Colima',
3210             '09' => 'Distrito Federal',
3211             '10' => 'Durango',
3212             '11' => 'Guanajuato',
3213             '12' => 'Guerrero',
3214             '13' => 'Hidalgo',
3215             '14' => 'Jalisco',
3216             '15' => 'Mexico',
3217             '16' => 'Michoacan de Ocampo',
3218             '17' => 'Morelos',
3219             '18' => 'Nayarit',
3220             '19' => 'Nuevo Leon',
3221             '20' => 'Oaxaca',
3222             '21' => 'Puebla',
3223             '22' => 'Queretaro de Arteaga',
3224             '23' => 'Quintana Roo',
3225             '24' => 'San Luis Potosi',
3226             '25' => 'Sinaloa',
3227             '26' => 'Sonora',
3228             '27' => 'Tabasco',
3229             '28' => 'Tamaulipas',
3230             '29' => 'Tlaxcala',
3231             '30' => 'Veracruz-Llave',
3232             '31' => 'Yucatan',
3233             '32' => 'Zacatecas'
3234             },
3235             'MY' => {
3236             '01' => 'Johor',
3237             '02' => 'Kedah',
3238             '03' => 'Kelantan',
3239             '04' => 'Melaka',
3240             '05' => 'Negeri Sembilan',
3241             '06' => 'Pahang',
3242             '07' => 'Perak',
3243             '08' => 'Perlis',
3244             '09' => 'Pulau Pinang',
3245             '11' => 'Sarawak',
3246             '12' => 'Selangor',
3247             '13' => 'Terengganu',
3248             '14' => 'Kuala Lumpur',
3249             '15' => 'Labuan',
3250             '16' => 'Sabah',
3251             '17' => 'Putrajaya'
3252             },
3253             'MZ' => {
3254             '01' => 'Cabo Delgado',
3255             '02' => 'Gaza',
3256             '03' => 'Inhambane',
3257             '04' => 'Maputo',
3258             '05' => 'Sofala',
3259             '06' => 'Nampula',
3260             '07' => 'Niassa',
3261             '08' => 'Tete',
3262             '09' => 'Zambezia',
3263             '10' => 'Manica',
3264             '11' => 'Maputo'
3265             },
3266             'NA' => {
3267             '01' => 'Bethanien',
3268             '02' => 'Caprivi Oos',
3269             '03' => 'Boesmanland',
3270             '04' => 'Gobabis',
3271             '05' => 'Grootfontein',
3272             '06' => 'Kaokoland',
3273             '07' => 'Karibib',
3274             '08' => 'Keetmanshoop',
3275             '09' => 'Luderitz',
3276             '10' => 'Maltahohe',
3277             '11' => 'Okahandja',
3278             '12' => 'Omaruru',
3279             '13' => 'Otjiwarongo',
3280             '14' => 'Outjo',
3281             '15' => 'Owambo',
3282             '16' => 'Rehoboth',
3283             '17' => 'Swakopmund',
3284             '18' => 'Tsumeb',
3285             '20' => 'Karasburg',
3286             '21' => 'Windhoek',
3287             '22' => 'Damaraland',
3288             '23' => 'Hereroland Oos',
3289             '24' => 'Hereroland Wes',
3290             '25' => 'Kavango',
3291             '26' => 'Mariental',
3292             '27' => 'Namaland',
3293             '28' => 'Caprivi',
3294             '29' => 'Erongo',
3295             '30' => 'Hardap',
3296             '31' => 'Karas',
3297             '32' => 'Kunene',
3298             '33' => 'Ohangwena',
3299             '34' => 'Okavango',
3300             '35' => 'Omaheke',
3301             '36' => 'Omusati',
3302             '37' => 'Oshana',
3303             '38' => 'Oshikoto',
3304             '39' => 'Otjozondjupa'
3305             },
3306             'NE' => {
3307             '01' => 'Agadez',
3308             '02' => 'Diffa',
3309             '03' => 'Dosso',
3310             '04' => 'Maradi',
3311             '05' => 'Niamey',
3312             '06' => 'Tahoua',
3313             '07' => 'Zinder',
3314             '08' => 'Niamey'
3315             },
3316             'NG' => {
3317             '05' => 'Lagos',
3318             '11' => 'Federal Capital Territory',
3319             '16' => 'Ogun',
3320             '21' => 'Akwa Ibom',
3321             '22' => 'Cross River',
3322             '23' => 'Kaduna',
3323             '24' => 'Katsina',
3324             '25' => 'Anambra',
3325             '26' => 'Benue',
3326             '27' => 'Borno',
3327             '28' => 'Imo',
3328             '29' => 'Kano',
3329             '30' => 'Kwara',
3330             '31' => 'Niger',
3331             '32' => 'Oyo',
3332             '35' => 'Adamawa',
3333             '36' => 'Delta',
3334             '37' => 'Edo',
3335             '39' => 'Jigawa',
3336             '40' => 'Kebbi',
3337             '41' => 'Kogi',
3338             '42' => 'Osun',
3339             '43' => 'Taraba',
3340             '44' => 'Yobe',
3341             '45' => 'Abia',
3342             '46' => 'Bauchi',
3343             '47' => 'Enugu',
3344             '48' => 'Ondo',
3345             '49' => 'Plateau',
3346             '50' => 'Rivers',
3347             '51' => 'Sokoto',
3348             '52' => 'Bayelsa',
3349             '53' => 'Ebonyi',
3350             '54' => 'Ekiti',
3351             '55' => 'Gombe',
3352             '56' => 'Nassarawa',
3353             '57' => 'Zamfara'
3354             },
3355             'NI' => {
3356             '01' => 'Boaco',
3357             '02' => 'Carazo',
3358             '03' => 'Chinandega',
3359             '04' => 'Chontales',
3360             '05' => 'Esteli',
3361             '06' => 'Granada',
3362             '07' => 'Jinotega',
3363             '08' => 'Leon',
3364             '09' => 'Madriz',
3365             '10' => 'Managua',
3366             '11' => 'Masaya',
3367             '12' => 'Matagalpa',
3368             '13' => 'Nueva Segovia',
3369             '14' => 'Rio San Juan',
3370             '15' => 'Rivas',
3371             '16' => 'Zelaya',
3372             '17' => 'Autonoma Atlantico Norte',
3373             '18' => 'Region Autonoma Atlantico Sur'
3374             },
3375             'NL' => {
3376             '01' => 'Drenthe',
3377             '02' => 'Friesland',
3378             '03' => 'Gelderland',
3379             '04' => 'Groningen',
3380             '05' => 'Limburg',
3381             '06' => 'Noord-Brabant',
3382             '07' => 'Noord-Holland',
3383             '09' => 'Utrecht',
3384             '10' => 'Zeeland',
3385             '11' => 'Zuid-Holland',
3386             '15' => 'Overijssel',
3387             '16' => 'Flevoland'
3388             },
3389             'NO' => {
3390             '01' => 'Akershus',
3391             '02' => 'Aust-Agder',
3392             '04' => 'Buskerud',
3393             '05' => 'Finnmark',
3394             '06' => 'Hedmark',
3395             '07' => 'Hordaland',
3396             '08' => 'More og Romsdal',
3397             '09' => 'Nordland',
3398             '10' => 'Nord-Trondelag',
3399             '11' => 'Oppland',
3400             '12' => 'Oslo',
3401             '13' => 'Ostfold',
3402             '14' => 'Rogaland',
3403             '15' => 'Sogn og Fjordane',
3404             '16' => 'Sor-Trondelag',
3405             '17' => 'Telemark',
3406             '18' => 'Troms',
3407             '19' => 'Vest-Agder',
3408             '20' => 'Vestfold'
3409             },
3410             'NP' => {
3411             '01' => 'Bagmati',
3412             '02' => 'Bheri',
3413             '03' => 'Dhawalagiri',
3414             '04' => 'Gandaki',
3415             '05' => 'Janakpur',
3416             '06' => 'Karnali',
3417             '07' => 'Kosi',
3418             '08' => 'Lumbini',
3419             '09' => 'Mahakali',
3420             '10' => 'Mechi',
3421             '11' => 'Narayani',
3422             '12' => 'Rapti',
3423             '13' => 'Sagarmatha',
3424             '14' => 'Seti'
3425             },
3426             'NR' => {
3427             '01' => 'Aiwo',
3428             '02' => 'Anabar',
3429             '03' => 'Anetan',
3430             '04' => 'Anibare',
3431             '05' => 'Baiti',
3432             '06' => 'Boe',
3433             '07' => 'Buada',
3434             '08' => 'Denigomodu',
3435             '09' => 'Ewa',
3436             '10' => 'Ijuw',
3437             '11' => 'Meneng',
3438             '12' => 'Nibok',
3439             '13' => 'Uaboe',
3440             '14' => 'Yaren'
3441             },
3442             'NZ' => {
3443             '10' => 'Chatham Islands',
3444             'E7' => 'Auckland',
3445             'E8' => 'Bay of Plenty',
3446             'E9' => 'Canterbury',
3447             'F1' => 'Gisborne',
3448             'F2' => 'Hawke\'s Bay',
3449             'F3' => 'Manawatu-Wanganui',
3450             'F4' => 'Marlborough',
3451             'F5' => 'Nelson',
3452             'F6' => 'Northland',
3453             'F7' => 'Otago',
3454             'F8' => 'Southland',
3455             'F9' => 'Taranaki',
3456             'G1' => 'Waikato',
3457             'G2' => 'Wellington',
3458             'G3' => 'West Coast'
3459             },
3460             'OM' => {
3461             '01' => 'Ad Dakhiliyah',
3462             '02' => 'Al Batinah',
3463             '03' => 'Al Wusta',
3464             '04' => 'Ash Sharqiyah',
3465             '05' => 'Az Zahirah',
3466             '06' => 'Masqat',
3467             '07' => 'Musandam',
3468             '08' => 'Zufar'
3469             },
3470             'PA' => {
3471             '01' => 'Bocas del Toro',
3472             '02' => 'Chiriqui',
3473             '03' => 'Cocle',
3474             '04' => 'Colon',
3475             '05' => 'Darien',
3476             '06' => 'Herrera',
3477             '07' => 'Los Santos',
3478             '08' => 'Panama',
3479             '09' => 'San Blas',
3480             '10' => 'Veraguas'
3481             },
3482             'PE' => {
3483             '01' => 'Amazonas',
3484             '02' => 'Ancash',
3485             '03' => 'Apurimac',
3486             '04' => 'Arequipa',
3487             '05' => 'Ayacucho',
3488             '06' => 'Cajamarca',
3489             '07' => 'Callao',
3490             '08' => 'Cusco',
3491             '09' => 'Huancavelica',
3492             '10' => 'Huanuco',
3493             '11' => 'Ica',
3494             '12' => 'Junin',
3495             '13' => 'La Libertad',
3496             '14' => 'Lambayeque',
3497             '15' => 'Lima',
3498             '16' => 'Loreto',
3499             '17' => 'Madre de Dios',
3500             '18' => 'Moquegua',
3501             '19' => 'Pasco',
3502             '20' => 'Piura',
3503             '21' => 'Puno',
3504             '22' => 'San Martin',
3505             '23' => 'Tacna',
3506             '24' => 'Tumbes',
3507             '25' => 'Ucayali'
3508             },
3509             'PG' => {
3510             '01' => 'Central',
3511             '02' => 'Gulf',
3512             '03' => 'Milne Bay',
3513             '04' => 'Northern',
3514             '05' => 'Southern Highlands',
3515             '06' => 'Western',
3516             '07' => 'North Solomons',
3517             '08' => 'Chimbu',
3518             '09' => 'Eastern Highlands',
3519             '10' => 'East New Britain',
3520             '11' => 'East Sepik',
3521             '12' => 'Madang',
3522             '13' => 'Manus',
3523             '14' => 'Morobe',
3524             '15' => 'New Ireland',
3525             '16' => 'Western Highlands',
3526             '17' => 'West New Britain',
3527             '18' => 'Sandaun',
3528             '19' => 'Enga',
3529             '20' => 'National Capital'
3530             },
3531             'PH' => {
3532             '01' => 'Abra',
3533             '02' => 'Agusan del Norte',
3534             '03' => 'Agusan del Sur',
3535             '04' => 'Aklan',
3536             '05' => 'Albay',
3537             '06' => 'Antique',
3538             '07' => 'Bataan',
3539             '08' => 'Batanes',
3540             '09' => 'Batangas',
3541             '10' => 'Benguet',
3542             '11' => 'Bohol',
3543             '12' => 'Bukidnon',
3544             '13' => 'Bulacan',
3545             '14' => 'Cagayan',
3546             '15' => 'Camarines Norte',
3547             '16' => 'Camarines Sur',
3548             '17' => 'Camiguin',
3549             '18' => 'Capiz',
3550             '19' => 'Catanduanes',
3551             '20' => 'Cavite',
3552             '21' => 'Cebu',
3553             '22' => 'Basilan',
3554             '23' => 'Eastern Samar',
3555             '24' => 'Davao',
3556             '25' => 'Davao del Sur',
3557             '26' => 'Davao Oriental',
3558             '27' => 'Ifugao',
3559             '28' => 'Ilocos Norte',
3560             '29' => 'Ilocos Sur',
3561             '30' => 'Iloilo',
3562             '31' => 'Isabela',
3563             '32' => 'Kalinga-Apayao',
3564             '33' => 'Laguna',
3565             '34' => 'Lanao del Norte',
3566             '35' => 'Lanao del Sur',
3567             '36' => 'La Union',
3568             '37' => 'Leyte',
3569             '38' => 'Marinduque',
3570             '39' => 'Masbate',
3571             '40' => 'Mindoro Occidental',
3572             '41' => 'Mindoro Oriental',
3573             '42' => 'Misamis Occidental',
3574             '43' => 'Misamis Oriental',
3575             '44' => 'Mountain',
3576             '45' => 'Negros Occidental',
3577             '46' => 'Negros Oriental',
3578             '47' => 'Nueva Ecija',
3579             '48' => 'Nueva Vizcaya',
3580             '49' => 'Palawan',
3581             '50' => 'Pampanga',
3582             '51' => 'Pangasinan',
3583             '53' => 'Rizal',
3584             '54' => 'Romblon',
3585             '55' => 'Samar',
3586             '56' => 'Maguindanao',
3587             '57' => 'North Cotabato',
3588             '58' => 'Sorsogon',
3589             '59' => 'Southern Leyte',
3590             '60' => 'Sulu',
3591             '61' => 'Surigao del Norte',
3592             '62' => 'Surigao del Sur',
3593             '63' => 'Tarlac',
3594             '64' => 'Zambales',
3595             '65' => 'Zamboanga del Norte',
3596             '66' => 'Zamboanga del Sur',
3597             '67' => 'Northern Samar',
3598             '68' => 'Quirino',
3599             '69' => 'Siquijor',
3600             '70' => 'South Cotabato',
3601             '71' => 'Sultan Kudarat',
3602             '72' => 'Tawitawi',
3603             'A1' => 'Angeles',
3604             'A2' => 'Bacolod',
3605             'A3' => 'Bago',
3606             'A4' => 'Baguio',
3607             'A5' => 'Bais',
3608             'A6' => 'Basilan City',
3609             'A7' => 'Batangas City',
3610             'A8' => 'Butuan',
3611             'A9' => 'Cabanatuan',
3612             'B1' => 'Cadiz',
3613             'B2' => 'Cagayan de Oro',
3614             'B3' => 'Calbayog',
3615             'B4' => 'Caloocan',
3616             'B5' => 'Canlaon',
3617             'B6' => 'Cavite City',
3618             'B7' => 'Cebu City',
3619             'B8' => 'Cotabato',
3620             'B9' => 'Dagupan',
3621             'C1' => 'Danao',
3622             'C2' => 'Dapitan',
3623             'C3' => 'Davao City',
3624             'C4' => 'Dipolog',
3625             'C5' => 'Dumaguete',
3626             'C6' => 'General Santos',
3627             'C7' => 'Gingoog',
3628             'C8' => 'Iligan',
3629             'C9' => 'Iloilo City',
3630             'D1' => 'Iriga',
3631             'D2' => 'La Carlota',
3632             'D3' => 'Laoag',
3633             'D4' => 'Lapu-Lapu',
3634             'D5' => 'Legaspi',
3635             'D6' => 'Lipa',
3636             'D7' => 'Lucena',
3637             'D8' => 'Mandaue',
3638             'D9' => 'Manila',
3639             'E1' => 'Marawi',
3640             'E2' => 'Naga',
3641             'E3' => 'Olongapo',
3642             'E4' => 'Ormoc',
3643             'E5' => 'Oroquieta',
3644             'E6' => 'Ozamis',
3645             'E7' => 'Pagadian',
3646             'E8' => 'Palayan',
3647             'E9' => 'Pasay',
3648             'F1' => 'Puerto Princesa',
3649             'F2' => 'Quezon City',
3650             'F3' => 'Roxas',
3651             'F4' => 'San Carlos',
3652             'F5' => 'San Carlos',
3653             'F6' => 'San Jose',
3654             'F7' => 'San Pablo',
3655             'F8' => 'Silay',
3656             'F9' => 'Surigao',
3657             'G1' => 'Tacloban',
3658             'G2' => 'Tagaytay',
3659             'G3' => 'Tagbilaran',
3660             'G4' => 'Tangub',
3661             'G5' => 'Toledo',
3662             'G6' => 'Trece Martires',
3663             'G7' => 'Zamboanga',
3664             'G8' => 'Aurora',
3665             'H2' => 'Quezon',
3666             'H3' => 'Negros Occidental',
3667             'H9' => 'Biliran',
3668             'I6' => 'Compostela Valley',
3669             'I7' => 'Davao del Norte',
3670             'J3' => 'Guimaras',
3671             'J4' => 'Himamaylan',
3672             'J7' => 'Kalinga',
3673             'K1' => 'Las Pinas',
3674             'K5' => 'Malabon',
3675             'K6' => 'Malaybalay',
3676             'L4' => 'Muntinlupa',
3677             'L5' => 'Navotas',
3678             'L7' => 'Paranaque',
3679             'L9' => 'Passi',
3680             'M5' => 'San Jose del Monte',
3681             'M6' => 'San Juan',
3682             'M8' => 'Santiago',
3683             'M9' => 'Sarangani',
3684             'N1' => 'Sipalay',
3685             'N3' => 'Surigao del Norte',
3686             'P1' => 'Zambales',
3687             'P2' => 'Zamboanga'
3688             },
3689             'PK' => {
3690             '01' => 'Federally Administered Tribal Areas',
3691             '02' => 'Balochistan',
3692             '03' => 'North-West Frontier',
3693             '04' => 'Punjab',
3694             '05' => 'Sindh',
3695             '06' => 'Azad Kashmir',
3696             '07' => 'Northern Areas',
3697             '08' => 'Islamabad'
3698             },
3699             'PL' => {
3700             '72' => 'Dolnoslaskie',
3701             '73' => 'Kujawsko-Pomorskie',
3702             '74' => 'Lodzkie',
3703             '75' => 'Lubelskie',
3704             '76' => 'Lubuskie',
3705             '77' => 'Malopolskie',
3706             '78' => 'Mazowieckie',
3707             '79' => 'Opolskie',
3708             '80' => 'Podkarpackie',
3709             '81' => 'Podlaskie',
3710             '82' => 'Pomorskie',
3711             '83' => 'Slaskie',
3712             '84' => 'Swietokrzyskie',
3713             '85' => 'Warminsko-Mazurskie',
3714             '86' => 'Wielkopolskie',
3715             '87' => 'Zachodniopomorskie'
3716             },
3717             'PS' => {
3718             'GZ' => 'Gaza',
3719             'WE' => 'West Bank'
3720             },
3721             'PT' => {
3722             '02' => 'Aveiro',
3723             '03' => 'Beja',
3724             '04' => 'Braga',
3725             '05' => 'Braganca',
3726             '06' => 'Castelo Branco',
3727             '07' => 'Coimbra',
3728             '08' => 'Evora',
3729             '09' => 'Faro',
3730             '10' => 'Madeira',
3731             '11' => 'Guarda',
3732             '13' => 'Leiria',
3733             '14' => 'Lisboa',
3734             '16' => 'Portalegre',
3735             '17' => 'Porto',
3736             '18' => 'Santarem',
3737             '19' => 'Setubal',
3738             '20' => 'Viana do Castelo',
3739             '21' => 'Vila Real',
3740             '22' => 'Viseu',
3741             '23' => 'Azores'
3742             },
3743             'PY' => {
3744             '01' => 'Alto Parana',
3745             '02' => 'Amambay',
3746             '04' => 'Caaguazu',
3747             '05' => 'Caazapa',
3748             '06' => 'Central',
3749             '07' => 'Concepcion',
3750             '08' => 'Cordillera',
3751             '10' => 'Guaira',
3752             '11' => 'Itapua',
3753             '12' => 'Misiones',
3754             '13' => 'Neembucu',
3755             '15' => 'Paraguari',
3756             '16' => 'Presidente Hayes',
3757             '17' => 'San Pedro',
3758             '19' => 'Canindeyu',
3759             '22' => 'Asuncion',
3760             '23' => 'Alto Paraguay',
3761             '24' => 'Boqueron'
3762             },
3763             'QA' => {
3764             '01' => 'Ad Dawhah',
3765             '02' => 'Al Ghuwariyah',
3766             '03' => 'Al Jumaliyah',
3767             '04' => 'Al Khawr',
3768             '05' => 'Al Wakrah Municipality',
3769             '06' => 'Ar Rayyan',
3770             '08' => 'Madinat ach Shamal',
3771             '09' => 'Umm Salal',
3772             '10' => 'Al Wakrah',
3773             '11' => 'Jariyan al Batnah',
3774             '12' => 'Umm Sa\'id'
3775             },
3776             'RO' => {
3777             '01' => 'Alba',
3778             '02' => 'Arad',
3779             '03' => 'Arges',
3780             '04' => 'Bacau',
3781             '05' => 'Bihor',
3782             '06' => 'Bistrita-Nasaud',
3783             '07' => 'Botosani',
3784             '08' => 'Braila',
3785             '09' => 'Brasov',
3786             '10' => 'Bucuresti',
3787             '11' => 'Buzau',
3788             '12' => 'Caras-Severin',
3789             '13' => 'Cluj',
3790             '14' => 'Constanta',
3791             '15' => 'Covasna',
3792             '16' => 'Dambovita',
3793             '17' => 'Dolj',
3794             '18' => 'Galati',
3795             '19' => 'Gorj',
3796             '20' => 'Harghita',
3797             '21' => 'Hunedoara',
3798             '22' => 'Ialomita',
3799             '23' => 'Iasi',
3800             '25' => 'Maramures',
3801             '26' => 'Mehedinti',
3802             '27' => 'Mures',
3803             '28' => 'Neamt',
3804             '29' => 'Olt',
3805             '30' => 'Prahova',
3806             '31' => 'Salaj',
3807             '32' => 'Satu Mare',
3808             '33' => 'Sibiu',
3809             '34' => 'Suceava',
3810             '35' => 'Teleorman',
3811             '36' => 'Timis',
3812             '37' => 'Tulcea',
3813             '38' => 'Vaslui',
3814             '39' => 'Valcea',
3815             '40' => 'Vrancea',
3816             '41' => 'Calarasi',
3817             '42' => 'Giurgiu',
3818             '43' => 'Ilfov'
3819             },
3820             'RS' => {
3821             '01' => 'Kosovo',
3822             '02' => 'Vojvodina'
3823             },
3824             'RU' => {
3825             '01' => 'Adygeya, Republic of',
3826             '02' => 'Aginsky Buryatsky AO',
3827             '03' => 'Gorno-Altay',
3828             '04' => 'Altaisky krai',
3829             '05' => 'Amur',
3830             '06' => 'Arkhangel\'sk',
3831             '07' => 'Astrakhan\'',
3832             '08' => 'Bashkortostan',
3833             '09' => 'Belgorod',
3834             '10' => 'Bryansk',
3835             '11' => 'Buryat',
3836             '12' => 'Chechnya',
3837             '13' => 'Chelyabinsk',
3838             '14' => 'Chita',
3839             '15' => 'Chukot',
3840             '16' => 'Chuvashia',
3841             '17' => 'Dagestan',
3842             '18' => 'Evenk',
3843             '19' => 'Ingush',
3844             '20' => 'Irkutsk',
3845             '21' => 'Ivanovo',
3846             '22' => 'Kabardin-Balkar',
3847             '23' => 'Kaliningrad',
3848             '24' => 'Kalmyk',
3849             '25' => 'Kaluga',
3850             '26' => 'Kamchatka',
3851             '27' => 'Karachay-Cherkess',
3852             '28' => 'Karelia',
3853             '29' => 'Kemerovo',
3854             '30' => 'Khabarovsk',
3855             '31' => 'Khakass',
3856             '32' => 'Khanty-Mansiy',
3857             '33' => 'Kirov',
3858             '34' => 'Komi',
3859             '36' => 'Koryak',
3860             '37' => 'Kostroma',
3861             '38' => 'Krasnodar',
3862             '39' => 'Krasnoyarsk',
3863             '40' => 'Kurgan',
3864             '41' => 'Kursk',
3865             '42' => 'Leningrad',
3866             '43' => 'Lipetsk',
3867             '44' => 'Magadan',
3868             '45' => 'Mariy-El',
3869             '46' => 'Mordovia',
3870             '47' => 'Moskva',
3871             '48' => 'Moscow City',
3872             '49' => 'Murmansk',
3873             '50' => 'Nenets',
3874             '51' => 'Nizhegorod',
3875             '52' => 'Novgorod',
3876             '53' => 'Novosibirsk',
3877             '54' => 'Omsk',
3878             '55' => 'Orenburg',
3879             '56' => 'Orel',
3880             '57' => 'Penza',
3881             '58' => 'Perm\'',
3882             '59' => 'Primor\'ye',
3883             '60' => 'Pskov',
3884             '61' => 'Rostov',
3885             '62' => 'Ryazan\'',
3886             '63' => 'Sakha',
3887             '64' => 'Sakhalin',
3888             '65' => 'Samara',
3889             '66' => 'Saint Petersburg City',
3890             '67' => 'Saratov',
3891             '68' => 'North Ossetia',
3892             '69' => 'Smolensk',
3893             '70' => 'Stavropol\'',
3894             '71' => 'Sverdlovsk',
3895             '72' => 'Tambovskaya oblast',
3896             '73' => 'Tatarstan',
3897             '74' => 'Taymyr',
3898             '75' => 'Tomsk',
3899             '76' => 'Tula',
3900             '77' => 'Tver\'',
3901             '78' => 'Tyumen\'',
3902             '79' => 'Tuva',
3903             '80' => 'Udmurt',
3904             '81' => 'Ul\'yanovsk',
3905             '83' => 'Vladimir',
3906             '84' => 'Volgograd',
3907             '85' => 'Vologda',
3908             '86' => 'Voronezh',
3909             '87' => 'Yamal-Nenets',
3910             '88' => 'Yaroslavl\'',
3911             '89' => 'Yevrey',
3912             '90' => 'Permskiy Kray',
3913             '91' => 'Krasnoyarskiy Kray',
3914             '92' => 'Kamchatskiy Kray',
3915             '93' => 'Zabaykal\'skiy Kray'
3916             },
3917             'RW' => {
3918             '01' => 'Butare',
3919             '06' => 'Gitarama',
3920             '07' => 'Kibungo',
3921             '09' => 'Kigali',
3922             '11' => 'Est',
3923             '12' => 'Kigali',
3924             '13' => 'Nord',
3925             '14' => 'Ouest',
3926             '15' => 'Sud'
3927             },
3928             'SA' => {
3929             '02' => 'Al Bahah',
3930             '05' => 'Al Madinah',
3931             '06' => 'Ash Sharqiyah',
3932             '08' => 'Al Qasim',
3933             '10' => 'Ar Riyad',
3934             '11' => 'Asir Province',
3935             '13' => 'Ha\'il',
3936             '14' => 'Makkah',
3937             '15' => 'Al Hudud ash Shamaliyah',
3938             '16' => 'Najran',
3939             '17' => 'Jizan',
3940             '19' => 'Tabuk',
3941             '20' => 'Al Jawf'
3942             },
3943             'SB' => {
3944             '03' => 'Malaita',
3945             '06' => 'Guadalcanal',
3946             '07' => 'Isabel',
3947             '08' => 'Makira',
3948             '09' => 'Temotu',
3949             '10' => 'Central',
3950             '11' => 'Western',
3951             '12' => 'Choiseul',
3952             '13' => 'Rennell and Bellona'
3953             },
3954             'SC' => {
3955             '01' => 'Anse aux Pins',
3956             '02' => 'Anse Boileau',
3957             '03' => 'Anse Etoile',
3958             '04' => 'Anse Louis',
3959             '05' => 'Anse Royale',
3960             '06' => 'Baie Lazare',
3961             '07' => 'Baie Sainte Anne',
3962             '08' => 'Beau Vallon',
3963             '09' => 'Bel Air',
3964             '10' => 'Bel Ombre',
3965             '11' => 'Cascade',
3966             '12' => 'Glacis',
3967             '13' => 'Grand\' Anse',
3968             '14' => 'Grand\' Anse',
3969             '15' => 'La Digue',
3970             '16' => 'La Riviere Anglaise',
3971             '17' => 'Mont Buxton',
3972             '18' => 'Mont Fleuri',
3973             '19' => 'Plaisance',
3974             '20' => 'Pointe La Rue',
3975             '21' => 'Port Glaud',
3976             '22' => 'Saint Louis',
3977             '23' => 'Takamaka'
3978             },
3979             'SD' => {
3980             '27' => 'Al Wusta',
3981             '28' => 'Al Istiwa\'iyah',
3982             '29' => 'Al Khartum',
3983             '30' => 'Ash Shamaliyah',
3984             '31' => 'Ash Sharqiyah',
3985             '32' => 'Bahr al Ghazal',
3986             '33' => 'Darfur',
3987             '34' => 'Kurdufan',
3988             '35' => 'Upper Nile',
3989             '40' => 'Al Wahadah State',
3990             '44' => 'Central Equatoria State',
3991             '49' => 'Southern Darfur',
3992             '50' => 'Southern Kordofan',
3993             '52' => 'Kassala',
3994             '53' => 'River Nile',
3995             '55' => 'Northern Darfur'
3996             },
3997             'SE' => {
3998             '02' => 'Blekinge Lan',
3999             '03' => 'Gavleborgs Lan',
4000             '05' => 'Gotlands Lan',
4001             '06' => 'Hallands Lan',
4002             '07' => 'Jamtlands Lan',
4003             '08' => 'Jonkopings Lan',
4004             '09' => 'Kalmar Lan',
4005             '10' => 'Dalarnas Lan',
4006             '12' => 'Kronobergs Lan',
4007             '14' => 'Norrbottens Lan',
4008             '15' => 'Orebro Lan',
4009             '16' => 'Ostergotlands Lan',
4010             '18' => 'Sodermanlands Lan',
4011             '21' => 'Uppsala Lan',
4012             '22' => 'Varmlands Lan',
4013             '23' => 'Vasterbottens Lan',
4014             '24' => 'Vasternorrlands Lan',
4015             '25' => 'Vastmanlands Lan',
4016             '26' => 'Stockholms Lan',
4017             '27' => 'Skane Lan',
4018             '28' => 'Vastra Gotaland'
4019             },
4020             'SH' => {
4021             '01' => 'Ascension',
4022             '02' => 'Saint Helena',
4023             '03' => 'Tristan da Cunha'
4024             },
4025             'SI' => {
4026             '01' => 'Ajdovscina Commune',
4027             '02' => 'Beltinci Commune',
4028             '03' => 'Bled Commune',
4029             '04' => 'Bohinj Commune',
4030             '05' => 'Borovnica Commune',
4031             '06' => 'Bovec Commune',
4032             '07' => 'Brda Commune',
4033             '08' => 'Brezice Commune',
4034             '09' => 'Brezovica Commune',
4035             '11' => 'Celje Commune',
4036             '12' => 'Cerklje na Gorenjskem Commune',
4037             '13' => 'Cerknica Commune',
4038             '14' => 'Cerkno Commune',
4039             '15' => 'Crensovci Commune',
4040             '16' => 'Crna na Koroskem Commune',
4041             '17' => 'Crnomelj Commune',
4042             '19' => 'Divaca Commune',
4043             '20' => 'Dobrepolje Commune',
4044             '22' => 'Dol pri Ljubljani Commune',
4045             '24' => 'Dornava Commune',
4046             '25' => 'Dravograd Commune',
4047             '26' => 'Duplek Commune',
4048             '27' => 'Gorenja vas-Poljane Commune',
4049             '28' => 'Gorisnica Commune',
4050             '29' => 'Gornja Radgona Commune',
4051             '30' => 'Gornji Grad Commune',
4052             '31' => 'Gornji Petrovci Commune',
4053             '32' => 'Grosuplje Commune',
4054             '34' => 'Hrastnik Commune',
4055             '35' => 'Hrpelje-Kozina Commune',
4056             '36' => 'Idrija Commune',
4057             '37' => 'Ig Commune',
4058             '38' => 'Ilirska Bistrica Commune',
4059             '39' => 'Ivancna Gorica Commune',
4060             '40' => 'Izola-Isola Commune',
4061             '42' => 'Jursinci Commune',
4062             '44' => 'Kanal Commune',
4063             '45' => 'Kidricevo Commune',
4064             '46' => 'Kobarid Commune',
4065             '47' => 'Kobilje Commune',
4066             '49' => 'Komen Commune',
4067             '50' => 'Koper-Capodistria Urban Commune',
4068             '51' => 'Kozje Commune',
4069             '52' => 'Kranj Commune',
4070             '53' => 'Kranjska Gora Commune',
4071             '54' => 'Krsko Commune',
4072             '55' => 'Kungota Commune',
4073             '57' => 'Lasko Commune',
4074             '61' => 'Ljubljana Urban Commune',
4075             '62' => 'Ljubno Commune',
4076             '64' => 'Logatec Commune',
4077             '66' => 'Loski Potok Commune',
4078             '68' => 'Lukovica Commune',
4079             '71' => 'Medvode Commune',
4080             '72' => 'Menges Commune',
4081             '73' => 'Metlika Commune',
4082             '74' => 'Mezica Commune',
4083             '76' => 'Mislinja Commune',
4084             '77' => 'Moravce Commune',
4085             '78' => 'Moravske Toplice Commune',
4086             '79' => 'Mozirje Commune',
4087             '80' => 'Murska Sobota Urban Commune',
4088             '81' => 'Muta Commune',
4089             '82' => 'Naklo Commune',
4090             '83' => 'Nazarje Commune',
4091             '84' => 'Nova Gorica Urban Commune',
4092             '86' => 'Odranci Commune',
4093             '87' => 'Ormoz Commune',
4094             '88' => 'Osilnica Commune',
4095             '89' => 'Pesnica Commune',
4096             '91' => 'Pivka Commune',
4097             '92' => 'Podcetrtek Commune',
4098             '94' => 'Postojna Commune',
4099             '97' => 'Puconci Commune',
4100             '98' => 'Race-Fram Commune',
4101             '99' => 'Radece Commune',
4102             'A1' => 'Radenci Commune',
4103             'A2' => 'Radlje ob Dravi Commune',
4104             'A3' => 'Radovljica Commune',
4105             'A6' => 'Rogasovci Commune',
4106             'A7' => 'Rogaska Slatina Commune',
4107             'A8' => 'Rogatec Commune',
4108             'B1' => 'Semic Commune',
4109             'B2' => 'Sencur Commune',
4110             'B3' => 'Sentilj Commune',
4111             'B4' => 'Sentjernej Commune',
4112             'B6' => 'Sevnica Commune',
4113             'B7' => 'Sezana Commune',
4114             'B8' => 'Skocjan Commune',
4115             'B9' => 'Skofja Loka Commune',
4116             'C1' => 'Skofljica Commune',
4117             'C2' => 'Slovenj Gradec Urban Commune',
4118             'C4' => 'Slovenske Konjice Commune',
4119             'C5' => 'Smarje pri Jelsah Commune',
4120             'C6' => 'Smartno ob Paki Commune',
4121             'C7' => 'Sostanj Commune',
4122             'C8' => 'Starse Commune',
4123             'C9' => 'Store Commune',
4124             'D1' => 'Sveti Jurij Commune',
4125             'D2' => 'Tolmin Commune',
4126             'D3' => 'Trbovlje Commune',
4127             'D4' => 'Trebnje Commune',
4128             'D5' => 'Trzic Commune',
4129             'D6' => 'Turnisce Commune',
4130             'D7' => 'Velenje Urban Commune',
4131             'D8' => 'Velike Lasce Commune',
4132             'E1' => 'Vipava Commune',
4133             'E2' => 'Vitanje Commune',
4134             'E3' => 'Vodice Commune',
4135             'E5' => 'Vrhnika Commune',
4136             'E6' => 'Vuzenica Commune',
4137             'E7' => 'Zagorje ob Savi Commune',
4138             'E9' => 'Zavrc Commune',
4139             'F1' => 'Zelezniki Commune',
4140             'F2' => 'Ziri Commune',
4141             'F3' => 'Zrece Commune',
4142             'F4' => 'Benedikt Commune',
4143             'F5' => 'Bistrica ob Sotli Commune',
4144             'F6' => 'Bloke Commune',
4145             'F7' => 'Braslovce Commune',
4146             'F8' => 'Cankova Commune',
4147             'F9' => 'Cerkvenjak Commune',
4148             'G1' => 'Destrnik Commune',
4149             'G2' => 'Dobje Commune',
4150             'G3' => 'Dobrna Commune',
4151             'G4' => 'Dobrova-Horjul-Polhov Gradec Commune',
4152             'G5' => 'Dobrovnik-Dobronak Commune',
4153             'G6' => 'Dolenjske Toplice Commune',
4154             'G7' => 'Domzale Commune',
4155             'G8' => 'Grad Commune',
4156             'G9' => 'Hajdina Commune',
4157             'H1' => 'Hoce-Slivnica Commune',
4158             'H2' => 'Hodos-Hodos Commune',
4159             'H3' => 'Horjul Commune',
4160             'H4' => 'Jesenice Commune',
4161             'H5' => 'Jezersko Commune',
4162             'H6' => 'Kamnik Commune',
4163             'H7' => 'Kocevje Commune',
4164             'H8' => 'Komenda Commune',
4165             'H9' => 'Kostel Commune',
4166             'I1' => 'Krizevci Commune',
4167             'I2' => 'Kuzma Commune',
4168             'I3' => 'Lenart Commune',
4169             'I4' => 'Lendava-Lendva Commune',
4170             'I5' => 'Litija Commune',
4171             'I6' => 'Ljutomer Commune',
4172             'I7' => 'Loska Dolina Commune',
4173             'I8' => 'Lovrenc na Pohorju Commune',
4174             'I9' => 'Luce Commune',
4175             'J1' => 'Majsperk Commune',
4176             'J2' => 'Maribor Commune',
4177             'J3' => 'Markovci Commune',
4178             'J4' => 'Miklavz na Dravskem polju Commune',
4179             'J5' => 'Miren-Kostanjevica Commune',
4180             'J6' => 'Mirna Pec Commune',
4181             'J7' => 'Novo mesto Urban Commune',
4182             'J8' => 'Oplotnica Commune',
4183             'J9' => 'Piran-Pirano Commune',
4184             'K1' => 'Podlehnik Commune',
4185             'K2' => 'Podvelka Commune',
4186             'K3' => 'Polzela Commune',
4187             'K4' => 'Prebold Commune',
4188             'K5' => 'Preddvor Commune',
4189             'K6' => 'Prevalje Commune',
4190             'K7' => 'Ptuj Urban Commune',
4191             'K8' => 'Ravne na Koroskem Commune',
4192             'K9' => 'Razkrizje Commune',
4193             'L1' => 'Ribnica Commune',
4194             'L2' => 'Ribnica na Pohorju Commune',
4195             'L3' => 'Ruse Commune',
4196             'L4' => 'Salovci Commune',
4197             'L5' => 'Selnica ob Dravi Commune',
4198             'L6' => 'Sempeter-Vrtojba Commune',
4199             'L7' => 'Sentjur pri Celju Commune',
4200             'L8' => 'Slovenska Bistrica Commune',
4201             'L9' => 'Smartno pri Litiji Commune',
4202             'M1' => 'Sodrazica Commune',
4203             'M2' => 'Solcava Commune',
4204             'M3' => 'Sveta Ana Commune',
4205             'M4' => 'Sveti Andraz v Slovenskih goricah Commune',
4206             'M5' => 'Tabor Commune',
4207             'M6' => 'Tisina Commune',
4208             'M7' => 'Trnovska vas Commune',
4209             'M8' => 'Trzin Commune',
4210             'M9' => 'Velika Polana Commune',
4211             'N1' => 'Verzej Commune',
4212             'N2' => 'Videm Commune',
4213             'N3' => 'Vojnik Commune',
4214             'N4' => 'Vransko Commune',
4215             'N5' => 'Zalec Commune',
4216             'N6' => 'Zetale Commune',
4217             'N7' => 'Zirovnica Commune',
4218             'N8' => 'Zuzemberk Commune',
4219             'N9' => 'Apace Commune',
4220             'O1' => 'Cirkulane Commune',
4221             'O2' => 'Gorje',
4222             'O3' => 'Kostanjevica na Krki',
4223             'O4' => 'Log-Dragomer',
4224             'O5' => 'Makole',
4225             'O6' => 'Mirna',
4226             'O7' => 'Mokronog-Trebelno',
4227             'O8' => 'Poljcane',
4228             'O9' => 'Recica ob Savinji',
4229             'P1' => 'Rence-Vogrsko',
4230             'P2' => 'Sentrupert',
4231             'P3' => 'Smarjesk Toplice',
4232             'P4' => 'Sredisce ob Dravi',
4233             'P5' => 'Straza',
4234             'P7' => 'Sveti Jurij v Slovenskih Goricah'
4235             },
4236             'SK' => {
4237             '01' => 'Banska Bystrica',
4238             '02' => 'Bratislava',
4239             '03' => 'Kosice',
4240             '04' => 'Nitra',
4241             '05' => 'Presov',
4242             '06' => 'Trencin',
4243             '07' => 'Trnava',
4244             '08' => 'Zilina'
4245             },
4246             'SL' => {
4247             '01' => 'Eastern',
4248             '02' => 'Northern',
4249             '03' => 'Southern',
4250             '04' => 'Western Area'
4251             },
4252             'SM' => {
4253             '01' => 'Acquaviva',
4254             '02' => 'Chiesanuova',
4255             '03' => 'Domagnano',
4256             '04' => 'Faetano',
4257             '05' => 'Fiorentino',
4258             '06' => 'Borgo Maggiore',
4259             '07' => 'San Marino',
4260             '08' => 'Monte Giardino',
4261             '09' => 'Serravalle'
4262             },
4263             'SN' => {
4264             '01' => 'Dakar',
4265             '03' => 'Diourbel',
4266             '05' => 'Tambacounda',
4267             '07' => 'Thies',
4268             '09' => 'Fatick',
4269             '10' => 'Kaolack',
4270             '11' => 'Kolda',
4271             '12' => 'Ziguinchor',
4272             '13' => 'Louga',
4273             '14' => 'Saint-Louis',
4274             '15' => 'Matam'
4275             },
4276             'SO' => {
4277             '01' => 'Bakool',
4278             '02' => 'Banaadir',
4279             '03' => 'Bari',
4280             '04' => 'Bay',
4281             '05' => 'Galguduud',
4282             '06' => 'Gedo',
4283             '07' => 'Hiiraan',
4284             '08' => 'Jubbada Dhexe',
4285             '09' => 'Jubbada Hoose',
4286             '10' => 'Mudug',
4287             '11' => 'Nugaal',
4288             '12' => 'Sanaag',
4289             '13' => 'Shabeellaha Dhexe',
4290             '14' => 'Shabeellaha Hoose',
4291             '16' => 'Woqooyi Galbeed',
4292             '18' => 'Nugaal',
4293             '19' => 'Togdheer',
4294             '20' => 'Woqooyi Galbeed',
4295             '21' => 'Awdal',
4296             '22' => 'Sool'
4297             },
4298             'SR' => {
4299             '10' => 'Brokopondo',
4300             '11' => 'Commewijne',
4301             '12' => 'Coronie',
4302             '13' => 'Marowijne',
4303             '14' => 'Nickerie',
4304             '15' => 'Para',
4305             '16' => 'Paramaribo',
4306             '17' => 'Saramacca',
4307             '18' => 'Sipaliwini',
4308             '19' => 'Wanica'
4309             },
4310             'SS' => {
4311             '01' => 'Central Equatoria',
4312             '02' => 'Eastern Equatoria',
4313             '03' => 'Jonglei',
4314             '04' => 'Lakes',
4315             '05' => 'Northern Bahr el Ghazal',
4316             '06' => 'Unity',
4317             '07' => 'Upper Nile',
4318             '08' => 'Warrap',
4319             '09' => 'Western Bahr el Ghazal',
4320             '10' => 'Western Equatoria'
4321             },
4322             'ST' => {
4323             '01' => 'Principe',
4324             '02' => 'Sao Tome'
4325             },
4326             'SV' => {
4327             '01' => 'Ahuachapan',
4328             '02' => 'Cabanas',
4329             '03' => 'Chalatenango',
4330             '04' => 'Cuscatlan',
4331             '05' => 'La Libertad',
4332             '06' => 'La Paz',
4333             '07' => 'La Union',
4334             '08' => 'Morazan',
4335             '09' => 'San Miguel',
4336             '10' => 'San Salvador',
4337             '11' => 'Santa Ana',
4338             '12' => 'San Vicente',
4339             '13' => 'Sonsonate',
4340             '14' => 'Usulutan'
4341             },
4342             'SY' => {
4343             '01' => 'Al Hasakah',
4344             '02' => 'Al Ladhiqiyah',
4345             '03' => 'Al Qunaytirah',
4346             '04' => 'Ar Raqqah',
4347             '05' => 'As Suwayda\'',
4348             '06' => 'Dar',
4349             '07' => 'Dayr az Zawr',
4350             '08' => 'Rif Dimashq',
4351             '09' => 'Halab',
4352             '10' => 'Hamah',
4353             '11' => 'Hims',
4354             '12' => 'Idlib',
4355             '13' => 'Dimashq',
4356             '14' => 'Tartus'
4357             },
4358             'SZ' => {
4359             '01' => 'Hhohho',
4360             '02' => 'Lubombo',
4361             '03' => 'Manzini',
4362             '04' => 'Shiselweni',
4363             '05' => 'Praslin'
4364             },
4365             'TD' => {
4366             '01' => 'Batha',
4367             '02' => 'Biltine',
4368             '03' => 'Borkou-Ennedi-Tibesti',
4369             '04' => 'Chari-Baguirmi',
4370             '05' => 'Guera',
4371             '06' => 'Kanem',
4372             '07' => 'Lac',
4373             '08' => 'Logone Occidental',
4374             '09' => 'Logone Oriental',
4375             '10' => 'Mayo-Kebbi',
4376             '11' => 'Moyen-Chari',
4377             '12' => 'Ouaddai',
4378             '13' => 'Salamat',
4379             '14' => 'Tandjile'
4380             },
4381             'TG' => {
4382             '22' => 'Centrale',
4383             '23' => 'Kara',
4384             '24' => 'Maritime',
4385             '25' => 'Plateaux',
4386             '26' => 'Savanes'
4387             },
4388             'TH' => {
4389             '01' => 'Mae Hong Son',
4390             '02' => 'Chiang Mai',
4391             '03' => 'Chiang Rai',
4392             '04' => 'Nan',
4393             '05' => 'Lamphun',
4394             '06' => 'Lampang',
4395             '07' => 'Phrae',
4396             '08' => 'Tak',
4397             '09' => 'Sukhothai',
4398             '10' => 'Uttaradit',
4399             '11' => 'Kamphaeng Phet',
4400             '12' => 'Phitsanulok',
4401             '13' => 'Phichit',
4402             '14' => 'Phetchabun',
4403             '15' => 'Uthai Thani',
4404             '16' => 'Nakhon Sawan',
4405             '17' => 'Nong Khai',
4406             '18' => 'Loei',
4407             '20' => 'Sakon Nakhon',
4408             '21' => 'Nakhon Phanom',
4409             '22' => 'Khon Kaen',
4410             '23' => 'Kalasin',
4411             '24' => 'Maha Sarakham',
4412             '25' => 'Roi Et',
4413             '26' => 'Chaiyaphum',
4414             '27' => 'Nakhon Ratchasima',
4415             '28' => 'Buriram',
4416             '29' => 'Surin',
4417             '30' => 'Sisaket',
4418             '31' => 'Narathiwat',
4419             '32' => 'Chai Nat',
4420             '33' => 'Sing Buri',
4421             '34' => 'Lop Buri',
4422             '35' => 'Ang Thong',
4423             '36' => 'Phra Nakhon Si Ayutthaya',
4424             '37' => 'Saraburi',
4425             '38' => 'Nonthaburi',
4426             '39' => 'Pathum Thani',
4427             '40' => 'Krung Thep',
4428             '41' => 'Phayao',
4429             '42' => 'Samut Prakan',
4430             '43' => 'Nakhon Nayok',
4431             '44' => 'Chachoengsao',
4432             '45' => 'Prachin Buri',
4433             '46' => 'Chon Buri',
4434             '47' => 'Rayong',
4435             '48' => 'Chanthaburi',
4436             '49' => 'Trat',
4437             '50' => 'Kanchanaburi',
4438             '51' => 'Suphan Buri',
4439             '52' => 'Ratchaburi',
4440             '53' => 'Nakhon Pathom',
4441             '54' => 'Samut Songkhram',
4442             '55' => 'Samut Sakhon',
4443             '56' => 'Phetchaburi',
4444             '57' => 'Prachuap Khiri Khan',
4445             '58' => 'Chumphon',
4446             '59' => 'Ranong',
4447             '60' => 'Surat Thani',
4448             '61' => 'Phangnga',
4449             '62' => 'Phuket',
4450             '63' => 'Krabi',
4451             '64' => 'Nakhon Si Thammarat',
4452             '65' => 'Trang',
4453             '66' => 'Phatthalung',
4454             '67' => 'Satun',
4455             '68' => 'Songkhla',
4456             '69' => 'Pattani',
4457             '70' => 'Yala',
4458             '71' => 'Ubon Ratchathani',
4459             '72' => 'Yasothon',
4460             '73' => 'Nakhon Phanom',
4461             '74' => 'Prachin Buri',
4462             '75' => 'Ubon Ratchathani',
4463             '76' => 'Udon Thani',
4464             '77' => 'Amnat Charoen',
4465             '78' => 'Mukdahan',
4466             '79' => 'Nong Bua Lamphu',
4467             '80' => 'Sa Kaeo',
4468             '81' => 'Bueng Kan'
4469             },
4470             'TJ' => {
4471             '01' => 'Kuhistoni Badakhshon',
4472             '02' => 'Khatlon',
4473             '03' => 'Sughd',
4474             '04' => 'Dushanbe',
4475             '05' => 'Nohiyahoi Tobei Jumhuri'
4476             },
4477             'TL' => { '06' => 'Dili' },
4478             'TM' => {
4479             '01' => 'Ahal',
4480             '02' => 'Balkan',
4481             '03' => 'Dashoguz',
4482             '04' => 'Lebap',
4483             '05' => 'Mary'
4484             },
4485             'TN' => {
4486             '02' => 'Kasserine',
4487             '03' => 'Kairouan',
4488             '06' => 'Jendouba',
4489             '10' => 'Qafsah',
4490             '14' => 'El Kef',
4491             '15' => 'Al Mahdia',
4492             '16' => 'Al Munastir',
4493             '17' => 'Bajah',
4494             '18' => 'Bizerte',
4495             '19' => 'Nabeul',
4496             '22' => 'Siliana',
4497             '23' => 'Sousse',
4498             '27' => 'Ben Arous',
4499             '28' => 'Madanin',
4500             '29' => 'Gabes',
4501             '31' => 'Kebili',
4502             '32' => 'Sfax',
4503             '33' => 'Sidi Bou Zid',
4504             '34' => 'Tataouine',
4505             '35' => 'Tozeur',
4506             '36' => 'Tunis',
4507             '37' => 'Zaghouan',
4508             '38' => 'Aiana',
4509             '39' => 'Manouba'
4510             },
4511             'TO' => {
4512             '01' => 'Ha',
4513             '02' => 'Tongatapu',
4514             '03' => 'Vava'
4515             },
4516             'TR' => {
4517             '02' => 'Adiyaman',
4518             '03' => 'Afyonkarahisar',
4519             '04' => 'Agri',
4520             '05' => 'Amasya',
4521             '07' => 'Antalya',
4522             '08' => 'Artvin',
4523             '09' => 'Aydin',
4524             '10' => 'Balikesir',
4525             '11' => 'Bilecik',
4526             '12' => 'Bingol',
4527             '13' => 'Bitlis',
4528             '14' => 'Bolu',
4529             '15' => 'Burdur',
4530             '16' => 'Bursa',
4531             '17' => 'Canakkale',
4532             '19' => 'Corum',
4533             '20' => 'Denizli',
4534             '21' => 'Diyarbakir',
4535             '22' => 'Edirne',
4536             '23' => 'Elazig',
4537             '24' => 'Erzincan',
4538             '25' => 'Erzurum',
4539             '26' => 'Eskisehir',
4540             '28' => 'Giresun',
4541             '31' => 'Hatay',
4542             '32' => 'Mersin',
4543             '33' => 'Isparta',
4544             '34' => 'Istanbul',
4545             '35' => 'Izmir',
4546             '37' => 'Kastamonu',
4547             '38' => 'Kayseri',
4548             '39' => 'Kirklareli',
4549             '40' => 'Kirsehir',
4550             '41' => 'Kocaeli',
4551             '43' => 'Kutahya',
4552             '44' => 'Malatya',
4553             '45' => 'Manisa',
4554             '46' => 'Kahramanmaras',
4555             '48' => 'Mugla',
4556             '49' => 'Mus',
4557             '50' => 'Nevsehir',
4558             '52' => 'Ordu',
4559             '53' => 'Rize',
4560             '54' => 'Sakarya',
4561             '55' => 'Samsun',
4562             '57' => 'Sinop',
4563             '58' => 'Sivas',
4564             '59' => 'Tekirdag',
4565             '60' => 'Tokat',
4566             '61' => 'Trabzon',
4567             '62' => 'Tunceli',
4568             '63' => 'Sanliurfa',
4569             '64' => 'Usak',
4570             '65' => 'Van',
4571             '66' => 'Yozgat',
4572             '68' => 'Ankara',
4573             '69' => 'Gumushane',
4574             '70' => 'Hakkari',
4575             '71' => 'Konya',
4576             '72' => 'Mardin',
4577             '73' => 'Nigde',
4578             '74' => 'Siirt',
4579             '75' => 'Aksaray',
4580             '76' => 'Batman',
4581             '77' => 'Bayburt',
4582             '78' => 'Karaman',
4583             '79' => 'Kirikkale',
4584             '80' => 'Sirnak',
4585             '81' => 'Adana',
4586             '82' => 'Cankiri',
4587             '83' => 'Gaziantep',
4588             '84' => 'Kars',
4589             '85' => 'Zonguldak',
4590             '86' => 'Ardahan',
4591             '87' => 'Bartin',
4592             '88' => 'Igdir',
4593             '89' => 'Karabuk',
4594             '90' => 'Kilis',
4595             '91' => 'Osmaniye',
4596             '92' => 'Yalova',
4597             '93' => 'Duzce'
4598             },
4599             'TT' => {
4600             '01' => 'Arima',
4601             '02' => 'Caroni',
4602             '03' => 'Mayaro',
4603             '04' => 'Nariva',
4604             '05' => 'Port-of-Spain',
4605             '06' => 'Saint Andrew',
4606             '07' => 'Saint David',
4607             '08' => 'Saint George',
4608             '09' => 'Saint Patrick',
4609             '10' => 'San Fernando',
4610             '11' => 'Tobago',
4611             '12' => 'Victoria'
4612             },
4613             'TW' => {
4614             '01' => 'Fu-chien',
4615             '02' => 'Kao-hsiung',
4616             '03' => 'T\'ai-pei',
4617             '04' => 'T\'ai-wan'
4618             },
4619             'TZ' => {
4620             '02' => 'Pwani',
4621             '03' => 'Dodoma',
4622             '04' => 'Iringa',
4623             '05' => 'Kigoma',
4624             '06' => 'Kilimanjaro',
4625             '07' => 'Lindi',
4626             '08' => 'Mara',
4627             '09' => 'Mbeya',
4628             '10' => 'Morogoro',
4629             '11' => 'Mtwara',
4630             '12' => 'Mwanza',
4631             '13' => 'Pemba North',
4632             '14' => 'Ruvuma',
4633             '15' => 'Shinyanga',
4634             '16' => 'Singida',
4635             '17' => 'Tabora',
4636             '18' => 'Tanga',
4637             '19' => 'Kagera',
4638             '20' => 'Pemba South',
4639             '21' => 'Zanzibar Central',
4640             '22' => 'Zanzibar North',
4641             '23' => 'Dar es Salaam',
4642             '24' => 'Rukwa',
4643             '25' => 'Zanzibar Urban',
4644             '26' => 'Arusha',
4645             '27' => 'Manyara'
4646             },
4647             'UA' => {
4648             '01' => 'Cherkas\'ka Oblast\'',
4649             '02' => 'Chernihivs\'ka Oblast\'',
4650             '03' => 'Chernivets\'ka Oblast\'',
4651             '04' => 'Dnipropetrovs\'ka Oblast\'',
4652             '05' => 'Donets\'ka Oblast\'',
4653             '06' => 'Ivano-Frankivs\'ka Oblast\'',
4654             '07' => 'Kharkivs\'ka Oblast\'',
4655             '08' => 'Khersons\'ka Oblast\'',
4656             '09' => 'Khmel\'nyts\'ka Oblast\'',
4657             '10' => 'Kirovohrads\'ka Oblast\'',
4658             '11' => 'Krym',
4659             '12' => 'Kyyiv',
4660             '13' => 'Kyyivs\'ka Oblast\'',
4661             '14' => 'Luhans\'ka Oblast\'',
4662             '15' => 'L\'vivs\'ka Oblast\'',
4663             '16' => 'Mykolayivs\'ka Oblast\'',
4664             '17' => 'Odes\'ka Oblast\'',
4665             '18' => 'Poltavs\'ka Oblast\'',
4666             '19' => 'Rivnens\'ka Oblast\'',
4667             '20' => 'Sevastopol\'',
4668             '21' => 'Sums\'ka Oblast\'',
4669             '22' => 'Ternopil\'s\'ka Oblast\'',
4670             '23' => 'Vinnyts\'ka Oblast\'',
4671             '24' => 'Volyns\'ka Oblast\'',
4672             '25' => 'Zakarpats\'ka Oblast\'',
4673             '26' => 'Zaporiz\'ka Oblast\'',
4674             '27' => 'Zhytomyrs\'ka Oblast\''
4675             },
4676             'UG' => {
4677             '26' => 'Apac',
4678             '28' => 'Bundibugyo',
4679             '29' => 'Bushenyi',
4680             '30' => 'Gulu',
4681             '31' => 'Hoima',
4682             '33' => 'Jinja',
4683             '36' => 'Kalangala',
4684             '37' => 'Kampala',
4685             '38' => 'Kamuli',
4686             '39' => 'Kapchorwa',
4687             '40' => 'Kasese',
4688             '41' => 'Kibale',
4689             '42' => 'Kiboga',
4690             '43' => 'Kisoro',
4691             '45' => 'Kotido',
4692             '46' => 'Kumi',
4693             '47' => 'Lira',
4694             '50' => 'Masindi',
4695             '52' => 'Mbarara',
4696             '56' => 'Mubende',
4697             '58' => 'Nebbi',
4698             '59' => 'Ntungamo',
4699             '60' => 'Pallisa',
4700             '61' => 'Rakai',
4701             '65' => 'Adjumani',
4702             '66' => 'Bugiri',
4703             '67' => 'Busia',
4704             '69' => 'Katakwi',
4705             '70' => 'Luwero',
4706             '71' => 'Masaka',
4707             '72' => 'Moyo',
4708             '73' => 'Nakasongola',
4709             '74' => 'Sembabule',
4710             '76' => 'Tororo',
4711             '77' => 'Arua',
4712             '78' => 'Iganga',
4713             '79' => 'Kabarole',
4714             '80' => 'Kaberamaido',
4715             '81' => 'Kamwenge',
4716             '82' => 'Kanungu',
4717             '83' => 'Kayunga',
4718             '84' => 'Kitgum',
4719             '85' => 'Kyenjojo',
4720             '86' => 'Mayuge',
4721             '87' => 'Mbale',
4722             '88' => 'Moroto',
4723             '89' => 'Mpigi',
4724             '90' => 'Mukono',
4725             '91' => 'Nakapiripirit',
4726             '92' => 'Pader',
4727             '93' => 'Rukungiri',
4728             '94' => 'Sironko',
4729             '95' => 'Soroti',
4730             '96' => 'Wakiso',
4731             '97' => 'Yumbe'
4732             },
4733             'US' => {
4734             'AA' => 'Armed Forces Americas',
4735             'AE' => 'Armed Forces Europe, Middle East, & Canada',
4736             'AK' => 'Alaska',
4737             'AL' => 'Alabama',
4738             'AP' => 'Armed Forces Pacific',
4739             'AR' => 'Arkansas',
4740             'AS' => 'American Samoa',
4741             'AZ' => 'Arizona',
4742             'CA' => 'California',
4743             'CO' => 'Colorado',
4744             'CT' => 'Connecticut',
4745             'DC' => 'District of Columbia',
4746             'DE' => 'Delaware',
4747             'FL' => 'Florida',
4748             'FM' => 'Federated States of Micronesia',
4749             'GA' => 'Georgia',
4750             'GU' => 'Guam',
4751             'HI' => 'Hawaii',
4752             'IA' => 'Iowa',
4753             'ID' => 'Idaho',
4754             'IL' => 'Illinois',
4755             'IN' => 'Indiana',
4756             'KS' => 'Kansas',
4757             'KY' => 'Kentucky',
4758             'LA' => 'Louisiana',
4759             'MA' => 'Massachusetts',
4760             'MD' => 'Maryland',
4761             'ME' => 'Maine',
4762             'MH' => 'Marshall Islands',
4763             'MI' => 'Michigan',
4764             'MN' => 'Minnesota',
4765             'MO' => 'Missouri',
4766             'MP' => 'Northern Mariana Islands',
4767             'MS' => 'Mississippi',
4768             'MT' => 'Montana',
4769             'NC' => 'North Carolina',
4770             'ND' => 'North Dakota',
4771             'NE' => 'Nebraska',
4772             'NH' => 'New Hampshire',
4773             'NJ' => 'New Jersey',
4774             'NM' => 'New Mexico',
4775             'NV' => 'Nevada',
4776             'NY' => 'New York',
4777             'OH' => 'Ohio',
4778             'OK' => 'Oklahoma',
4779             'OR' => 'Oregon',
4780             'PA' => 'Pennsylvania',
4781             'PW' => 'Palau',
4782             'RI' => 'Rhode Island',
4783             'SC' => 'South Carolina',
4784             'SD' => 'South Dakota',
4785             'TN' => 'Tennessee',
4786             'TX' => 'Texas',
4787             'UT' => 'Utah',
4788             'VA' => 'Virginia',
4789             'VI' => 'Virgin Islands',
4790             'VT' => 'Vermont',
4791             'WA' => 'Washington',
4792             'WI' => 'Wisconsin',
4793             'WV' => 'West Virginia',
4794             'WY' => 'Wyoming'
4795             },
4796             'UY' => {
4797             '01' => 'Artigas',
4798             '02' => 'Canelones',
4799             '03' => 'Cerro Largo',
4800             '04' => 'Colonia',
4801             '05' => 'Durazno',
4802             '06' => 'Flores',
4803             '07' => 'Florida',
4804             '08' => 'Lavalleja',
4805             '09' => 'Maldonado',
4806             '10' => 'Montevideo',
4807             '11' => 'Paysandu',
4808             '12' => 'Rio Negro',
4809             '13' => 'Rivera',
4810             '14' => 'Rocha',
4811             '15' => 'Salto',
4812             '16' => 'San Jose',
4813             '17' => 'Soriano',
4814             '18' => 'Tacuarembo',
4815             '19' => 'Treinta y Tres'
4816             },
4817             'UZ' => {
4818             '01' => 'Andijon',
4819             '02' => 'Bukhoro',
4820             '03' => 'Farghona',
4821             '04' => 'Jizzakh',
4822             '05' => 'Khorazm',
4823             '06' => 'Namangan',
4824             '07' => 'Nawoiy',
4825             '08' => 'Qashqadaryo',
4826             '09' => 'Qoraqalpoghiston',
4827             '10' => 'Samarqand',
4828             '11' => 'Sirdaryo',
4829             '12' => 'Surkhondaryo',
4830             '13' => 'Toshkent',
4831             '14' => 'Toshkent',
4832             '15' => 'Jizzax'
4833             },
4834             'VC' => {
4835             '01' => 'Charlotte',
4836             '02' => 'Saint Andrew',
4837             '03' => 'Saint David',
4838             '04' => 'Saint George',
4839             '05' => 'Saint Patrick',
4840             '06' => 'Grenadines'
4841             },
4842             'VE' => {
4843             '01' => 'Amazonas',
4844             '02' => 'Anzoategui',
4845             '03' => 'Apure',
4846             '04' => 'Aragua',
4847             '05' => 'Barinas',
4848             '06' => 'Bolivar',
4849             '07' => 'Carabobo',
4850             '08' => 'Cojedes',
4851             '09' => 'Delta Amacuro',
4852             '11' => 'Falcon',
4853             '12' => 'Guarico',
4854             '13' => 'Lara',
4855             '14' => 'Merida',
4856             '15' => 'Miranda',
4857             '16' => 'Monagas',
4858             '17' => 'Nueva Esparta',
4859             '18' => 'Portuguesa',
4860             '19' => 'Sucre',
4861             '20' => 'Tachira',
4862             '21' => 'Trujillo',
4863             '22' => 'Yaracuy',
4864             '23' => 'Zulia',
4865             '24' => 'Dependencias Federales',
4866             '25' => 'Distrito Federal',
4867             '26' => 'Vargas'
4868             },
4869             'VN' => {
4870             '01' => 'An Giang',
4871             '03' => 'Ben Tre',
4872             '05' => 'Cao Bang',
4873             '09' => 'Dong Thap',
4874             '13' => 'Hai Phong',
4875             '20' => 'Ho Chi Minh',
4876             '21' => 'Kien Giang',
4877             '23' => 'Lam Dong',
4878             '24' => 'Long An',
4879             '30' => 'Quang Ninh',
4880             '32' => 'Son La',
4881             '33' => 'Tay Ninh',
4882             '34' => 'Thanh Hoa',
4883             '35' => 'Thai Binh',
4884             '37' => 'Tien Giang',
4885             '39' => 'Lang Son',
4886             '43' => 'Dong Nai',
4887             '44' => 'Ha Noi',
4888             '45' => 'Ba Ria-Vung Tau',
4889             '46' => 'Binh Dinh',
4890             '47' => 'Binh Thuan',
4891             '49' => 'Gia Lai',
4892             '50' => 'Ha Giang',
4893             '52' => 'Ha Tinh',
4894             '53' => 'Hoa Binh',
4895             '54' => 'Khanh Hoa',
4896             '55' => 'Kon Tum',
4897             '58' => 'Nghe An',
4898             '59' => 'Ninh Binh',
4899             '60' => 'Ninh Thuan',
4900             '61' => 'Phu Yen',
4901             '62' => 'Quang Binh',
4902             '63' => 'Quang Ngai',
4903             '64' => 'Quang Tri',
4904             '65' => 'Soc Trang',
4905             '66' => 'Thua Thien-Hue',
4906             '67' => 'Tra Vinh',
4907             '68' => 'Tuyen Quang',
4908             '69' => 'Vinh Long',
4909             '70' => 'Yen Bai',
4910             '71' => 'Bac Giang',
4911             '72' => 'Bac Kan',
4912             '73' => 'Bac Lieu',
4913             '74' => 'Bac Ninh',
4914             '75' => 'Binh Duong',
4915             '76' => 'Binh Phuoc',
4916             '77' => 'Ca Mau',
4917             '78' => 'Da Nang',
4918             '79' => 'Hai Duong',
4919             '80' => 'Ha Nam',
4920             '81' => 'Hung Yen',
4921             '82' => 'Nam Dinh',
4922             '83' => 'Phu Tho',
4923             '84' => 'Quang Nam',
4924             '85' => 'Thai Nguyen',
4925             '86' => 'Vinh Phuc',
4926             '87' => 'Can Tho',
4927             '88' => 'Dac Lak',
4928             '89' => 'Lai Chau',
4929             '90' => 'Lao Cai',
4930             '91' => 'Dak Nong',
4931             '92' => 'Dien Bien',
4932             '93' => 'Hau Giang'
4933             },
4934             'VU' => {
4935             '05' => 'Ambrym',
4936             '06' => 'Aoba',
4937             '07' => 'Torba',
4938             '08' => 'Efate',
4939             '09' => 'Epi',
4940             '10' => 'Malakula',
4941             '11' => 'Paama',
4942             '12' => 'Pentecote',
4943             '13' => 'Sanma',
4944             '14' => 'Shepherd',
4945             '15' => 'Tafea',
4946             '16' => 'Malampa',
4947             '17' => 'Penama',
4948             '18' => 'Shefa'
4949             },
4950             'WS' => {
4951             '02' => 'Aiga-i-le-Tai',
4952             '03' => 'Atua',
4953             '04' => 'Fa',
4954             '05' => 'Gaga',
4955             '06' => 'Va',
4956             '07' => 'Gagaifomauga',
4957             '08' => 'Palauli',
4958             '09' => 'Satupa',
4959             '10' => 'Tuamasaga',
4960             '11' => 'Vaisigano'
4961             },
4962             'YE' => {
4963             '01' => 'Abyan',
4964             '02' => 'Adan',
4965             '03' => 'Al Mahrah',
4966             '04' => 'Hadramawt',
4967             '05' => 'Shabwah',
4968             '06' => 'Lahij',
4969             '07' => 'Al Bayda\'',
4970             '08' => 'Al Hudaydah',
4971             '09' => 'Al Jawf',
4972             '10' => 'Al Mahwit',
4973             '11' => 'Dhamar',
4974             '12' => 'Hajjah',
4975             '13' => 'Ibb',
4976             '14' => 'Ma\'rib',
4977             '15' => 'Sa\'dah',
4978             '16' => 'San\'a\'',
4979             '17' => 'Taizz',
4980             '18' => 'Ad Dali',
4981             '19' => 'Amran',
4982             '20' => 'Al Bayda\'',
4983             '21' => 'Al Jawf',
4984             '22' => 'Hajjah',
4985             '23' => 'Ibb',
4986             '24' => 'Lahij',
4987             '25' => 'Taizz'
4988             },
4989             'ZA' => {
4990             '01' => 'North-Western Province',
4991             '02' => 'KwaZulu-Natal',
4992             '03' => 'Free State',
4993             '05' => 'Eastern Cape',
4994             '06' => 'Gauteng',
4995             '07' => 'Mpumalanga',
4996             '08' => 'Northern Cape',
4997             '09' => 'Limpopo',
4998             '10' => 'North-West',
4999             '11' => 'Western Cape'
5000             },
5001             'ZM' => {
5002             '01' => 'Western',
5003             '02' => 'Central',
5004             '03' => 'Eastern',
5005             '04' => 'Luapula',
5006             '05' => 'Northern',
5007             '06' => 'North-Western',
5008             '07' => 'Southern',
5009             '08' => 'Copperbelt',
5010             '09' => 'Lusaka'
5011             },
5012             'ZW' => {
5013             '01' => 'Manicaland',
5014             '02' => 'Midlands',
5015             '03' => 'Mashonaland Central',
5016             '04' => 'Mashonaland East',
5017             '05' => 'Mashonaland West',
5018             '06' => 'Matabeleland North',
5019             '07' => 'Matabeleland South',
5020             '08' => 'Masvingo',
5021             '09' => 'Bulawayo',
5022             '10' => 'Harare'
5023             }
5024             );
5025             sub continent_code_by_country_code {
5026             my $id = $_id_by_code{ $_[1] } || 0;
5027             return $continents[$id];
5028             }
5029             sub time_zone { Geo::IP::Record->_time_zone( $_[1], $_[2] ) }
5030              
5031             sub _get_region_name {
5032             my ( $ccode, $region ) = @_;
5033             return unless $region;
5034             return if $region eq '00';
5035              
5036             return $country_region_names{$ccode}->{$region}
5037             if exists $country_region_names{$ccode};
5038             }
5039              
5040             # --- unfortunately we do not know the path so we assume the
5041             # default path /usr/local/share/GeoIP
5042             # if thats not true, you can set $Geo::IP::PP_OPEN_TYPE_PATH
5043             #
5044             sub open_type {
5045             my ( $class, $type, $flags ) = @_;
5046             my %type_dat_name_mapper = (
5047             GEOIP_COUNTRY_EDITION() => 'GeoIP',
5048             GEOIP_REGION_EDITION_REV0() => 'GeoIPRegion',
5049             GEOIP_REGION_EDITION_REV1() => 'GeoIPRegion',
5050             GEOIP_CITY_EDITION_REV0() => 'GeoIPCity',
5051             GEOIP_CITY_EDITION_REV1() => 'GeoIPCity',
5052             GEOIP_ISP_EDITION() => 'GeoIPISP',
5053             GEOIP_ORG_EDITION() => 'GeoIPOrg',
5054             GEOIP_PROXY_EDITION() => 'GeoIPProxy',
5055             GEOIP_ASNUM_EDITION() => 'GeoIPASNum',
5056             GEOIP_NETSPEED_EDITION() => 'GeoIPNetSpeed',
5057             GEOIP_NETSPEED_EDITION_REV1() => 'GeoIPNetSpeed',
5058             GEOIP_DOMAIN_EDITION() => 'GeoIPDomain',
5059             );
5060              
5061             # backward compatibility for 2003 databases.
5062             $type -= 105 if $type >= 106;
5063              
5064             my $name = $type_dat_name_mapper{$type};
5065             die("Invalid database type $type\n") unless $name;
5066              
5067             my $mkpath = sub { File::Spec->catfile( File::Spec->rootdir, @_ ) };
5068              
5069             my $path =
5070             defined $Geo::IP::PP_OPEN_TYPE_PATH
5071             ? $Geo::IP::PP_OPEN_TYPE_PATH
5072             : do {
5073             $^O eq 'NetWare'
5074             ? $mkpath->(qw/ etc GeoIP /)
5075             : do {
5076             $^O eq 'MSWin32'
5077             ? $mkpath->(qw/ GeoIP /)
5078             : $mkpath->(qw/ usr local share GeoIP /);
5079             }
5080             };
5081              
5082             my $filename = File::Spec->catfile( $path, $name . '.dat' );
5083             return $class->open( $filename, $flags );
5084             }
5085              
5086             sub open {
5087             die "Geo::IP::open() requires a path name"
5088             unless ( @_ > 1 and $_[1] );
5089             my ( $class, $db_file, $flags ) = @_;
5090             my $fh = FileHandle->new;
5091             my $gi;
5092             CORE::open $fh, "$db_file" or die "Error opening $db_file";
5093             binmode($fh);
5094             if ( $flags && ( $flags & ( GEOIP_MEMORY_CACHE | GEOIP_MMAP_CACHE ) ) ) {
5095             my %self;
5096             if ( $flags & GEOIP_MMAP_CACHE ) {
5097             die "Sys::Mmap required for MMAP support"
5098             unless defined $Sys::Mmap::VERSION;
5099             mmap( $self{buf} = undef, 0, PROT_READ, MAP_PRIVATE, $fh )
5100             or die "mmap: $!";
5101             }
5102             else {
5103             local $/ = undef;
5104             $self{buf} = <$fh>;
5105             }
5106             $self{fh} = $fh;
5107             $gi = bless \%self, $class;
5108             }
5109             else {
5110             $gi = bless { fh => $fh }, $class;
5111             }
5112             $gi->_setup_segments();
5113             return $gi;
5114             }
5115              
5116             sub new {
5117             my ( $class, $db_file, $flags ) = @_;
5118              
5119             # this will be less messy once deprecated new( $path, [$flags] )
5120             # is no longer supported (that's what open() is for)
5121             my $def_db_file = '/usr/local/share/GeoIP/GeoIP.dat';
5122             if ($^O eq 'NetWare') {
5123             $def_db_file = 'sys:/etc/GeoIP/GeoIP.dat';
5124             } elsif ($^O eq 'MSWin32') {
5125             $def_db_file = 'c:/GeoIP/GeoIP.dat';
5126             }
5127             if ( !defined $db_file ) {
5128              
5129             # called as new()
5130             $db_file = $def_db_file;
5131             }
5132             elsif ( $db_file =~ /^\d+$/ ) {
5133             # called as new( $flags )
5134             $flags = $db_file;
5135             $db_file = $def_db_file;
5136             } # else called as new( $database_filename, [$flags] );
5137              
5138             $class->open( $db_file, $flags );
5139             }
5140              
5141             #this function setups the database segments
5142             sub _setup_segments {
5143             my ($gi) = @_;
5144             my $a = 0;
5145             my $i = 0;
5146             my $j = 0;
5147             my $delim;
5148             my $buf;
5149              
5150             $gi->{_charset} = GEOIP_CHARSET_ISO_8859_1;
5151             $gi->{"databaseType"} = GEOIP_COUNTRY_EDITION;
5152             $gi->{"record_length"} = STANDARD_RECORD_LENGTH;
5153              
5154             my $filepos = tell( $gi->{fh} );
5155             seek( $gi->{fh}, -3, 2 );
5156             for ( $i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++ ) {
5157             read( $gi->{fh}, $delim, 3 );
5158              
5159             #find the delim
5160             if ( $delim eq ( chr(255) . chr(255) . chr(255) ) ) {
5161             read( $gi->{fh}, $a, 1 );
5162              
5163             #read the databasetype
5164             my $database_type = ord($a);
5165              
5166             # backward compatibility for 2003 databases.
5167             $database_type -= 105 if $database_type >= 106;
5168             $gi->{"databaseType"} = $database_type;
5169              
5170             #chose the database segment for the database type
5171             #if database Type is GEOIP_REGION_EDITION then use database segment GEOIP_STATE_BEGIN
5172             if ( $gi->{"databaseType"} == GEOIP_REGION_EDITION_REV0 ) {
5173             $gi->{"databaseSegments"} = GEOIP_STATE_BEGIN_REV0;
5174             }
5175             elsif ( $gi->{"databaseType"} == GEOIP_REGION_EDITION_REV1 ) {
5176             $gi->{"databaseSegments"} = GEOIP_STATE_BEGIN_REV1;
5177             }
5178              
5179             #if database Type is GEOIP_CITY_EDITION, GEOIP_ISP_EDITION or GEOIP_ORG_EDITION then
5180             #read in the database segment
5181             elsif ( ( $gi->{"databaseType"} == GEOIP_CITY_EDITION_REV0 )
5182             || ( $gi->{"databaseType"} == GEOIP_CITY_EDITION_REV1 )
5183             || ( $gi->{"databaseType"} == GEOIP_ORG_EDITION )
5184             || ( $gi->{"databaseType"} == GEOIP_DOMAIN_EDITION )
5185             || ( $gi->{"databaseType"} == GEOIP_ASNUM_EDITION )
5186             || ( $gi->{"databaseType"} == GEOIP_NETSPEED_EDITION_REV1 )
5187             || ( $gi->{"databaseType"} == GEOIP_ISP_EDITION ) ) {
5188             $gi->{"databaseSegments"} = 0;
5189              
5190             #read in the database segment for the database type
5191             read( $gi->{fh}, $buf, SEGMENT_RECORD_LENGTH );
5192             for ( $j = 0; $j < SEGMENT_RECORD_LENGTH; $j++ ) {
5193             $gi->{"databaseSegments"} +=
5194             ( ord( substr( $buf, $j, 1 ) ) << ( $j * 8 ) );
5195             }
5196              
5197             #record length is four for ISP databases and ORG databases
5198             #record length is three for country databases, region database and city databases
5199             if ( $gi->{"databaseType"} == GEOIP_ORG_EDITION
5200             || $gi->{"databaseType"} == GEOIP_ISP_EDITION
5201             || $gi->{"databaseType"} == GEOIP_DOMAIN_EDITION ){
5202             $gi->{"record_length"} = ORG_RECORD_LENGTH;
5203             }
5204             }
5205             last;
5206             }
5207             else {
5208             seek( $gi->{fh}, -4, 1 );
5209             }
5210             }
5211              
5212             #if database Type is GEOIP_COUNTY_EDITION then use database segment GEOIP_COUNTRY_BEGIN
5213             if ( $gi->{"databaseType"} == GEOIP_COUNTRY_EDITION
5214             || $gi->{"databaseType"} == GEOIP_NETSPEED_EDITION ) {
5215             $gi->{"databaseSegments"} = GEOIP_COUNTRY_BEGIN;
5216             }
5217             seek( $gi->{fh}, $filepos, 0 );
5218             return $gi;
5219             }
5220              
5221             sub _seek_country {
5222             my ( $gi, $ipnum ) = @_;
5223              
5224             my $fh = $gi->{fh};
5225             my $offset = 0;
5226              
5227             my ( $x0, $x1 );
5228              
5229             my $reclen = $gi->{record_length};
5230              
5231             for ( my $depth = 31; $depth >= 0; $depth-- ) {
5232             unless ( exists $gi->{buf} ) {
5233             seek $fh, $offset * 2 * $reclen, 0;
5234             read $fh, $x0, $reclen;
5235             read $fh, $x1, $reclen;
5236             }
5237             else {
5238             $x0 = substr( $gi->{buf}, $offset * 2 * $reclen, $reclen );
5239             $x1 = substr( $gi->{buf}, $offset * 2 * $reclen + $reclen, $reclen );
5240             }
5241              
5242             $x0 = unpack( "V1", $x0 . "\0" );
5243             $x1 = unpack( "V1", $x1 . "\0" );
5244              
5245             if ( $ipnum & ( 1 << $depth ) ) {
5246             if ( $x1 >= $gi->{"databaseSegments"} ) {
5247             $gi->{last_netmask} = 32 - $depth;
5248             return $x1;
5249             }
5250             $offset = $x1;
5251             }
5252             else {
5253             if ( $x0 >= $gi->{"databaseSegments"} ) {
5254             $gi->{last_netmask} = 32 - $depth;
5255             return $x0;
5256             }
5257             $offset = $x0;
5258             }
5259             }
5260              
5261             print STDERR
5262             "Error Traversing Database for ipnum = $ipnum - Perhaps database is corrupt?";
5263             }
5264              
5265             sub charset {
5266             return $_[0]->{_charset};
5267             }
5268              
5269             sub set_charset{
5270             my ($gi, $charset) = @_;
5271             my $old_charset = $gi->{_charset};
5272             $gi->{_charset} = $charset;
5273             return $old_charset;
5274             }
5275              
5276             #this function returns the country code of ip address
5277             sub country_code_by_addr {
5278             my ( $gi, $ip_address ) = @_;
5279             return unless $ip_address =~ m!^(?:\d{1,3}\.){3}\d{1,3}$!;
5280             return $countries[ $gi->id_by_addr($ip_address) ];
5281             }
5282              
5283             #this function returns the country code3 of ip address
5284             sub country_code3_by_addr {
5285             my ( $gi, $ip_address ) = @_;
5286             return unless $ip_address =~ m!^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$!;
5287             return $code3s[ $gi->id_by_addr($ip_address) ];
5288             }
5289              
5290             #this function returns the name of ip address
5291             sub country_name_by_addr {
5292             my ( $gi, $ip_address ) = @_;
5293             return unless $ip_address =~ m!^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$!;
5294             return $names[ $gi->id_by_addr($ip_address) ];
5295             }
5296              
5297             sub id_by_addr {
5298             my ( $gi, $ip_address ) = @_;
5299             return unless $ip_address =~ m!^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$!;
5300             return $gi->_seek_country( addr_to_num($ip_address) ) - GEOIP_COUNTRY_BEGIN;
5301             }
5302              
5303             #this function returns the country code of domain name
5304             sub country_code_by_name {
5305             my ( $gi, $host ) = @_;
5306             my $country_id = $gi->id_by_name($host);
5307             return $countries[$country_id];
5308             }
5309              
5310             #this function returns the country code3 of domain name
5311             sub country_code3_by_name {
5312             my ( $gi, $host ) = @_;
5313             my $country_id = $gi->id_by_name($host);
5314             return $code3s[$country_id];
5315             }
5316              
5317             #this function returns the country name of domain name
5318             sub country_name_by_name {
5319             my ( $gi, $host ) = @_;
5320             my $country_id = $gi->id_by_name($host);
5321             return $names[$country_id];
5322             }
5323              
5324             sub id_by_name {
5325             my ( $gi, $host ) = @_;
5326             my $ip_address;
5327             if ( $host =~ m!^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$! ) {
5328             $ip_address = $host;
5329             }
5330             else {
5331             $ip_address = join( '.', unpack( 'C4', ( gethostbyname($host) )[4] ) );
5332             }
5333             return unless $ip_address;
5334             return $gi->_seek_country( addr_to_num($ip_address) ) - GEOIP_COUNTRY_BEGIN;
5335             }
5336              
5337             #this function returns the city record as a array
5338             sub get_city_record {
5339             my ( $gi, $host ) = @_;
5340             my $ip_address = $gi->get_ip_address($host);
5341             return unless $ip_address;
5342             my $record_buf;
5343             my $record_buf_pos;
5344             my $char;
5345             my $metroarea_combo;
5346             my $record_country_code = "";
5347             my $record_country_code3 = "";
5348             my $record_country_name = "";
5349             my $record_region = undef;
5350             my $record_city = '';
5351             my $record_postal_code = undef;
5352             my $record_latitude = "";
5353             my $record_longitude = "";
5354             my $record_metro_code = 0;
5355             my $record_area_code = 0;
5356             my $record_continent_code = '';
5357             my $record_region_name = undef;
5358             my $str_length = 0;
5359             my $i;
5360             my $j;
5361              
5362             #lookup the city
5363             my $seek_country = $gi->_seek_country( addr_to_num($ip_address) );
5364             if ( $seek_country == $gi->{"databaseSegments"} ) {
5365             return;
5366             }
5367              
5368             #set the record pointer to location of the city record
5369             my $record_pointer = $seek_country +
5370             ( 2 * $gi->{"record_length"} - 1 ) * $gi->{"databaseSegments"};
5371              
5372             unless ( exists $gi->{buf} ) {
5373             seek( $gi->{"fh"}, $record_pointer, 0 );
5374             read( $gi->{"fh"}, $record_buf, FULL_RECORD_LENGTH );
5375             $record_buf_pos = 0;
5376             }
5377             else {
5378             $record_buf = substr($gi->{buf}, $record_pointer, FULL_RECORD_LENGTH);
5379             $record_buf_pos = 0;
5380             }
5381              
5382             #get the country
5383             $char = ord( substr( $record_buf, $record_buf_pos, 1 ) );
5384             $record_country_code = $countries[$char]; #get the country code
5385             $record_country_code3 = $code3s[$char]; #get the country code with 3 letters
5386             $record_country_name = $names[$char]; #get the country name
5387             $record_buf_pos++;
5388              
5389             # get the continent code
5390             $record_continent_code = $continents[$char];
5391              
5392             #get the region
5393             $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
5394             while ( $char != 0 ) {
5395             $str_length++; #get the length of string
5396             $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
5397             }
5398             if ( $str_length > 0 ) {
5399             $record_region = substr( $record_buf, $record_buf_pos, $str_length );
5400             }
5401             $record_buf_pos += $str_length + 1;
5402             $str_length = 0;
5403              
5404             #get the city
5405             $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
5406             while ( $char != 0 ) {
5407             $str_length++; #get the length of string
5408             $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
5409             }
5410             if ( $str_length > 0 ) {
5411             $record_city = substr( $record_buf, $record_buf_pos, $str_length );
5412             }
5413             $record_buf_pos += $str_length + 1;
5414             $str_length = 0;
5415              
5416             #get the postal code
5417             $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
5418             while ( $char != 0 ) {
5419             $str_length++; #get the length of string
5420             $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
5421             }
5422             if ( $str_length > 0 ) {
5423             $record_postal_code = substr( $record_buf, $record_buf_pos, $str_length );
5424             }
5425             $record_buf_pos += $str_length + 1;
5426             $str_length = 0;
5427             my $latitude = 0;
5428             my $longitude = 0;
5429              
5430             #get the latitude
5431             for ( $j = 0; $j < 3; ++$j ) {
5432             $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
5433             $latitude += ( $char << ( $j * 8 ) );
5434             }
5435             $record_latitude = ( $latitude / 10000 ) - 180;
5436              
5437             #get the longitude
5438             for ( $j = 0; $j < 3; ++$j ) {
5439             $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
5440             $longitude += ( $char << ( $j * 8 ) );
5441             }
5442             $record_longitude = ( $longitude / 10000 ) - 180;
5443              
5444             #get the metro code and the area code
5445             if ( GEOIP_CITY_EDITION_REV1 == $gi->{"databaseType"} ) {
5446             $metroarea_combo = 0;
5447             if ( $record_country_code eq "US" ) {
5448              
5449             #if the country is US then read the dma/metro area combo
5450             for ( $j = 0; $j < 3; ++$j ) {
5451             $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
5452             $metroarea_combo += ( $char << ( $j * 8 ) );
5453             }
5454              
5455             #split the dma/metro area combo into the metro code and the area code
5456             $record_metro_code = int( $metroarea_combo / 1000 );
5457             $record_area_code = $metroarea_combo % 1000;
5458             }
5459             }
5460             $record_region_name = _get_region_name($record_country_code, $record_region);
5461              
5462              
5463             # the pureperl API must convert the string by themself to UTF8
5464             # using Encode for perl >= 5.008 otherwise use it's own iso-8859-1 to utf8 converter
5465             $record_city = decode( 'iso-8859-1' => $record_city )
5466             if $gi->charset == GEOIP_CHARSET_UTF8;
5467              
5468             return (
5469             $record_country_code, $record_country_code3, $record_country_name,
5470             $record_region, $record_city, $record_postal_code,
5471             $record_latitude, $record_longitude, $record_metro_code,
5472             $record_area_code, $record_continent_code, $record_region_name,
5473             $record_metro_code );
5474             }
5475              
5476             #this function returns the city record as a hash ref
5477             sub get_city_record_as_hash {
5478             my ( $gi, $host ) = @_;
5479             my %gir;
5480              
5481             @gir{qw/ country_code country_code3 country_name region city
5482             postal_code latitude longitude dma_code area_code
5483             continent_code region_name metro_code / } =
5484             $gi->get_city_record($host);
5485              
5486             return defined($gir{latitude}) ? bless( \%gir, 'Geo::IP::Record' ) : undef;
5487             }
5488              
5489             *record_by_addr = \&get_city_record_as_hash;
5490             *record_by_name = \&get_city_record_as_hash;
5491              
5492             sub org_by_name{
5493             my ( $gi, $host ) = @_;
5494             return $gi->org_by_addr($gi->get_ip_address($host));
5495             }
5496              
5497             #this function returns isp or org of the domain name
5498             sub org_by_addr {
5499             my ( $gi, $ip_address ) = @_;
5500             my $seek_org = $gi->_seek_country( addr_to_num($ip_address) );
5501             my $char;
5502             my $org_buf;
5503             my $record_pointer;
5504              
5505             if ( $seek_org == $gi->{"databaseSegments"} ) {
5506             return undef;
5507             }
5508              
5509             $record_pointer =
5510             $seek_org + ( 2 * $gi->{"record_length"} - 1 ) * $gi->{"databaseSegments"};
5511              
5512             unless ( exists $gi->{buf} ) {
5513             seek( $gi->{"fh"}, $record_pointer, 0 );
5514             read( $gi->{"fh"}, $org_buf, MAX_ORG_RECORD_LENGTH );
5515             }
5516             else {
5517             $org_buf = substr($gi->{buf}, $record_pointer, MAX_ORG_RECORD_LENGTH );
5518             }
5519              
5520             $org_buf = unpack 'Z*' => $org_buf;
5521              
5522             $org_buf = decode( 'iso-8859-1' => $org_buf )
5523             if $gi->charset == GEOIP_CHARSET_UTF8;
5524              
5525             return $org_buf;
5526             }
5527              
5528             #this function returns isp or org of the domain name
5529             *isp_by_name = \*org_by_name;
5530             *isp_by_addr = \*org_by_addr;
5531             *name_by_addr = \*org_by_addr;
5532             *name_by_name = \*org_by_name;
5533              
5534             #this function returns the region
5535             sub region_by_name {
5536             my ( $gi, $host ) = @_;
5537             my $ip_address = $gi->get_ip_address($host);
5538             return unless $ip_address;
5539             if ( $gi->{"databaseType"} == GEOIP_REGION_EDITION_REV0 ) {
5540             my $seek_region =
5541             $gi->_seek_country( addr_to_num($ip_address) ) - GEOIP_STATE_BEGIN_REV0;
5542             if ( $seek_region >= 1000 ) {
5543             return (
5544             "US",
5545             chr( ( $seek_region - 1000 ) / 26 + 65 )
5546             . chr( ( $seek_region - 1000 ) % 26 + 65 )
5547             );
5548             }
5549             else {
5550             return ( $countries[$seek_region], "" );
5551             }
5552             }
5553             elsif ( $gi->{"databaseType"} == GEOIP_REGION_EDITION_REV1 ) {
5554             my $seek_region =
5555             $gi->_seek_country( addr_to_num($ip_address) ) - GEOIP_STATE_BEGIN_REV1;
5556             if ( $seek_region < US_OFFSET ) {
5557             return ( "", "" );
5558             }
5559             elsif ( $seek_region < CANADA_OFFSET ) {
5560              
5561             # return a us state
5562             return (
5563             "US",
5564             chr( ( $seek_region - US_OFFSET ) / 26 + 65 )
5565             . chr( ( $seek_region - US_OFFSET ) % 26 + 65 )
5566             );
5567             }
5568             elsif ( $seek_region < WORLD_OFFSET ) {
5569              
5570             # return a canada province
5571             return (
5572             "CA",
5573             chr( ( $seek_region - CANADA_OFFSET ) / 26 + 65 )
5574             . chr( ( $seek_region - CANADA_OFFSET ) % 26 + 65 )
5575             );
5576             }
5577             else {
5578              
5579             # return a country of the world
5580             my $c = $countries[ ( $seek_region - WORLD_OFFSET ) / FIPS_RANGE ];
5581             my $a2 = ( $seek_region - WORLD_OFFSET ) % FIPS_RANGE;
5582              
5583             ## my $r =
5584             ## chr( ( $a2 / 100 ) + 48 )
5585             ## . chr( ( ( $a2 / 10 ) % 10 ) + 48 )
5586             ## . chr( ( $a2 % 10 ) + 48 );
5587             return ( $c, $a2 ? sprintf('%03d', $a2 ) : '00' ) ;
5588             }
5589             }
5590             }
5591              
5592             *region_by_addr = \®ion_by_name;
5593              
5594             sub get_ip_address {
5595             my ( $gi, $host ) = @_;
5596             my $ip_address;
5597              
5598             #check if host is ip address
5599             if ( $host =~ m!^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$! ) {
5600              
5601             #host is ip address
5602             $ip_address = $host;
5603             }
5604             else {
5605              
5606             #host is domain name do a dns lookup
5607             $ip_address = join( '.', unpack( 'C4', ( gethostbyname($host) )[4] ) );
5608             }
5609             return $ip_address;
5610             }
5611              
5612             sub addr_to_num { unpack( N => pack( C4 => split( /\./, $_[0] ) ) ) }
5613             sub num_to_addr { join q{.}, unpack( C4 => pack( N => $_[0] ) ) }
5614              
5615             #sub addr_to_num {
5616             # my @a = split( '\.', $_[0] );
5617             # return $a[0] * 16777216 + $a[1] * 65536 + $a[2] * 256 + $a[3];
5618             #}
5619              
5620             sub database_edition {
5621             $_[0]->{databaseType};
5622             }
5623              
5624             sub database_info {
5625             my $gi = shift;
5626             my $i = 0;
5627             my $buf;
5628             my $retval;
5629             my $hasStructureInfo;
5630             seek( $gi->{fh}, -3, 2 );
5631             for ( my $i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++ ) {
5632             read( $gi->{fh}, $buf, 3 );
5633             if ( $buf eq ( chr(255) . chr(255) . chr(255) ) ) {
5634             $hasStructureInfo = 1;
5635             last;
5636             }
5637             seek( $gi->{fh}, -4, 1 );
5638             }
5639             if ( $hasStructureInfo == 1 ) {
5640             seek( $gi->{fh}, -6, 1 );
5641             }
5642             else {
5643              
5644             # no structure info, must be pre Sep 2002 database, go back to
5645             seek( $gi->{fh}, -3, 2 );
5646             }
5647             for ( my $i = 0; $i < DATABASE_INFO_MAX_SIZE; $i++ ) {
5648             read( $gi->{fh}, $buf, 3 );
5649             if ( $buf eq ( chr(0) . chr(0) . chr(0) ) ) {
5650             read( $gi->{fh}, $retval, $i );
5651             return $retval;
5652             }
5653             seek( $gi->{fh}, -4, 1 );
5654             }
5655             return '';
5656             }
5657              
5658             sub range_by_ip {
5659             my $gi = shift;
5660             my $ipnum = addr_to_num( shift );
5661             my $c = $gi->_seek_country( $ipnum );
5662             my $nm = $gi->last_netmask;
5663             my $m = 0xffffffff << 32 - $nm;
5664             my $left_seek_num = $ipnum & $m;
5665             my $right_seek_num = $left_seek_num + ( 0xffffffff & ~$m );
5666              
5667             while ( $left_seek_num != 0
5668             and $c == $gi->_seek_country( $left_seek_num - 1) ) {
5669             my $lm = 0xffffffff << 32 - $gi->last_netmask;
5670             $left_seek_num = ( $left_seek_num - 1 ) & $lm;
5671             }
5672             while ( $right_seek_num != 0xffffffff
5673             and $c == $gi->_seek_country( $right_seek_num + 1 ) ) {
5674             my $rm = 0xffffffff << 32 - $gi->last_netmask;
5675             $right_seek_num = ( $right_seek_num + 1 ) & $rm;
5676             $right_seek_num += ( 0xffffffff & ~$rm );
5677             }
5678             return ( num_to_addr($left_seek_num), num_to_addr($right_seek_num) );
5679             }
5680              
5681              
5682             sub netmask { $_[0]->{last_netmask} = $_[1] }
5683              
5684             sub last_netmask {
5685             return $_[0]->{last_netmask};
5686             }
5687              
5688             sub DESTROY {
5689             my $gi = shift;
5690              
5691             if ( exists $gi->{buf} && $gi->{flags} && ( $gi->{flags} & GEOIP_MMAP_CACHE ) ) {
5692             munmap( $gi->{buf} ) or die "munmap: $!";
5693             delete $gi->{buf};
5694             }
5695             }
5696              
5697             #sub _XS
5698             __PP_CODE__
5699              
5700             print STDERR $@ if $@;
5701              
5702             1;
5703             __END__