File Coverage

blib/lib/Regexp/Common/zip.pm
Criterion Covered Total %
statement 29 29 100.0
branch 14 14 100.0
condition 3 3 100.0
subroutine 8 8 100.0
pod n/a
total 54 54 100.0


line stmt bran cond sub pod time code
1             package Regexp::Common::zip;
2              
3 72     72   638 use 5.10.0;
  72         157  
4              
5 72     72   279 use strict;
  72         128  
  72         1251  
6 72     72   223 use warnings;
  72         87  
  72         1758  
7 72     72   225 no warnings 'syntax';
  72         85  
  72         2216  
8              
9 72     72   243 use Regexp::Common qw /pattern clean no_defaults/;
  72         107  
  72         418  
10              
11             our $VERSION = '2017040401';
12              
13              
14             #
15             # Prefer '[0-9]' over \d, because the latter may include more
16             # in Unicode string.
17             #
18              
19             #
20             # ISO and Cept codes. ISO code is the second column, Cept code is
21             # the third. First column matches either.
22             #
23             # http://cept.org/ecc/topics/numbering-networks/numbering-related-
24             # cooperation/the-cept-countries-joining-year-to-cept,
25             # -cept-and-iso-country-codes,-e164-and-e212-country-codes
26             # (http://bit.ly/1Ue268b)
27             #
28             my %code = (
29             Australia => [qw /AUS? AU AUS/],
30             Austria => [qw /AU?T AT AUT/],
31             Belgium => [qw /BE? BE B/],
32             Denmark => [qw /DK DK DK/],
33             France => [qw /FR? FR F/],
34             Germany => [qw /DE? DE D/],
35             Greenland => [qw /GL GL GL/],
36             Italy => [qw /IT? IT I/],
37             Liechtenstein => [qw /LIE? LI LIE/],
38             Luxembourg => [qw /LU? LU L/],
39             Monaco => [qw /MC MC MC/],
40             Netherlands => [qw /NL NL NL/],
41             Norway => [qw /NO? NO N/],
42             'San Marino' => [qw /SM SM SM/],
43             Spain => [qw /ES? ES E/],
44             Switzerland => [qw /CH CH CH/],
45             USA => [qw /USA? US USA/],
46             'Vatican City' => [qw /VA VA VA/],
47             );
48              
49             # Returns the empty string if the argument is undefined, the argument otherwise.
50 12923 100   12923   20105 sub __ {defined $_ [0] ? $_ [0] : ""}
51              
52             # Used for allowable options. If the value starts with 'y', the option is
53             # required ("{1,1}" is returned, if the value starts with 'n', the option
54             # is disallowed ("{0,0}" is returned), otherwise, the option is allowed,
55             # but not required ("{0,1}" is returned).
56             sub _t {
57 1425145 100   1425145   2260489 if (defined $_ [0]) {
58 1425143 100       1974676 if ($_ [0] =~ /^y/i) {return "{1,1}"}
  5505         7398  
59 1419638 100       1842261 if ($_ [0] =~ /^n/i) {return "{0,0}"}
  3653         4675  
60             }
61             "{0,1}"
62 1415987         1475818 }
63              
64             # Returns the (sub)pattern for the country named '$name', and the
65             # -country option '$country'.
66             sub _c {
67 1417866     1417866   1415730 my ($name, $country) = @_;
68 1417866 100 100     4611562 if (defined $country && $country ne "") {
69 7670 100       10464 if ($country eq 'iso') {return $code {$name} [1]}
  3404         5663  
70 4266 100       5435 if ($country eq 'cept') {return $code {$name} [2]}
  2911         4404  
71 1355         1974 return $country;
72             }
73 1410196         1918014 $code {$name} [0]
74             }
75              
76              
77             my %zip = (
78             #
79             # Postal codes are four digits, but not all combinations are used.
80             #
81             # Valid codes from:
82             # https://en.wikipedia.org/wiki/List_of_postal_codes_in_Austria
83             #
84             Austria =>
85             "(?k:1(?:[0-8][0-9][0-9]|90[01])" .
86             "|2(?:[0-3][0-9][0-9]|" .
87             "4(?:0[0-9]|1[0-3]|2[1-5]|3[1-9]|[4-6][0-9]|7[0-5]|" .
88             "8[1-9]|9[0-9])|" .
89             "[5-7][0-9][0-9]|" .
90             "8(?:[0-7][0-9]|8[01]))" .
91             "|3(?:0(?:0[1-9]|[1-9][0-9])|" .
92             "[12][0-9][0-9]|" .
93             "3(?:[0-2][0-9]|3[0-5]|[4-9][0-9])|" .
94             "[4-8][0-9][0-9]|" .
95             "9(?:[0-6][0-9]|7[0-3]))" .
96             "|4(?:[01][0-9][0-9]|" .
97             "2(?:[0-8][0-9]|9[0-4])|" .
98             "3(?:0[0-3]|[1-8][0-9]|9[0-2])|" .
99             "4(?:[0-1][0-9]|2[01]|3[1-9]|[4-9][0-9])|" .
100             "[5-8][0-9][0-9]|" .
101             "9(?:[0-7][0-9]|8[0-5]))" .
102             "|5(?:0[0-9][0-9]|" .
103             "1(?:0[0-9]|1[0-4]|[23][0-9]|4[0-5]|5[1-9]|[6-9][0-9])|" .
104             "2(?:0[0-5]|1[1-9]|[2-7][0-9]|8[0-3])|" .
105             "3(?:0[0-3]|1[01]|2[1-9]|[34][0-9]|5[01]|60)|" .
106             "[4-6][0-9][0-9]|" .
107             "7(?:[0-6][0-9]|7[01]))" .
108             "|6(?:[0-5][0-9][0-9]|" .
109             "6(?:[0-8][0-9]|9[01])|" .
110             "[78][0-9][0-9]|" .
111             "9(?:[0-8][0-9]|9[0-3]))" .
112             "|7(?:[0-3][0-9][0-9]|" .
113             "4(?:0[0-9]|1[0-3]|2[1-9]|[3-9][0-9])|" .
114             "5(?:[0-6][0-9]|7[0-3]))" .
115             "|8(?:[0-2][0-9][0-9]|" .
116             "3(?:[0-5][0-9]|6[0-3]|8[0-5])|" .
117             "4(?:0[1-9]|[1-9][0-9])|" .
118             "[5-8][0-9][0-9]|" .
119             "9(?:[0-8][0-9]|9[0-3]))" .
120             "|9(?:[0-6][0-9][0-9]|" .
121             "7(?:[0-7][0-9]|8[0-2])|" .
122             "8(?:[0-6][0-9]|7[0-3])|" .
123             "9(?:[0-8][0-9]|9[0-2]))" .
124             ")",
125             #
126             # Postal codes of the form: 'DDDD', with the first digit representing
127             # the province; the others distribution sectors. Postal codes do not
128             # start with a zero. Not all combinations are in use.
129             #
130             # Data from http://download.geonames.org/export/zip/BE.zip
131             #
132             Belgium =>
133             "(?k:1(?:0(?:0[05-9]|1[0-2]|20|3[01]|4[013-57-9]|50|60|70|8[0-3]|90)|" .
134             "1(?:0[05]|10|20|30|40|50|60|70|80|90)|" .
135             "2(?:0[01]|1[02])|" .
136             "3(?:0[01]|1[05]|2[05]|3[0-2]|4[0-28]|5[07]|6[07]|70|80|90)|" .
137             "4(?:0[0-24]|1[04]|2[018]|3[05]|40|5[07]|6[01]|" .
138             "7[0-46]|80|9[05])|" .
139             "5(?:0[0-2]|4[017]|60|70)|" .
140             "6(?:0[0-2]|20|30|40|5[0-4]|7[0134])|" .
141             "7(?:0[0-3]|3[01]|4[0-25]|5[05]|6[01]|70|8[05]|90)|" .
142             "8(?:0[04]|18|20|3[01]|40|5[0-3]|6[01]|80)|" .
143             "9(?:10|3[0-4]|50|70|8[0-2]))" .
144              
145             "|2(?:0(?:00|18|20|30|40|50|60|70)|" .
146             "1(?:00|10|40|50|60|70|80)|" .
147             "2(?:00|2[0-3]|3[05]|4[023]|50|60|7[05]|8[08]|90)|" .
148             "3(?:00|10|2[0-38]|30|40|50|60|70|8[0-27]|90)|" .
149             "4(?:00|3[01]|40|50|60|70|80|9[01])|" .
150             "5(?:00|20|3[01]|4[07]|50|60|70|80|90)|" .
151             "6(?:00|10|2[07]|30|40|50|60)|" .
152             "8(?:0[01]|1[12]|20|30|4[05]|50|6[01]|70|80|90)|" .
153             "9(?:00|10|20|30|40|50|60|70|80|90))" .
154              
155             "|3(?:0(?:0[01]|1[028]|20|40|5[0-4]|6[01]|7[018]|80|90)|" .
156             "1(?:1[018]|2[08]|30|40|50|9[01])|" .
157             "2(?:0[0-2]|1[0-2]|2[01]|7[0-2]|9[034])|" .
158             "3(?:00|2[01]|50|60|70|8[014]|9[01])|" .
159             "4(?:0[014]|40|5[04]|6[01]|7[0-3])|" .
160             "5(?:0[01]|1[0-2]|20|30|4[05]|50|60|70|8[0-3]|90)|" .
161             "6(?:00|2[01]|3[01]|40|50|6[058]|70|80|90)|" .
162             "7(?:00|17|2[0-4]|3[02]|4[026]|70|9[0-38])|" .
163             "8(?:0[036]|3[0-2]|40|50|70|9[01])|" .
164             "9(?:00|10|20|30|4[015]|50|60|7[01]|80|90))" .
165              
166             "|4(?:0(?:00|20|3[0-2]|4[0-2]|5[0-3]|90)|" .
167             "1(?:0[0-2]|2[0-2]|30|4[01]|51|6[0-3]|7[01]|8[01]|90)|" .
168             "2(?:1[07-9]|5[02-47]|6[013]|8[07])|" .
169             "3(?:00|17|4[027]|5[017]|6[07])|" .
170             "4(?:00|20|3[0-2]|5[0-38]|60|70|80)|" .
171             "5(?:00|20|3[07]|40|5[07]|60|7[07]|90)|" .
172             "6(?:0[0-26-8]|10|2[0134]|3[0-3]|5[0-4]|7[0-2]|8[0-4]|90)|" .
173             "7(?:0[01]|1[01]|2[018]|3[01]|50|6[01]|7[01]|8[02-4]|9[01])|" .
174             "8(?:0[0-2]|2[01]|3[0147]|4[015]|5[0-2]|6[01]|7[07]|80|90)|" .
175             "9(?:00|10|20|50|60|70|8[037]|90))" .
176              
177             "|5(?:0(?:0[0-4]|2[0-24]|3[0-2]|60|70|8[01])|" .
178             "1(?:0[01]|40|50|70|90)|" .
179             "3(?:00|10|3[02-46]|40|5[0-4]|6[0-4]|7[02467]|80)|" .
180             "5(?:0[0-4]|2[0-4]|3[07]|4[0-4]|5[05]|6[0-4]|7[0-6]|80|90)|" .
181             "6(?:00|2[01]|30|4[0146]|5[01]|60|70|80))" .
182              
183             "|6(?:0(?:0[01]|10|20|3[0-2]|4[0-4]|6[01])|" .
184             "1(?:1[01]|20|4[0-2]|50|8[0-3])|" .
185             "2(?:00|1[01]|2[0-4]|3[08]|40|50|80)|" .
186             "4(?:4[01]|6[0-4]|70)|" .
187             "5(?:00|11|3[0-46]|4[023]|6[07]|9[0-46])|" .
188             "6(?:00|3[07]|4[02]|6[0-36]|7[0-4]|8[016-8]|9[028])|" .
189             "7(?:0[046]|17|2[0134]|30|4[0-37]|50|6[0-279]|8[0-2]|9[0-2])|" .
190             "8(?:00|1[0-3]|2[0134]|3[0-468]|40|5[0-36]|60|70|8[07]|90)|" .
191             "9(?:00|2[0-2479]|4[01]|5[0-3]|60|7[0-2]|8[02-467]|9[07]))" .
192              
193             "|7(?:0(?:00|1[0-2]|2[0-24]|3[0-4]|4[01]|50|6[0-3]|70|80|90)|" .
194             "1(?:00|10|20|3[0134]|4[01]|60|70|8[01]|9[01])|" .
195             "3(?:0[01]|2[0-2]|3[0-4]|40|50|70|8[027]|90)|" .
196             "5(?:0[0-46]|2[0-2]|3[0-468]|4[0238])|" .
197             "6(?:0[0-48]|1[018]|2[0-4]|4[0-3])|" .
198             "7(?:00|1[12]|30|4[023]|50|60|8[0-4])|" .
199             "8(?:0[0-4]|1[0-2]|2[23]|30|50|6[0-46]|70|80|90)|" .
200             "9(?:0[01346]|1[0-2]|4[0-3]|5[01]|7[0-3]))" .
201              
202             "|8(?:0(?:00|20)|" .
203             "2(?:00|1[01])|" .
204             "3(?:0[01]|10|40|7[07]|80)|" .
205             "4(?:00|2[01]|3[0-4]|50|60|70|80|90)|" .
206             "5(?:0[01]|1[01]|20|3[01]|40|5[0-4]|60|7[023]|8[0-37])|" .
207             "6(?:00|10|20|30|4[07]|50|60|70|80|9[01])|" .
208             "7(?:00|10|20|30|40|5[05]|60|70|80|9[0-3])|" .
209             "8(?:00|10|20|30|40|5[01]|60|70|80|90)|" .
210             "9(?:0[02468]|20|30|40|5[0-46-8]|7[028]|80))" .
211              
212             "|9(?:0(?:00|3[0-2]|4[0-2]|5[0-2]|60|70|80|90)|" .
213             "1(?:00|1[12]|20|30|40|50|60|70|8[05]|90)|" .
214             "2(?:00|20|30|40|5[05]|60|70|80|90)|" .
215             "3(?:0[08]|10|20|40)|" .
216             "4(?:0[0-46]|20|5[01]|7[023])|" .
217             "5(?:0[06]|2[01]|5[0-2]|7[0-2])|" .
218             "6(?:00|20|3[06]|6[017]|8[018]|90)|" .
219             "7(?:00|50|7[0-2]|90)|" .
220             "8(?:00|10|20|3[01]|40|50|60|70|8[01]|90)|" .
221             "9(?:00|10|2[01]|3[0-2]|40|50|6[018]|7[01]|8[0-28]|9[0-2]))" .
222             ")",
223              
224             #
225             # Postal codes of the form: 'DDDD', with the first digit representing
226             # the distribution region, the second digit the distribution district.
227             # Postal codes do not start with a zero. Postal codes starting with '39'
228             # are in Greenland, and not included in the pattern.
229             #
230             Denmark =>
231             "(?k:0(?:800|" .
232             "9(?:00|17|60|99))" .
233              
234             "|1(?:0(?:00|5[0-9]|6[0-9]|7[0-4]|9[2358])|" .
235             "1(?:0[0-7]|1[0-9]|2[0-9]|3[01]|4[078]|5[0-9]|6[0-24-9]|" .
236             "7[0-5])|" .
237             "2(?:0[0-9]|1[013-9]|2[01]|40|5[013-79]|6[013-8]|7[01]|91)|" .
238             "3(?:0[0-46-9]|1[0-9]|2[0-9]|5[02-9]|6[0-9]|7[01])|" .
239             "4(?:0[0-36-9]|1[0-9]|2[0-9]|3[0-9]|4[018]|5[0-9]|" .
240             "6[02-46-8]|7[0-2])|" .
241             "5(?:00|13|3[23]|5[0-9]|6[0-46-9]|7[0-7]|9[29])|" .
242             "6(?:0[0-46-9]|1[0-9]|2[0-4]|3[0-5]|5[0-9]|6[0-9]|7[0-7]|99)|" .
243             "7(?:0[0-9]|1[0-24-9]|2[0-9]|3[0-9]|49|5[0-9]|6[0-6]|" .
244             "7[0-57]|8[05-7]|9[09])|" .
245             "8(?:0[0-9]|1[0-9]|2[02-9]|5[0-7]|6[0-8]|7[0-9])|" .
246             "9(?:0[0-689]|1[0-7]|2[0-8]|5[0-9]|6[0-7]|7[0-4]))" .
247              
248             "|2(?:000|" .
249             "1(?:00|50)|" .
250             "200|" .
251             "300|" .
252             "4(?:00|50)|" .
253             "500|" .
254             "6(?:0[05]|10|2[05]|3[05]|40|50|6[05]|70|80|90)|" .
255             "7(?:00|20|30|40|50|6[05]|70|91)|" .
256             "8(?:00|20|30|40|50|60|70|80)|" .
257             "9(?:00|20|30|42|50|60|70|80|90))" .
258              
259             "|3(?:0(?:00|50|60|70|80)|" .
260             "1(?:00|20|40|50)|" .
261             "2(?:00|10|20|30|50)|" .
262             "3(?:00|10|20|30|60|70|90)|" .
263             "4(?:00|50|60|80|90)|" .
264             "5(?:00|20|40|50)|" .
265             "6(?:00|30|50|60|70)|" .
266             "7(?:00|20|30|40|51|60|70|82|90))" .
267              
268             "|4(?:0(?:00|30|40|50|60|70)|" .
269             "1(?:00|30|40|60|7[134]|80|90)|" .
270             "2(?:00|20|30|4[1-3]|50|6[12]|70|81|9[1356])|" .
271             "3(?:00|20|30|40|50|60|70|90)|" .
272             "4(?:00|20|40|50|60|70|80|90)|" .
273             "5(?:00|20|3[24]|40|50|60|7[1-3]|8[13]|9[1-3])|" .
274             "6(?:00|2[1-3]|32|40|5[2-4]|60|7[1-3]|8[1-4]|90)|" .
275             "7(?:00|20|3[356]|50|60|7[1-3]|80|9[1-3])|" .
276             "8(?:00|40|50|6[23]|7[1-4]|80|9[1245])|" .
277             "9(?:00|1[23]|20|30|4[134]|5[1-3]|60|70|83|90))" .
278              
279             "|5(?:000|" .
280             "2(?:00|10|20|30|40|50|60|70|90)|" .
281             "3(?:00|20|30|50|70|80|90)|" .
282             "4(?:00|50|6[2-46]|7[14]|85|9[12])|" .
283             "5(?:00|40|50|60|80|9[12])|" .
284             "6(?:00|10|20|31|42|72|83|90)|" .
285             "7(?:00|50|62|7[12]|92)|" .
286             "8(?:00|5[346]|63|7[14]|8[1-4]|92)|" .
287             "9(?:00|3[25]|53|60|70|85))" .
288              
289             "|6(?:0(?:00|40|5[12]|64|70|9[1-4])|" .
290             "100|" .
291             "2(?:00|30|40|61|70|80)|" .
292             "3(?:00|10|20|30|40|60|72|92)|" .
293             "4(?:00|30|40|70)|" .
294             "5(?:00|10|20|3[45]|41|60|80)|" .
295             "6(?:00|2[1-3]|30|40|50|60|70|8[23]|90)|" .
296             "7(?:0[05]|1[05]|20|31|40|5[23]|60|71|80|92)|" .
297             "8(?:00|18|23|30|40|5[1-57]|62|70|80|93)|" .
298             "9(?:00|20|33|40|50|60|7[13]|80|90))" .
299              
300             "|7(?:0(?:0[07]|80)|" .
301             "1(?:00|20|30|40|50|60|7[13]|8[2-4]|90)|" .
302             "2(?:00|50|60|70|80)|" .
303             "3(?:00|2[13]|30|6[12])|" .
304             "4(?:00|30|4[12]|51|70|80|90)|" .
305             "5(?:00|40|50|60|70)|" .
306             "6(?:00|20|50|60|73|80)|" .
307             "7(?:00|30|4[12]|5[25]|60|70|90)|" .
308             "8(?:00|30|40|50|60|70|84)|" .
309             "9(?:00|50|60|70|80|90))" .
310              
311             "|8(?:000|" .
312             "2(?:00|10|20|30|4[05]|50|60|70)|" .
313             "3(?:0[05]|10|20|30|40|5[05]|6[12]|70|8[0-2])|" .
314             "4(?:00|10|20|44|50|6[24]|7[12])|" .
315             "5(?:00|20|30|4[134]|50|60|70|8[156]|92)|" .
316             "6(?:00|20|32|4[13]|5[34]|60|70|80)|" .
317             "7(?:00|2[1-3]|32|40|5[12]|6[2356]|8[13])|" .
318             "8(?:00|3[0-2]|40|50|60|70|8[1-3])|" .
319             "9(?:00|20|30|40|50|6[013]|70|8[13]|90))" .
320              
321             "|9(?:000|" .
322             "2(?:00|10|20|30|40|60|70|80|93)|" .
323             "3(?:00|10|20|30|40|52|62|70|8[0-2])|" .
324             "4(?:00|30|40|60|80|9[023])|" .
325             "5(?:00|10|20|30|41|50|60|7[45])|" .
326             "6(?:00|10|20|3[12]|40|70|81|90)|" .
327             "7(?:00|40|50|60)|" .
328             "8(?:00|30|50|70|81)|" .
329             "9(?:00|40|70|8[12]|90))" .
330             ")",
331              
332              
333              
334             #
335             # 5 Digit postal code, with leading 0s.
336             #
337             # Codes starting with 980 are reserved for Monaco, and not recognized
338             # by the pattern.
339             #
340             # Data from: http://download.geonames.org/export/zip/FR.zip
341             #
342             France =>
343             "(?k:0(?:1(?:0(?:0[0-9]|1[0-9]|20|59|6[019]|90)|1(?:0[0-9]|" .
344             "1[0-25-7]|2[0-9]|30|40|5[0-58]|60|7[0-4]|90)|" .
345             "2(?:0[0-468]|1[0-367]|20|30|40|50|60|70|80|90)|" .
346             "3(?:0[0-36]|10|20|30|40|50|6[0569]|70|80|90)|4(?:00|" .
347             "10|20|30|4[0-3]|50|60|70|80)|5(?:0[0-68]|10|40|50|60|" .
348             "70|80|90)|6(?:0[0-46]|3[02378]|40|60|80)|7(?:0[0-8]|" .
349             "10|50)|8(?:00|51)|9(?:21|60|90))|" .
350             "2(?:0(?:0[0-9]|1[0-9]|2[05])|1(?:0[0-9]|10|20|30|40|5[01]|" .
351             "60|70|90)|2(?:0[0-9]|10|20|30|40|50|60|70|90)|" .
352             "3(?:0[0-39]|1[045]|2[0-79]|3[01]|40|50|60|70|80|90)|" .
353             "4(?:0[0-79]|10|20|30|40|50|60|70|80|90)|5(?:00|10|20|" .
354             "40|50|70|80|90)|6(?:0[0-49]|10|20|30|40|50|70|80|90)|" .
355             "7(?:00|20|60|90)|8(?:00|10|20|30|40|50|60|70|80)|" .
356             "93[09])|" .
357             "3(?:0(?:0[03-8]|1[0-9]|21)|1(?:0[0-9]|10|20|30|40|50|60|" .
358             "70|90)|2(?:0[0-9]|10|20|30|40|50|60|70|90)|" .
359             "3(?:0[0-79]|1[01459]|2[019]|30|40|50|60|70|80|90)|" .
360             "4(?:0[0-3569]|10|20|30|40|5[02]|60|70)|5(?:00|10)|" .
361             "6(?:00|30)|700|800)|" .
362             "4(?:0(?:0[0-69]|1[0-9]|29)|1(?:0[0-7]|1[09]|20|30|40|50|" .
363             "60|70|80|90)|2(?:0[0-39]|10|20|30|40|50|60|70|80|90)|" .
364             "3(?:0[01]|10|20|30|40|50|60|70|80)|4(?:00|10|20)|" .
365             "5(?:00|10|30)|6(?:00|60)|700|8(?:00|50|60|70)|99[05])|" .
366             "5(?:0(?:0[0-8]|1[0-24-69])|1(?:0[0-57]|10|20|30|40|50|60|" .
367             "70|90)|2(?:0[0-289]|20|30|40|50|60|90)|3(?:00|10|20|" .
368             "30|40|50|80)|4(?:00|60|70|80)|5(?:00|60)|600|700|800)|" .
369             "6(?:0(?:0[0-9]|1[0-36]|3[2-6]|4[4-9]|5[03]|7[1389]|8[2-5]|" .
370             "99)|1(?:0[0-35-9]|1[03-79]|2[156]|3[0-35-79]|4[0-3]|" .
371             "5[0-7]|6[0-247]|7[0-357]|8[0-79]|90)|2(?:0[0-69]|" .
372             "1[0-2]|2[0-9]|3[0-9]|4[0-2]|5[0-579]|60|7[0-2]|" .
373             "8[1-46-9]|9[02-59])|3(?:0[0-69]|10|20|30|4[0-589]|" .
374             "5[2-47-9]|6[049]|7[0-369]|80|9[0-2])|4(?:0[0-8]|1[04]|" .
375             "20|30|40|50|60|70|80)|5(?:0[0-8]|1[013-8]|20|3[0-245]|" .
376             "40|50|60|70|80|90)|6(?:0[0-79]|10|20|3[1-4]|40|50|" .
377             "6[06]|70|90)|7(?:0[0-689]|10|2[13]|30|40|50|90)|" .
378             "8(?:0[0-68]|10|2[569]|3[013]|50|91)|9(?:0[1-69]|" .
379             "1[02-5]|2[12589]|50|99))|" .
380             "7(?:00[0-7]|1(?:0[0-9]|10|20|3[0-9]|40|50|60|70|90)|" .
381             "2(?:0[0-9]|10|20|30|40|50|60|70|90)|3(?:0[0-9]|10|20|" .
382             "30|40|50|60|70|80)|4(?:0[0-9]|10|30|40|50|60|70)|" .
383             "5(?:0[0-9]|10|20|30|60|70|80|90)|6(?:00|10|30|60|90)|" .
384             "7(?:00|90)|800)|" .
385             "8(?:0(?:0[0-6]|1[0134]|9[089])|1(?:0[1-79]|10|20|30|40|50|" .
386             "60|70|90)|2(?:0[0-9]|10|20|30|40|50|60|70|90)|" .
387             "3(?:0[02-5]|10|20|30|50|60|70|80|90)|4(?:00|10|30|40|" .
388             "50|60)|500|600|700|800)|" .
389             "9(?:0(?:0[0-47-9]|1[4-7])|1(?:0[0-59]|10|20|30|40|60|90)|" .
390             "2(?:0[019]|10|20|30|40|50|70|90)|3(?:0[01]|10|20|30|" .
391             "40|50|90)|4(?:0[01]|20|60)|500|600|700|800))" .
392              
393             "|1(?:0(?:0(?:0[0-9]|1[0-58]|2[56]|3[0-2]|42|8[0189]|9[126])|" .
394             "1(?:0[0-5]|10|2[0-28]|30|40|5[0-4]|60|70|80|90)|" .
395             "2(?:0[0-28]|10|20|30|40|50|60|70|80|90)|3(?:00|10|20|" .
396             "30|40|5[0-35]|60|7[01]|80|90)|4(?:0[0-4]|10|20|3[0-3]|" .
397             "40|50)|5(?:00|10)|60[0-356]|700|800|9(?:0[12]|10))|" .
398             "1(?:0(?:0[0-579]|1[0-25-7]|2[0-29])|1(?:0[0-9]|10|20|30|" .
399             "40|50|60|70|90)|2(?:0[0-589]|10|20|30|40|50|60|70|90)|" .
400             "3(?:0[0134]|10|20|30|40|50|60|70|80|90)|4(?:0[0-29]|" .
401             "10|20|30|40|5[1-3]|80|9[0-4])|5(?:00|10|40|60|70|80|" .
402             "90)|6(?:00|10|20)|7(?:00|8[12459]|90)|8(?:0[0235-8]|" .
403             "1[06]|23|3[3568]|48|5[05]|60|7[05-8]|8[05]|9[08]))|" .
404             "2(?:0(?:0[0-357-9]|19|2[0-9]|3[0-59]|40)|1(?:0[0-4689]|10|" .
405             "20|30|40|50|60|70|90)|2(?:0[0-4]|10|20|30|40|50|60|70|" .
406             "90)|3(?:00|10|20|30|40|50|60|70|80|90)|4(?:0[0-2]|10|" .
407             "20|30|40|50|60|70|80|90)|5(?:00|10|20|40|50|60|80)|" .
408             "6(?:00|20|30|40)|7(?:00|20|40|80)|8(?:00|50))|" .
409             "3(?:0(?:0[0-9]|1[0-6]|20|6[67]|8[0589]|9[0-9])|1(?:0[0-9]|" .
410             "1[0-9]|2[0-46-9]|3[0-389]|4[0-289]|5[0-35-9]|" .
411             "6[013-589]|7[078]|8[0-2]|9[0-26])|2(?:0[0-3579]|" .
412             "1[013-9]|2[0-8]|3[0-69]|4[0-589]|5[0-9]|6[0-9]|7[0-9]|" .
413             "8[0-24-9]|9[0-9])|3(?:0[0-46-9]|1[0-9]|2[0-8]|" .
414             "3[0-589]|4[02-8]|5[0-24-79]|6[0-46-9]|7[0-24-9]|" .
415             "8[0-9]|9[0-79])|4(?:0[0-46]|1[0-7]|2[014-68]|3[0-245]|" .
416             "4[0-8]|5[0-8]|6[02-47]|7[0-48]|8[0-49]|9[03])|" .
417             "5(?:0[0-3]|1[0-4689]|2[0-589]|3[0-389]|4[0-35-9]|" .
418             "5[0-289]|6[06-8]|7[02]|8[013]|9[0-49])|6(?:0[0-9]|" .
419             "1[0-24-79]|2[015-9]|3[0-357]|4[0-369]|5[0-689]|6[0-9]|" .
420             "7[0-8]|8[013-57-9]|9[0-9])|7(?:0[0-589]|1[02-9]|" .
421             "2[0-9]|3[0-3]|4[0-79]|5[0-257-9]|6[046]|7[0-9]|" .
422             "8[0-59]|9[0-9])|8(?:0[0-9]|1[02-5]|2[0-589]|3[0-689]|" .
423             "4[0-24-7]|5[0-9]|6[0-478]|70|8[01379]|9[05])|" .
424             "9(?:0[024-8]|1[01]|2[0-4]|3[0-37]|4[0-2]|50|60|80|90))|" .
425             "4(?:0(?:0[05-9]|1[0-9]|2[03-9]|3[0-9]|4[05-8]|5[0-489]|" .
426             "6[1-7]|7[04-9]|8[1-69]|9[0-9])|1(?:0[0-9]|1[0-47]|" .
427             "2[0135-8]|30|40|50|6[0-258]|70|90)|2(?:0[0-57-9]|10|" .
428             "20|30|40|50|60|70|80|90)|3(?:10|20|30|40|50|60|70|80|" .
429             "90)|4(?:0[0-9]|10|20|30|40|50|6[0-29]|70|80|90)|" .
430             "5(?:0[0-589]|10|20|30|40|50|70|90)|6(?:0[0-3]|10|20|" .
431             "30|40|5[0-49]|70|80|90)|7(?:00|10|30|40|50|60|70|80|" .
432             "9[01])|8(?:0[0-9]|10|30|40|50|60|80)|9(?:0[1-9]|" .
433             "1[0-69]|2[0-6]|3[0-4]|4[09]|50|60|70|80|90))|" .
434             "5(?:0(?:0[0-8]|1[0-57-9])|1(?:0[0-79]|10|20|30|40|50|60|" .
435             "70|90)|2(?:00|10|2[09]|30|40|50|60|70|90)|3(?:00|10|" .
436             "20|40|50|80)|4(?:00|30)|5(?:00|90)|600|700|800)|" .
437             "6(?:0(?:0[0-8]|1[0-9]|2[0-6])|1(?:0[0-9]|1[0-3]|2[01]|30|" .
438             "40|50|60|70|90)|2(?:00|10|20|30|40|50|60|70|90)|" .
439             "3(?:00|10|20|30|40|50|60|70|80|90)|4(?:00|10|20|30|40|" .
440             "50|60|70|80|90)|5(?:00|10|60|70|90)|6(?:00|20)|7(?:00|" .
441             "10|20|30)|800|9(?:0[1-9]|1[0-9]|2[09]|5[0-59]|99))|" .
442             "7(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-5]|5[1-6]|" .
443             "7[1-689]|8[6-9])|1(?:0[0-9]|1[0-9]|2[013]|3[0236-9]|" .
444             "40|50|60|70|8[0-9]|90)|2(?:0[0-9]|1[0145]|20|30|40|50|" .
445             "60|70|8[1459]|90)|3(?:0[0-9]|1[0-4]|20|30|40|50|60|70|" .
446             "80|90)|4(?:00|1[0-69]|20|30|4[0-69]|50|60|70|80|90)|" .
447             "5(?:0[0-49]|10|20|30|40|50|60|70|80|90)|6(?:00|10|20|" .
448             "30|40|50|70|90)|7(?:00|30|40|50|70|80)|8(?:00|10|40|" .
449             "70|80|90)|9(?:20|40))|" .
450             "8(?:0(?:0[0-7]|1[2-69]|2[0-9]|3[0-79])|1(?:0[0-9]|10|20|" .
451             "30|40|50|60|70|90)|2(?:0[0-7]|10|20|30|40|50|60|70|" .
452             "90)|3(?:00|10|20|30|40|50|60|70|80|90)|4(?:00|10)|" .
453             "5(?:00|10|20|70)|600|700|800|9(?:1[01]|2[02-4]|3[459]|" .
454             "4[015]|98))|" .
455             "9(?:0(?:0[0-79]|1[1257-9]|33)|1(?:0[0-9]|1[01346-9]|20|30|" .
456             "40|50|60|70|90)|2(?:0[0-489]|10|20|3[0-2]|40|50|60|70|" .
457             "90)|3(?:00|1[0-9]|20|30|40|50|6[01]|70|80|90)|4(?:00|" .
458             "10|30|50|60|70|90)|5(?:00|10|20|50|60)|600|700|800))" .
459              
460             "|2(?:0(?:0(?:00|90)|1(?:00|1[0-9]|2[1-9]|3[0-9]|4[0-8]|5[0-37]|" .
461             "6[02-9]|7[0-9]|8[0-9]|9[0-57-9])|2(?:00|1[2-57-9]|" .
462             "2[0-9]|3[0-9]|4[02-8]|5[0-369]|60|7[02569]|8[7-9]|" .
463             "9[0-9])|3(?:0[2-69]|11)|4(?:0[1-35-9]|1[0-46-9])|" .
464             "5(?:0[1-4]|3[78])|6(?:0[014]|11|20)|70[0-3]|900)|" .
465             "1(?:0(?:0[0-9]|1[0-9]|2[1-9]|3[0-9]|4[0-9]|5[1-9]|" .
466             "6[0-35-9]|7[0-9]|8[013-689]|9[2378])|1(?:10|2[01]|30|" .
467             "40|50|60|70|90)|2(?:0[0-9]|1[09]|20|30|40|50|6[0-2]|" .
468             "70|90)|3(?:0[0-59]|10|20|30|40|50|60|70|80|90)|" .
469             "4(?:0[0-39]|10|20|30|40|50|60|70|90)|5(?:0[0-269]|10|" .
470             "20|30|40|50|60|70|80|90)|6(?:0[0-49]|10|30|40|90)|" .
471             "7(?:0[0-59]|19|60)|8(?:0[0-369]|20|50)|9(?:00|10|98))|" .
472             "2(?:0(?:0[0-5]|1[4-7]|2[1-79]|3[1-5]|4[1-69]|7[09]|8[09]|" .
473             "9[1-35689])|1(?:0[0-9]|1[01]|20|30|40|50|60|70|" .
474             "9[0-69])|2(?:0[0-69]|10|20|30|40|50|60|70|90)|" .
475             "3(?:0[0-9]|10|20|30|40|50|60|70|80|90)|4(?:0[02-59]|" .
476             "10|20|30|40|50|60|70|80|90)|5(?:0[0-59]|10|20|30|40|" .
477             "50|60|70|80|90)|6(?:0[02-79]|10|20|30|40|50|60|80|90)|" .
478             "7(?:00|10|20|30|40|50|70|80)|8(?:00|10|20|30|60|70)|" .
479             "9(?:30|40|50|60|70|80))|" .
480             "3(?:0(?:0[0-9]|1[13-6]|20)|1(?:00|10|20|30|40|50|60|70|" .
481             "90)|2(?:00|10|20|30|40|50|60|70|90)|3(?:00|20|40|50|" .
482             "60|80)|4(?:00|20|30|50|60|80)|500|600|700|800)|" .
483             "4(?:0(?:0[0-579]|1[0-79]|2[0249]|5[0-359]|60)|" .
484             "1(?:0[0-24-9]|1[0-4]|2[0-2]|30|40|50|60|70|90)|" .
485             "2(?:0[0-689]|1[02]|20|30|40|50|60|70|90)|3(?:00|10|20|" .
486             "30|40|50|60|70|80|90)|4(?:00|10|20|30|40|50|60|70|80|" .
487             "90)|5(?:00|10|20|30|40|50|60|70|80|90)|6(?:00|10|20|" .
488             "30|40|50|60|80)|7(?:00|5[0-2589])|800|9(?:1[0235]|26))|" .
489             "5(?:0(?:0[0-9]|1[0-9]|2[0-79]|3[0-9]|4[0-9]|5[0-246-9]|" .
490             "6[0-389]|7[0-359]|8[02-79]|9[089])|1(?:1[0-9]|20|30|" .
491             "40|50|60|70|90)|2(?:0[0-9]|1[0-9]|20|30|40|50|60|70|" .
492             "90)|3(?:0[0-49]|10|20|30|40|50|60|70|80|90)|" .
493             "4(?:0[0-69]|10|20|30|40|50|6[0-29]|7[09]|80|90)|" .
494             "5(?:0[0-489]|10|20|30|50|60|70|80)|6(?:0[0-9]|10|20|" .
495             "30|40|50|60|80|90)|7(?:0[0-26-9]|20|50|70|90)|8(?:00|" .
496             "20|40|70)|9(?:09|20|3[0-3]|60))|" .
497             "6(?:0(?:0[0-9]|1[0-5]|2[1-9]|3[0-2])|1(?:0[0-9]|1[019]|20|" .
498             "3[01]|40|50|60|70|9[09])|2(?:0[0-9]|1[056]|20|30|" .
499             "4[0-49]|50|60|70|90)|3(?:0[0-49]|10|20|30|40|50|80|" .
500             "90)|4(?:0[0-29]|10|20|50|60|70)|5(?:0[0-49]|10|30|40|" .
501             "60|70)|6(?:0[0-39]|20)|7(?:0[0-29]|30|40|50|6[01]|70|" .
502             "80|90)|80[0-29]|9(?:0[1-79]|5[0-68]))|" .
503             "7(?:0(?:0[0-9]|1[0235-9]|2[1-356]|3[0-9]|40|9[0-9])|" .
504             "1(?:0[0-9]|10|2[0-27]|3[0-8]|40|50|60|70|80|90)|" .
505             "2(?:0[0-9]|10|20|30|40|50|60|70|90)|3(?:0[0-9]|10|20|" .
506             "30|40|50|60|70|80|90)|4(?:0[0-79]|10|20|30|40|50|60|" .
507             "70|80|90)|5(?:0[0-9]|10|20|30|40|50|60|70|80|90)|" .
508             "6(?:0[07]|10|20|30|40|50|60|70|80|90)|7(?:0[0-35]|10|" .
509             "20|30|40|50|60|70|80|90)|8(?:00|10|20|30|50|60|70|90)|" .
510             "9(?:09|1[014]|2[0489]|3[0-369]|4[09]|50))|" .
511             "8(?:0(?:0[0-9]|1[189]|2[3-69]|3[3-9]|4[04]|8[08])|" .
512             "1(?:0[0-689]|1[0-49]|20|3[0-3]|40|50|60|70|90)|" .
513             "2(?:0[0-3579]|1[01]|20|3[0-24]|40|50|60|70|90)|" .
514             "3(?:0[0-59]|10|20|30|40|50|60|80)|4(?:0[0-49]|10|" .
515             "8[019])|50[01]|6(?:00|3[0-3679])|70[0-379]|800|9(?:01|" .
516             "10|20|3[0-35]|44|50))|" .
517             "9(?:0(?:00|18|80)|1(?:0[0-9]|2[0-59]|40|50|60|7[0-4679]|" .
518             "8[0-79]|9[0-369])|2(?:0[06-9]|1[0-37-9]|2[0-57-9]|" .
519             "3[138]|4[0-26]|5[0239]|60|70|8[029]|9[09])|3(?:00|10|" .
520             "2[0-8]|3[0-7]|40|50|60|70|80|9[0-9])|4(?:0[0-4679]|" .
521             "1[0-49]|20|30|40|5[05]|60|70|80|90)|5(?:00|10|20|30|" .
522             "40|5[0-9]|6[013]|70|90)|6(?:0[0269]|10|20|30|40|50|60|" .
523             "7[0-489]|8[0-2489]|90)|7(?:00|10|20|30|40|50|60|70|80|" .
524             "90)|8(?:0[0-46-9]|10|2[0457]|3[03-79]|40|50|60|70|80|" .
525             "90)|9(?:00|10|20|30|40|50|70|80|90)))" .
526              
527             "|3(?:0(?:0(?:0[0-36-9]|1[0-9]|2[0-589]|3[1-69]|4[04589]|" .
528             "5[015])|1(?:0[0-79]|1[0-2459]|2[0-9]|3[0-49]|40|50|60|" .
529             "70|90)|2(?:0[0-79]|10|20|30|40|5[0-35]|60|70|90)|" .
530             "3(?:0[0-2]|1[01389]|20|30|40|50|60|80|90)|4(?:0[0-69]|" .
531             "10|20|30|40|50|60|70|80|90)|5(?:00|10|20|30|40|60|70|" .
532             "80)|6(?:00|10|20|30|40|50|60|70)|7(?:0[0-3]|20|30|40|" .
533             "50|60|70)|8(?:00|20|40|70)|9(?:0[013-8]|1[0-48]|" .
534             "2[0-59]|3[124-79]|4[0-37]|6[09]|7[125]|80))|" .
535             "1(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|" .
536             "7[0-9]|8[0-24-689]|9[0-9])|1(?:0[0-4679]|1[02]|2[0-9]|" .
537             "3[0-9]|4[0-29]|5[0-259]|60|70|8[09]|90)|2(?:0[013-5]|" .
538             "10|20|30|4[0-59]|50|60|70|8[09]|90)|3(?:00|1[02-579]|" .
539             "2[0-2569]|30|40|50|60|70|8[09]|90)|4(?:0[0-6]|10|20|" .
540             "3[02]|40|50|60|70|8[09]|90)|5(?:0[03-7]|1[02]|" .
541             "2[0-249]|30|40|50|60|70|8[09]|90)|6(?:0[0-689]|2[019]|" .
542             "50|60|7[0-9]|8[1-359]|92)|7(?:0[0-9]|1[1256]|50|" .
543             "7[0-4679]|80|90)|8(?:0[0-79]|10|20|3[0-29]|40|50|60|" .
544             "70|80)|9(?:0[0-3]|31|4[57]|5[078]|6[02]|9[89]))|" .
545             "2(?:0(?:0[0-57-9]|1[0-46-9]|2[0-2])|1(?:00|10|2[09]|30|40|" .
546             "50|60|70|90)|2(?:0[019]|20|30|40|50|60|70|90)|3(?:00|" .
547             "10|20|30|40|50|60|70|80|90)|4(?:00|10|20|30|40|50|60|" .
548             "80|90)|5(?:0[0-259]|50)|600|7(?:00|20|30)|8(?:00|10))|" .
549             "3(?:0(?:0[0-24-9]|1[0-259]|2[013-9]|3[0-8]|4[0-37-9]|" .
550             "5[0-9]|6[0-9]|7[0-9]|8[0-9]|9[0-9])|1(?:00|1[02-6]|" .
551             "2[013-7]|3[038]|4[018]|5[0-35]|6[04-79]|7[0-5]|" .
552             "8[05-7]|9[0-3])|2(?:00|1[0-49]|20|30|40|50|60|" .
553             "7[0-489]|9[0-5])|3(?:0[0569]|1[0-49]|2[0-4679]|3[05]|" .
554             "4[01]|50|60|70|80|9[0-5])|4(?:0[0-59]|10|20|30|40|" .
555             "5[0-2]|6[019]|70|80|9[0-25])|5(?:0[0-79]|1[05]|" .
556             "2[0-79]|30|40|50|6[0-5]|70|80|90)|6(?:0[0-9]|1[0-5]|" .
557             "2[015-79]|40|5[02]|60|70|8[089]|9[0-9])|7(?:0[0-9]|10|" .
558             "20|3[0-9]|4[017]|50|60|70|80|90)|8(?:0[01]|10|20|30|" .
559             "40|50|60|70|8[0-7]|90)|9(?:0[0-79]|1[0-589]|20|30|50|" .
560             "70|80|9[08]))|" .
561             "4(?:0(?:0[0-46-9]|1[0-2]|2[3-8]|3[02-57-9]|4[0-35689]|" .
562             "5[13-68]|6[0-8]|7[0-9]|8[0235-79]|9[0-9])|1(?:1[0-9]|" .
563             "20|3[0-27-9]|40|50|60|7[0-489]|8[13467]|9[0-9])|" .
564             "2(?:0[0-479]|10|20|30|40|50|6[0-7]|7[04]|80|9[03-9])|" .
565             "3(?:0[0-579]|10|20|30|40|50|60|70|80|9[0-46-9])|" .
566             "4(?:0[0-49]|10|20|3[013-589]|40|50|60|7[037]|80|90)|" .
567             "5(?:0[0-8]|1[03-8]|2[0-69]|3[04-79]|4[03-5]|50|6[04]|" .
568             "70|90)|6(?:00|10|20|30|50|60|7[01]|80|90)|7(?:0[0-2]|" .
569             "10|2[05]|30|4[0-27-9]|5[013]|60|70|90)|8(?:00|10|20|" .
570             "30|50|7[1-5]|80)|9(?:00|2[0356]|3[2-57-9]|4[02-489]|" .
571             "5[4-9]|6[0-2457]|7[02-57]|8[0-79]|90))|" .
572             "5(?:0(?:0[0-9]|1[0-24-68]|2[0-46-9]|3[0-59]|4[02-79]|" .
573             "5[0-57-9]|6[3-79]|7[013689]|8[0-9]|9[0-49])|" .
574             "1(?:0[1-689]|1[134]|20|3[0-7]|40|50|6[0-469]|" .
575             "7[0-24-7]|90)|2(?:0[0-57-9]|10|2[01]|3[056]|40|50|60|" .
576             "70|90)|3(?:0[0-69]|10|20|30|4[0-259]|50|60|70|80|90)|" .
577             "4(?:0[0-9]|1[0-9]|20|3[0-359]|40|50|60|70|80|90)|" .
578             "5(?:0[0-79]|1[0-9]|2[01]|3[0-389]|40|50|60|7[1-46-9]|" .
579             "80|90)|6(?:0[0-356]|10|20|30|40|5[0-39]|60|80|90)|" .
580             "7(?:0[0-9]|11|20|30|4[0-46]|50|6[0-9]|7[0-2]|80)|" .
581             "8(?:0[0-3]|3[0-3]|50|70|90)|9(?:0[0-9]|1[1-9]|2[01]|" .
582             "60|98))|" .
583             "6(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[23])|1(?:0[0-579]|10|20|" .
584             "3[01]|40|50|60|70|80|90)|2(?:00|10|20|30|40|5[05]|60|" .
585             "70|90)|3(?:0[01]|10|20|30|40|50|60|70)|400|50[015]|" .
586             "600|700|800|91[05])|" .
587             "7(?:0(?:0[089]|1[0-9]|2[05-9]|3[2-589]|4[0-57-9]|5[89]|" .
588             "6[01]|7[1-9]|8[0-29]|9[5-9])|1(?:00|10|20|30|40|5[02]|" .
589             "60|7[0-59]|90)|2(?:0[04-69]|10|20|30|40|50|60|70|90)|" .
590             "3(?:0[0-69]|10|2[01]|30|40|50|60|70|80|90)|" .
591             "4(?:0[0-49]|20|60)|5(?:0[0-29]|10|2[01]|30|4[0-29]|" .
592             "5[0-6])|60[0-29]|70[0-359]|800|9(?:1[0-357]|2[124-9]|" .
593             "3[12]|4[12]))|" .
594             "8(?:0(?:0[0-9]|1[0-9]|2[1-9]|3[0-79]|4[0-9]|5[0-4689]|" .
595             "6[135-79]|7[047]|8[019]|9[0-36-9])|1(?:00|1[02-489]|" .
596             "2[0-2]|3[048]|4[0246-8]|5[02-49]|6[0-59]|7[0-469]|80|" .
597             "9[0167])|2(?:0[0-9]|1[016-9]|20|3[0-26]|4[0-469]|" .
598             "5[06]|6[019]|70|80|9[0-35-79])|3(?:0[0-579]|1[1-579]|" .
599             "2[0-2679]|3[0-4]|4[0-35-79]|5[0-46-9]|6[01]|70|80|90)|" .
600             "4(?:0[0-9]|10|20|3[0-79]|40|50|60|70|80|90)|" .
601             "5(?:0[0-9]|1[0169]|2[0-469]|30|40|5[0-79]|60|70|80|" .
602             "9[01])|6(?:0[0-39]|10|20|30|40|50|60|70|80|90)|" .
603             "7(?:0[0-26-9]|10|3[01]|40|50|6[01379]|70|8[0-249]|90)|" .
604             "8(?:0[0-3]|1[67]|21|30|40|50|60|70|80|90)|9(?:00|13|" .
605             "2[0167]|30|4[0134]|50|60|70|80))|" .
606             "9(?:0(?:0[0-9]|1[056]|2[19]|3[0-9])|1(?:0[0-9]|10|20|30|" .
607             "40|50|60|7[01]|8[019]|90)|2(?:0[0-9]|1[019]|20|30|40|" .
608             "50|6[01]|70|90)|3(?:0[0-9]|10|20|30|50|60|70|80)|" .
609             "4(?:0[0-9]|10|60)|5(?:0[0-2]|20|70)|60[0-359]|700|" .
610             "80[0-9]))" .
611              
612             "|4(?:0(?:0(?:0[0-6]|1[1-35-9]|2[1-7]|90)|1(?:0[0-8]|1[058]|20|" .
613             "30|4[01]|50|6[01]|70|80|90)|2(?:0[0-2]|10|20|3[0-259]|" .
614             "40|50|60|70|8[0-26]|90)|3(?:0[0159]|10|20|30|50|60|70|" .
615             "80|90)|4(?:00|10|20|30|40|6[05]|80)|5(?:0[0-2]|10|30|" .
616             "50|60)|6(?:0[0-2]|30|60)|70[015]|80[015]|99[0-4])|" .
617             "1(?:0(?:0[0-9]|1[0-35689]|2[0235689]|3[3-5]|4[23])|" .
618             "1(?:0[0-3569]|10|2[0-2]|30|40|5[01]|60|70|90)|" .
619             "2(?:0[0-7]|10|20|30|40|50|6[01]|70|90)|3(?:00|10|20|" .
620             "30|5[03-57]|60|70)|40[0-26]|500|600|700|800|" .
621             "9(?:0[13-689]|1[03-589]|2[145]|3[0-36]|4[1-3589]|" .
622             "5[018]|6[03-8]|7[0-6]))|" .
623             "2(?:0(?:0[0-9]|1[0-8]|2[1-9]|3[013]|4[1-357-9]|5[0589])|" .
624             "1(?:00|1[014]|2[02-79]|3[01]|40|5[0235]|6[0-9]|" .
625             "7[03469]|90)|2(?:10|20|30|40|60|7[0-35-79]|90)|" .
626             "3(?:0[0-48]|1[0-58]|2[0-38]|3[02-59]|40|5[013-69]|60|" .
627             "70|80|90)|4(?:0[0-9]|1[0-2]|20|30|40|50|60|70|8[0469]|" .
628             "90)|5(?:0[0-359]|10|20|30|40|50|60|70|80|90)|" .
629             "6(?:0[0-9]|10|20|30|40|5[013]|60|70|80)|7(?:0[0-579]|" .
630             "20|40|50|80)|8(?:0[0-9]|10|20|30|40|90)|9(?:20|40|" .
631             "5[0-589]|6[1-9]|90))|" .
632             "3(?:0(?:0[0-689]|1[0-479])|1(?:0[0-3]|10|20|30|40|50|60|" .
633             "70|90)|2(?:0[0-3]|10|20|30|40|50|60|70|90)|3(?:00|20|" .
634             "30|40|50|60|70|80|90)|4(?:00|10|20|30|40|50|90)|" .
635             "5(?:00|10|20|30|50|80|90)|6(?:00|20)|7(?:00|50|70)|" .
636             "8(?:00|10))|" .
637             "4(?:0(?:0[0-9]|1[0-9]|2[0-4]|3[2-68]|4[0-267]|9[02-579])|" .
638             "1(?:0[0-79]|1[05-9]|2[0-469]|30|4[0-69]|5[0-9]|60|" .
639             "7[069]|8[4-8]|9[0-689])|2(?:0[0-59]|1[0-79]|20|" .
640             "3[0-69]|4[0-59]|50|6[0-358]|7[02-7]|90)|3(?:0[0-9]|" .
641             "1[0-9]|2[0-9]|3[0-9]|4[0-69]|5[0-36-9]|60|7[0-39]|80|" .
642             "90)|4(?:0[0-9]|1[02]|20|30|40|50|60|7[0-9]|8[0-4]|90)|" .
643             "5(?:0[0-69]|10|2[0-2]|30|40|50|60|70|80|90)|" .
644             "6(?:0[0-69]|1[0-8]|20|30|40|50|60|70|80|90)|" .
645             "7(?:0[0-36-9]|10|20|30|40|50|60|70|80)|8(?:0[0-9]|" .
646             "1[0-9]|2[1-49]|30|40|50|60|80)|9(?:00|1[1-9]|2[1-9]|" .
647             "3[1-9]|4[124579]|5[1-9]|6[3-9]|7[1-8]|8[0-69]))|" .
648             "5(?:0(?:0[0-9]|1[0-25-79]|2[13589]|3[0-58]|4[0-6]|" .
649             "5[236-8]|6[0-57-9]|7[1-57-9]|8[1278])|1(?:00|10|" .
650             "2[0-259]|30|4[0-79]|50|6[0-689]|70|90)|2(?:0[0-9]|" .
651             "1[0-4]|20|30|40|50|60|70|90)|3(?:0[02-8]|1[02]|20|" .
652             "3[01]|40|60|70|80|90)|4(?:0[0-469]|10|20|3[0-3]|50|60|" .
653             "70|80|90)|5(?:0[0-4]|10|20|30|50|60|70|90)|6(?:00|20|" .
654             "30|40|5[0156]|80)|7(?:0[0-29]|20|30|40|50|60|" .
655             "7[01457])|8(?:0[0-9]|11)|9(?:00|1[0-35-9]|2[0-79]|" .
656             "3[0-8]|4[3-9]|5[0-7]|6[0-9]|7[0-9]|80))|" .
657             "6(?:0(?:0[0-589]|1[04-9]|2[0-3]|9[01])|1(?:0[0-36]|10|20|" .
658             "30|40|50|60|70|90)|2(?:00|10|20|30|40|50|60|70)|" .
659             "3(?:00|10|20|30|40|50|60)|400|500|600|700|800)|" .
660             "7(?:0(?:0[02-8]|13|2[03]|3[0-29])|1(?:10|20|30|40|50|60|" .
661             "70|80|90)|2(?:0[0-57-9]|1[013]|20|30|40|50|60|70|90)|" .
662             "3(?:0[0-57-9]|10|20|30|40|50|60|70|80|90)|4(?:00|10|" .
663             "20|30|40|50|70|80)|5(?:0[0-2]|10|20|5[0-359])|600|700|" .
664             "800|9(?:0[19]|1[0-8]|2[0-59]|31))|" .
665             "8(?:00[0-35-9]|1(?:00|10|20|30|40|50|60|70|90)|2(?:00|10|" .
666             "20|30|40|50|60|70)|3(?:00|10|20|30|40|70)|400|500|600|" .
667             "700|800)|" .
668             "9(?:0(?:0[0-46-9]|1[014-8]|2[0-468]|3[2356]|4[13-79]|" .
669             "5[1-359]|66|7[0-29]|80)|1(?:0[0-79]|1[0-25-79]|" .
670             "2[02-5]|3[05-79]|40|50|60|70|8[0-4]|90)|2(?:20|30|" .
671             "4[0-59]|50|60|70|80|90)|3(?:0[0-9]|1[0-249]|2[0157-9]|" .
672             "30|40|50|60|70|80|90)|4(?:0[0-689]|1[0-578]|2[015-8]|" .
673             "30|40|5[068]|60|8[0146]|90)|5(?:0[0-59]|10|20|30|40|" .
674             "60|70|90)|6(?:0[0-29]|10|20|30|40|50|60|70|80|90)|" .
675             "7(?:00|10|30|40|50|70)|80[0-59]|9(?:0[56]|1[1-39]|" .
676             "2[57]|3[347-9]|4[19])))" .
677              
678             "|5(?:0(?:0(?:0[0-9]|1[0-6]|50)|1(?:0[0-9]|1[03-5]|20|3[01]|40|" .
679             "50|60|70|80|90)|2(?:0[0-9]|1[01]|20|30|40|50|60|70|" .
680             "90)|3(?:0[0-9]|10|20|30|40|50|60|70|80|90)|" .
681             "4(?:0[0-79]|10|20|30|4[0-24-9]|50|60|70|80|90)|5(?:00|" .
682             "10|20|30|40|50|60|70|80|90)|6(?:00|10|20|30|40|5[12]|" .
683             "60|70|80|90)|7(?:00|10|20|30|40|50|60|70)|8(?:00|10|" .
684             "40|50|60|70|80|90)|95[018])|" .
685             "1(?:0(?:0[015-9]|1[0-367]|2[12]|3[5-9]|4[1-3]|5[1-9]|" .
686             "6[0-9]|7[0-79]|8[0-46-9]|9[025-79])|1(?:00|10|2[0-2]|" .
687             "30|40|50|60|70|90)|2(?:0[0-9]|10|20|30|40|50|60|70|" .
688             "90)|3(?:0[0-689]|1[089]|20|3[0-4]|4[09]|50|6[01]|70|" .
689             "80|90)|4(?:0[01]|20|3[0-5]|50|60|70|80|90)|5(?:00|10|" .
690             "20|30|7[1-3])|6(?:0[01]|6[2-4]|7[357-9]|8[2-9])|" .
691             "7(?:00|1[35]|2[1-36])|8(?:0[01]|7[13]|8[46])|90[024])|" .
692             "2(?:0(?:0[0-8]|1[1246])|1(?:0[0-9]|1[0-35]|20|30|40|50|60|" .
693             "70|90)|2(?:0[0-9]|10|20|30|40|50|60|70|90)|3(?:0[01]|" .
694             "10|20|30|40|60|70)|4(?:00|10)|50[0-2]|600|700|800|" .
695             "9(?:0[1-6]|1[579]|20))|" .
696             "3(?:0(?:0[0-9]|1[02-69]|2[0-2]|3[0-2]|6[0-39]|73|8[0-9]|" .
697             "9[013-589])|1(?:0[0-59]|10|20|40|50|60|70|90)|" .
698             "2(?:0[0-5]|10|20|30|40|50|60|70|90)|3(?:00|20|40|50|" .
699             "60|70|80|90)|4(?:00|10|20|40|70|80)|5(?:00|40)|" .
700             "6(?:0[0-2]|40)|700|8(?:00|1[01])|9(?:4[0-2]|5[01]|60|" .
701             "7[01]))|" .
702             "4(?:0(?:0[0-9]|1[0-7]|2[0-39]|3[125-9]|4[1-35-9]|5[2-46]|" .
703             "6[2-4]|7[1-46]|82|9[6-8])|1(?:00|1[0-689]|2[0-39]|" .
704             "3[0-689]|40|5[0-49]|60|70|8[0-69]|90)|2(?:0[0-69]|" .
705             "1[01]|20|30|40|50|6[0-3]|7[0-39]|80|90)|3(?:0[0-59]|" .
706             "1[0-29]|20|30|40|50|60|70|8[05]|90)|4(?:0[0-69]|" .
707             "1[0-4]|2[05]|30|40|50|60|70|80|90)|5(?:0[0-79]|" .
708             "1[0-79]|2[0-9]|30|40|50|60|70|80|90)|6(?:0[0-389]|10|" .
709             "20|30|40|50|60|70|80|90)|7(?:0[0-689]|1[0-69]|20|30|" .
710             "40|50|60|70|80|90)|8(?:0[0-3]|10|20|30|40|50|60|70|80|" .
711             "90)|9(?:00|10|20|3[01349]|4[01]|50|60|70|80|90))|" .
712             "5(?:0(?:0[0-35-8]|1[2-5]|2[01])|1(?:0[0-9]|1[0239]|20|30|" .
713             "40|50|60|70|90)|2(?:0[0-35]|10|2[01]|30|40|50|60|" .
714             "7[01]|90)|3(?:00|10|20)|4(?:00|30)|500|600|700|8(?:00|" .
715             "40))|" .
716             "6(?:0(?:0[0-9]|1[06-9]|2[09]|3[46-9])|1(?:0[0-9]|10|20|30|" .
717             "40|50|60|7[0-589]|90)|2(?:0[01479]|19|20|3[019]|40|50|" .
718             "60|7[0-79]|90)|3(?:0[0-9]|1[0-279]|2[0-9]|30|4[0-39]|" .
719             "50|60|70|8[0-3]|90)|4(?:0[0-79]|1[0139]|20|30|40|50|" .
720             "60|70|80|90)|5(?:0[0-469]|10|20|3[0-2569]|40|50|60|70|" .
721             "80|90)|6(?:0[0-379]|10|20|30|40|50|60|70|80|90)|" .
722             "7(?:0[0-59]|30|40|50|60|70|80)|8(?:0[0-59]|40|5[045]|" .
723             "60|70|80|9[0-369])|9(?:0[0-39]|10|20|30|5[014679]|" .
724             "7[0379]|98))|" .
725             "7(?:0(?:0[03-9]|1[0-9]|2[0138]|3[0-8]|4[014-69]|5[0-4679]|" .
726             "6[1-3]|7[0-9]|8[1-4])|1(?:0[0-689]|19|2[05-9]|3[0-3]|" .
727             "4[0146-9]|5[0-579]|6[0-49]|7[05]|8[015]|9[0-39])|" .
728             "2(?:0[0-9]|1[124-9]|20|3[0-4]|4[05]|5[05]|60|70|" .
729             "8[0-39]|9[0-29])|3(?:0[0-49]|10|20|30|40|5[0-249]|" .
730             "6[0-359]|7[0-39]|8[0-35]|90)|4(?:0[0-59]|1[025]|20|30|" .
731             "4[05]|5[05]|60|70|80|90)|5(?:0[0-9]|1[05]|2[05]|3[05]|" .
732             "40|50|6[05]|70|80|90)|6(?:0[0-9]|1[09]|20|3[05]|4[05]|" .
733             "5[05]|60|70|8[05]|90)|7(?:0[0-59]|10|20|3[019]|4[078]|" .
734             "5[167]|7[02478]|80|90)|8(?:0[013-59]|1[05]|20|30|40|" .
735             "5[05]|6[05]|70|80|90)|9(?:05|1[0-3569]|2[05]|3[05]|40|" .
736             "5[0-57-9]|60|7[0-489]|80|90))|" .
737             "8(?:0(?:0[0-9]|1[3-9]|2[02-9]|3[3469])|1(?:10|20|30|40|50|" .
738             "60|70|80|90)|2(?:0[0-9]|10|20|30|40|50|60|70|90)|" .
739             "3(?:0[0-2]|10|20|30|40|50|60|70|80|90)|4(?:0[0-5]|10|" .
740             "20|30|40|50|60|70|90)|5(?:0[0-38]|30)|6(?:00|4[0-39]|" .
741             "60)|700|800)|" .
742             "9(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[1-9]|" .
743             "6[0-3569]|7[0-489]|8[0-46-8]|9[127])|1(?:0[08]|1[0-9]|" .
744             "2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[0-24-9]|" .
745             "9[0-589])|2(?:0[0237-9]|1[0-9]|2[0-79]|3[0-9]|4[0-79]|" .
746             "5[0-589]|6[0-9]|7[0-57-9]|8[0-8]|9[02-79])|3(?:0[0-9]|" .
747             "1[0-9]|2[0-2689]|3[0-9]|4[1569]|5[0189]|6[0-5]|" .
748             "7[03-9]|8[0-3569]|9[0-39])|4(?:0[0-9]|1[0-369]|" .
749             "2[0-24-9]|3[0-35-7]|4[0-9]|5[0-35-8]|6[0-8]|7[0-689]|" .
750             "8[0-35-7]|9[0-7])|5(?:0[0-9]|10|2[02-49]|3[0-25-7]|" .
751             "4[0-4]|5[0-57-9]|6[0-47-9]|7[0-3]|8[0-46-9]|90)|" .
752             "6(?:0[0-8]|1[0-38]|20|3[0579]|40|5[0-9]|6[0-79]|" .
753             "7[0-37]|8[0-35-79]|90)|7(?:0[0-9]|1[0-9]|2[0-367]|" .
754             "3[0-5]|40|50|60|7[079]|8[0-57-9]|9[0-2])|8(?:00|" .
755             "1[0-8]|20|3[0-289]|4[057-9]|5[0-39]|6[0-9]|7[0-8]|" .
756             "8[0-579]|9[0-9])|9(?:00|10|20|3[0-3]|4[0-48]|5[0-2]|" .
757             "6[0-57]|7[0-2569]|8[014]|9[08])))" .
758              
759             "|6(?:0(?:0(?:0[024-9]|1[0-9]|2[1-9]|3[15])|1(?:0[0-9]|1[0-9]|" .
760             "2[0-36-9]|3[0-248]|4[019]|5[0357]|6[02]|7[035]|" .
761             "8[013-5]|90)|2(?:0[0-9]|10|20|30|40|5[0-2]|60|7[01]|" .
762             "8[01]|9[0-39])|3(?:0[0-9]|1[0-9]|2[0139]|3[02]|40|50|" .
763             "60|70|80|90)|4(?:0[0-369]|10|20|3[0-7]|40|51|60|7[67]|" .
764             "80|90)|5(?:0[0134689]|10|20|30|4[0-4]|5[0-2]|60|70|80|" .
765             "90)|6(?:0[0237-9]|1[0-27-9]|20|3[1-57-9]|4[036-9]|50|" .
766             "60|7[1247]|80|90)|7(?:00|1[01]|2[1-39]|3[0-24]|" .
767             "4[0-59]|5[01]|6[125]|7[12679]|90)|8(?:0[0-5]|10|20|" .
768             "3[1-3]|40|50|60|7[0-2]|80|90)|9(?:0[2389]|1[12]|" .
769             "2[1-4]|3[0-2]|40|50|60|81))|" .
770             "1(?:0(?:0[0-9]|1[1-9]|2[1-4]|4[12]|51)|1(?:0[0-79]|10|20|" .
771             "30|40|50|60|70|90)|2(?:0[0-689]|10|20|30|40|50|60|70|" .
772             "90)|3(?:0[0-6]|10|20|30|40|50|60|70|80|90)|4(?:00|10|" .
773             "20|3[08]|4[08]|5[08]|70|90)|5(?:00|50|60|70)|600|" .
774             "7(?:00|90)|8(?:00|91)|9(?:61|84|9[24]))|" .
775             "2(?:0(?:0[0-57-9]|1[0-9]|2[0-9]|3[0-46]|5[1-59]|6[0-79]|" .
776             "7[0-29]|8[019]|9[0-2])|1(?:0[0-9]|1[0-46-9]|2[0-46-9]|" .
777             "3[0-246-9]|4[0-579]|5[0-35-9]|6[0-24-69]|7[023569]|" .
778             "8[02579]|9[0-469])|2(?:0[0-79]|1[0-357-9]|2[0-68]|" .
779             "3[0-2]|4[025-9]|5[0-9]|60|70|80|90)|3(?:0[0-9]|1[01]|" .
780             "2[0-257]|3[0-6]|40|50|6[01]|70|80|90)|4(?:0[0-8]|" .
781             "1[0-289]|20|30|40|5[0-39]|60|70|80|90)|5(?:0[0-9]|10|" .
782             "20|30|40|50|60|7[05]|80|90)|6(?:0[0-4689]|10|20|30|40|" .
783             "50|60|70|80|90)|7(?:0[0-29]|10|20|30|40|50|60|70|80|" .
784             "90)|8(?:0[0-69]|10|20|30|40|50|60|70|8[0-29]|90)|" .
785             "9(?:0[1-9]|10|2[0-39]|30|40|5[0-5]|6[05-9]|7[0-8]|80|" .
786             "90))|" .
787             "3(?:0(?:0[0-9]|1[0-9]|2[0-489]|3[0-9]|4[02-69]|5[014-8]|" .
788             "6[34])|1(?:00|1[0-9]|2[02]|30|40|50|60|7[0-578]|90)|" .
789             "2(?:0[0-6]|10|20|30|40|50|60|70|90)|3(?:0[0-8]|10|20|" .
790             "30|40|50|60|70|80|90)|4(?:0[0-9]|10|20|30|40|50|60|70|" .
791             "80|90)|5(?:0[0-6]|10|20|30|40|50|60|70|80|90)|6(?:00|" .
792             "10|20|30|40|50|60|70|80|90)|7(?:00|10|20|30|40|50|60|" .
793             "70|80|90)|8(?:0[0-48]|10|20|30|40|50|70|80|90)|9(?:00|" .
794             "10|20|30|40|5[09]|6[0-9]|7[02]|80|90))|" .
795             "4(?:0(?:0[0-46-8]|1[0-35-9]|2[0-47-9]|3[0-9]|4[0-46]|" .
796             "5[0-9]|6[0-24]|7[1589]|8[0-2679]|90)|1(?:0[0-9]|" .
797             "1[0-356]|2[0-2]|30|4[0-35-8]|50|60|70|8[1-57]|90)|" .
798             "2(?:0[0-68]|10|20|3[0-8]|40|50|60|70|90)|3(?:0[0-47]|" .
799             "10|20|30|40|50|60|70|90)|4(?:0[0-4]|10|20|30|40|50|60|" .
800             "70|80|90)|5(?:0[0-6]|1[01]|20|30|60|70)|6(?:0[0-5]|40|" .
801             "60|80)|7(?:0[0-5]|80)|8(?:00|11|70)|990)|" .
802             "5(?:0(?:0[0-9]|1[03-8]|2[0-5])|1(?:0[0-8]|1[0-267]|20|30|" .
803             "40|50|7[01]|90)|2(?:0[0-4]|20|30|40|50|60|70|90)|" .
804             "3(?:0[0-37-9]|1[0-2]|2[01]|30|50|60|70|80|90)|" .
805             "4(?:0[0-2]|10|2[019]|30|40|60|90)|5(?:0[0-3]|10|60|" .
806             "90)|6(?:0[01]|60|70|90)|7(?:0[016]|10)|80[01]|" .
807             "9(?:0[1-57]|1[124578]|2[01]|30|5[01]))|" .
808             "6(?:0(?:0[0-6]|1[1-57-9]|2[015-9]|3[0-49]|46|50|70)|" .
809             "1(?:0[0-3]|1[0-3]|2[0-3]|30|4[0145]|50|6[0-25]|70|80|" .
810             "90)|2(?:0[0-2]|10|20|30|40|50|60|70|80|90)|3(?:0[0-2]|" .
811             "10|20|3[01459]|40|50|60|70|80|90)|4(?:0[0-3]|10|" .
812             "2[0-3]|30|40|50|60|70|80|90)|5(?:0[0-29]|10|30|40|50|" .
813             "60|70)|6(?:0[0-24-69]|10|20|5[0-29]|6[04]|70|80|90)|" .
814             "7(?:0[0-4]|20|30|40|5[015]|60)|8(?:00|20|3[0-26]|45|" .
815             "5[0346]|6[036]|70)|9(?:06|21|3[13]|4[015]|5[019]|" .
816             "6[0-8]|87))|" .
817             "7(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[3-6]|59|6[01457-9]|" .
818             "7[013-7]|8[0-9]|9[0-3689])|1(?:0[029]|1[02-8]|2[0-69]|" .
819             "3[0-378]|4[0-6]|5[0-258]|6[0-35-79]|7[0-3]|90)|" .
820             "2(?:0[0-79]|1[0-9]|20|3[0-2459]|4[0-39]|50|6[0-29]|70|" .
821             "80|90)|3(?:0[0-8]|1[0-289]|20|30|40|50|60|70|8[0-2]|" .
822             "90)|4(?:0[0-57-9]|1[0-2]|20|30|4[01]|5[0-9]|60|70|80|" .
823             "90)|5(?:0[0-79]|10|2[01]|30|4[0-2]|50|60|70|80|90)|" .
824             "6(?:0[0-9]|10|20|30|40|50|60|70|80|90)|7(?:0[0-9]|10|" .
825             "2[0-8]|30|50|60|70|90)|8(?:0[0-479]|10|20|3[1-4689]|" .
826             "4[0-3]|50|60|70|80|9[12])|9(?:0[05-79]|1[13]|" .
827             "2[0-35-8]|3[0-3]|4[2-489]|5[2357-9]|6[0-79]|7[024-9]|" .
828             "8[0-6]|9[09]))|" .
829             "8(?:0(?:0[0-9]|1[02-9]|2[0-79]|40|5[0-9]|6[0-9]|7[0-467]|" .
830             "8[2-6]|9[0-379])|1(?:00|1[068]|2[014-8]|3[0-49]|40|" .
831             "5[0-39]|60|7[0-3]|80|90)|2(?:00|10|2[01]|30|40|50|" .
832             "6[0-5]|7[0-4]|80|90)|3(?:0[0-9]|1[0-7]|20|3[0-3]|40|" .
833             "50|60|70|80|9[0-39])|4(?:00|10|20|40|60|70|80|90)|" .
834             "5(?:0[0-49]|10|20|30|40|50|60|70|80|90)|6(?:00|10|20|" .
835             "30|40|50|60|80|90)|7(?:0[0-5]|20|30|40|50|60|70|80|" .
836             "90)|8(?:0[0-2469]|20|30|40|50|70|90)|9(?:10|2[013579]|" .
837             "4[13-57-9]|50|6[08]|70|80|90))|" .
838             "9(?:0(?:0[1-9]|6[124])|1(?:00|1[05]|2[04-69]|3[0-2469]|" .
839             "4[0-578]|5[0-49]|6[01]|7[0-3]|9[0-259])|2(?:0[0-9]|" .
840             "1[0-9]|2[05-9]|3[0279]|4[0-7]|5[0-35-9]|6[0-9]|" .
841             "7[0-2569]|8[0-9]|9[0-4])|3(?:0[0-379]|1[0679]|" .
842             "2[0-26-9]|3[06-9]|4[0-9]|5[0-9]|6[0-79]|7[0-3679]|" .
843             "8[0459]|9[0-9])|4(?:0[0-689]|1[0-9]|2[0-9]|3[0-9]|" .
844             "4[0-9]|5[0-9]|6[013-9]|7[024-9]|8[0-9]|9[0-35])|" .
845             "5(?:0[0-359]|1[0-9]|20|3[01]|4[0-4]|5[0-3]|6[013-59]|" .
846             "7[0-4689]|8[0-3]|9[0-5])|6(?:0[0-9]|1[0-3569]|2[0-9]|" .
847             "3[0-9]|4[0-9]|5[0-9]|6[014579]|7[0-79]|8[024-79]|" .
848             "9[0-46])|7(?:0[0-29]|14|2[0679]|3[0-25]|4[0-79]|5[15]|" .
849             "60|7[01]|80|9[0-5])|8(?:0[0-689]|1[1-4679]|2[02-49]|" .
850             "3[0-36]|4[01]|50|60|70|8[1-39]|9[01])|9(?:0[0-8]|10|" .
851             "2[1-6]|3[0-9]|4[25-9]|5[1-57]|6[0-489]|70|98)))" .
852              
853             "|7(?:0(?:0(?:0[0-7]|1[349]|2[0-2]|30)|1(?:0[0-4]|10|20|30|40|" .
854             "50|60|70|80|90)|2(?:0[0-4]|10|20|30|40|50|70|80|90)|" .
855             "3(?:0[0-46]|10|20|60)|4(?:00|40)|500|600|700|80[07])|" .
856             "1(?:0(?:0[0-9]|1[0-27-9]|2[0-9]|31|4[09])|1(?:0[0-9]|" .
857             "1[08]|20|30|40|50|60|70|90)|2(?:0[0-69]|10|20|30|40|" .
858             "50|60|70|90)|3(?:0[0-9]|10|2[0-8]|3[0-79]|40|50|60|70|" .
859             "80|90)|4(?:0[0-57-9]|10|20|30|40|50|60|70|80|90)|" .
860             "5(?:0[0-39]|10|20|30|40|50|70|80|90)|6(?:0[0-49]|20|" .
861             "40|70|80)|7(?:00|10|40|60)|8(?:00|50|70|80)|9(?:60|" .
862             "90))|" .
863             "2(?:0(?:0[0-9]|1[013-689]|2[14-9]|3[02-9]|4[0-57-9]|" .
864             "5[12589]|7[0-359]|8[0-9]|9[1-356])|1(?:0[09]|10|20|30|" .
865             "40|50|60|70|90)|2(?:0[0-3568]|10|20|3[0-4679]|40|50|" .
866             "60|70|90)|3(?:0[0-589]|10|20|30|40|50|60|70|80|90)|" .
867             "4(?:0[0-79]|30|40|50|60|70)|5(?:00|10|30|40|50|60)|" .
868             "6(?:00|10|50)|70[02-5]|800|90[28])|" .
869             "3(?:0(?:0[0-9]|1[014-9]|2[0-24-6]|31|65|7[39]|89|9[14])|" .
870             "1(?:0[0-9]|10|2[0-479]|30|40|5[0-579]|60|70|9[0-39])|" .
871             "2(?:0[0-9]|1[0-2469]|2[013-59]|3[0-259]|40|50|" .
872             "6[01459]|7[067]|9[0-2459])|3(?:0[0-39]|10|2[0-29]|30|" .
873             "40|50|60|7[0-9]|8[12]|90)|4(?:0[0-39]|10|20|40|50|60|" .
874             "70|80|9[0-49])|5(?:00|20|30|40|50|7[0-39]|90)|" .
875             "6(?:0[0-49]|10|20|30|40|60|70)|7(?:0[0-589]|10|20|30|" .
876             "90)|8(?:0[0-24-9]|70))|" .
877             "4(?:0(?:0[0-9]|1[0-6]|2[0145]|3[46]|4[01]|5[459])|" .
878             "1(?:0[0-9]|1[0-3]|20|3[0-79]|40|5[0-9]|6[0-69]|70|90)|" .
879             "2(?:0[0-9]|10|20|30|40|50|60|70|90)|3(?:0[0-57-9]|" .
880             "1[014]|20|3[0-47-9]|40|50|60|7[0-4]|80|90)|" .
881             "4(?:0[0-59]|10|20|30|40|50|60|70|80|90)|5(?:0[0-39]|" .
882             "20|40|50|60|70|80)|6(?:0[0-79]|50|60)|7(?:0[0-469]|" .
883             "40)|8(?:0[0-9]|90)|9(?:10|20|30|4[0-69]|5[0-4]|" .
884             "6[0-469]|70|8[124-9]|9[013-9]))|" .
885             "5(?:0(?:0[0-9]|1[0-9]|2[0134689]|3[0-689]|4[0-9]|5[1-689]|" .
886             "6[0-9]|7[2-9]|8[0-9]|9[02-7])|1(?:0[0-9]|1[0-689]|" .
887             "2[02-9]|3[01489]|4[0-24]|5[0-9]|6[1-9]|7[0-24679]|" .
888             "8[0-24689]|9[124-8])|2(?:0[1-9]|1[0-9]|2[0-46-9]|" .
889             "3[0-9]|4[01348]|5[0236]|6[0-69]|7[02589]|8[0-48]|" .
890             "9[0-24589])|3(?:0[2-9]|1[0-57-9]|2[0-9]|3[0357-9]|" .
891             "4[0-589]|5[0235-9]|6[0-7]|7[0-689]|8[0-9]|9[0-24-9])|" .
892             "4(?:0[0-35-8]|1[0-35-9]|2[0-9]|3[0-24-9]|4[0-79]|" .
893             "5[0-9]|6[02-8]|7[0-9]|8[0-8]|9[0-35-9])|5(?:0[2-9]|" .
894             "1[0-2]|2[1-8]|3[3-8]|4[0-8]|5[0-8]|6[0-9]|7[0-9]|" .
895             "8[0-9]|9[1-9])|6(?:0[0-9]|1[0-46-9]|2[0-9]|3[0-9]|" .
896             "4[0-46-9]|5[0-9]|6[0-57-9]|7[013-57-9]|8[0-357-9]|" .
897             "9[0-46-9])|7(?:0[0-35-9]|1[02-9]|2[0-79]|3[0-247-9]|" .
898             "4[0-357-9]|5[03-79]|6[1-9]|7[0-358]|8[0-69]|9[04689])|" .
899             "8(?:0[02-9]|1[2357-9]|2[0-9]|3[0-9]|4[013-9]|5[0-578]|" .
900             "6[0-9]|7[0-24-9]|8[0-79]|9[0-57-9])|9(?:0[0-57-9]|" .
901             "1[13-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-25-79]|7[0-9]|" .
902             "8[013-9]|9[013-8]))|" .
903             "6(?:0(?:0[0-8]|1[127-9]|2[0-24-689]|3[0-35-9]|4[0-79]|" .
904             "5[0-9]|6[0-9]|7[0-249]|8[03-7]|9[2-9])|1(?:0[017-9]|" .
905             "1[013679]|2[0-579]|3[0-9]|4[0-4]|5[0-359]|6[014]|" .
906             "7[0-9]|8[135-9]|9[0-7])|2(?:0[0-9]|10|20|3[0-35-9]|40|" .
907             "50|60|70|80|90)|3(?:0[0-68]|10|20|30|40|50|60|7[09]|" .
908             "80|90)|4(?:0[0-59]|1[089]|20|30|40|50|60|70|80|90)|" .
909             "5(?:0[0-49]|10|20|30|40|50|60|70|80|90)|6(?:00|10|20|" .
910             "30|40|50|60|80|90)|7(?:00|10|2[013]|30|40|50|60|70|80|" .
911             "90)|8(?:0[0-9]|10|2[13-5]|40|50|60|70|8[0-57]|90)|" .
912             "9(?:0[02]|1[0457]|2[05-79]|3[045]|4[05]|50|60|70|80))|" .
913             "7(?:0(?:0[0-9]|1[0-9]|2[013-8]|39|4[0-3]|5[0-2]|90)|" .
914             "1(?:0[0-9]|1[0-58]|2[02-467]|3[013-589]|4[01458]|" .
915             "5[0147]|6[03-79]|7[01346-8]|8[13-7]|9[0-9])|" .
916             "2(?:0[0-9]|1[0-9]|2[0-59]|3[0-249]|4[0-36-9]|5[0-579]|" .
917             "6[0-46]|7[0-2]|8[0-2]|9[0-9])|3(?:0[0-57-9]|1[0-689]|" .
918             "2[07]|3[0-57]|4[0-46-9]|5[0-3]|60|70|8[0-24589]|90)|" .
919             "4(?:0[0-579]|1[0-79]|2[0-79]|3[0-79]|4[0-8]|5[0-58]|" .
920             "6[02-57-9]|70|8[0-46-9])|5(?:0[0-9]|1[05]|2[0-9]|" .
921             "4[0-9]|5[0-9]|6[0-9]|70|8[0-35]|90)|6(?:0[0-9]|" .
922             "1[0-24-7]|20|30|4[01569]|50|60|70|80|90)|7(?:0[0-689]|" .
923             "1[014-7]|2[0-3]|30|50|60|7[126-9]|80|9[1-689])|" .
924             "8(?:1[013-9]|20|3[0-57-9]|40|50|60|7[0-3569]|80|90)|" .
925             "9(?:10|2[03]|3[0-39]|40|5[01]|61|70|8[1-369]|90))|" .
926             "8(?:0(?:0[0-9]|1[0-57-9]|2[0-246-9]|3[02-5]|4[1-9]|" .
927             "5[1-79]|6[0-24-7]|7[189]|8[1-9]|9[1-69])|" .
928             "1(?:0[0-24-689]|1[0-9]|2[0-24-69]|3[0-59]|4[0-35-9]|" .
929             "5[0-57-9]|6[02-79]|7[0-479]|8[0-689]|9[0-9])|" .
930             "2(?:0[0-9]|1[0249]|2[0-39]|3[0-49]|4[0-49]|50|60|70|" .
931             "8[0-9]|9[0-49])|3(?:0[0-46-9]|1[0-79]|2[0-2]|3[019]|" .
932             "4[0-24-69]|5[0-69]|6[0-48]|7[0-9]|80|9[015])|" .
933             "4(?:0[0-49]|1[0-35-79]|2[0-49]|3[019]|40|5[0178]|60|" .
934             "7[0-29]|80|90)|5(?:0[0-79]|1[0-59]|20|3[0-69]|40|50|" .
935             "60|70|80|9[0-29])|6(?:0[0-69]|1[029]|20|30|40|50|60|" .
936             "70|80|90)|7(?:0[0-359]|1[0-58]|20|30|40|50|60|7[0189]|" .
937             "80|90)|8(?:0[0-69]|10|20|30|40|5[0-249]|60|70|8[1-6]|" .
938             "9[07])|9(?:1[05]|2[0-9]|3[01]|4[0-689]|5[05]|60|70|80|" .
939             "9[05-7]))|" .
940             "9(?:0(?:0[0-9]|1[0-8]|2[1-9]|3[0-9]|4[1-69]|5[0-69]|" .
941             "6[0189]|7[0-79]|8[0-8]|9[1-389])|1(?:0[0-69]|10|20|30|" .
942             "4[0-5]|50|60|70|8[0-2459]|90)|2(?:0[0-689]|10|20|" .
943             "3[0-4]|40|50|60|70|90)|3(?:0[0-9]|10|20|30|40|50|60|" .
944             "70|80|90)|4(?:0[0-49]|10|20|30|40|50|60)|5(?:00|10)|" .
945             "600|700|800|9(?:39|5[03])))" .
946              
947             "|8(?:0(?:0(?:0[0-9]|1[0-79]|2[0-35-9]|3[0-46-9]|4[0-46-9]|" .
948             "5[014-7]|6[0-489]|75|8[0-9]|9[0-79])|1(?:0[0-9]|" .
949             "1[058]|2[02]|3[0-24-6]|4[02-6]|50|60|70|90)|" .
950             "2(?:0[0-689]|10|20|30|40|50|60|70|90)|3(?:0[0-39]|10|" .
951             "20|3[0-69]|40|50|60|70|90)|4(?:00|10|20|30|40|50|60|" .
952             "70|80|90)|5(?:00|10|20|3[1-59]|40|50|60|70|80)|6(?:00|" .
953             "10|20|30|40|50|70|80|90)|7(?:00|10|40|50|70|80)|" .
954             "8(?:00|20|30|50|60|70|80|9[01])|9(?:1[09]|60|70|80))|" .
955             "1(?:0(?:0[0-7]|1[1-9]|2[0-35-8]|3[014-9]|90)|1(?:0[0-9]|" .
956             "1[056]|20|30|40|50|60|70|90)|2(?:0[0-9]|1[05]|20|30|" .
957             "40|50|60|70|90)|3(?:0[0-5]|10|20|30|40|50|60|70|80|" .
958             "90)|4(?:00|30|40|50|70|90)|5(?:0[0-369]|30|40|70|80)|" .
959             "6(?:0[0-59]|30|40|60)|7(?:00|10)|800|990)|" .
960             "2(?:0(?:0[0-689]|1[3-579]|2[47]|3[0237]|4[078]|5[347]|" .
961             "6[057]|7[07]|8[07])|1(?:0[0-49]|10|20|30|40|50|60|70|" .
962             "90)|2(?:0[0-28]|10|20|30|40|50|70|90)|3(?:0[0-3]|30|" .
963             "40|50|60|70|90)|4(?:0[0-3]|10|40)|500|600|7(?:00|10)|" .
964             "800)|" .
965             "3(?:0(?:0[0-8]|1[2-69]|3[068]|4[0-289]|5[0-9]|6[0-59]|" .
966             "7[016-9]|8[0-9]|9[0-57-9])|1(?:0[078]|1[019]|20|" .
967             "3[016]|4[039]|50|6[0-467]|7[0-79]|8[013-57-9]|" .
968             "9[0-269])|2(?:00|10|20|3[016-8]|40|50|60|70)|3(?:00|" .
969             "1[0-7]|20|30|40|50|7[0-29]|80|90)|4(?:0[0-9]|1[128]|" .
970             "20|30|40|60|70|8[0-9]|90)|5(?:0[0-479]|1[0-248]|20|30|" .
971             "50|60|70|80|90)|6(?:0[0-4689]|1[03-68]|30|40|60|70|80|" .
972             "90)|7(?:0[0-57]|20|40|80|90)|8(?:00|20|30|40|60|70|" .
973             "90)|9(?:10|20|5[1-47]|80|9[0-8]))|" .
974             "4(?:0(?:0[04-9]|1[013-689]|2[1-579]|3[1-6]|4[1-9]|" .
975             "5[014689]|7[1278]|8[1-5]|9[0-9])|1(?:0[0-9]|10|2[0-4]|" .
976             "3[0-59]|4[0-479]|50|60|70|90)|2(?:0[0-9]|10|20|3[0-2]|" .
977             "40|50|60|7[0-9]|90)|3(?:0[0-9]|10|20|30|40|50|60|70|" .
978             "80|90)|4(?:0[0-5]|10|20|30|40|50|60|70|80|90)|" .
979             "5(?:0[0-57]|10|30|50|60|70|80)|6(?:0[0-39]|60)|" .
980             "7(?:0[0-6]|40|50|60)|8(?:0[0-58]|10|20|30|40|50|60|" .
981             "7[0-48])|9(?:0[1259]|1[1-9]|5[1-46]|6[13-57-9]|" .
982             "7[1-367]))|" .
983             "5(?:0(?:0[0-9]|1[0235-9]|2[01346]|3[356])|1(?:0[0-9]|" .
984             "1[013489]|20|3[0-39]|40|50|6[0-579]|70|80|90)|" .
985             "2(?:0[0-689]|10|20|30|40|50|60|70|80|9[0-29])|" .
986             "3(?:0[0-79]|10|20|30|4[0-2]|50|60|70|90)|" .
987             "4(?:0[0-4679]|10|20|30|40|50|60|70|80|90)|5(?:0[0-69]|" .
988             "10|20|30|40|50|60|70|80|90)|6(?:0[0-479]|1[02-6]|20|" .
989             "30|40|60|70|80|90)|7(?:0[0237-9]|10|40|50|70)|" .
990             "80[03-69]|9(?:19|2[1-8]|3[0-4]))|" .
991             "6(?:0(?:0[0-9]|1[0-3]|2[0-39]|3[04-68]|4[2-7]|5[0-6]|" .
992             "6[0-35-9]|7[1-46]|8[0-9]|9[0-8])|1(?:0[0-9]|1[07]|20|" .
993             "3[0-57-9]|40|50|60|70|80|90)|2(?:0[0-2469]|10|20|30|" .
994             "40|50|60|70|8[0-29]|90)|3(?:00|10|20|30|40|50|6[0-29]|" .
995             "70|80|90)|4(?:00|10|20|30|40|50|60|70|80|90)|" .
996             "5(?:0[0-289]|10|30|40|50|80)|6(?:00|10)|700|800|" .
997             "9(?:05|10|6[0-49]|8[0-4]))|" .
998             "7(?:0(?:0[0-9]|1[0-35-8]|2[0-356]|3[0-46-9]|4[0-9]|" .
999             "5[0-589]|6[015-9]|7[013-9]|8[0-59]|90)|1(?:00|10|20|" .
1000             "30|40|50|60|70|90)|2(?:0[0-356]|10|2[0-3]|30|40|50|60|" .
1001             "70|80|90)|3(?:00|10|20|30|40|50|60|70|80)|4(?:00|10|" .
1002             "20|30|40|60|70|80)|5(?:00|10|20|70|90)|6(?:00|20|40)|" .
1003             "7(?:00|20)|8(?:00|90)|9(?:00|19|20|30|50))|" .
1004             "8(?:0(?:0[0-9]|1[0-8]|2[015-79]|33|5[01]|60|8[4-689]|99)|" .
1005             "1(?:0[0-9]|10|2[0-3579]|3[0-39]|4[0-39]|5[0-6]|" .
1006             "6[0-259]|70|87|9[0-589])|2(?:0[0-79]|1[0-4]|20|30|40|" .
1007             "50|60|70|90)|3(?:0[0-7]|10|20|30|40|50|60|70|80|90)|" .
1008             "4(?:0[0-35-9]|10|20|30|40|50|60|70|80|90)|" .
1009             "5(?:0[0-479]|10|20|30|40|50|60|80)|6(?:00|30|40|50)|" .
1010             "700|80[0-59])|" .
1011             "9(?:0(?:0[0-79]|1[0-2569]|2[0-9]|30|89|9[0-59])|" .
1012             "1(?:0[0-9]|1[036]|20|30|4[04]|50|60|70|90)|" .
1013             "2(?:0[0-79]|10|20|30|40|50|60|70|90)|3(?:0[0-79]|10|" .
1014             "20|3[01]|40|50|60|80|90)|4(?:00|10|20|30|40|50|60|70|" .
1015             "80)|5(?:00|1[05]|2[05]|30|50|60|70|80)|6(?:00|30|60|" .
1016             "90)|7(?:00|10|40|7[0-2])|800))" .
1017              
1018             "|9(?:0(?:0(?:0[0-9]|1[0-689]|2[0-35]|40)|1(?:0[01]|10|20|30|40|" .
1019             "50|60|70)|200|3(?:00|30|40|50|60|70|80)|400|500|600|" .
1020             "700|8(?:00|50))|" .
1021             "1(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|" .
1022             "7[0-247-9]|80|9[07])|1(?:0[0-9]|2[0-9]|3[0-35-7]|" .
1023             "4[0-269]|5[0-46-9]|6[0-9]|7[0-47-9]|80|9[0-9])|" .
1024             "2(?:0[014579]|1[0134]|2[0-9]|30|4[01]|50|6[0-35-9]|70|" .
1025             "80|9[0-24-9])|3(?:0[0-9]|1[0-245]|2[0-589]|3[0-59]|" .
1026             "4[0-9]|5[013-59]|60|7[014]|8[0-9]|90)|4(?:0[0-79]|" .
1027             "1[024-8]|2[0-9]|30|40|50|6[0-3]|70|80|90)|5(?:10|20|" .
1028             "30|4[0-29]|5[01]|60|7[0-489]|80|90)|6(?:0[0-359]|" .
1029             "1[0239]|2[05]|30|40|50|60|70|80|9[0-9])|7(?:0[0-9]|" .
1030             "1[0-3]|20|30|4[0-9]|50|6[0-47]|70|8[013]|9[0-2])|" .
1031             "8(?:0[0-79]|1[0-5]|2[01]|30|4[019]|5[0-25]|6[01]|" .
1032             "7[0-9]|8[0-79]|9[0-689])|9(?:1[0-79]|2[1-4]|30|4[0-9]|" .
1033             "5[1-9]|6[1-9]|7[1-9]|8[1-68]))|" .
1034             "2(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[3-9]|4[0-9]|5[0-9]|" .
1035             "6[013-9]|7[0-9]|8[1-9]|9[235-9])|1(?:0[0-689]|1[0-9]|" .
1036             "2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[1-689]|" .
1037             "9[013-69])|2(?:0[0-689]|1[0-69]|2[0-9]|3[0-57-9]|" .
1038             "4[0-79]|5[0-46-9]|6[0-369]|7[0-59]|8[0-246-8]|" .
1039             "9[0-35-8])|3(?:0[0-9]|1[0-46-9]|2[0-9]|3[0-379]|" .
1040             "4[0-2]|5[0-79]|6[0-69]|7[029]|8[08]|9[0-9])|" .
1041             "4(?:0[0-9]|1[0-9]|2[03]|3[08]|4[1-578]|54|99)|" .
1042             "5(?:0[0-9]|1[1346-9]|2[1-57-9]|3[1-8]|4[1-6]|5[235]|" .
1043             "6[1-79]|7[13-8]|8[1-8]|9[1-9])|6(?:0[0-79]|1[13-6]|" .
1044             "2[24]|3[1-8]|4[1-359]|5[013-689]|6[05]|7[12579]|" .
1045             "8[2-689]|9[1358])|7(?:0[0-9]|1[1-5]|2[125-9]|3[05-9]|" .
1046             "4[1-578]|5[12568]|6[1-46-8]|7[2-469]|8[1-9]|9[1-9])|" .
1047             "8(?:0[0-9]|1[135-9]|2[0-4]|4[2-8]|5[1-69]|6[1-7]|" .
1048             "8[1-79]|9[1-8])|9(?:0[1-46-9]|1[1-9]|2[0-9]|3[0-9]|59|" .
1049             "7[0-57-9]|8[013-9]|99))|" .
1050             "3(?:0(?:0[0-35-9]|1[1-46-8]|2[124])|1(?:0[0-8]|1[0-24-8]|" .
1051             "2[0-367]|3[013-6]|4[0-9]|5[0-8]|6[0-9]|7[0-24-7]|" .
1052             "8[1-46-9]|9[0-79])|2(?:0[0-9]|1[0-46-9]|2[0-2]|" .
1053             "3[0135]|4[015]|50|6[01]|7[0145]|8[2-6]|9[047])|" .
1054             "3(?:0[0-8]|1[015]|2[0-5]|3[0-24-7]|4[0-689]|5[0-2]|" .
1055             "6[0-6]|70|8[0-2]|90)|4(?:0[0-8]|1[0-2]|2[0-4]|3[0167]|" .
1056             "4[01]|5[013-8]|6[0-5]|7[0239]|8[1-79]|93)|5(?:0[0-8]|" .
1057             "1[1-7]|2[1-46-8]|3[1-9]|4[1457]|5[4-68]|6[1-4]|" .
1058             "7[14-8]|8[1-9]|9[13])|6(?:0[0-689]|1[1-9]|2[1-37]|31|" .
1059             "9[1-9])|7(?:0[015]|1[129]|3[1346-8]|61)|8(?:0[0-267]|" .
1060             "1[2-6]|8[13-57]|9[19])|90[17-9])|" .
1061             "4(?:0(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[1-5]|94)|" .
1062             "1(?:0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-69]|" .
1063             "7[0-5]|9[0-79])|2(?:0[0-9]|1[0149]|2[0-9]|3[0-9]|" .
1064             "4[0-4679]|5[0-9]|6[0-9]|7[0-9]|81|90)|3(?:0[0-9]|" .
1065             "1[0-29]|2[0-247]|4[0-59]|5[013-79]|6[0-689]|7[0-9]|" .
1066             "8[0-9]|9[0-689])|4(?:0[0-9]|1[0-579]|20|3[0-9]|40|" .
1067             "5[0-79]|60|7[0-9]|80|90)|5(?:0[0-9]|1[0-9]|2[0-8]|" .
1068             "3[1-9]|4[1-46-9]|5[0-3]|6[1-9]|7[1-9]|8[1-9]|9[1-9])|" .
1069             "6(?:0[0-4679]|1[1-46-9]|2[1-36-8]|3[1-9]|4[1-578]|" .
1070             "5[1346-9]|6[13479]|7[1-9]|8[1-8])|7(?:0[0-4679]|" .
1071             "1[0-59]|2[1-9]|3[1-9]|4[1-589]|6[1-8]|8[1-59])|" .
1072             "8(?:0[0-9]|1[1-9]|3[1-39]|5[1-9]|6[1-79]|80|9[1-4])|" .
1073             "9(?:4[125-9]|5[1-689]|6[1-68]|7[1-8]))|" .
1074             "5(?:0(?:0[0-8]|1[0-9]|2[0-57-9]|3[0-8]|4[0-26]|5[0-69]|" .
1075             "6[0-79]|7[0-9]|9[0-8])|1(?:0[0-9]|1[0-27-9]|2[0-79]|" .
1076             "3[0-579]|4[0-6]|5[0-57-9]|6[0-259]|70|80|9[0-9])|" .
1077             "2(?:0[0-79]|1[0-9]|2[0-4689]|3[0-49]|40|5[0-29]|60|70|" .
1078             "80|90)|3(?:0[0-469]|1[0-689]|2[0-489]|3[0-5]|40|" .
1079             "5[015]|60|7[09]|80|90)|4(?:00|1[0-29]|20|30|4[015]|50|" .
1080             "6[01]|7[0-9]|80|90)|5(?:0[0-9]|10|2[0-9]|30|40|5[019]|" .
1081             "60|7[013]|80|90)|6(?:0[0-59]|1[0-9]|20|30|40|5[0-29]|" .
1082             "60|70|80|9[0-367])|7(?:0[0-9]|1[0-3569]|2[0-7]|3[1-4]|" .
1083             "4[0-27]|50|6[019]|70|80)|8(?:0[0-9]|1[0-6]|20|30|" .
1084             "4[02-4]|50|6[1-68]|7[0-79]|80|9[127])|9(?:0[12578]|" .
1085             "1[1-3569]|2[0-8]|3[0-4]|4[0-9]|5[0-46-9]|7[0-8]))|" .
1086             "8799)" .
1087             ")",
1088              
1089              
1090             #
1091             # 5 Digit postal code, with leading 0s.
1092             #
1093             # Data from: http://download.geonames.org/export/zip/DE.zip
1094             #
1095             Germany =>
1096             "(?k:0(?:1(?:0(?:6[79]|9[79])|1(?:0[89]|2[79]|39|5[679]|69|8[79])|" .
1097             "2(?:1[79]|3[79]|5[79]|7[79])|3(?:0[79]|14|2[468])|" .
1098             "4(?:45|5[48]|6[258]|7[178])|5(?:58|61|8[79]|9[14])|" .
1099             "6(?:09|1[269]|23|40|6[25]|8[39])|7(?:05|2[38]|3[1478]|" .
1100             "44|6[28]|7[3468]|96)|8(?:09|1[469]|2[459]|33|4[478]|" .
1101             "55|77|96)|9(?:0[0469]|17|20|36|45|68|79|8[37]|" .
1102             "9[03468]))|" .
1103             "2(?:6(?:2[57]|33|4[03]|8[19]|9[249])|7(?:08|27|3[0369]|" .
1104             "4[278]|63|79|8[258]|9[14679])|8(?:2[6-9]|9[49])|" .
1105             "9(?:06|2[39]|43|5[3679]|7[79]|9[1479]))|" .
1106             "3(?:0(?:4[2468]|5[0-58]|9[69])|1(?:03|1[69]|3[09]|49|59|" .
1107             "72|85|97)|2(?:0[25]|2[269]|38|4[69]|53))|" .
1108             "4(?:1(?:0[3579]|29|5[57-9]|7[7-9])|2(?:0[579]|29|49|" .
1109             "7[579]|8[89]|99)|3(?:1[5-9]|2[89]|4[79]|5[67])|4(?:16|" .
1110             "2[05]|35|42|51|6[03])|5(?:09|19|23|39|52|6[457]|" .
1111             "7[1459])|6(?:0[03]|1[0378]|26|39|43|5[1457]|68|" .
1112             "8[03578])|7(?:03|20|36|4[169]|58|69|7[49])|8(?:08|" .
1113             "2[1478]|38|49|6[02]|74|8[069]|95)|9(?:1[06]|2[48]|" .
1114             "3[12468]))|" .
1115             "6(?:1(?:08|1[02468]|2[02468]|3[02]|79|8[48]|9[38])|2(?:17|" .
1116             "3[17]|4[269]|5[4589]|68|79|95)|3(?:08|1[1378]|33|" .
1117             "4[378]|6[69]|8[568])|4(?:0[68]|2[059]|49|5[68]|" .
1118             "6[34679]|84|93)|5(?:0[27]|2[68]|3[67]|4[2378]|56|67|" .
1119             "7[178])|6(?:18|28|3[268]|4[278]|67|79|8[268])|7(?:12|" .
1120             "2[124579]|31|49|66|7[349]|8[056]|9[1246])|" .
1121             "8(?:0[03489]|4[24679]|6[129]|8[689]|9[56])|9(?:0[159]|" .
1122             "1[78]|2[2568]))|" .
1123             "7(?:3(?:18|3[03468]|4[39]|56|6[68]|8[179])|4(?:07|" .
1124             "2[2679])|5(?:4[5689]|5[1247]|70|8[069])|6(?:07|1[369]|" .
1125             "29|39|46)|7(?:4[3579]|51|68|7[48])|8(?:06|19)|9(?:07|" .
1126             "19|2[24679]|37|5[02578]|73|8[0579]))|" .
1127             "8(?:0(?:5[68]|6[0246])|1(?:07|1[258]|3[24]|4[147])|2(?:09|" .
1128             "2[38]|3[3679]|48|58|6[12579]|8[09]|9[47])|3(?:0[149]|" .
1129             "1[258]|2[14-68]|4[049]|5[259]|7[13]|9[36])|4(?:12|" .
1130             "2[78]|3[29]|5[19]|68|85|9[169])|5(?:2[3579]|3[89]|" .
1131             "4[1378])|6(?:06|26|4[58]))|" .
1132             "9(?:0(?:28|30)|1(?:1[1-4679]|2[0235-8]|3[01])|2(?:1[27]|" .
1133             "2[1478]|3[256]|4[1349])|3(?:06|2[268]|37|5[0356]|66|" .
1134             "76|8[057]|9[02459])|4(?:05|19|2[379]|3[02579]|56|" .
1135             "6[58]|7[147]|8[1478]|96)|5(?:09|1[478]|26|4[48]|57|69|" .
1136             "7[3579]|99)|6(?:0[03]|1[89]|2[379]|3[348]|48|6[19])))" .
1137              
1138             "|1(?:0(?:1(?:1[579]|7[89])|24[3579]|3(?:1[57-9]|6[579])|" .
1139             "4(?:0[579]|3[579])|5(?:5[13579]|8[579])|62[3579]|" .
1140             "7(?:0[79]|1[13579]|7[79]|8[13579])|82[3579]|" .
1141             "9(?:6[13579]|9[79]))|" .
1142             "1011|2(?:0(?:4[3579]|5[13579]|99)|1(?:0[13579]|5[79]|" .
1143             "6[13579])|2(?:0[3579]|4[79]|7[79])|3(?:0[579]|4[79]|" .
1144             "5[13579])|4(?:3[579]|59|8[79])|5(?:2[4679]|5[579]|" .
1145             "8[79])|6(?:19|2[1379]|79|8[13579]))|" .
1146             "3(?:0(?:47|5[13579]|8[689])|1(?:2[579]|5[689]|8[79])|" .
1147             "3(?:4[79]|5[13579])|4(?:0[3579]|3[579]|6[579])|" .
1148             "5(?:0[3579]|8[13579]|9[13579])|62[79])|" .
1149             "4(?:0(?:5[023579]|89)|1(?:09|29|31|6[3579]|9[3579])|" .
1150             "4(?:6[179]|7[1368]|8[02])|5(?:13|32|4[278]|5[02478])|" .
1151             "6(?:12|2[147]|41|56|6[29])|7(?:1[25]|2[78]|7[02468]|" .
1152             "89|9[378])|8(?:06|2[2378])|9(?:13|29|4[37]|59|7[49]))|" .
1153             "5(?:2(?:3[0246]|9[59])|3(?:06|2[0468]|4[45]|66|7[02478])|" .
1154             "5(?:1[78]|2[68]|37|6[269])|7(?:11|3[28]|4[15689]|" .
1155             "5[124578])|8(?:06|27|3[1478]|48|59|6[48]|9[08])|" .
1156             "9(?:07|1[03]|26|3[68]))|" .
1157             "6(?:2(?:2[57]|30|4[478]|59|69|78)|3(?:0[367]|21|4[18]|" .
1158             "5[269])|5(?:15|4[078]|5[269]|6[257])|7(?:27|6[167]|75|" .
1159             "9[28])|8(?:1[68]|27|3[1357]|45|6[68])|9(?:09|18|2[18]|" .
1160             "4[59]))|" .
1161             "7(?:0(?:3[3469]|8[79]|9[1489])|1(?:09|11|2[169]|39|5[349]|" .
1162             "6[68]|79|9[24])|2(?:0[79]|1[3479]|3[57]|48|5[2589]|68|" .
1163             "79|91)|3(?:09|2[12689]|3[57]|4[89]|58|67|7[359]|89|" .
1164             "9[0-28])|4(?:06|19|2[49]|38|4[09]|5[49]|89|9[1358])|" .
1165             "50[69])|" .
1166             "8(?:0(?:5[579]|69)|1(?:0[679]|19|4[67]|8[124]|9[0568])|" .
1167             "2(?:09|11|25|3[01369]|4[69]|58|7[369]|9[29])|" .
1168             "3(?:1[147]|20|3[47]|47|56|7[45])|4(?:3[579]|4[25]|" .
1169             "6[159])|5(?:07|1[0369]|28|46|5[16]|6[59]|7[34]|8[16])|" .
1170             "609)|" .
1171             "9(?:0(?:5[3579]|6[13579]|7[13579]|8[69])|2(?:0[59]|17|30|" .
1172             "4[369]|58|60|73|88|94)|3(?:0[0369]|22|3[69]|48|57|" .
1173             "7[0246]|86|9[59])|4(?:06|1[27])))" .
1174              
1175             "|2(?:0(?:0(?:38|88|9[579])|14[4689]|2(?:49|5[13579])|35[04579]|" .
1176             "45[79]|53[579])|" .
1177             "1(?:0(?:29|3[13579]|7[3579])|1(?:0[79]|29|4[79])|" .
1178             "2(?:1[78]|2[0478]|44|5[5689]|6[16]|7[1249])|" .
1179             "3(?:3[579]|5[478]|6[0589]|7[169]|8[02568]|9[14578])|" .
1180             "4(?:0[013679]|23|3[5689]|4[124579]|65|8[13]|93)|" .
1181             "5(?:0[29]|1[46]|2[124679])|6(?:14|29|35|4[0134679]|" .
1182             "8[02-4]|98)|7(?:0[269]|1[0247]|2[03679]|3[02479]|45|" .
1183             "5[56]|6[2359]|7[0256]|8[124579]))|" .
1184             "2(?:0(?:4[13579]|8[13579])|1(?:1[13579]|4[3579]|59|" .
1185             "7[579])|29[79]|3(?:0[13579]|3[579]|59|9[13579])|" .
1186             "4(?:1[579]|5[3579])|5(?:2[3579]|4[79]|59|8[79])|" .
1187             "60[579]|76[13579]|8(?:4[468]|5[01]|69|8[059])|" .
1188             "9(?:2[679]|4[169]|5[25689]|6[24579]))|" .
1189             "3(?:5(?:39|5[2468]|6[024689]|70)|6(?:1[179]|2[36-9]|69|" .
1190             "8[349])|7(?:01|1[4579]|3[08]|4[34679]|58|69|7[4579]|" .
1191             "95)|8(?:1[23568]|2[0134679]|4[357]|58|6[03679]|79|" .
1192             "8[13]|9[689])|9(?:09|1[19]|23|36|4[2468]|52|6[68]|" .
1193             "7[024]|9[269]))|" .
1194             "4(?:1(?:0[35-79]|1[134689]|4[35-9]|59|61)|2(?:1[147]|" .
1195             "2[02369]|3[2589]|4[124578]|5[0134679])|3(?:06|2[1679]|" .
1196             "40|5[1478]|6[0134679]|76|9[2589])|40[124579]|" .
1197             "5(?:3[4679]|58|68|76|8[29]|9[48])|6(?:01|1[0369]|" .
1198             "2[0235689]|3[124578]|4[0134679])|7(?:68|8[2-47]|" .
1199             "9[0134679])|8(?:0[0235689]|1[134679]|37|48|5[0257]|" .
1200             "6[0134679]|7[0235689]|8[124578]|9[0134679])|9(?:3[79]|" .
1201             "4[134]|55|6[0369]|7[25-7]|8[03689]|9[124679]))|" .
1202             "5(?:3(?:3[5-7]|48|5[58]|6[1458]|7[013679])|4(?:04|2[19]|" .
1203             "3[67]|51|6[29]|7[49]|8[25689]|9[124579])|5(?:24|4[18]|" .
1204             "5[147]|6[0369]|7[235689]|8[124578]|9[0134679])|693|" .
1205             "7(?:0[49]|1[2589]|2[14579]|46|6[147]|7[0469]|8[2568]|" .
1206             "9[124579])|8(?:13|2[16]|3[26]|4[0259]|5[0235689]|" .
1207             "6[02-4689]|7[0235689]|8[124579]|99)|9(?:17|2[03467]|" .
1208             "38|46|80|9[2679]))|" .
1209             "6(?:1(?:2[1-3579]|3[135]|6[09]|8[08]|97)|2(?:0[39]|1[59])|" .
1210             "3(?:16|4[059]|8[24689])|4(?:09|19|27|34|4[16]|52|65|" .
1211             "74|8[679])|5(?:06|2[49]|32|48|5[36]|7[19])|6(?:0[357]|" .
1212             "2[49]|3[29]|55|7[06]|8[39])|7(?:2[135]|36|5[79]|89)|" .
1213             "8(?:02|1[07]|26|3[15]|4[24579]|71|9[279])|" .
1214             "9(?:0[134679]|19|3[15-79]|54|69))|" .
1215             "7(?:2(?:11|3[29]|4[35689]|5[12479]|83|99)|3(?:0[58]|1[38]|" .
1216             "2[147]|3[03679]|56|67|74|8[369])|4(?:04|1[29]|32|" .
1217             "4[269]|7[2468]|9[89])|5(?:68|7[02468]|80)|6(?:07|" .
1218             "1[269]|2[48]|3[278])|7(?:11|2[169]|49|5[135]|77|" .
1219             "9[38])|80[149])|" .
1220             "8(?:19[579]|2(?:0[13579]|1[13579]|3[79]|59|7[79])|" .
1221             "3(?:0[79]|2[579]|35|5[579])|7(?:1[79]|5[579]|7[79]|" .
1222             "90)|8(?:16|32|44|57|65|7[069]))|" .
1223             "9(?:22[13579]|3(?:0[38]|13|2[038]|3[169]|4[258]|" .
1224             "5[1-35689]|6[124579]|7[89]|8[69]|9[2-469])|4(?:1[036]|" .
1225             "39|5[169]|6[258]|7[1-35689]|8[124578]|9[0134679])|" .
1226             "5(?:25|49|5[369]|6[258]|7[14-689]|8[124578]|" .
1227             "9[0134679])|6(?:14|33|4[0369]|64|83|9[039])))" .
1228              
1229             "|3(?:0(?:1(?:59|6[13579]|7[13579])|4(?:19|49|5[13579])|5(?:19|" .
1230             "21|39|59)|6(?:2[579]|5[579]|69)|8(?:2[367]|5[135]|80|" .
1231             "90)|9(?:00|16|26|38|52|66|74|8[29]))|" .
1232             "1(?:0(?:08|2[089]|3[23569]|61|7[39]|8[457-9]|9[134679])|" .
1233             "1(?:3[4579]|41|57|6[27]|7[147]|8[058]|9[1569])|" .
1234             "2(?:2[468]|34|4[169]|75)|3(?:03|1[19])|5(?:15|35|" .
1235             "4[27]|5[235689]|82|9[25])|6(?:0[034689]|1[389]|" .
1236             "2[1-36-9]|3[2-46-8]|55|75|8[38]|9[1389])|7(?:0[0278]|" .
1237             "1[0-2457-9]|37|49|8[579])|8(?:12|32|4[08]|55|6[0378]))|" .
1238             "2(?:0(?:49|5[12])|1(?:0[578]|20|3[09])|2(?:57|78|89)|" .
1239             "3(?:12|39|51|6[19])|4(?:2[3579]|57|69|79)|5(?:4[579]|" .
1240             "84)|6(?:0[29]|57|76|8[39]|9[49])|7(?:5[68]|60|91)|" .
1241             "8(?:05|16|25|3[29]))|" .
1242             "3(?:0(?:14|3[49]|98)|1(?:0[0246]|29|42|54|6[15]|7[58]|" .
1243             "8[149])|3(?:11|3[0245]|78|97)|4(?:15|28|4[29])|519|" .
1244             "6(?:0[24579]|1[13579]|4[79]|59|89|99)|7(?:19|29|39|58|" .
1245             "75|90)|8(?:03|1[38]|2[49]))|" .
1246             "4(?:1(?:1[79]|2[13578]|3[0-24])|2(?:12|25|33|46|53|6[06]|" .
1247             "7[07]|8[169]|9[258])|3(?:0[258]|1[147]|2[03679]|46|" .
1248             "5[59]|69|7[69]|8[58]|9[369])|4(?:14|3[149]|54|66|" .
1249             "7[1479]|97)|5(?:08|1[369]|37|49|60|76|8[27]|9[0369])|" .
1250             "6(?:13|2[168]|3[02379]))|" .
1251             "5(?:0(?:3[79]|4[13]|66|75|8[0358]|9[1469])|1(?:0[248]|" .
1252             "1[024679])|2(?:16|3[269]|60|7[49]|8[2578])|3(?:05|15|" .
1253             "2[1579]|9[02468])|4(?:1[058]|2[38]|35|4[047]|5[27]|" .
1254             "6[0369])|5(?:1[069]|7[689]|8[0-6])|6(?:06|1[49]|25|" .
1255             "3[038]|4[1479]|8[3-9]|90)|7(?:08|1[369]|45|5[369]|" .
1256             "6[478]|8[19]|9[2469]))|" .
1257             "6(?:0(?:3[79]|4[13]|88|93)|1(?:0[03]|1[059]|2[49]|3[27]|" .
1258             "4[258]|5[147]|6[03679]|79|99)|2(?:0[58]|1[1479]|51|" .
1259             "6[69]|7[257]|8[024679])|3(?:04|18|2[03569]|41|5[58]|" .
1260             "6[479]|81|9[169])|4(?:04|1[49]|33|48|5[267]|6[069]))|" .
1261             "7(?:0(?:7[3579]|8[135])|1(?:15|2[047]|3[0369]|54|7[06]|" .
1262             "8[16]|9[1479])|2(?:1[3-8]|35|4[279]|69|76|8[147]|" .
1263             "9[03679])|3(?:08|18|27|39|45|5[159])|4(?:12|3[14]|" .
1264             "4[14579])|5(?:20|3[49]|47|74|8[169])|6(?:03|19|2[07]|" .
1265             "3[2359]|4[02379]|71|88|9[1679]))|" .
1266             "8(?:023|1(?:0[02468]|1[02468]|2[0246]|5[49]|6[25]|" .
1267             "7[0369])|2(?:2[689]|39|59|68|7[124579]|81)|3(?:0[024]|" .
1268             "1[259]|2[124579]|50|6[48]|7[235689]|8[124578])|" .
1269             "4(?:4[02468]|5[89]|6[124578]|7[0134679]|8[69])|5(?:18|" .
1270             "2[478]|3[01369]|4[237]|5[0134679])|6(?:4[024]|67|78|" .
1271             "85|90)|7(?:0[0479]|2[39])|8(?:2[0289]|3[568]|55|" .
1272             "7[1579]|89|9[59]))|" .
1273             "9(?:014|1(?:0[468]|1[02468]|2[02468]|30|6[47]|7[159])|" .
1274             "2(?:18|21|4[059]|6[14]|79|88|91)|3(?:07|1[79]|26|" .
1275             "4[035]|5[69]|65|87|9[378])|4(?:18|3[459]|4[3468])|" .
1276             "5(?:17|24|39|7[69]|9[069])|6(?:06|1[59]|2[49]|38|" .
1277             "4[69])))" .
1278              
1279             "|4(?:0(?:2(?:1[0-3579]|2[13579]|3[13579])|4(?:68|7[024679]|89)|" .
1280             "5(?:4[579]|89|9[13579])|6(?:2[579]|6[78]|70|99)|" .
1281             "7(?:2[134]|64|89)|8(?:22|32|78|8[0235]))|" .
1282             "1(?:06[135689]|1(?:69|79|89|99)|23[689]|3(?:34|52|6[36]|" .
1283             "7[29])|4(?:6[024689]|7[02])|5(?:1[5-7]|39|4[0-2]|" .
1284             "6[49])|7(?:4[7-9]|51)|8(?:12|36|4[49]))|" .
1285             "2(?:1(?:0[3579]|1[13579])|2(?:7[579]|8[13579])|3(?:2[79]|" .
1286             "49|69|89|99)|4(?:77|89|99)|5(?:49|5[135]|79)|" .
1287             "6(?:5[13579]|9[79])|7(?:19|81|99)|8(?:5[3579]|9[79])|" .
1288             "929)|" .
1289             "4(?:1(?:3[579]|4[13579])|2(?:2[579]|6[3579]|8[79])|3(?:09|" .
1290             "19|2[89]|39|5[79]|69|79|88)|5(?:3[246]|7[579]|81)|" .
1291             "6(?:2[357-9]|49|5[1-3])|7(?:8[79]|9[13579])|" .
1292             "8(?:0[13579]|6[679]|79|9[24]))|" .
1293             "5(?:1(?:2[78]|3[0134689]|4[13-579])|2(?:19|39|5[79]|" .
1294             "7[679]|89)|3(?:0[79]|2[679]|5[5-79])|4(?:03|68|" .
1295             "7[0235689]|81)|5(?:2[579]|49)|6(?:5[79]|6[135]|99)|" .
1296             "7(?:01|11|21|3[19]|68|7[02])|8(?:79|8[134689]|" .
1297             "9[124679])|96[468])|" .
1298             "6(?:04[579]|1(?:1[79]|4[579])|2(?:3[68]|4[024]|8[246])|" .
1299             "3(?:25|4[28]|5[49]|9[579])|4(?:1[49]|46|59|8[357]|99)|" .
1300             "5(?:09|1[49]|3[579]|6[29]))|" .
1301             "7(?:05[1357-9]|1(?:19|3[7-9]|6[679]|7[89]|9[89])|" .
1302             "2(?:2[689]|39|49|59|69|79)|4(?:4[1357]|75|95)|" .
1303             "5(?:0[69]|33|46|5[19]|74|89)|6(?:08|2[3-7]|38|47|52|" .
1304             "6[159])|79[89]|8(?:0[02-579]|29|39|77)|9(?:06|18|29))|" .
1305             "8(?:079|1(?:4[3579]|5[13579]|6[1357])|2(?:31|49|68|82|91)|" .
1306             "3(?:0[18]|17|2[49]|36|4[16]|5[16]|6[169])|4(?:29|" .
1307             "3[12]|55|65|77|8[058]|9[369])|5(?:2[79]|31|65|99)|" .
1308             "6(?:07|1[29]|2[49]|53|83|91)|7(?:03|12|2[07]|3[49]))|" .
1309             "9(?:0(?:7[468]|8[02468]|90)|1(?:24|34|43|52|63|7[069]|86|" .
1310             "9[16])|2(?:0[15]|1[49])|3(?:2[468]|56|77|93)|" .
1311             "4(?:0[16]|1[39]|2[49]|3[49]|48|5[13679]|7[79]|9[27])|" .
1312             "5(?:0[49]|25|36|4[59]|65|77|8[46]|9[34679])|6(?:10|" .
1313             "2[46]|3[2578]|61|8[158]|9[269])|7(?:16|33|4[04]|5[17]|" .
1314             "6[27]|7[0479])|8(?:0[89]|11|2[48]|3[258]|4[34679])))" .
1315              
1316             "|5(?:0(?:1(?:2[679]|69|7[01]|8[19])|2(?:26|59)|3(?:21|54|74|" .
1317             "89)|6(?:6[78]|7[0246-9])|7(?:3[3579]|6[579])|" .
1318             "8(?:2[3579]|5[89])|9(?:3[13579]|6[89]|9[679]))|" .
1319             "1(?:06[13579]|1(?:0[3579]|4[3579])|3(?:7[13579]|81|99)|" .
1320             "4(?:2[79]|6[579]|91)|5(?:03|1[59]|45|70|8[08]|9[78])|" .
1321             "6(?:4[357]|74|88)|7(?:0[29]|66|89))|" .
1322             "2(?:0(?:6[2468]|7[02468]|80)|1(?:34|46|5[269])|2(?:2[2-4]|" .
1323             "49)|3(?:49|5[135]|7[29]|8[258]|9[1369])|4(?:28|4[15]|" .
1324             "5[79]|77|99)|5(?:11|25|3[18]))|" .
1325             "3(?:1(?:1[13579]|2[13579]|7[3579])|22[579]|3(?:32|4[037]|" .
1326             "59)|4(?:2[46]|74|89|98)|5(?:0[15-8]|18|20|3[349]|" .
1327             "4[57]|57|6[027]|7[27-9])|6(?:04|19|39)|7(?:21|57|73|" .
1328             "83|97)|8(?:0[49]|19|4[024]|59|79|81|94)|9(?:0[29]|" .
1329             "1[39]|25|37|4[0579]))|" .
1330             "4(?:29[02-68]|3(?:0[689]|1[01346-8]|2[09]|3[128]|" .
1331             "4[0134679])|4(?:1[13]|2[124679]|39|41|5[0135-79]|" .
1332             "7[02]|8[3467]|9[278])|5(?:1[68]|2[34689]|3[134689]|" .
1333             "5[028]|68|7[04689]|8[4-79]|9[57])|6(?:08|1[0-24679]|" .
1334             "3[46]|4[679]|5[57]|6[24689]|7[35]|8[79]))|" .
1335             "5(?:1(?:1[68]|2[0246-9]|3[01])|2(?:18|3[2479]|46|5[27]|" .
1336             "6[238]|7[0168]|8[368]|9[1469])|4(?:1[13]|2[245]|" .
1337             "3[0257]|4[24]|5[0279]|69|71|8[137]|9[014679])|" .
1338             "5(?:4[356]|59|6[689]|7[168]|8[35]|9[0235-79])|" .
1339             "6(?:0[68]|1[89]|2[14679])|7(?:43|5[68]|6[578]|" .
1340             "7[4679]))|" .
1341             "6(?:0(?:68|7[0235-7])|1(?:12|3[023]|54|7[09]|82|91)|" .
1342             "2(?:0[346]|18|20|3[57]|4[249]|5[34]|69|7[16]|8[138]|" .
1343             "9[01459])|3(?:0[57]|1[67]|2[1-39]|3[023578]|4[01689]|" .
1344             "5[57]|68|7[079])|4(?:1[024]|2[2478]|5[79]|62|7[0279])|" .
1345             "5(?:6[467]|7[59]|8[147-9]|9[3489])|6(?:26|3[07]|" .
1346             "4[258]|5[1369])|7(?:2[79]|36|4[356]|5[1349]|6[1679])|" .
1347             "8(?:1[248]|2[0135689]|4[13]|5[0689]|6[124579]))|" .
1348             "7(?:0(?:7[2468]|80)|2(?:23|34|5[08]|71|9[09])|3(?:19|" .
1349             "3[49]|68|9[29])|4(?:13|39|62|8[29])|5(?:18|20|3[79]|" .
1350             "48|55|6[27]|7[278]|8[0134679])|6(?:1[024]|2[79]|" .
1351             "3[25689]|4[124578]))|" .
1352             "8(?:0(?:89|9[13579])|1(?:19|35)|2(?:39|56|85)|3(?:00|13|" .
1353             "3[29])|45[2-6]|5(?:0[79]|1[135]|40|53|66|79)|" .
1354             "6(?:3[68]|4[024]|75)|7(?:0[68]|10|3[09]|6[29]|91)|" .
1355             "8(?:0[29]|4[09]))|" .
1356             "9(?:0(?:6[3579]|7[1357])|1(?:74|9[29])|2(?:2[79]|69)|" .
1357             "3(?:02|2[09]|48|68|79|87|9[49])|4(?:2[357]|39|57|69|" .
1358             "94)|5(?:05|1[049]|5[5-8]|81|9[07])|60[29]|75[579]|" .
1359             "8(?:2[13]|46|72|89)|9(?:09|29|39|55|6[49])))" .
1360              
1361             "|6(?:0(?:3(?:08|1[13468]|2[0235-79]|8[5689])|4(?:3[1357-9]|" .
1362             "8[6-9])|5(?:2[89]|49|9[4689]))|" .
1363             "1(?:1(?:18|3[078]|69|84|9[147])|2(?:0[0369]|3[19]|50|67|" .
1364             "7[369])|3(?:48|5[02]|8[19])|4(?:4[09]|62|7[69]))|" .
1365             "3(?:0(?:6[579]|7[135])|1(?:10|28|50|65|79)|2(?:25|63)|" .
1366             "3(?:03|2[29])|4(?:05|5[02467]|77|86)|5(?:0[05]|1[27]|" .
1367             "26|3[38]|4[369]|7[19]|8[49]|9[49])|6(?:07|19|28|" .
1368             "3[3679]|54|67|7[49]|8[38]|9[14579])|7(?:39|4[13]|55|" .
1369             "6[28]|7[36]|85|9[16])|8(?:0[18]|1[14]|2[05689]|3[149]|" .
1370             "4[0369]|5[367]|6[0347-9]|7[124579]|97)|9(?:06|1[16]|" .
1371             "2[04578]|3[0134679]))|" .
1372             "4(?:2(?:8[3579]|9[1357])|3(?:19|31|4[27]|54|67|72|8[05]|" .
1373             "9[057])|40[14579]|5(?:21|46|6[09]|7[29]|8[49])|6(?:25|" .
1374             "46|5[38]|6[58]|7[38]|8[369])|7(?:11|20|3[29]|4[37]|" .
1375             "5[034679])|8(?:07|23|3[29]|46|5[039]))|" .
1376             "5(?:1(?:8[3579]|9[13579])|2(?:0[1357]|19|2[0-4]|3[29])|" .
1377             "3(?:07|2[169]|4[3-7]|66|75|8[58]|9[169])|4(?:28|39|51|" .
1378             "6[28]|7[49])|5(?:10|2[079]|49|5[0-68]|8[29]|9[479])|" .
1379             "6(?:0[46]|1[148]|2[034679])|7(?:19|60|79|95)|" .
1380             "8(?:1[27]|24|3[05]|43)|9(?:29|3[1346]))|" .
1381             "6(?:1(?:1[13579]|2[135-9]|3[0-3])|2(?:65|71|8[07]|9[29])|" .
1382             "3(?:33|46|5[29]|86|99)|4(?:24|40|5[039]|8[24]|97)|" .
1383             "5(?:0[0134679]|3[89]|40|57|64|7[18]|8[39])|6(?:06|" .
1384             "2[059]|36|4[069]|63|79|87|93)|7(?:0[169]|40|63|73|" .
1385             "8[07]|9[38])|8(?:0[269]|22|39|49|51|6[29]|7[179]|" .
1386             "8[257]|9[24])|9(?:0[13479]|1[4679]|5[3-57]|69|7[68]|" .
1387             "8[179]|9[469]))|" .
1388             "7(?:0(?:59|6[13579]|71|98)|1(?:05|1[27]|2[25-7]|3[346]|" .
1389             "4[1679]|5[027-9]|6[15-79])|2(?:2[79]|4[056]|5[1689]|" .
1390             "69|7[138]|8[013]|9[2457])|3(?:0[4578]|1[01679]|46|54|" .
1391             "6[013568]|7[346-8])|4(?:3[3-5]|5[49]|6[68]|7[1-35]|" .
1392             "8[02379])|5(?:4[79]|5[01]|7[4578]|8[0235-7]|" .
1393             "9[0-35689])|6(?:5[3579]|6[13]|7[78]|8[01568]|9[1379])|" .
1394             "7(?:0[015-7]|1[4-68]|2[2457-9]|3[12457]|4[24-689]|" .
1395             "5[2-4679])|8(?:0[68]|1[134679]|2[1-4679]))|" .
1396             "8(?:1(?:59|6[13579]|99)|2(?:19|29|39|59)|30[579]|5(?:19|" .
1397             "26|35|4[29])|6(?:23|4[279])|7(?:23|53|66|75|8[29]|" .
1398             "9[49])|80[49])|" .
1399             "9(?:1(?:1[578]|2[01346]|51|68|81|9[08])|2(?:07|14|2[16]|" .
1400             "3[149]|4[25]|5[0134679])|4(?:12|2[79]|3[4679]|69|" .
1401             "8[38]|93)|5(?:0[29]|1[478])))" .
1402              
1403             "|7(?:0(?:1(?:7[3468]|8[02468]|9[0-3579])|3(?:2[79]|7[2468])|" .
1404             "4(?:3[579]|69|99)|5(?:6[3579]|9[79])|6(?:19|29)|" .
1405             "7(?:3[46]|71|94)|8(?:06|25|39))|" .
1406             "1(?:0(?:3[24]|6[3579]|8[38]|93)|1(?:0[16]|1[16]|2[06]|" .
1407             "3[149]|4[49]|5[4579])|2(?:29|54|63|7[27]|8[27]|" .
1408             "9[2679])|3(?:3[246]|64|84|9[47])|40[49]|5(?:22|" .
1409             "4[0369]|54|6[036]|7[03679])|6(?:3[468]|4[02]|65|7[29]|" .
1410             "86|9[16])|7(?:0[16]|1[178]|2[0369]|3[2579]))|" .
1411             "2(?:07[0246]|1(?:08|1[69]|2[47]|3[158]|4[14579]|60|7[258]|" .
1412             "8[1469])|2(?:02|1[38]|2[14679]|50|7[05]|8[05]|" .
1413             "9[0134679])|3(?:36|48|5[15689]|6[124579]|79|93)|" .
1414             "4(?:0[16]|1[14579]|5[89]|6[19]|7[4579]|88)|5(?:0[15]|" .
1415             "1[0134679]|25|3[124579]|55|74|8[124579])|6(?:22|" .
1416             "3[169]|4[49]|5[4578]|6[0134679])|7(?:6[02468]|70|93)|" .
1417             "8(?:0[05]|1[038]|2[079]))|" .
1418             "3(?:0(?:3[357]|54|6[16]|7[29]|8[47]|9[2589])|" .
1419             "1(?:0[124578]|1[0134679])|2(?:07|3[05]|4[09]|5[27]|" .
1420             "6[25689]|7[124578])|3(?:12|2[69]|3[37]|4[024579])|" .
1421             "4(?:3[0-4]|4[17]|5[037]|6[03679]|79|8[5689]|" .
1422             "9[124579])|5(?:2[579]|4[07]|5[037]|6[035689]|" .
1423             "7[124579])|6(?:14|3[05]|42|5[05]|6[03679])|7(?:28|" .
1424             "3[02-4]|6[05]|7[0369]))|" .
1425             "4(?:0(?:7[2468]|8[01])|1(?:7[27]|8[29]|9[369])|2(?:06|" .
1426             "1[149]|2[369]|3[2589]|4[35689]|5[124579])|3(?:21|" .
1427             "3[67]|4[38]|5[47]|6[0369]|7[2469]|8[2589]|9[124579])|" .
1428             "4(?:05|17|2[034679])|5(?:23|3[258]|4[124579]|64|" .
1429             "7[259]|8[2569]|9[24579])|6(?:13|2[69]|3[2589]|53|" .
1430             "7[03679])|7(?:06|22|3[16]|4[034679])|8(?:21|3[1248]|" .
1431             "4[27]|5[058]|6[124579]|89)|9(?:0[69]|1[258]|2[14578]|" .
1432             "3[0134679]))|" .
1433             "5(?:0(?:15|3[18]|45|5[03679])|1(?:7[23579]|8[01]|96)|" .
1434             "2(?:03|1[07]|2[38]|3[369]|4[2589])|3(?:05|2[38]|" .
1435             "3[14579]|65|78|8[2579]|9[124579])|4(?:17|28|3[38]|" .
1436             "4[3679]))|" .
1437             "6(?:006|1(?:3[13579]|49|8[579]|99)|2(?:2[7-9]|75|87|97)|" .
1438             "3(?:07|16|27|3[27]|44|5[169])|4(?:37|48|56|6[17]|" .
1439             "7[034679])|5(?:3[024]|4[79]|71|9[3679])|6(?:46|6[19]|" .
1440             "76|8[49]|9[48])|7(?:0[3679]|26|44|5[16]|6[1478]|" .
1441             "7[0134679])|8(?:29|3[135]|4[68]|5[57]|6[35]|7[0279]|" .
1442             "8[79]|91))|" .
1443             "7(?:6(?:5[246]|94)|7(?:0[49]|16|2[38]|3[16]|4[0369]|56|" .
1444             "6[17]|7[036]|8[147]|9[0134679])|8(?:15|3[0369]|55|66|" .
1445             "7[16]|8[03679])|9(?:33|4[48]|55|6[036]|7[124578]))|" .
1446             "8(?:0(?:48|5[0246]|7[38]|8[3679]|98)|1(?:12|2[06]|3[26]|" .
1447             "4[1478]|66|76|8[37]|9[49])|2(?:24|3[49]|4[47]|5[0369]|" .
1448             "6[2679])|3(?:15|3[37]|4[35]|5[14579])|4(?:6[2457]|" .
1449             "7[69])|5(?:32|49|5[49]|6[47]|7[0369]|8[0235689]|" .
1450             "9[124578])|6(?:0[0134679]|28|47|5[258]|6[124579])|" .
1451             "7(?:13|27|3[03679]))|" .
1452             "9(?:098|1(?:0[02468]|1[0-2457]|8[39]|9[49])|2(?:06|1[159]|" .
1453             "2[47]|3[258]|4[149]|5[2468]|6[138]|7[1469]|8[0235689]|" .
1454             "9[124579])|3(?:12|3[16]|4[168]|5[0369]|6[124579]|79|" .
1455             "95)|4(?:00|1[058]|2[34679])|5(?:13|39|4[01]|7[68]|" .
1456             "8[589]|9[124579])|6(?:18|39|50|6[49]|7[47]|8[235689]|" .
1457             "9[124579])|7(?:13|25|3[03679]|61|7[147]|8[07]|9[038])|" .
1458             "8(?:0[124579]|22|37|4[38]|5[369]|6[258]|7[124579])))" .
1459              
1460             "|8(?:0(?:33[135-79]|469|53[89]|6(?:3[46-9]|8[679])|79[6-9]|" .
1461             "80[1-579]|9(?:3[3579]|9[23579]))|" .
1462             "1(?:24[13579]|3(?:69|7[13579])|47[5-79]|5(?:39|4[13579])|" .
1463             "6(?:6[79]|7[13579])|73[579]|82[579]|92[579])|" .
1464             "2(?:0(?:08|24|3[12]|4[19]|5[47]|6[14579])|1(?:10|31|40|52|" .
1465             "66|78|94)|2(?:05|1[16]|2[39]|3[479]|56|6[69]|7[25689]|" .
1466             "8[124578]|9[0134679])|3(?:19|27|35|4[03679]|62|77|" .
1467             "8[03679]|9[0235689])|4(?:0[124579]|18|3[1-35689]|" .
1468             "4[124579]|67|8[178]|9[0134679])|5(?:15|38|4[1479]))|" .
1469             "3(?:0(?:2[246]|43|5[29]|64|7[15]|8[038]|9[38])|1(?:0[149]|" .
1470             "1[259]|2[235689]|3[124579])|2(?:09|2[49]|3[36]|4[26]|" .
1471             "5[034679]|78)|3(?:0[18]|1[37]|2[49]|3[49]|4[2469]|" .
1472             "5[2589]|6[124578]|7[0134679]|95)|4(?:04|1[0367]|35|" .
1473             "5[1478]|71|8[3679])|5(?:12|27|3[0369]|4[34679]|" .
1474             "5[0235689]|6[124579])|6(?:07|2[034679]|46|6[16]|" .
1475             "7[0134679]|84)|7(?:0[0378]|14|27|3[04579]))|" .
1476             "4(?:0(?:28|3[0246]|48|5[16]|6[169]|7[269]|8[2589]|" .
1477             "9[124578])|1(?:0[0134679]|3[07]|4[049]|5[25]|" .
1478             "6[034689]|7[124578]|8[0134679])|3(?:07|2[369]|" .
1479             "3[23579]|47|59|6[47]|7[158]|8[14579])|4(?:05|1[69]|" .
1480             "2[478]|3[124579]|53|78|89|94)|5(?:0[38]|1[38]|2[49]|" .
1481             "3[39]|4[34679]|5[0235689]|6[124578]|7[0134679]))|" .
1482             "5(?:0(?:49|5[1357]|7[27]|8[048]|9[258])|1(?:0[147]|" .
1483             "1[0134679]|2[0235689]|3[124579])|2(?:2[19]|3[258]|" .
1484             "4[147]|5[034689]|76|83|9[0368])|3(?:0[124579]|5[46]|" .
1485             "68|7[56]|86|9[159])|4(?:0[2568]|1[0134679]|35|4[57]|" .
1486             "5[2679]|6[124579])|5(?:21|40|51|6[07]|7[09]|86|" .
1487             "9[189])|6(?:0[49]|1[47]|2[25]|3[05]|4[0369]|5[235689]|" .
1488             "6[124579])|7(?:16|37|48|57|64|7[478]))|" .
1489             "6(?:1(?:5[02-4679]|6[13579]|79|99)|3(?:16|43|56|68|81|" .
1490             "9[19])|4(?:05|15|2[04]|38|4[147]|5[0369]|6[25]|" .
1491             "7[03679]|8[0235689]|9[124578])|5(?:0[024578]|" .
1492             "1[013479]|29|5[14689]|6[124578]|7[0134679])|6(?:09|" .
1493             "3[37]|4[137]|5[0357]|6[03689]|7[2-689]|8[124578]|" .
1494             "9[024578])|7(?:0[0134679]|20|3[235689]|4[124578]|" .
1495             "5[0134679])|8(?:07|25|3[036]|4[25]|5[034679]|" .
1496             "6[0235689]|7[124579]|99)|9(?:1[169]|2[0235689]|" .
1497             "3[124578]|4[0134679]|56|7[124578]|8[0134679]))|" .
1498             "7(?:4(?:3[579]|48|5[29]|6[36]|7[147]|8[0478]|9[034679])|" .
1499             "5(?:09|27|3[48]|4[14579]|61)|6(?:00|16|29|3[47]|" .
1500             "4[02578]|5[0134679]|6[0235689]|7[124579])|7(?:00|19|" .
1501             "2[47]|3[034679]|4[0235689]|5[124578]|6[0134679]|" .
1502             "7[0235689]|8[124579]))|" .
1503             "8(?:0(?:4[568]|69|7[49]|8[56]|9[0479])|1(?:3[18]|4[2579]|" .
1504             "6[17]|7[1589])|2(?:1[2-4]|39|5[05]|6[037]|7[1369]|" .
1505             "8[14579]|99)|3(?:1[679]|26|39|48|5[36]|6[1478]|" .
1506             "7[0134679])|4(?:00|1[06]|2[27]|3[0367]|4[1478]|" .
1507             "5[0134679]|7[17]|8[0134679]|99)|5(?:1[258]|2[14579])|" .
1508             "6(?:05|3[0134679]|62|77|82|9[03679])|7(?:09|1[89]))|" .
1509             "9(?:0(?:40|7[3579]|81)|1(?:29|34|43|5[05]|6[058]|" .
1510             "7[134679]|8[0235689]|9[124578])|2(?:3[13]|5[07]|6[49]|" .
1511             "7[58]|8[147]|9[0134679])|3(?:12|3[15]|4[034679]|" .
1512             "5[0235689]|6[124578])|4(?:07|15|2[03689]|3[124578]|" .
1513             "4[0134679])|5(?:18|2[02]|37|4[27]|5[158]|6[1478]|84|" .
1514             "97)|6(?:0[14578]|1[0134679])))" .
1515              
1516             "|9(?:0(?:4(?:0[2389]|1[19]|2[579]|3[19]|4[139]|5[13579]|6[19]|" .
1517             "7[1358]|8[029]|91)|5(?:1[38]|22|3[07]|4[27]|5[269]|62|" .
1518             "7[149]|8[47]|9[269])|6(?:0[27]|1[034679])|76[23568])|" .
1519             "1(?:0(?:5[2468]|7[47]|8[03568]|9[0134679])|1(?:26|54|" .
1520             "6[16]|7[147]|8[03679])|2(?:07|17|2[047]|3[035689]|" .
1521             "4[124579]|57|7[58]|8[124679])|3(?:01|15|2[0257]|" .
1522             "3[02468]|4[14679]|5[0235689]|6[124579])|4(?:13|38|" .
1523             "4[38]|5[269]|6[0235689]|7[124578]|8[0134679])|5(?:22|" .
1524             "41|5[05]|6[047]|7[258]|8[03679]|9[0235689])|" .
1525             "6(?:0[124578]|1[0134679]|2[0235689]|3[124579])|" .
1526             "7(?:1[079]|2[0235689]|3[124578]|4[0134679]|57|8[158]|" .
1527             "9[0235689])|80[124579])|" .
1528             "2(?:2(?:24|37|4[259]|5[369]|6[0235689]|7[124578]|" .
1529             "8[0134679])|3(?:18|3[149]|4[258]|5[358]|6[0134679])|" .
1530             "4(?:21|3[169]|4[24579])|5(?:07|2[16]|3[369]|" .
1531             "4[0235689]|5[124579])|6(?:37|48|55|6[05]|7[06]|8[15]|" .
1532             "9[034679])|7(?:0[0235689]|1[124578]|2[0134679]))|" .
1533             "3(?:0(?:4[79]|5[13579]|7[37]|8[03679]|9[0235689])|" .
1534             "1(?:0[124579]|28|3[38]|4[29]|5[258]|6[147]|7[03679]|" .
1535             "8[0235689]|9[124579])|3(?:09|26|3[369]|4[235689]|" .
1536             "5[124689])|4(?:13|26|37|4[49]|5[358]|6[2468]|" .
1537             "7[0134679]|8[0235689]|9[124579]))|" .
1538             "4(?:0(?:3[246]|51|6[05]|7[28]|8[169]|9[49])|1(?:0[47]|" .
1539             "1[0368]|2[147]|3[03679]|4[0235689]|5[124578]|" .
1540             "6[0134679])|2(?:09|27|3[49]|4[49]|5[0235689]|" .
1541             "6[124579])|3(?:15|27|3[0369]|4[24578]|5[0134679]|" .
1542             "6[0235689]|7[124579])|4(?:05|19|2[48]|3[1679]|47|69|" .
1543             "74|8[16]|9[16])|5(?:0[158]|1[38]|2[2679]|3[0235689]|" .
1544             "4[124578]|5[0134679]|6[0235689]|7[124579]))|" .
1545             "5(?:0(?:28|3[02])|1(?:00|1[19]|26|3[18]|45|5[28]|6[38]|" .
1546             "7[369]|8[0235689]|9[124579])|2(?:13|3[34679])|3(?:26|" .
1547             "3[69]|4[69]|5[25689]|6[124579])|4(?:4[4578]|6[0369]|" .
1548             "7[38]|8[258]|9[0134679])|5(?:0[0235689]|1[124579])|" .
1549             "6(?:15|32|43|5[29]|66|7[169]|8[0235689]|9[124578])|" .
1550             "70[0134679])|" .
1551             "6(?:0(?:4[79]|5[02])|1(?:0[36]|1[047]|2[0369]|3[258]|" .
1552             "4[25689]|5[124578]|6[0134679]|7[0235689]|8[124578]|" .
1553             "9[0134679])|2(?:15|24|3[17]|4[27]|5[037]|6[0489]|" .
1554             "7[124579])|3(?:17|28|3[27]|4[269]|5[258]|6[14579])|" .
1555             "4(?:50|65|7[269]|8[24679])|5(?:15|2[348]))|" .
1556             "7(?:0(?:7[02468]|8[024])|199|2(?:0[49]|1[58]|2[258]|" .
1557             "3[024679]|4[134679]|5[0235689]|6[124578]|7[0134679]|" .
1558             "8[0235689]|9[124579])|3(?:18|20|3[247]|4[0268]|" .
1559             "5[03579])|4(?:12|2[124]|37|4[07]|5[036]|6[149]|7[58]|" .
1560             "8[368]|9[0134679])|5(?:0[0235689]|1[134679]|" .
1561             "2[0235689]|3[124579])|6(?:1[68]|3[138]|4[057]|" .
1562             "5[034679]|88)|7(?:0[258]|1[147]|2[03-579]|37|53|6[29]|" .
1563             "7[235689]|8[0235689]|9[124579])|8(?:16|28|3[34679]|" .
1564             "4[0235689]|5[124579]|77|9[26])|9(?:0[0134679]|22|" .
1565             "4[147]|5[03679]|80|9[0369]))|" .
1566             "8(?:5(?:2[7-9]|30|4[47]|5[349]|74|87|9[03679])|6(?:17|" .
1567             "3[149]|46|6[03679]|7[38]|93)|7(?:0[148]|1[146]|24|39|" .
1568             "4[3469]))|" .
1569             "9(?:0(?:8[4-79]|9[1246-9])|1(?:0[02]|30|89|9[258])|3(?:10|" .
1570             "26|3[048])|4(?:2[3578]|3[89]|4[148])|51[08]|6(?:10|" .
1571             "2[58]|3[1468])|7(?:06|1[38]|3[45]|5[259]|6[258])|" .
1572             "8(?:1[79]|26|3[0147]|4[268]|6[79]|8[057]|9[1478])|" .
1573             "9(?:47|5[58]|7[46]|8[68]|9[1468])))" .
1574             ")",
1575              
1576              
1577             #
1578             # Postal codes of Greenland use a slice of the Danish postal code system.
1579             # Greenlands postal code consist of 4 digits, the first two being 39.
1580             # Except Santas postal code. He uses 2412.
1581             #
1582             # Data from: http://download.geonames.org/export/zip/GL.zip
1583             #
1584             Greenland =>
1585             "(?k:2412" .
1586             "|39(?:0[05]|1[0-359]|2[0-4]|3[02]|40|5[0-35]|6[124]|" .
1587             "7[0-2]|8[0245]|92)" .
1588             ")",
1589              
1590              
1591             #
1592             # Postal codes for Italy use 5 digits, with leading 0s. Codes starting
1593             # with 4789 belong to San Marino.
1594             #
1595             # Data from: http://download.geonames.org/export/zip/IT.zip
1596             #
1597              
1598             Italy =>
1599             "(?k:0(?:0(?:0(?:1[0-357-9]|2[0-9]|3[0-9]|4[0-9]|5[0-57-9]|" .
1600             "6[0-35-9])|1(?:19|2[0-8]|3[1-9]|4[1-9]|5[1-9]|6[1-9]|" .
1601             "7[1-9]|8[1-9]|9[1-9]))|" .
1602             "1(?:0(?:1[0-24-9]|2[0-8]|3[02-9])|100)|" .
1603             "2(?:0(?:1[0-689]|2[0-68]|3[0-57-9]|4[0-9])|100)|" .
1604             "3(?:0(?:1[0-46-9]|2[0-9]|3[0-9]|4[0-9])|100)|" .
1605             "4(?:0(?:1[0-9]|2[0-9])|100)|" .
1606             "5(?:0(?:1[0-8]|2[0-689]|3[0-2459])|100)|" .
1607             "6(?:0(?:1[024689]|2[0-9]|3[013-689]|4[0-79]|5[013-79]|" .
1608             "6[0-689]|7[023]|8[1349])|1(?:00|2[1-9]|3[124]))|" .
1609             "7(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[013-9])|100)|" .
1610             "8(?:0(?:1[0-35-9]|2[0-9]|3[0-9]|4[02-9])|100)|" .
1611             "9(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-57-9]|7[0-9]|8[0-68]|" .
1612             "9[0-9])|1(?:00|2[1-9]|3[14]|70)))" .
1613              
1614             "|1(?:0(?:0(?:1[0-9]|2[02-689]|3[0-24-8]|4[0-68]|5[0-9]|6[0-9]|" .
1615             "7[0-8]|8[0-8]|9[0-589])|1(?:00|2[1-9]|3[1-9]|4[1-9]|" .
1616             "5[1-6]))|" .
1617             "1(?:0(?:1[0-8]|2[0-9])|100)|" .
1618             "2(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-68]|6[0-689]|" .
1619             "7[0-9]|8[0-47-9])|100)|" .
1620             "3(?:0(?:1[0-27-9]|2[0-8]|3[0-9]|4[013-9]|60)|100|" .
1621             "8(?:1[124-8]|2[1-5]|3[13-6]|4[13-578]|5[1-6]|6[1-8]|" .
1622             "7[1-8]|8[1-8]|9[13-9])|900)|" .
1623             "4(?:0(?:1[0-9]|2[0-6]|3[0-79]|4[0-9]|5[0-57-9])|100)|" .
1624             "5(?:0(?:1[0-9]|2[0-9]|3[0-689]|4[0-689]|5[0-9]|6[0-9]|" .
1625             "7[0-9])|100)|" .
1626             "6(?:0(?:1[0-9]|2[0-9]|3[0-689]|4[0-9])|1(?:00|2[1-9]|" .
1627             "3[1-9]|4[1-9]|5[1-9]|6[1-7]))|" .
1628             "7(?:0(?:1[0-579]|2[0-8]|3[0-57-9]|4[0-8]|5[1-8])|100)|" .
1629             "8(?:0(?:1[0-9]|2[0-7]|3[0-9])|100)|" .
1630             "9(?:0(?:1[0-8]|2[0158]|3[0-478])|1(?:00|2[1-6]|3[1-9])))" .
1631              
1632             "|2(?:0(?:0(?:1[0-9]|2[0-9]|3[027]|40|56|6[0-9]|7[078]|8[0-9]|" .
1633             "9[0-9])|1(?:2[1-9]|3[1-9]|4[1-9]|5[1-9]|6[12])|" .
1634             "8(?:1[1-6]|2[1-6]|3[1-8]|4[1-7]|5[1-7]|6[1-7]|7[1-7]|" .
1635             "8[1-6])|900)|" .
1636             "1(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|100)|" .
1637             "2(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[04-6]|6[0369]|7[0-9])|100)|" .
1638             "3(?:0(?:1[0-9]|2[0-79]|3[0-8])|100|8(?:0[124-8]|1[13-9]|" .
1639             "2[1-9]|3[1-8]|4[1-9]|5[12457]|6[124578]|7[013-9]|" .
1640             "8[013-9]|9[0-9])|900)|" .
1641             "4(?:0(?:1[0-9]|2[0-9]|3[013-9]|4[0-9]|5[0-9]|6[0-9])|" .
1642             "1(?:00|2[1-9]))|" .
1643             "5(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-589]|" .
1644             "7[0-9]|8[0-9])|1(?:00|2[1-9]|3[1-6]))|" .
1645             "6(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9])|100|8(?:1[1-8]|" .
1646             "2[1-8]|3[1-9]|4[1-9]|5[1-9]|6[1-7])|900)|" .
1647             "7(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-57-9])|100)|" .
1648             "8(?:0(?:1[0-79]|2[148]|4[0135-7]|5[03]|6[0-24-689]|" .
1649             "7[0-9])|100|8(?:0[1-5]|1[1-9]|2[1-8]|3[1-368]|4[1-5]|" .
1650             "5[1-9]|6[1-68]|7[135-79]|8[13-7]|9[13-9])|922)|" .
1651             "9(?:0(?:1[0-9]|2[0-9])|100))" .
1652              
1653             "|3(?:0(?:0(?:1[03-6]|2[0-9]|3[0-9])|1(?:00|2[1-6]|3[1-35]|" .
1654             "4[12]|7[0-5]))|" .
1655             "1(?:0(?:1[0-8]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|100)|" .
1656             "2(?:0(?:1[02-6]|2[0-26-8]|3[0-7]|4[0-7])|100)|" .
1657             "3(?:0(?:1[0135-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|7[024-9]|" .
1658             "8[0-7]|9[02457-9])|1(?:00|70))|" .
1659             "4(?:0(?:1[0-24-8]|7[0-9])|1(?:00|2[1-9]|3[1-9]|4[1-9]|51|" .
1660             "70))|" .
1661             "5(?:0(?:1[0-9]|2[0-9]|3[0-24-8]|4[0-8])|1(?:00|2[1-9]|" .
1662             "3[1-9]|4[1-3]))|" .
1663             "6(?:0(?:1[0-6]|2[0-8]|3[0-6]|4[0235-7]|5[0-7]|6[0-6]|" .
1664             "7[0-35-8])|100)|" .
1665             "7(?:0(?:1[0-9]|2[0-4689]|3[0-25689]|4[0-79]|5[0-9]|" .
1666             "6[02-46-9])|1(?:00|2[1-9]|3[1-9]|42))|" .
1667             "8(?:0(?:1[0-35-9]|2[0-9]|3[0-9]|4[0-35-9]|5[0-79]|6[0-9]|" .
1668             "7[0-9]|8[0-35-9])|100)|" .
1669             "9(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-8])|100))" .
1670              
1671             "|4(?:0(?:0(?:1[0-9]|2[0-7]|3[02-8]|4[1-3568]|5[0-79]|6[0-9])|" .
1672             "1(?:00|2[1-9]|3[1-9]|41))|" .
1673             "1(?:0(?:1[0-9]|2[0-35-9]|3[0-9]|4[02-689]|5[1-9])|100)|" .
1674             "2(?:0(?:1[0-9]|2[0-8]|3[0-579]|4[0-9])|100)|" .
1675             "3(?:0(?:1[0-57-9]|2[0-24589]|3[025-9]|4[0-57-9]|" .
1676             "5[0-35689])|1(?:00|26))|" .
1677             "4(?:0(?:1[0-24-69]|2[0-35-9]|3[03-579]|4[1-357-9])|100)|" .
1678             "5(?:0(?:1[0-2457-9]|2[0-7]|3[0-9])|100)|" .
1679             "6(?:0(?:1[0-47-9]|2[02-9]|3[0-35-79]|4[0-9])|100)|" .
1680             "7(?:0(?:1[0-9]|2[013578]|3[02459]|4[23])|1(?:00|2[12])|" .
1681             "8(?:14|2[24-6]|3[2-8]|4[1-3]|5[3-5]|6[1-7])|900)|" .
1682             "8(?:0(?:1[0-578]|2[024-7])|100))" .
1683              
1684             "|5(?:0(?:0(?:1[02-489]|2[0-35-8]|3[1-9]|41|5[0-689]|6[0-8])|" .
1685             "1(?:00|2[1-79]|3[1-79]|4[1-5]))|" .
1686             "1(?:0(?:1[0-35-9]|2[0148]|3[014-79])|100)|" .
1687             "2(?:0(?:1[014-8]|2[0-24-9]|3[0-35-8]|4[13-8])|100)|" .
1688             "3(?:0(?:1[1-9]|2[0-7]|3[014-7]|4[0-357-9])|100)|" .
1689             "4(?:0(?:1[0-6]|2[136-9]|3[358])|100)|" .
1690             "5(?:0(?:1[0-689]|2[02357]|3[0-68]|4[0-2579]|5[14]|" .
1691             "6[0-24])|100)|" .
1692             "6(?:0(?:1[0-279]|2[0-589]|3[0-8]|4[013-68])|1(?:00|" .
1693             "2[1-8]))|" .
1694             "7(?:0(?:1[467]|2[0-3578]|3[0-46-9])|1(?:00|2[1-8]))|" .
1695             "8(?:0(?:1[0-2457-9]|2[02-7]|3[1346-8]|4[02-5]|5[13-5])|" .
1696             "100)|" .
1697             "9(?:0(?:1[1356]|2[14-6])|100))" .
1698              
1699             "|6(?:0(?:0(?:1[013589]|2[0-24-7]|3[013-9]|4[01348])|1(?:00|" .
1700             "2[1-9]|31))|" .
1701             "1(?:0(?:1[0-4]|2[0-689]|3[02-47-9]|4[0-9])|100)|" .
1702             "2(?:0(?:1[0-2457-9]|2[0-24-9]|3[24-689])|100)|" .
1703             "3(?:0(?:20|31|6[1-9]|7[1-9]|8[1-8]|9[1-6])|100|8(?:1[1-6]|" .
1704             "2[1-8]|3[1-9]|4[1-8]|5[1-8])|900)|" .
1705             "4(?:0(?:1[0-68]|2[013-8]|3[0-79]|4[0-79])|100)|" .
1706             "5(?:0(?:1[0-579]|2[02-9])|1(?:00|2[1-9]|3[12]))|" .
1707             "6(?:0(?:1[0-24-9]|2[0-36]|3[0-46-8]|4[0-7]|5[0-24])|100)|" .
1708             "7(?:0(?:1[02-579]|2[0-9]|3[0-9]|4[013-9]|5[0-9]|" .
1709             "6[0-46-9])|100))" .
1710              
1711             "|7(?:0(?:0(?:1[013-9]|2[0-9]|3[2378]|4[2-4]|5[46])|1(?:00|" .
1712             "2[1-9]|31))|" .
1713             "1(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-3578])|100)|" .
1714             "2(?:0(?:1[02-9]|2[0-9])|100)|" .
1715             "3(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|100)|" .
1716             "4(?:0(?:1[0-9]|2[0-8])|100)|" .
1717             "5(?:0(?:1[0-9]|2[0-9])|100)|" .
1718             "6(?:01[1-7]|12[135]))" .
1719              
1720             "|8(?:0(?:0(?:1[0-46-9]|2[0-9]|3[0-689]|4[0-24-9]|5[013-9]|" .
1721             "6[0-35-79]|7[013-9])|1(?:00|2[1-9]|3[1-9]|4[1-7]))|" .
1722             "1(?:0(?:1[0-467]|2[0-578]|3[0-9]|4[0-4679]|5[0-9])|100)|" .
1723             "2(?:0(?:1[0135-9]|2[0-9]|3[0-46-8])|100)|" .
1724             "3(?:0(?:1[0-8]|2[0-9]|3[0-24-9]|4[0-9]|5[0-9])|100)|" .
1725             "4(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[02-9]|5[0-35-79]|6[0-25-9]|" .
1726             "7[03-9]|8[0-8]|9[0-25689])|1(?:00|2[1-9]|3[1-5]))|" .
1727             "5(?:0(?:1[0-8]|2[0-9]|3[0-9]|4[02-46-9]|5[0-9])|100)|" .
1728             "6(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|7[0-57-9]|8[0-9]|" .
1729             "9[0-7])|1(?:00|70))|" .
1730             "7(?:0(?:1[0-9]|2[0-46-9]|3[0-8]|4[0-8]|5[0-8]|6[0-24679]|" .
1731             "7[0-6])|100)|" .
1732             "8(?:0(?:2[0-245]|4[0-24-79]|5[014-6]|6[02457-9]|70)|100|" .
1733             "8(?:1[1-9]|2[1-5]|3[1-8]|4[12])|900)|" .
1734             "9(?:0(?:1[0-8]|2[0-9]|3[0-9]|4[0-9]|5[0246-8]|6[02-59])|" .
1735             "1(?:00|2[1-9]|3[1-5])|8(?:1[2-9]|2[1-4]|3[1-4]|4[1-4]|" .
1736             "5[1-3]|6[1-46-8])|900))" .
1737              
1738             "|9(?:0(?:0(?:1[0-9]|2[0-9]|3[0-9]|4[0-9])|1(?:00|2[1-9]|3[1-9]|" .
1739             "4[1-9]|51))|" .
1740             "1(?:0(?:1[0-9]|2[0-9])|100)|" .
1741             "2(?:0(?:1[0-9]|2[0-9])|100)|" .
1742             "3(?:01[0-9]|100)|" .
1743             "4(?:01[0-9]|100)|" .
1744             "5(?:0(?:1[0-9]|2[0-2457-9]|3[0-9]|4[0-9])|1(?:00|2[1-9]|" .
1745             "31))|" .
1746             "6(?:01[0-9]|100)|" .
1747             "7(?:01[0-9]|100)|" .
1748             "8(?:0(?:2[0-35-9]|3[0-9]|4[0-9]|5[013-9]|6[0-9]|7[0-9])|" .
1749             "1(?:00|2[1-9]|3[1-9]|4[1-9]|5[1-9]|6[1-8])))" .
1750             ")",
1751              
1752              
1753             #
1754             # The numbering system for postal codes of Liechtenstein is part of
1755             # the numbering system for Swiss postal codes. Four digits are used
1756             # and all postal codes in Liechtenstein start with 94, the third
1757             # digit an 8 or a 9.
1758             #
1759             # Data from: http://download.geonames.org/export/zip/LI.zip
1760             #
1761             # The file above does not include 9489 (instead, a different file
1762             # reports it to be in CH), but 9489 is the postal code for Schaan Log,
1763             # which is located in Liechtenstein.
1764             #
1765             # http://postal-codes.findthedata.com/l/57083/9489-Schaan-Log
1766             #
1767             Liechtenstein => "(?k:94(?:8[5-9]|9[0-8]))",
1768              
1769              
1770             #
1771             # https://www.post.lu/documents/10181/2314856/EptSggaCsv.csv/
1772             # ee8fa0de-5e84-4e31-8cbd-b7b57679c21a?param=0.19755403072045696
1773             # (http://bit.ly/1PeTVqY)
1774             #
1775             Luxembourg =>
1776             "(?k:0(?:1(?:01|2[13-5]|3[12]|4[1-3]|61|7[13]|8[1-3]|9[12])|" .
1777             "2(?:02|11|31|41|51|6[23]|91)|" .
1778             "3(?:2[1-5]|32|42|6[12]|72|8[1-3]|91)|" .
1779             "4(?:0[1-3]|1[12]|2[12]|4[1-356]|5[13]|6[2-4]|7[12]|8[12]|" .
1780             "9[1-7])|" .
1781             "5(?:21|3[12]|5[1-4]|6[12]|8[1-4])|" .
1782             "6(?:1[12]|4[1-4]|6[1-4]|7[12]|9[12])|" .
1783             "7(?:2[1-3]|5[1-4]|6[13]|7[12])|" .
1784             "8(?:0[1-9]|1[1-4]|2[1-3]|3[1-4]|41|5[2-5]|61|81)|" .
1785             "9(?:0[134]|1[1-4]|2[12]|4[2-4]|5[1-4]|6[1-3]|7[1-3]|" .
1786             "8[1-3]|9[1-5]))" .
1787              
1788             "|1(?:0(?:09|1[0-9]|2[0-9]|30|50|60|90)|" .
1789             "1(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-39]|6[01])|" .
1790             "2(?:0[89]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|" .
1791             "7[0-9]|8[0-3])|" .
1792             "3(?:09|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-6])|" .
1793             "4(?:09|1[1-9]|2[0-9]|3[0-4]|4[589]|5[0-9]|6[0-9]|7[0-9]|" .
1794             "8[0-4]|9[09])|" .
1795             "5(?:0[89]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-2])|" .
1796             "6(?:1[013-9]|2[0-9]|3[0-9]|4[0-9]|5[0-6]|6[01]|70)|" .
1797             "7(?:09|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-3])|" .
1798             "8(?:1[1-8]|2[0-2]|3[1-9]|4[0-356]|5[0-9]|6[0-8]|7[0-3]|" .
1799             "8[0-2]|9[6-9])|" .
1800             "9(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-4]))" .
1801              
1802             "|2(?:0(?:1[0-9]|20|8[024-9]|9[013-9])|" .
1803             "1(?:1[1-9]|2[0-57-9]|3[0-57-9]|4[0-9]|5[0-9]|6[0-9]|" .
1804             "7[0-9]|8[0-4])|" .
1805             "2(?:1[0-5]|2[0-9]|3[0-4]|4[0-3]|6[1-35-9]|7[0-3])|" .
1806             "3(?:0[89]|1[0-9]|2[02-46-9]|3[0-9]|4[0-9]|5[0-9]|6[01]|70|" .
1807             "8[01])|" .
1808             "4(?:09|1[0-9]|2[02-9]|3[0-6]|4[0-9]|5[0-4])|" .
1809             "5(?:1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-7])|" .
1810             "6(?:09|1[0-79]|2[0-9]|3[0-7]|5[1-4]|6[1-9]|7[0-4]|8[01])|" .
1811             "7(?:1[1-9]|2[0-9]|3[0-46-9]|4[01]|6[1-4])|" .
1812             "8(?:50|60|8[07-9])|" .
1813             "9(?:00|1[0-689]|2[0-25689]|3[0-9]|4[0-269]|5[0-8]|" .
1814             "6[014-68]|7[14-9]|8[0-8]|9[0-24-9]))" .
1815              
1816             "|3(?:2(?:0[15689]|1[0-9]|2[0-59]|3[0-9]|4[0-39]|5[0-9]|" .
1817             "6[015-79]|7[0-9]|8[0-8]|90)|" .
1818             "3(?:1[13-8]|2[0-9]|3[02-7]|4[015-9]|5[0-9]|6[0-9]|7[0-8]|" .
1819             "8[02-69]|9[0-8])|" .
1820             "4(?:0[1-39]|1[0-9]|2[0-9]|3[0-3569]|4[0-9]|5[0-4]|6[0-9]|" .
1821             "7[0-6]|8[0-9]|9[0-3])|" .
1822             "5(?:0[1-9]|1[0-7]|2[0-69]|3[0-29]|4[0-9]|5[0-5]|6[0-9]|" .
1823             "7[0-6]|8[2-589]|9[0-8])|" .
1824             "6(?:01|1[1-7]|2[0-2]|3[015-8]|4[0-4]|5[0-8]|60|7[0-9]|" .
1825             "8[0-2])|" .
1826             "7(?:0[15]|1[0-9]|2[0-9]|3[013-9]|4[0-4]|5[0-5]|6[1-8]|" .
1827             "7[0-6]|8[0-246-9]|90)|" .
1828             "8(?:01|1[0-9]|2[0-6]|3[0-9]|4[0-4]|5[0-9]|6[0-4]|7[0-9]|" .
1829             "8[0-4]|9[5-9])|" .
1830             "9(?:0[19]|1[0-9]|2[0-9]|3[0-9]|4[013-5]|6[01]|8[05]))" .
1831              
1832             "|4(?:0(?:0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|" .
1833             "7[0-4]|8[0-68])|" .
1834             "1(?:0[0-35-9]|1[0-689]|2[0-356]|3[0-9]|4[0-39]|5[0-6]|" .
1835             "6[4-9]|7[0-9]|80)|" .
1836             "2(?:0[1-9]|1[013467]|2[0-2]|3[0-9]|4[0-9]|5[0-6]|6[0-8]|" .
1837             "7[0-25-9]|8[0-39])|" .
1838             "3(?:0[1-9]|1[04-9]|2[0-8]|3[0-7]|4[0-9]|5[0-5]|6[0-9]|" .
1839             "7[0-3]|8[0-5]|9[0-8])|" .
1840             "4(?:0[125-9]|1[0-9]|2[0-39]|3[0-9]|4[0-9]|5[019]|6[0-9]|" .
1841             "7[05-9]|8[0-9]|9[0-49])|" .
1842             "5(?:0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-59]|" .
1843             "7[0-9]|8[0-3]|9[0-9])|" .
1844             "6(?:0[1-9]|1[0-3]|2[0-9]|3[0-689]|4[0-9]|5[0136-8]|6[0-9]|" .
1845             "7[0-26-9]|8[0-9]|9[0-36-8])|" .
1846             "7(?:0[126-9]|1[0-9]|2[0-2]|3[0-9]|4[0-5]|5[0-9]|6[0-3]|" .
1847             "7[0-9]|8[0-6]|9[5-8])|" .
1848             "8(?:0[124-9]|1[0-589]|2[02-69]|3[0-47-9]|4[02-9]|5[03]|" .
1849             "7[0-9]|8[0-9]|9[0-5])|" .
1850             "9(?:0[126-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-689]|6[0-9]|" .
1851             "7[0-9]|8[0-24-9]|9[0-9]))" .
1852              
1853             "|5(?:2(?:01|1[1-9]|2[0-2]|3[0-9]|4[0134]|5[0-6]|80|9[09])|" .
1854             "3(?:1[024-8]|2[02468]|3[0-79]|4[0-2]|5[1-359]|6[0-9]|" .
1855             "7[0-8]|80)|" .
1856             "4(?:0[1-578]|1[0-9]|2[1-79]|3[0-59]|4[0-7]|5[01]|6[056]|" .
1857             "7[01]|8[0-3589]|9[59])|" .
1858             "5(?:0[15-7]|1[1-9]|2[0-3]|3[0-9]|4[0489]|5[0-9]|6[01]|" .
1859             "7[0-7])|" .
1860             "6(?:0[125]|1[0-9]|2[06-9]|3[0-9]|40|5[0-9]|7[015]|8[0-7]|" .
1861             "9[0-358])|" .
1862             "7(?:01|1[0-46-9]|2[0-3]|30|4[01]|5[0-6]|6[0-2]|7[0-6])|" .
1863             "8(?:0[189]|1[0-9]|2[0-689]|3[0-9]|4[0-46]|5[02-69]|6[0-9]|" .
1864             "7[0-68]|8[04-9]|9[0-389])|" .
1865             "9(?:4[0-3]|5[0-9]|6[0-49]|7[0-8]))" .
1866              
1867             "|6(?:1(?:01|1[1-9]|2[0-59]|3[0-9]|4[0-9]|5[05]|6[0-3569]|" .
1868             "7[015]|8[0-9]|9[05-7])|" .
1869             "2(?:01|1[0-5]|25|3[01589]|4[0356]|5[0-25])|" .
1870             "3(?:01|1[0-5]|40|50|60|70|80)|" .
1871             "4(?:0[12689]|1[0-9]|2[0-3]|3[0-9]|4[0-35-9]|5[0-5]|6[0-9]|" .
1872             "7[0-9]|8[0-8]|9[0-79])|" .
1873             "5(?:5[0-357-9]|6[02]|7[0-29]|8[0-35-7]|90)|" .
1874             "6(?:01|1[0-9]|2[0-3]|3[0-8]|4[5-9]|5[01]|6[013569]|7[0-8]|" .
1875             "8[0-9]|9[0-35])|" .
1876             "7(?:01|1[1-9]|2[0-6]|3[0-9]|4[0-5]|5[0-9]|6[0-5]|7[0-9]|" .
1877             "8[0-6]|9[0-6])|" .
1878             "8(?:15|3[0-9]|4[0-2]|5[0-28]|6[89]|7[01]|80)|" .
1879             "9(?:0[156]|1[0-9]|2[1-356]|3[01349]|4[0-8]|5[0156]|" .
1880             "6[0-29]|7[0-9]|8[0-25-9]|9[0-25-9]))" .
1881              
1882             "|7(?:2(?:0[129]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-489]|" .
1883             "7[04])|" .
1884             "3(?:0[2-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-4]|" .
1885             "7[0-9]|8[0-4]|9[0-25-7])|" .
1886             "4(?:09|1[0-25-8]|2[013-5]|3[0-35]|4[0-9]|5[0-8]|6[0-5]|" .
1887             "7[0135]|8[0-2])|" .
1888             "5(?:0[125-8]|1[1-9]|2[0-6]|3[1-9]|4[0-7]|5[3-9]|6[0-9]|" .
1889             "7[0-2]|9[0-9])|" .
1890             "6(?:01|1[023589]|2[0-7]|3[3-69]|4[019]|5[0-3]|6[0-4]|" .
1891             "7[03]|8[01])|" .
1892             "7(?:0[13]|1[0-6]|2[0-467]|3[0-57-9]|4[01]|5[089]|6[0-9]|" .
1893             "7[0-47-9]|8[0-9]|9[0-5]))" .
1894              
1895             "|8(?:0(?:0[125-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|" .
1896             "7[0-9]|8[0-9]|9[0-9])|" .
1897             "1(?:1[0-25-9]|2[013-9]|3[0-57-9]|4[0-25-79]|5[0-46-9]|" .
1898             "6[05-7]|79|8[0-9]|9[01])|" .
1899             "2(?:0[159]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-589]|6[0-9]|" .
1900             "7[0-47-9]|8[0-9]|9[0-5])|" .
1901             "3(?:0[1-3689]|1[0-9]|2[0-9]|3[0-9]|4[0-5]|5[0-9]|6[0-9]|" .
1902             "7[0-689]|8[013-8]|9[0-689])|" .
1903             "4(?:01|1[0-5]|2[0-4]|3[5-8]|4[0-57-9]|5[0-3]|6[0-9]|" .
1904             "7[0-9]|80)|" .
1905             "5(?:0[126-9]|1[01]|2[1-35-9]|3[0137-9]|4[0-6]|5[0-278]|" .
1906             "6[0-2])|" .
1907             "6(?:0[69]|1[0-5]|20)|" .
1908             "7(?:0[15-8]|1[015]|20)|" .
1909             "8(?:0[125689]|1[1-46-9]|2[0-6]|3[1-58]))" .
1910              
1911             "|9(?:0(?:0[1-46]|1[0-9]|2[0-9]|3[0-3]|4[0-8]|5[0-6]|6[0-9]|" .
1912             "7[0-2]|8[0-9]|9[0-489])|" .
1913             "1(?:1[5-9]|2[0-9]|3[0-7]|4[024-7]|5[013-8]|6[013-9]|" .
1914             "7[0-35-79]|8[0-4689]|9[01])|" .
1915             "2(?:0[1-9]|1[0-8]|2[014-9]|3[0-9]|4[0-59]|5[0-9]|6[0-8]|" .
1916             "7[35-9]|8[0-9]|9[0-4])|" .
1917             "3(?:30|40|5[0-79]|6[014-689]|7[0-35-8]|8[0-2]|9[0-25])|" .
1918             "4(?:0[15-9]|1[0-24-9]|2[0-6]|40|5[1-9]|6[1-6])|" .
1919             "5(?:0[126]|1[0-9]|2[0-3]|3[0-9]|4[0-5]|5[0-9]|60|7[0-9])|" .
1920             "6(?:3[1-35-9]|4[013-578]|5[013-79]|6[0235689]|7[0-468]|" .
1921             "8[12479]|9[06])|" .
1922             "7(?:0[16-9]|1[0-5]|3[78]|4[0-9]|5[1-9]|6[0-9]|7[0-69]|80)|" .
1923             "8(?:0[15-9]|3[013-9]|4[01])|" .
1924             "9(?:0[1-35-9]|1[0-3]|4[02-468]|5[0246]|6[02468]|7[0246]|" .
1925             "8[02]|9[0-39]))" .
1926             ")",
1927              
1928              
1929             #
1930             # Postal codes of Monaco are part of the system used for France.
1931             # Monaco uses postal codes starting with 980. 98000 is for all
1932             # physical addresses, while numbers ending in 01 - 99 are reserved
1933             # for special deliveries.
1934             #
1935             # http://www.upu.int/fileadmin/documentsFiles/activities/
1936             # addressingUnit/mcoEn.pdf
1937             #
1938             Monaco => "(?k:980[0-9][0-9])",
1939              
1940             #
1941             # Postal codes in Norway use 4 digits. Leading 0s happen, but not all
1942             # combinations are used.
1943             #
1944             # Data from: http://download.geonames.org/export/zip/GL.zip
1945             #
1946             Norway =>
1947             "(?k:0(?:0(?:01|1[058]|2[14-68]|3[0-47]|4[05-8]|5[015]|60|80)|" .
1948             "1(?:0[1-79]|1[0-9]|2[0-589]|3[0-9]|5[0-57-9]|6[0-24-9]|" .
1949             "7[0-9]|8[0-8]|9[0-68])|" .
1950             "2(?:0[1-478]|1[1-8]|30|4[047]|5[0-9]|6[02-8]|7[0-9]|" .
1951             "8[0-467])|" .
1952             "3(?:0[1-9]|1[13-9]|23|30|4[09]|5[0-9]|6[0-9]|7[0-9]|" .
1953             "8[0-3])|" .
1954             "4(?:0[1-689]|1[0-35]|2[1-4]|4[0-25]|5[0-24-9]|6[0-57-9]|" .
1955             "7[02-9]|8[0-9]|9[0-6])|" .
1956             "5(?:0[1-9]|1[0-35-8]|20|40|5[0-9]|6[0-9]|7[0-9]|8[0-9]|" .
1957             "9[0-8])|" .
1958             "6(?:0[1-9]|1[1-9]|2[0-46]|5[0-9]|6[0-9]|7[0-9]|8[0-9]|" .
1959             "9[0-4])|" .
1960             "7(?:0[125]|1[02]|5[0-8]|6[03-8]|7[0-9]|8[1-9]|9[01])|" .
1961             "8(?:0[15-7]|40|5[0-8]|6[0-4]|7[0-7]|8[0-4]|9[01])|" .
1962             "9(?:0[1-578]|1[3-5]|5[0-9]|6[02-489]|7[0-35-9]|8[0-8]))" .
1963              
1964             "|1(?:0(?:0[135-9]|11|5[1-6]|6[1-57-9]|71|8[1346-9])|" .
1965             "1(?:0[129]|12|5[0-8]|6[0-9]|7[026-9]|8[12457-9])|" .
1966             "2(?:0[1-57]|1[45]|5[0-9]|6[236]|7[0-589]|8[13-6]|9[0145])|" .
1967             "3(?:0[0-79]|1[1-46-9]|2[1-9]|3[0-9]|4[0-24689]|5[0-46-9]|" .
1968             "6[0-9]|7[1-35-9]|8[013-9]|9[0-79])|" .
1969             "4(?:0[0-9]|1[0-9]|2[019]|3[0-2]|4[0-9]|5[013-578]|6[89]|" .
1970             "7[0-9]|8[0-8])|" .
1971             "5(?:0[1-4689]|1[0-9]|2[0-689]|3[0-9]|4[015]|5[056]|60|70|" .
1972             "8[01]|9[0-36-9])|" .
1973             "6(?:0[1-9]|1[02-9]|2[014-689]|3[02-46-9]|4[0-2]|" .
1974             "5[013-57-9]|6[1-7]|7[0-35689]|8[02-4]|9[02])|" .
1975             "7(?:0[1-9]|1[0-589]|2[0-7]|3[03-589]|4[0235-7]|5[1-479]|" .
1976             "6[013-9]|7[126-9]|8[1-9]|9[0-4689])|" .
1977             "8(?:0[1-9]|1[1-6]|2[0357]|3[0-3]|5[019]|6[0167]|7[0158]|" .
1978             "80|9[0-3])|" .
1979             "9(?:0[013]|1[0-2467]|2[013-9]|3[01]|4[01]|5[04]|6[013]|" .
1980             "7[01]))" .
1981              
1982             "|2(?:0(?:0[013-9]|1[0-9]|2[0-8]|3[0-6]|4[01]|5[0-8]|6[0-26-9]|" .
1983             "7[0-46]|8[01]|9[0-3])|" .
1984             "1(?:0[01]|1[046]|2[03]|3[034]|5[01]|6[0-24-6]|70)|" .
1985             "2(?:0[1-689]|1[0-46-9]|2[03-6]|3[0235]|40|56|6[014-6]|" .
1986             "7[01]|8[03])|" .
1987             "3(?:0[1-9]|1[25-9]|2[0-6]|3[024-8]|4[0145]|5[035]|6[045]|" .
1988             "72|8[0-9]|9[01])|" .
1989             "4(?:0[1-35-9]|1[0-2568]|2[0-357-9]|3[025-8]|4[0368]|5[01]|" .
1990             "60|7[6-8]|8[015])|" .
1991             "5(?:0[01]|1[02]|4[024]|5[025]|6[01]|8[0-24])|" .
1992             "6(?:0[1-9]|1[0-9]|2[4-69]|3[0-79]|4[0235-9]|5[1-36-9]|" .
1993             "6[0-9]|7[02-7]|8[02-8]|9[03-5])|" .
1994             "7(?:1[1-8]|20|30|4[023]|50|60|70)|" .
1995             "8(?:0[1-9]|1[015-9]|2[0-257]|3[0-26-9]|4[036-9]|5[013478]|" .
1996             "6[0-2467]|7[09]|8[0-2]|9[03])|" .
1997             "9(?:0[017]|1[078]|2[039]|3[03679]|4[03]|5[02-49]|6[067]|" .
1998             "7[3-57]|85))" .
1999              
2000             "|3(?:0(?:0[1-9]|1[1-9]|2[1-9]|3[0-9]|4[0-8]|5[013-8]|6[01]|" .
2001             "7[015]|8[0-9]|9[025])|" .
2002             "1(?:0[13-9]|1[0-9]|2[0-8]|3[1-357-9]|4[0-58]|5[0-47-9]|" .
2003             "6[0-9]|7[0-9]|8[0-9]|9[1-69])|" .
2004             "2(?:0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-69]|5[1-9]|6[0-57-9]|" .
2005             "7[014-7]|8[0-245]|9[0-24-7])|" .
2006             "3(?:0[01]|2[0-2]|3[01]|4[0-2]|5[01589]|6[01]|7[01])|" .
2007             "4(?:0[1-9]|1[0-4]|2[015-8]|3[01]|4[0-2]|7[0-24-8]|8[0-4]|" .
2008             "9[01])|" .
2009             "5(?:0[1-47]|1[0-9]|2[0-689]|3[013-9]|4[014]|5[01]|6[01]|" .
2010             "7[015-79]|8[018]|9[35])|" .
2011             "6(?:0[1-689]|1[0-9]|2[0-46-9]|3[0-2]|4[6-8]|5[0268]|" .
2012             "6[0156]|7[1-9]|8[0134]|9[0-27])|" .
2013             "7(?:0[1-578]|1[0-9]|2[0-9]|3[0-9]|4[0-46-9]|5[03]|6[06]|" .
2014             "70|8[01357-9]|9[0-68])|" .
2015             "8(?:0[0-5]|1[0-2]|2[05]|3[0-6]|4[01489]|5[03-5]|64|70|" .
2016             "8[02-8]|9[0135])|" .
2017             "9(?:0[1-6]|1[0-9]|2[0-24589]|3[013679]|4[0-46-9]|50|" .
2018             "6[05-7]|70|9[13-9]))" .
2019              
2020             "|4(?:0(?:0[1-9]|1[0-9]|2[0-9]|3[1-6]|4[1-9]|5[0-9]|6[4-9]|" .
2021             "7[06-9]|8[1-9]|9[0-9])|" .
2022             "1(?:0[02]|1[09]|2[0346-9]|3[0479]|4[68]|5[02-4689]|" .
2023             "6[01347-9]|7[034]|8[027]|98)|" .
2024             "2(?:0[0189]|3[03-579]|4[04]|50|6[0245]|7[024-6]|80|" .
2025             "9[14-9])|" .
2026             "3(?:0[1-9]|1[0-9]|2[1-9]|3[02359]|4[0-9]|5[2-8]|" .
2027             "6[02-57-9]|7[0-689]|8[0179]|9[1-8])|" .
2028             "4(?:0[0-3]|20|3[2468]|4[013]|6[0235]|73|8[045]|9[0-2])|" .
2029             "5(?:0[1-69]|1[3-79]|2[0-589]|3[246]|4[04]|5[0-478]|6[03]|" .
2030             "7[5-79]|8[068]|9[056])|" .
2031             "6(?:0[4-689]|1[0-9]|2[0-689]|3[0-9]|4[05-7]|5[16-9]|" .
2032             "6[1-6]|7[0-9]|8[1-9]|9[13-9])|" .
2033             "7(?:0[0-35]|15|2[04]|3[03-57]|4[12578]|5[4-6]|6[068]|70|" .
2034             "80|9[0-5])|" .
2035             "8(?:0[1-489]|1[025-8]|2[013-578]|3[024689]|4[1-46-9]|" .
2036             "5[1-9]|6[1-589]|7[06-9]|8[4-9]|9[1-468])|" .
2037             "9(?:0[0-29]|1[0256]|20|34|5[0-35]|7[1-4]|8[05]|9[034]))" .
2038              
2039             "|5(?:0(?:0[3-9]|1[0-9]|2[0-2]|3[1-9]|4[1-35]|5[2-9]|6[378]|" .
2040             "7[235]|8[129]|9[346-9])|" .
2041             "1(?:0[14-9]|1[13-9]|2[124]|3[0-24-7]|4[1-8]|5[1-5]|6[0-5]|" .
2042             "7[0-46-9]|8[34])|" .
2043             "2(?:0[0-36-9]|1[0-25-8]|2[1-9]|3[0-25-9]|4[34]|5[1-47-9]|" .
2044             "6[0-578]|8[1-6]|9[139])|" .
2045             "3(?:0[0-9]|1[04589]|2[1-35-79]|3[13-7]|4[1-35-7]|" .
2046             "5[03-578]|6[0356]|7[1489]|8[0-24578]|9[2-46-9])|" .
2047             "4(?:0[1-46-9]|1[0-9]|2[0378]|3[07]|4[03-579]|5[0-57-9]|" .
2048             "6[02-5]|7[02-6]|8[046]|9[89])|" .
2049             "5(?:0[1-9]|1[124-9]|2[1-357-9]|3[1-8]|4[124-9]|5[01459]|" .
2050             "6[0135-8]|7[04-68]|8[02-689]|9[013-68])|" .
2051             "6(?:0[0-245]|1[024]|2[06-9]|3[025-7]|4[0-35-79]|5[023]|" .
2052             "8[0357]|9[03-6])|" .
2053             "7(?:0[0-9]|1[0-589]|2[1-9]|3[01346]|4[1-35-9]|5[0-2]|" .
2054             "6[03]|7[036-9]|8[0-8])|" .
2055             "8(?:0[3-9]|1[0-9]|2[0-24589]|3[1568]|4[157-9]|5[1-47-9]|" .
2056             "6[1-489]|7[1-36-9]|8[1246-9]|9[23569])|" .
2057             "9(?:0[2-46-8]|1[1-8]|3[16-9]|4[1378]|5[1-7]|6[0-267]|" .
2058             "7[07-9]|8[13467]|9[134]))" .
2059              
2060             "|6(?:0(?:0[1-9]|1[0-9]|2[0-68]|3[05-9]|4[03-8]|5[0-257-9]|" .
2061             "6[02-57-9]|7[06]|8[02-579]|9[0-24-689])|" .
2062             "1(?:0[0-6]|10|20|3[39]|4[0-469]|5[0-6]|6[0156]|7[04]|" .
2063             "8[34]|9[06])|" .
2064             "2(?:0[01]|1[0-68]|2[024]|3[089]|4[09]|5[09]|6[03-5]|7[02]|" .
2065             "8[0-35]|9[02-4])|" .
2066             "3(?:0[01]|1[05]|20|3[09]|50|6[034]|8[67]|9[0-9])|" .
2067             "4(?:0[1-57-9]|1[0-689]|2[1-359]|3[013-6]|4[03-57]|5[03-7]|" .
2068             "6[0-2]|7[0256]|8[01346-8]|9[0349])|" .
2069             "5(?:0[1-46-9]|1[0-24-8]|2[0-59]|3[089]|7[01]|90)|" .
2070             "6(?:0[01]|1[0-3]|2[0289]|3[0136-9]|4[02-5]|5[0235-9]|" .
2071             "7[04]|8[036-9]|9[0347-9])|" .
2072             "7(?:0[0-478]|1[013-9]|2[136-9]|3[0147]|4[01]|5[01]|6[13]|" .
2073             "7[0-26-9]|8[1-489]|9[1-35-9])|" .
2074             "8(?:0[0-9]|1[0-57-9]|2[1-36-9]|4[1378]|5[1-689]|6[13689]|" .
2075             "7[0-35-9]|8[124-8]|9[13-689])|" .
2076             "9(?:0[0-39]|1[24-9]|2[146-9]|4[0-2467]|5[1378]|6[1346-9]|" .
2077             "7[13578]|8[0-8]|9[1356]))" .
2078              
2079             "|7(?:0(?:0[3-6]|1[0-689]|2[0-9]|3[0-46-9]|4[0-9]|5[0-46-9]|" .
2080             "7[024589]|8[0-389]|9[127-9])|" .
2081             "1(?:0[015]|1[02-49]|2[015-79]|30|4[02]|5[02369]|6[05-9]|" .
2082             "7[06-8]|80|9[04])|" .
2083             "2(?:0[0136]|1[1-3]|2[13478]|3[124-689]|4[0-367]|5[025-79]|" .
2084             "6[013468]|7[03]|8[024-9]|9[0158])|" .
2085             "3(?:0[0-2]|1[05689]|2[0179]|3[1-68]|4[0-35]|5[013-578]|61|" .
2086             "7[024]|8[03467]|9[1-37-9])|" .
2087             "4(?:0[0-9]|1[0-9]|2[0-24-9]|3[0-9]|4[0-9]|5[0-9]|" .
2088             "6[1-35-9]|7[0-9]|8[0-9]|9[0-7])|" .
2089             "5(?:0[0-9]|1[02-479]|2[059]|3[013]|4[019]|5[01]|6[0236]|" .
2090             "70|8[0134]|9[016])|" .
2091             "6(?:0[0-9]|1[09]|2[02-49]|3[0-4]|5[0-8]|60|7[01]|90)|" .
2092             "7(?:0[1-57-9]|1[0-8]|2[4-69]|3[024-9]|4[024-68]|5[01]|" .
2093             "6[01]|7[017]|9[0167])|" .
2094             "8(?:0[0-58]|1[07-9]|2[02]|56|6[0349]|7[013]|8[24]|" .
2095             "9[02368])|" .
2096             "9(?:0[01]|4[04]|50|60|7[01367]|8[0-25]|9[034]))" .
2097              
2098             "|8(?:0(?:0[1-9]|1[0-69]|2[0-36-9]|3[0-278]|4[17-9]|5[068]|" .
2099             "6[34]|7[0-69]|8[46-9]|9[1-8])|" .
2100             "1(?:0[0238]|1[048]|2[08]|3[0568]|4[0569]|5[017-9]|6[018]|" .
2101             "7[08]|8[124-9]|9[035-8])|" .
2102             "2(?:0[0-35-9]|1[014589]|2[06]|3[0-3]|5[0156]|6[0146]|" .
2103             "7[013-68]|8[135689]|9[01478])|" .
2104             "3(?:0[0159]|1[0-7]|2[02-68]|40|5[27]|60|7[0236-8]|" .
2105             "8[02478]|9[0238])|" .
2106             "4(?:0[0-9]|1[0-6]|2[68]|3[0289]|4[57]|5[059]|6[59]|7[05]|" .
2107             "8[013-589]|93)|" .
2108             "5(?:0[1-9]|1[02-8]|2[023]|3[013-69]|4[036]|9[01])|" .
2109             "6(?:0[1-478]|1[03-8]|2[246]|3[048]|4[0-36-8]|5[124-9]|" .
2110             "6[013-6]|72|8[01]|9[01])|" .
2111             "7(?:0[01]|2[03-5]|3[0235]|4[023]|5[02-4]|6[12467]|70)|" .
2112             "8(?:0[0-59]|13|2[07]|30|4[24]|5[0-24]|6[015]|70|80|" .
2113             "9[0-27])|" .
2114             "9(?:0[0-24-9]|10|2[0-2]|6[01]|76|8[015]))" .
2115              
2116             "|9(?:0(?:0[6-9]|1[0-9]|2[02479]|3[0478]|4[02369]|5[05-79]|" .
2117             "6[02489])|" .
2118             "1(?:0[0-8]|1[089]|2[08]|3[0-24-8]|4[0-46-8]|5[1-369]|" .
2119             "6[1-39]|8[0-24-79]|9[02-57])|" .
2120             "2(?:40|5[1-9]|6[0-35-9]|7[0-9]|8[0-8]|9[0-4689])|" .
2121             "3(?:0[02-6]|1[0156]|2[12569]|3[4-6]|5[0578]|6[05]|" .
2122             "7[02369]|8[0-24-9]|9[1-35])|" .
2123             "4(?:0[2-9]|1[1459]|2[03-7]|3[069]|4[0-8]|5[013-5]|" .
2124             "7[01569]|8[0-9]|9[6-8])|" .
2125             "5(?:0[1-9]|1[0-9]|2[015]|3[1-36]|4[05]|5[01]|8[02-7]|" .
2126             "9[035])|" .
2127             "6(?:0[09]|1[056]|2[014]|5[07]|64|7[02]|9[0-2])|" .
2128             "7(?:0[09]|1[0-7]|22|3[05]|4[02]|5[01]|6[03-58]|7[0-35]|82|" .
2129             "90)|" .
2130             "8(?:0[02]|1[015]|2[06]|4[056])|" .
2131             "9(?:00|1[024-7]|25|3[05]|5[01]|60|8[0-2]|9[01]))" .
2132             ")",
2133              
2134              
2135             #
2136             # San Marino uses a slice of the postal codes for Italy.
2137             # Any postal code starting with 4789, followed by another
2138             # digit is from San Marino
2139             #
2140             # Data: http://download.geonames.org/export/zip/SM.zip
2141             #
2142             'San Marino' => "(?k:4789[0-9])",
2143              
2144              
2145             Spain => "(?k:(?k:0[1-9]|[1-4][0-9]|5[0-2])(?k:[0-9])(?k:[0-9]{2}))",
2146             # Five digits, first two indicate the province.
2147             # Third digit: large town, main delivery rounds.
2148             # Last 2 digits: delivery area, secondary delivery route
2149             # or link to rural areas.
2150              
2151             #
2152             # Switzerland uses four digit postal codes; leading 0s are not used.
2153             # Not every combination is in use. Postal codes starting with 948 and
2154             # 949 are used by Liechtenstein, and will not be recognized by the
2155             # pattern below.
2156             #
2157             # Data from: http://download.geonames.org/export/zip/CH.zip
2158             #
2159             Switzerland =>
2160             "(?k:1(?:0(?:0[0-9]|1[0-2457-9]|2[02-9]|3[0-9]|4[0-7]|5[2-589]|" .
2161             "6[1-368]|7[0-36-8]|8[0-58]|9[0-8])|" .
2162             "1(?:1[02-7]|2[1-8]|3[124-6]|4[1-9]|6[2-9]|7[02-6]|8[02-9]|" .
2163             "9[5-7])|" .
2164             "2(?:0[0-9]|1[1-9]|2[02-8]|3[1-4679]|4[0-8]|5[1-8]|6[0-9]|" .
2165             "7[0-9]|8[13-9]|9[0-9])|" .
2166             "3(?:0[02-8]|1[0-35-8]|2[0-69]|3[078]|4[1-8]|5[02-8]|" .
2167             "7[2-7])|" .
2168             "4(?:0[014-9]|1[0235-8]|2[0-9]|3[0-9]|4[0-356]|5[02-4]|" .
2169             "6[2-48]|7[03-5]|8[2-69])|" .
2170             "5(?:09|1[02-5]|2[1-9]|3[02-8]|4[1-5]|5[1-5]|6[2-8]|" .
2171             "8[02-9]|95)|" .
2172             "6(?:0[7-9]|1[0-9]|2[3-8]|3[0-8]|4[2-9]|5[1-46-9]|" .
2173             "6[0135-79]|7[03-9]|8[0-9]|9[0-24-79])|" .
2174             "7(?:0[0-2457-9]|1[2-9]|2[0-8]|3[0-8]|4[0-24-9]|5[2-467]|" .
2175             "6[23]|7[2-6]|8[2-9]|9[1-7])|" .
2176             "8(?:0[0-9]|1[14-8]|2[02-4]|3[23]|4[4-7]|5[2-46]|6[02-9]|" .
2177             "7[0-5]|8[0245]|9[0-35-9])|" .
2178             "9(?:0[2-8]|1[1-489]|2[0-35-9]|3[2-46-8]|4[1-8]|5[013578]|" .
2179             "6[1-9]|7[1-8]|8[1-8]|9[1-467]))" .
2180              
2181             "|2(?:0(?:0[0-46-9]|1[02-79]|2[2-578]|3[4-7]|4[236]|5[2-46-8]|" .
2182             "6[3578]|7[2-5]|8[78])|" .
2183             "1(?:0[358]|1[2-7]|2[3467]|49)|" .
2184             "20[6-8]|3(?:0[0-46]|1[468]|2[25]|3[368]|4[05]|5[034]|" .
2185             "6[02-4])|" .
2186             "4(?:0[056]|1[46])|" .
2187             "5(?:0[0-5]|1[02-8]|2[035]|3[2-8]|4[02-5]|5[2-8]|6[02-5]|" .
2188             "7[25-7])|" .
2189             "6(?:0[3-8]|1[02356])|" .
2190             "7(?:1[02-8]|2[023]|3[23568]|4[02-8]|62)|" .
2191             "8(?:0[0235-7]|1[2-4]|2[2-9]|3[02]|4[23]|5[2-7]|6[34]|73|" .
2192             "8[2-9])|" .
2193             "9(?:0[02-8]|1[24-6]|2[2-6]|3[235]|4[2-467]|5[02-4]))" .
2194              
2195             "|3(?:0(?:0[0-8]|1[0-57-9]|2[0479]|3[02-9]|4[0-9]|5[02-4]|" .
2196             "6[35-8]|7[0-8]|8[2-9]|9[5-9])|" .
2197             "1(?:1[0-6]|2[2-8]|32|4[4578]|5[02-9]|7[2-9]|8[2-6])|" .
2198             "2(?:0[2-8]|1[02-6]|2[56]|3[2-8]|5[0-7]|6[2-46-8]|7[0-4]|" .
2199             "8[02-6]|9[2-8])|" .
2200             "3(?:0[235-9]|1[2-57]|2[1-6]|6[0235-8]|7[2-7]|80)|" .
2201             "4(?:0[0-2]|1[2-9]|2[1-9]|3[2-9]|5[2-7]|6[2-5]|7[2-6])|" .
2202             "5(?:0[346-8]|1[023]|3[1-8]|43|5[0-35-7])|" .
2203             "6(?:0[0-57-9]|1[2-9]|2[2-9]|3[1-68]|4[5-7]|5[2-8]|6[1-5]|" .
2204             "7[1-4])|" .
2205             "7(?:0[02-7]|1[13-8]|2[2-5]|5[2-8]|6[2-6]|7[0-35-8]|8[0-5]|" .
2206             "92)|" .
2207             "8(?:0[013-7]|1[2-68]|2[2-6]|5[2-8]|6[02-4])|" .
2208             "9(?:0[0-8]|1[0-46-9]|2[02-9]|3[0-57-9]|4[02-9]|5[1-7]|" .
2209             "6[0135-8]|7[0-9]|8[2-9]|9[1-9]))" .
2210              
2211             "|4(?:0(?:0[0-57-9]|1[0-35-9]|2[03-5]|3[0-59]|4[0-2]|5[1-9]|65|" .
2212             "7[058]|8[0-9]|9[1-6])|" .
2213             "1(?:0[1-8]|1[24-8]|2[3-7]|3[23]|4[2-8]|53)|" .
2214             "2(?:0[2-46-8]|2[2-9]|3[2-4]|4[2-7]|5[2-4])|" .
2215             "3(?:0[2-5]|1[02-7]|2[2-5]|3[2-4])|" .
2216             "4(?:02|1[0-9]|2[1-6]|3[1-8]|4[1-8]|5[0-35-8]|6[0-9]|" .
2217             "9[2-7])|" .
2218             "5(?:0[0-39]|1[2-5]|2[2-58]|3[2-9]|4[23]|5[1-46-8]|6[2-6]|" .
2219             "7[1346-9]|8[1-8])|" .
2220             "6(?:0[0139]|1[1-8]|2[0-689]|3[02-4]|40|5[2-8]|6[35])|" .
2221             "7(?:0[2-4]|1[02-9])|" .
2222             "8(?:0[0-35-9]|1[2-4]|5[236])|" .
2223             "9(?:0[0-2]|1[1-79]|2[2-4]|3[2-8]|4[2-4]|5[02-5]))" .
2224              
2225             "|5(?:0(?:0[014]|1[02-578]|2[2-8]|3[2-7]|4[02-46]|5[346-8]|" .
2226             "6[2-4]|7[02-9]|8[02-5])|" .
2227             "1(?:0[235-8]|1[236])|" .
2228             "2(?:0[01]|1[023]|2[2-5]|3[2-7]|4[2-6]|7[2-7])|" .
2229             "3(?:0[013-6]|1[2-8]|2[2-6]|3[02-4])|" .
2230             "4(?:0[0-24-68]|1[235-7]|2[0356]|3[0-26]|4[2-5]|5[2-4]|" .
2231             "6[2-7])|" .
2232             "5(?:0[2-7]|12|2[245])|" .
2233             "6(?:0[013-8]|1[0-9]|2[0-8]|3[02467]|4[2-7])|" .
2234             "7(?:0[2-8]|12|2[2-8]|3[2-7]|4[256]))" .
2235              
2236             "|6(?:0(?:0[02-9]|1[0-9]|2[0-8]|3[0-9]|4[2-578]|5[2356]|" .
2237             "6[0-46-8]|7[2-48]|8[3-6])|" .
2238             "1(?:0[2356]|1[02-4]|2[2356]|3[023]|4[2-7]|5[2-46]|" .
2239             "6[0-367]|7[034]|82|9[267])|" .
2240             "2(?:0[3-8]|1[0-8]|2[12]|3[1-6]|4[2-8]|5[23]|6[02-5]|" .
2241             "7[4-7]|8[013-9]|9[45])|" .
2242             "3(?:0[0-4]|1[02-57-9]|3[0-3]|4[0-69]|5[346]|6[235]|7[0-7]|" .
2243             "8[236-8]|9[01])|" .
2244             "4(?:0[2-5]|1[04-8]|2[2-4]|3[0-468]|4[0-3]|5[24]|6[0-9]|" .
2245             "7[2-6]|8[2457]|9[013])|" .
2246             "5(?:0[0136]|1[1-8]|2[3-8]|3[2-578]|4[0-9]|5[6-8]|6[235]|" .
2247             "7[1-9]|8[2-4]|9[02-9])|" .
2248             "6(?:0[0-245]|1[1-468]|22|3[1-7]|4[4-8]|5[2-9]|6[1-4]|" .
2249             "7[02-8]|8[2-5]|9[02-6])|" .
2250             "7(?:0[2357]|1[03-9]|2[0-4]|4[2-9]|6[034]|7[2-7]|8[01])|" .
2251             "8(?:0[2-9]|1[04-8]|2[1-35-8]|3[02-9]|5[02-5]|6[2-7]|" .
2252             "7[2-57]|83)|" .
2253             "9(?:0[0-8]|1[1-9]|2[124-9]|3[02-9]|4[2-9]|5[0-9]|6[2-8]|" .
2254             "7[46-9]|8[0-46-9]|9[0-9]))" .
2255              
2256             "|7(?:0(?:0[0-467]|1[2-9]|2[36-9]|3[12]|5[06-8]|6[2-4]|7[4-8]|" .
2257             "8[2-4])|" .
2258             "1(?:0[4679]|1[0-6]|2[26-8]|3[02-8]|4[1-9]|5[1-9]|6[2-8]|" .
2259             "7[2-6]|8[02-9])|" .
2260             "2(?:0[1-68]|1[2-5]|2[02-468]|3[1-35]|4[0-79]|5[02]|6[05]|" .
2261             "7[026-8])|" .
2262             "3(?:0[2-467]|1[02-57]|2[03-6])|" .
2263             "4(?:0[2-578]|1[1-9]|2[1-8]|3[0-8]|4[02-8]|5[0-9]|6[02-4]|" .
2264             "7[237]|8[24]|9[2-4])|" .
2265             "5(?:0[02-5]|1[2-7]|2[2-7]|3[02-7]|4[2356]|5[0-46-9]|" .
2266             "6[023])|" .
2267             "6(?:0[2-68]|10)|" .
2268             "7(?:10|4[1-8]))" .
2269              
2270             "|8(?:0(?:0[0-68]|1[0-256]|2[0-467]|3[0-46-9]|4[0-24-9]|" .
2271             "5[0-357-9]|6[013-68]|7[0145]|8[015-8]|9[0-3689])|" .
2272             "1(?:0[2-9]|1[2-578]|2[1-7]|3[02-6]|4[23]|5[2-8]|6[24-6]|" .
2273             "7[2-5]|8[0-57]|9[2-7])|" .
2274             "2(?:0[0-578]|1[02-9]|2[2-68]|3[1-689]|4[0-35-8]|5[2-59]|" .
2275             "6[0-9]|7[2-4]|8[05])|" .
2276             "3(?:0[1-9]|1[0-2457]|2[025]|3[0-25]|4[02-5]|5[2-7]|6[023]|" .
2277             "7[0-246])|" .
2278             "4(?:0[0-24-689]|1[0-68]|2[1-8]|4[247]|5[0-57-9]|6[0-8]|" .
2279             "7[124-9]|8[2-46-9]|9[2-9])|" .
2280             "5(?:0[0-35-8]|1[024]|2[02-6]|3[025-7]|4[02-8]|5[2-68]|" .
2281             "6[014-6]|7[02-7]|8[0-9]|9[02-9])|" .
2282             "6(?:0[02-8]|1[02-8]|2[0-7]|3[02-9]|4[056])|" .
2283             "7(?:0[02-46-8]|1[2-8]|2[235-7]|3[02-57-9]|40|5[0-9]|" .
2284             "6[25-7]|7[2-57]|8[2-4])|" .
2285             "8(?:0[0-8]|1[02356]|2[045]|3[2-6]|4[0-79]|5[2-8]|6[2-8]|" .
2286             "7[2-47-9]|8[0-9]|9[02-8])|" .
2287             "9(?:0[1-9]|1[0-9]|2[56]|3[2-4]|42|5[1-7]|6[24-7]|70))" .
2288              
2289             "|9(?:0(?:0[0146-9]|1[0-6]|2[02-9]|3[02-8]|4[2-4]|5[02-8]|" .
2290             "6[2-4])|" .
2291             "1(?:0[0-578]|1[2-6]|2[235-7])|" .
2292             "2(?:0[013-5]|1[2-7]|2[035]|3[01]|4[02-9])|" .
2293             "3(?:0[014-68]|1[2-5]|2[0235-7])|" .
2294             "4(?:0[0-5]|1[0134]|2[2-8]|3[04-7]|4[2-5]|5[0-3]|6[2-9]|" .
2295             "7[0-35-9])|" .
2296             "5(?:0[0-46-8]|1[02457]|2[3-7]|3[2-6]|4[235-8]|5[2-6]|" .
2297             "6[25]|73)|" .
2298             "6(?:0[1246-8]|1[2-5]|2[0-2]|3[013]|4[23]|5[0-25-8]))" .
2299             ")",
2300              
2301              
2302             #
2303             # Vatican City uses a single postal code, taken from the Italian
2304             # system for postal codes; and this code is shared with parts of Rome.
2305             #
2306             # Data from: http://download.geonames.org/export/zip/CH.zip
2307             #
2308             'Vatican City' => "(?k:00120)",
2309              
2310             );
2311              
2312             my %alternatives = (
2313             Australia => [qw /Australian/],
2314             France => [qw /French/],
2315             Germany => [qw /German/],
2316             );
2317              
2318              
2319             while (my ($country, $zip) = each %zip) {
2320             my @names = ($country);
2321             push @names => @{$alternatives {$country}} if $alternatives {$country};
2322             foreach my $name (@names) {
2323             my $pat_name = $name eq "Denmark" && $] < 5.00503
2324             ? [zip => $name, qw /-country=/]
2325             : [zip => $name, qw /-prefix= -country=/];
2326             pattern name => $pat_name,
2327             create => sub {
2328             my $pt = _t $_ [1] {-prefix};
2329              
2330             my $cn = _c $country => $_ [1] {-country};
2331             my $pfx = "(?:(?k:$cn)-)";
2332              
2333             "(?k:$pfx$pt$zip)";
2334             },
2335             ;
2336             }
2337             }
2338              
2339              
2340             # Postal codes of the form 'DDDD LL', with F, I, O, Q, U and Y not
2341             # used, SA, SD and SS unused combinations, and the first digit
2342             # cannot be 0. No specific meaning to the letters or digits.
2343             foreach my $country (qw /Netherlands Dutch/) {
2344             pattern name => ['zip', $country => qw /-prefix= -country=/, "-sep= "],
2345             create => sub {
2346             my $pt = _t $_ [1] {-prefix};
2347              
2348             # Unused letters: F, I, O, Q, U, Y.
2349             # Unused combinations: SA, SD, SS.
2350             my $num = '[1-9][0-9]{3}';
2351             my $let = '[A-EGHJ-NPRTVWXZ][A-EGHJ-NPRSTVWXZ]|' .
2352             'S[BCEGHJ-NPRTVWXZ]';
2353              
2354             my $sep = __ $_ [1] {-sep};
2355             my $cn = _c Netherlands => $_ [1] {-country};
2356             my $pfx = "(?:(?k:$cn)-)";
2357              
2358             "(?k:$pfx$pt(?k:(?k:$num)(?k:$sep)(?k:$let)))";
2359             },
2360             ;
2361             }
2362              
2363              
2364             # Postal codes of the form 'DDDDD' or 'DDDDD-DDDD'. All digits are used,
2365             # none carry any specific meaning.
2366             pattern name => [qw /zip US -prefix= -country= -extended= -sep=-/],
2367             create => sub {
2368             my $pt = _t $_ [1] {-prefix};
2369             my $et = _t $_ [1] {-extended};
2370              
2371             my $sep = __ $_ [1] {-sep};
2372              
2373             my $cn = _c USA => $_ [1] {-country};
2374             my $pfx = "(?:(?k:$cn)-)";
2375             # my $zip = "(?k:[0-9]{5})";
2376             # my $ext = "(?:(?k:$sep)(?k:[0-9]{4}))";
2377             my $zip = "(?k:(?k:[0-9]{3})(?k:[0-9]{2}))";
2378             my $ext = "(?:(?k:$sep)(?k:(?k:[0-9]{2})(?k:[0-9]{2})))";
2379              
2380             "(?k:$pfx$pt(?k:$zip$ext$et))";
2381             },
2382             ;
2383              
2384              
2385              
2386              
2387             #
2388             # Postal codes are four digits, but not all combinations are used.
2389             #
2390             # Valid codes from:
2391             # https://postcode.auspost.com.au/free_display.html?id=1
2392             #
2393             pattern name => ['zip', 'Australia' => qw /-prefix= -country= -lax=/],
2394             create => sub {
2395             my $pt = _t $_ [1] {-prefix};
2396             my $cn = _c Australia => $_ [1] {-country};
2397             my $pfx = "(?:(?k:$cn)-)";
2398             my $lax = !defined $_ [1] {-lax} || $_ [1] {-lax};
2399             my $l0 = $lax ? "0?" : "0"; # Leading zero
2400              
2401             my $pat = "(?|" .
2402             "(?|1(?:2(?:15|2[05]|3[05]|40)|" .
2403             "3(?:00|35|40|5[05]|60)|" .
2404             "4(?:35|45|5[05]|6[056]|7[05]|8[015]|9[059])|" .
2405             "5(?:15|6[05]|70|85|9[05])|" .
2406             "6(?:3[05]|40|55|60|7[05]|8[05])|" .
2407             "7(?:0[01]|1[05]|30|5[05]|65|90)|" .
2408             "8(?:0[05]|11|25|35|51|60|7[15]|85|90))" .
2409              
2410             "|2(?:0(?:0[0-246-9]|1[0-25-9]|[2-4][0-9]|5[0279]|" .
2411             "6[0-9]|7[0-79]|8[0-9]|9[02-79])|" .
2412             "1(?:[0-2][0-9]|3[0-8]|4[0-8]|5[0-9]|6[0-8]|" .
2413             "7[0-9]|9[0-9])|" .
2414             "2(?:0[03-9]|1[0-46-9]|2[0-9]|3[0-4]|5[016-9]|" .
2415             "6[0-57]|78|8[0-79]|9[0-9])|" .
2416             "3(?:0[02-9]|1[0-24-9]|2[0-9]|3[03-9]|4[0-8]|" .
2417             "5[0-9]|6[0159]|7[0-29]|8[0-26-8]|9[05-9])|" .
2418             "4(?:0[0-689]|1[015]|2[0-9]|3[019]|4[013-9]|" .
2419             "5[02-6]|6[02-69]|[78][0-9]|90)|" .
2420             "5(?:0[02568]|1[5-9]|2[025-9]|3[03-9]|4[015689]|" .
2421             "5[015-9]|6[03-9]|7[0-9]|8[0-8]|9[04])|" .
2422             "6(?:0[0-9]|1[0-24-9]|2[0-9]|3[0-3]|4[0-9]|" .
2423             "5[0-35689]|6[0135689]|7[1258]|8[01])|" .
2424             "7(?:0[0-35-8]|1[0-7]|2[0-25-79]|3[0-9]|4[57-9]|" .
2425             "5[0-46-9]|6[0-35-9]|7[03-9]|8[02-7]|9[0-57-9])|" .
2426             "8(?:0[03-9]|1[078]|2[0-9]|3[0-689]|4[02-9]|5[02]|" .
2427             "6[4-9]|7[013-9]|80|9[089])|" .
2428             "9(?:0[0-6]|1[1-4]))" .
2429            
2430             "|3(?:0(?:0[0-468]|1[0-35689]|2[0-9]|3[0-46-9]|[45][0-9]|" .
2431             "6[0-8]|7[0-689]|8[1-57-9]|9[013-79])|" .
2432             "1(?:0[1-9]|1[13-6]|2[1-9]|[34][0-9]|5[0-689]|" .
2433             "[6-9][0-9])|" .
2434             "2(?:0[0-24-7]|1[1-9]|2[0-8]|3[0-9]|4[0-39]|5[014]|" .
2435             "6[04-9]|7[0-9]|8[0-79]|9[2-4])|" .
2436             "3(?:0[0-59]|1[0-2457-9]|2[1-589]|3[0-578]|4[0-25]|" .
2437             "5[0-7]|6[0134]|7[013-57-9]|8[014578]|9[0-356])|" .
2438             "4(?:0[0-279]|1[2-589]|2[0347-9]|3[0-578]|4[0-246-8]|" .
2439             "5[0138]|6[0-57-9]|7[2578]|8[02357-9]|9[01468])|" .
2440             "5(?:0[0-25-79]|1[25-8]|2[0-3579]|3[0137]|4[02469]|" .
2441             "5[0-24-9]|6[1-8]|7[0-3569]|8[013-689]|9[014-79])|" .
2442             "6(?:0[78]|1[0246-9]|2[0-49]|3[0-9]|4[0134679]|" .
2443             "5[89]|6[0-69]|7[0-35-8]|8[2357-9]|9[01457-9])|" .
2444             "7(?:0[01457-9]|1[1-57-9]|2[02-8]|3[0235-9]|4[014679]|" .
2445             "5[0-9]|6[0-7]|7[057-9]|8[1-35-9]|9[1-35-79])|" .
2446             "8(?:0[02-9]|1[02-68]|2[0-5]|3[1-35]|4[0-247]|" .
2447             "5[0-46-9]|6[02459]|7[013-58]|8[025-9]|9[0-3568])|" .
2448             "9(?:0[02-49]|1[0-35689]|2[0-35-9]|3[01346-9]|4[0-6]|" .
2449             "5[01346-9]|6[024-7]|7[15-9]|8[01478]|9[0-256]))" .
2450              
2451             "|4(?:0(?:0[0-9]|1[0-47-9]|2[0-259]|3[0-24-7]|5[13-59]|" .
2452             "6[014-9]|7[02-8])|" .
2453             "1(?:0[1-9]|1[0-9]|2[0-57-9]|3[0-3]|5[1-9]|6[013-59]|" .
2454             "7[0-489]|8[34])|" .
2455             "2(?:0[57-9]|[12][0-9]|30|7[0-25]|8[057])|" .
2456             "3(?:0[013-79]|1[0-3]|4[0-7]|5[02-9]|6[0-5]|7[0-8]|" .
2457             "8[0-578]|90)|" .
2458             "4(?:0[0-8]|1[0-35-9]|2[0-8]|5[45]|6[12578]|" .
2459             "7[0-2457-9]|8[0-26-9]|9[0-46-8])|" .
2460             "5(?:0[0-9]|1[0-24-9]|2[01]|[56][0-9]|7[0-5]|8[01])|" .
2461             "6(?:0[01568]|1[0-5]|2[015-7]|30|5[059]|6[02]|" .
2462             "7[01346-8]|80|9[4579])|" .
2463             "7(?:0[0-79]|1[0-9]|2[0-8]|3[0-35-9]|4[0-6]|5[013467]|" .
2464             "9[89])|" .
2465             "8(?:0[02-9]|1[0-9]|2[0-589]|30|49|5[024-9]|" .
2466             "6[01589]|7[0-9]|8[0-8]|9[0-25]))" .
2467              
2468             "|5(?:0(?:0[016-9]|1[0-9]|2[0-5]|3[1-57-9]|4[0-9]|5[0-2]|" .
2469             "6[1-9]|7[0-6]|8[1-9]|9[0-8])|" .
2470             "1(?:0[6-9]|1[0-8]|2[015-7]|3[1-46-9]|4[0-24]|" .
2471             "[56][0-9]|7[0-4])|" .
2472             "2(?:0[1-4]|1[0-4]|2[0-3]|3[1-8]|4[0-5]|5[0-69]|" .
2473             "6[0-9]|7[0-35-9]|80|9[01])|" .
2474             "3(?:0[1-46-9]|1[01]|2[0-2]|3[0-3]|4[0-6]|5[0-7]|" .
2475             "60|7[1-4]|81)|" .
2476             "4(?:0[01]|1[0-9]|2[0-2]|3[1-4]|40|5[1-5]|6[0-24]|" .
2477             "7[0-3]|8[0-35]|9[0135])|" .
2478             "5(?:0[12]|10|2[0-3]|40|5[024-68]|60|7[0-35-7]|" .
2479             "8[0-3])|" .
2480             "6(?:0[0-9]|3[0-3]|4[0-2]|5[0-5]|6[01]|7[01]|80|90)|" .
2481             "7(?:0[01]|1[09]|2[02-5]|3[0-4])|" .
2482             "9(?:42|50))" .
2483              
2484             "|6(?:0(?:0[013-9]|1[0-24-9]|2[0-9]|3[0-8]|4[1-4]|" .
2485             "[56][0-9]|7[0-46-9]|8[1-4]|90)|" .
2486             "1(?:0[0-9]|1[0-2]|2[1-6]|4[7-9]|[56][0-9]|" .
2487             "7[0-6]|8[0-2])|" .
2488             "2(?:0[7-9]|1[013-58]|2[013-9]|3[0-36769]|4[034]|" .
2489             "5[1-68]|6[02]|7[15]|8[0-24-68]|90)|" .
2490             "3(?:0[24689]|1[1-35-8]|2[0-46-8]|3[0-35-8]|4[1368]|" .
2491             "5[0-35-9]|6[1357-9]|7[0235]|8[3-6]|9[0-8])|" .
2492             "4(?:0[13579]|1[0-589]|2[0-9]|3[0-46-8]|4[0235-8]|" .
2493             "5[02]|6[0-35-8]|7[0235-79]|8[0457-9]|90)|" .
2494             "5(?:0[1-79]|1[0-9]|2[1258]|3[0-25-7]|5[68]|" .
2495             "6[0246-9]|7[1245])|" .
2496             "6(?:0[35689]|1[2-46]|2[03578]|3[0-2589]|4[026])|" .
2497             "7(?:0[157]|1[0-468]|2[0-2568]|3[13]|4[03]|5[1348]|" .
2498             "6[025]|70|9[89])|" .
2499             "8(?:3[17-9]|4[0-9]|50|65|72|92)|" .
2500             "9(?:0[1-79]|1[0-9]|2[0-69]|3[1-69]|4[1-7]|5[1-9]|" .
2501             "6[013-9]|7[09]|8[1-9]|9[0-27]))" .
2502              
2503             "|7(?:0(?:0[0-24-9]|1[0-25-9]|2[0-7]|30|5[0-5])|" .
2504             "1(?:09|1[23679]|20|39|40|5[015]|6[23]|7[0-9]|" .
2505             "8[02-7]|90)|" .
2506             "2(?:09|1[0-6]|4[89]|5[02-9]|6[0-578]|7[05-7]|9[0-2])|" .
2507             "3(?:0[0-7]|1[056]|2[0-25]|3[01])|" .
2508             "4(?:6[6-9]|70))" .
2509              
2510             "|8(?:0(?:0[1-9]|1[0-2]))" .
2511              
2512             "|9726" .
2513              
2514             #
2515             # Place this last, in case the leading 0 is optional; if
2516             # not, matching against "2001" would find "200".
2517             #
2518             "|$l0(?:200|8(?:0[014]|1[0-5]|2[0-289]|3[0-24-9]|4[05-7]|" .
2519             "5[0-4]|6[0-2]|7[0-5]|8[0156])|909)" .
2520             "))";
2521              
2522             "(?k:$pfx$pt(?k:$pat))";
2523             }
2524             ;
2525            
2526              
2527              
2528             # pattern name => [qw /zip British/, "-sep= "],
2529             # create => sub {
2530             # my $sep = $_ [1] -> {-sep};
2531             #
2532             # my $london = '(?:EC[1-4]|WC[12]|S?W1)[A-Z]';
2533             # my $single = '[BGLMS][0-9]{1,2}';
2534             # my $double = '[A-Z]{2}[0-9]{1,2}';
2535             #
2536             # my $left = "(?:$london|$single|$double)";
2537             # my $right = '[0-9][ABD-HJLNP-UW-Z]{2}';
2538             #
2539             # "(?k:(?k:$left)(?k:$sep)(?k:$right))";
2540             # },
2541             # ;
2542             #
2543             # pattern name => [qw /zip Canadian/, "-sep= "],
2544             # create => sub {
2545             # my $sep = $_ [1] -> {-sep};
2546             #
2547             # my $left = '[A-Z][0-9][A-Z]';
2548             # my $right = '[0-9][A-Z][0-9]';
2549             #
2550             # "(?k:(?k:$left)(?k:$sep)(?k:$right))";
2551             # },
2552             # ;
2553              
2554              
2555             1;
2556              
2557             __END__