AceTime  1.11.1
Date and time classes for Arduino that support timezones from the TZ Database.
zone_policies.cpp
1 // This file was generated by the following script:
2 //
3 // $ /home/brian/src/AceTimeTools/src/acetimetools/tzcompiler.py
4 // --input_dir /home/brian/dev/tz
5 // --output_dir /home/brian/src/AceTime/src/ace_time/zonedb
6 // --tz_version 2021e
7 // --action zonedb
8 // --language arduino
9 // --scope basic
10 // --start_year 2000
11 // --until_year 2050
12 //
13 // using the TZ Database files
14 //
15 // africa
16 // antarctica
17 // asia
18 // australasia
19 // backward
20 // etcetera
21 // europe
22 // northamerica
23 // southamerica
24 //
25 // from https://github.com/eggert/tz/releases/tag/2021e
26 //
27 // Policies: 64
28 // Rules: 363
29 // Letter Size (bytes): 0
30 // Total Memory 8-bit (bytes): 3651
31 // Total Memory 32-bit (bytes): 5124
32 //
33 // DO NOT EDIT
34 
35 #include <ace_time/common/compat.h>
36 #include "zone_policies.h"
37 
38 namespace ace_time {
39 namespace zonedb {
40 
41 //---------------------------------------------------------------------------
42 // Policy name: AN
43 // Rules: 9
44 // Memory (8-bit): 87
45 // Memory (32-bit): 120
46 //---------------------------------------------------------------------------
47 
48 static const basic::ZoneRule kZoneRulesAN[] ACE_TIME_PROGMEM = {
49  // Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
50  {
51  -13 /*fromYearTiny*/,
52  -1 /*toYearTiny*/,
53  10 /*inMonth*/,
54  7 /*onDayOfWeek*/,
55  0 /*onDayOfMonth*/,
56  8 /*atTimeCode*/,
57  16 /*atTimeModifier (kSuffixS + minute=0)*/,
58  4 /*deltaCode ((deltaMinutes=60)/15)*/,
59  'D' /*letter*/,
60  },
61  // Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
62  {
63  -10 /*fromYearTiny*/,
64  -5 /*toYearTiny*/,
65  3 /*inMonth*/,
66  7 /*onDayOfWeek*/,
67  1 /*onDayOfMonth*/,
68  8 /*atTimeCode*/,
69  16 /*atTimeModifier (kSuffixS + minute=0)*/,
70  0 /*deltaCode ((deltaMinutes=0)/15)*/,
71  'S' /*letter*/,
72  },
73  // Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
74  {
75  -4 /*fromYearTiny*/,
76  5 /*toYearTiny*/,
77  3 /*inMonth*/,
78  7 /*onDayOfWeek*/,
79  0 /*onDayOfMonth*/,
80  8 /*atTimeCode*/,
81  16 /*atTimeModifier (kSuffixS + minute=0)*/,
82  0 /*deltaCode ((deltaMinutes=0)/15)*/,
83  'S' /*letter*/,
84  },
85  // Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
86  {
87  0 /*fromYearTiny*/,
88  0 /*toYearTiny*/,
89  8 /*inMonth*/,
90  7 /*onDayOfWeek*/,
91  0 /*onDayOfMonth*/,
92  8 /*atTimeCode*/,
93  16 /*atTimeModifier (kSuffixS + minute=0)*/,
94  4 /*deltaCode ((deltaMinutes=60)/15)*/,
95  'D' /*letter*/,
96  },
97  // Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
98  {
99  1 /*fromYearTiny*/,
100  7 /*toYearTiny*/,
101  10 /*inMonth*/,
102  7 /*onDayOfWeek*/,
103  0 /*onDayOfMonth*/,
104  8 /*atTimeCode*/,
105  16 /*atTimeModifier (kSuffixS + minute=0)*/,
106  4 /*deltaCode ((deltaMinutes=60)/15)*/,
107  'D' /*letter*/,
108  },
109  // Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
110  {
111  6 /*fromYearTiny*/,
112  6 /*toYearTiny*/,
113  4 /*inMonth*/,
114  7 /*onDayOfWeek*/,
115  1 /*onDayOfMonth*/,
116  8 /*atTimeCode*/,
117  16 /*atTimeModifier (kSuffixS + minute=0)*/,
118  0 /*deltaCode ((deltaMinutes=0)/15)*/,
119  'S' /*letter*/,
120  },
121  // Rule AN 2007 only - Mar lastSun 2:00s 0 S
122  {
123  7 /*fromYearTiny*/,
124  7 /*toYearTiny*/,
125  3 /*inMonth*/,
126  7 /*onDayOfWeek*/,
127  0 /*onDayOfMonth*/,
128  8 /*atTimeCode*/,
129  16 /*atTimeModifier (kSuffixS + minute=0)*/,
130  0 /*deltaCode ((deltaMinutes=0)/15)*/,
131  'S' /*letter*/,
132  },
133  // Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
134  {
135  8 /*fromYearTiny*/,
136  126 /*toYearTiny*/,
137  4 /*inMonth*/,
138  7 /*onDayOfWeek*/,
139  1 /*onDayOfMonth*/,
140  8 /*atTimeCode*/,
141  16 /*atTimeModifier (kSuffixS + minute=0)*/,
142  0 /*deltaCode ((deltaMinutes=0)/15)*/,
143  'S' /*letter*/,
144  },
145  // Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
146  {
147  8 /*fromYearTiny*/,
148  126 /*toYearTiny*/,
149  10 /*inMonth*/,
150  7 /*onDayOfWeek*/,
151  1 /*onDayOfMonth*/,
152  8 /*atTimeCode*/,
153  16 /*atTimeModifier (kSuffixS + minute=0)*/,
154  4 /*deltaCode ((deltaMinutes=60)/15)*/,
155  'D' /*letter*/,
156  },
157 
158 };
159 
160 
161 
162 const basic::ZonePolicy kPolicyAN ACE_TIME_PROGMEM = {
163  kZoneRulesAN /*rules*/,
164  nullptr /*letters*/,
165  9 /*numRules*/,
166  0 /*numLetters*/,
167 };
168 
169 //---------------------------------------------------------------------------
170 // Policy name: AQ
171 // Rules: 1
172 // Memory (8-bit): 15
173 // Memory (32-bit): 24
174 //---------------------------------------------------------------------------
175 
176 static const basic::ZoneRule kZoneRulesAQ[] ACE_TIME_PROGMEM = {
177  // Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
178  {
179  -10 /*fromYearTiny*/,
180  -8 /*toYearTiny*/,
181  3 /*inMonth*/,
182  7 /*onDayOfWeek*/,
183  1 /*onDayOfMonth*/,
184  8 /*atTimeCode*/,
185  16 /*atTimeModifier (kSuffixS + minute=0)*/,
186  0 /*deltaCode ((deltaMinutes=0)/15)*/,
187  'S' /*letter*/,
188  },
189 
190 };
191 
192 
193 
194 const basic::ZonePolicy kPolicyAQ ACE_TIME_PROGMEM = {
195  kZoneRulesAQ /*rules*/,
196  nullptr /*letters*/,
197  1 /*numRules*/,
198  0 /*numLetters*/,
199 };
200 
201 //---------------------------------------------------------------------------
202 // Policy name: AS
203 // Rules: 7
204 // Memory (8-bit): 69
205 // Memory (32-bit): 96
206 //---------------------------------------------------------------------------
207 
208 static const basic::ZoneRule kZoneRulesAS[] ACE_TIME_PROGMEM = {
209  // Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
210  {
211  -13 /*fromYearTiny*/,
212  7 /*toYearTiny*/,
213  10 /*inMonth*/,
214  7 /*onDayOfWeek*/,
215  0 /*onDayOfMonth*/,
216  8 /*atTimeCode*/,
217  16 /*atTimeModifier (kSuffixS + minute=0)*/,
218  4 /*deltaCode ((deltaMinutes=60)/15)*/,
219  'D' /*letter*/,
220  },
221  // Rule AS 1994 only - Mar 20 2:00s 0 S
222  {
223  -6 /*fromYearTiny*/,
224  -6 /*toYearTiny*/,
225  3 /*inMonth*/,
226  0 /*onDayOfWeek*/,
227  20 /*onDayOfMonth*/,
228  8 /*atTimeCode*/,
229  16 /*atTimeModifier (kSuffixS + minute=0)*/,
230  0 /*deltaCode ((deltaMinutes=0)/15)*/,
231  'S' /*letter*/,
232  },
233  // Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
234  {
235  -5 /*fromYearTiny*/,
236  5 /*toYearTiny*/,
237  3 /*inMonth*/,
238  7 /*onDayOfWeek*/,
239  0 /*onDayOfMonth*/,
240  8 /*atTimeCode*/,
241  16 /*atTimeModifier (kSuffixS + minute=0)*/,
242  0 /*deltaCode ((deltaMinutes=0)/15)*/,
243  'S' /*letter*/,
244  },
245  // Rule AS 2006 only - Apr 2 2:00s 0 S
246  {
247  6 /*fromYearTiny*/,
248  6 /*toYearTiny*/,
249  4 /*inMonth*/,
250  0 /*onDayOfWeek*/,
251  2 /*onDayOfMonth*/,
252  8 /*atTimeCode*/,
253  16 /*atTimeModifier (kSuffixS + minute=0)*/,
254  0 /*deltaCode ((deltaMinutes=0)/15)*/,
255  'S' /*letter*/,
256  },
257  // Rule AS 2007 only - Mar lastSun 2:00s 0 S
258  {
259  7 /*fromYearTiny*/,
260  7 /*toYearTiny*/,
261  3 /*inMonth*/,
262  7 /*onDayOfWeek*/,
263  0 /*onDayOfMonth*/,
264  8 /*atTimeCode*/,
265  16 /*atTimeModifier (kSuffixS + minute=0)*/,
266  0 /*deltaCode ((deltaMinutes=0)/15)*/,
267  'S' /*letter*/,
268  },
269  // Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
270  {
271  8 /*fromYearTiny*/,
272  126 /*toYearTiny*/,
273  4 /*inMonth*/,
274  7 /*onDayOfWeek*/,
275  1 /*onDayOfMonth*/,
276  8 /*atTimeCode*/,
277  16 /*atTimeModifier (kSuffixS + minute=0)*/,
278  0 /*deltaCode ((deltaMinutes=0)/15)*/,
279  'S' /*letter*/,
280  },
281  // Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
282  {
283  8 /*fromYearTiny*/,
284  126 /*toYearTiny*/,
285  10 /*inMonth*/,
286  7 /*onDayOfWeek*/,
287  1 /*onDayOfMonth*/,
288  8 /*atTimeCode*/,
289  16 /*atTimeModifier (kSuffixS + minute=0)*/,
290  4 /*deltaCode ((deltaMinutes=60)/15)*/,
291  'D' /*letter*/,
292  },
293 
294 };
295 
296 
297 
298 const basic::ZonePolicy kPolicyAS ACE_TIME_PROGMEM = {
299  kZoneRulesAS /*rules*/,
300  nullptr /*letters*/,
301  7 /*numRules*/,
302  0 /*numLetters*/,
303 };
304 
305 //---------------------------------------------------------------------------
306 // Policy name: AT
307 // Rules: 8
308 // Memory (8-bit): 78
309 // Memory (32-bit): 108
310 //---------------------------------------------------------------------------
311 
312 static const basic::ZoneRule kZoneRulesAT[] ACE_TIME_PROGMEM = {
313  // Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
314  {
315  -12 /*fromYearTiny*/,
316  -10 /*toYearTiny*/,
317  10 /*inMonth*/,
318  7 /*onDayOfWeek*/,
319  0 /*onDayOfMonth*/,
320  8 /*atTimeCode*/,
321  16 /*atTimeModifier (kSuffixS + minute=0)*/,
322  4 /*deltaCode ((deltaMinutes=60)/15)*/,
323  'D' /*letter*/,
324  },
325  // Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
326  {
327  -9 /*fromYearTiny*/,
328  -1 /*toYearTiny*/,
329  10 /*inMonth*/,
330  7 /*onDayOfWeek*/,
331  1 /*onDayOfMonth*/,
332  8 /*atTimeCode*/,
333  16 /*atTimeModifier (kSuffixS + minute=0)*/,
334  4 /*deltaCode ((deltaMinutes=60)/15)*/,
335  'D' /*letter*/,
336  },
337  // Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
338  {
339  -9 /*fromYearTiny*/,
340  5 /*toYearTiny*/,
341  3 /*inMonth*/,
342  7 /*onDayOfWeek*/,
343  0 /*onDayOfMonth*/,
344  8 /*atTimeCode*/,
345  16 /*atTimeModifier (kSuffixS + minute=0)*/,
346  0 /*deltaCode ((deltaMinutes=0)/15)*/,
347  'S' /*letter*/,
348  },
349  // Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
350  {
351  0 /*fromYearTiny*/,
352  0 /*toYearTiny*/,
353  8 /*inMonth*/,
354  7 /*onDayOfWeek*/,
355  0 /*onDayOfMonth*/,
356  8 /*atTimeCode*/,
357  16 /*atTimeModifier (kSuffixS + minute=0)*/,
358  4 /*deltaCode ((deltaMinutes=60)/15)*/,
359  'D' /*letter*/,
360  },
361  // Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
362  {
363  1 /*fromYearTiny*/,
364  126 /*toYearTiny*/,
365  10 /*inMonth*/,
366  7 /*onDayOfWeek*/,
367  1 /*onDayOfMonth*/,
368  8 /*atTimeCode*/,
369  16 /*atTimeModifier (kSuffixS + minute=0)*/,
370  4 /*deltaCode ((deltaMinutes=60)/15)*/,
371  'D' /*letter*/,
372  },
373  // Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
374  {
375  6 /*fromYearTiny*/,
376  6 /*toYearTiny*/,
377  4 /*inMonth*/,
378  7 /*onDayOfWeek*/,
379  1 /*onDayOfMonth*/,
380  8 /*atTimeCode*/,
381  16 /*atTimeModifier (kSuffixS + minute=0)*/,
382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
383  'S' /*letter*/,
384  },
385  // Rule AT 2007 only - Mar lastSun 2:00s 0 S
386  {
387  7 /*fromYearTiny*/,
388  7 /*toYearTiny*/,
389  3 /*inMonth*/,
390  7 /*onDayOfWeek*/,
391  0 /*onDayOfMonth*/,
392  8 /*atTimeCode*/,
393  16 /*atTimeModifier (kSuffixS + minute=0)*/,
394  0 /*deltaCode ((deltaMinutes=0)/15)*/,
395  'S' /*letter*/,
396  },
397  // Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
398  {
399  8 /*fromYearTiny*/,
400  126 /*toYearTiny*/,
401  4 /*inMonth*/,
402  7 /*onDayOfWeek*/,
403  1 /*onDayOfMonth*/,
404  8 /*atTimeCode*/,
405  16 /*atTimeModifier (kSuffixS + minute=0)*/,
406  0 /*deltaCode ((deltaMinutes=0)/15)*/,
407  'S' /*letter*/,
408  },
409 
410 };
411 
412 
413 
414 const basic::ZonePolicy kPolicyAT ACE_TIME_PROGMEM = {
415  kZoneRulesAT /*rules*/,
416  nullptr /*letters*/,
417  8 /*numRules*/,
418  0 /*numLetters*/,
419 };
420 
421 //---------------------------------------------------------------------------
422 // Policy name: AV
423 // Rules: 9
424 // Memory (8-bit): 87
425 // Memory (32-bit): 120
426 //---------------------------------------------------------------------------
427 
428 static const basic::ZoneRule kZoneRulesAV[] ACE_TIME_PROGMEM = {
429  // Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
430  {
431  -12 /*fromYearTiny*/,
432  -1 /*toYearTiny*/,
433  10 /*inMonth*/,
434  7 /*onDayOfWeek*/,
435  0 /*onDayOfMonth*/,
436  8 /*atTimeCode*/,
437  16 /*atTimeModifier (kSuffixS + minute=0)*/,
438  4 /*deltaCode ((deltaMinutes=60)/15)*/,
439  'D' /*letter*/,
440  },
441  // Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
442  {
443  -9 /*fromYearTiny*/,
444  -6 /*toYearTiny*/,
445  3 /*inMonth*/,
446  7 /*onDayOfWeek*/,
447  1 /*onDayOfMonth*/,
448  8 /*atTimeCode*/,
449  16 /*atTimeModifier (kSuffixS + minute=0)*/,
450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
451  'S' /*letter*/,
452  },
453  // Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
454  {
455  -5 /*fromYearTiny*/,
456  5 /*toYearTiny*/,
457  3 /*inMonth*/,
458  7 /*onDayOfWeek*/,
459  0 /*onDayOfMonth*/,
460  8 /*atTimeCode*/,
461  16 /*atTimeModifier (kSuffixS + minute=0)*/,
462  0 /*deltaCode ((deltaMinutes=0)/15)*/,
463  'S' /*letter*/,
464  },
465  // Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
466  {
467  0 /*fromYearTiny*/,
468  0 /*toYearTiny*/,
469  8 /*inMonth*/,
470  7 /*onDayOfWeek*/,
471  0 /*onDayOfMonth*/,
472  8 /*atTimeCode*/,
473  16 /*atTimeModifier (kSuffixS + minute=0)*/,
474  4 /*deltaCode ((deltaMinutes=60)/15)*/,
475  'D' /*letter*/,
476  },
477  // Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
478  {
479  1 /*fromYearTiny*/,
480  7 /*toYearTiny*/,
481  10 /*inMonth*/,
482  7 /*onDayOfWeek*/,
483  0 /*onDayOfMonth*/,
484  8 /*atTimeCode*/,
485  16 /*atTimeModifier (kSuffixS + minute=0)*/,
486  4 /*deltaCode ((deltaMinutes=60)/15)*/,
487  'D' /*letter*/,
488  },
489  // Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
490  {
491  6 /*fromYearTiny*/,
492  6 /*toYearTiny*/,
493  4 /*inMonth*/,
494  7 /*onDayOfWeek*/,
495  1 /*onDayOfMonth*/,
496  8 /*atTimeCode*/,
497  16 /*atTimeModifier (kSuffixS + minute=0)*/,
498  0 /*deltaCode ((deltaMinutes=0)/15)*/,
499  'S' /*letter*/,
500  },
501  // Rule AV 2007 only - Mar lastSun 2:00s 0 S
502  {
503  7 /*fromYearTiny*/,
504  7 /*toYearTiny*/,
505  3 /*inMonth*/,
506  7 /*onDayOfWeek*/,
507  0 /*onDayOfMonth*/,
508  8 /*atTimeCode*/,
509  16 /*atTimeModifier (kSuffixS + minute=0)*/,
510  0 /*deltaCode ((deltaMinutes=0)/15)*/,
511  'S' /*letter*/,
512  },
513  // Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
514  {
515  8 /*fromYearTiny*/,
516  126 /*toYearTiny*/,
517  4 /*inMonth*/,
518  7 /*onDayOfWeek*/,
519  1 /*onDayOfMonth*/,
520  8 /*atTimeCode*/,
521  16 /*atTimeModifier (kSuffixS + minute=0)*/,
522  0 /*deltaCode ((deltaMinutes=0)/15)*/,
523  'S' /*letter*/,
524  },
525  // Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
526  {
527  8 /*fromYearTiny*/,
528  126 /*toYearTiny*/,
529  10 /*inMonth*/,
530  7 /*onDayOfWeek*/,
531  1 /*onDayOfMonth*/,
532  8 /*atTimeCode*/,
533  16 /*atTimeModifier (kSuffixS + minute=0)*/,
534  4 /*deltaCode ((deltaMinutes=60)/15)*/,
535  'D' /*letter*/,
536  },
537 
538 };
539 
540 
541 
542 const basic::ZonePolicy kPolicyAV ACE_TIME_PROGMEM = {
543  kZoneRulesAV /*rules*/,
544  nullptr /*letters*/,
545  9 /*numRules*/,
546  0 /*numLetters*/,
547 };
548 
549 //---------------------------------------------------------------------------
550 // Policy name: AW
551 // Rules: 4
552 // Memory (8-bit): 42
553 // Memory (32-bit): 60
554 //---------------------------------------------------------------------------
555 
556 static const basic::ZoneRule kZoneRulesAW[] ACE_TIME_PROGMEM = {
557  // Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
558  {
559  -8 /*fromYearTiny*/,
560  -8 /*toYearTiny*/,
561  3 /*inMonth*/,
562  7 /*onDayOfWeek*/,
563  1 /*onDayOfMonth*/,
564  8 /*atTimeCode*/,
565  16 /*atTimeModifier (kSuffixS + minute=0)*/,
566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
567  'S' /*letter*/,
568  },
569  // Rule AW 2006 only - Dec 3 2:00s 1:00 D
570  {
571  6 /*fromYearTiny*/,
572  6 /*toYearTiny*/,
573  12 /*inMonth*/,
574  0 /*onDayOfWeek*/,
575  3 /*onDayOfMonth*/,
576  8 /*atTimeCode*/,
577  16 /*atTimeModifier (kSuffixS + minute=0)*/,
578  4 /*deltaCode ((deltaMinutes=60)/15)*/,
579  'D' /*letter*/,
580  },
581  // Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
582  {
583  7 /*fromYearTiny*/,
584  9 /*toYearTiny*/,
585  3 /*inMonth*/,
586  7 /*onDayOfWeek*/,
587  0 /*onDayOfMonth*/,
588  8 /*atTimeCode*/,
589  16 /*atTimeModifier (kSuffixS + minute=0)*/,
590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
591  'S' /*letter*/,
592  },
593  // Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
594  {
595  7 /*fromYearTiny*/,
596  8 /*toYearTiny*/,
597  10 /*inMonth*/,
598  7 /*onDayOfWeek*/,
599  0 /*onDayOfMonth*/,
600  8 /*atTimeCode*/,
601  16 /*atTimeModifier (kSuffixS + minute=0)*/,
602  4 /*deltaCode ((deltaMinutes=60)/15)*/,
603  'D' /*letter*/,
604  },
605 
606 };
607 
608 
609 
610 const basic::ZonePolicy kPolicyAW ACE_TIME_PROGMEM = {
611  kZoneRulesAW /*rules*/,
612  nullptr /*letters*/,
613  4 /*numRules*/,
614  0 /*numLetters*/,
615 };
616 
617 //---------------------------------------------------------------------------
618 // Policy name: Armenia
619 // Rules: 3
620 // Memory (8-bit): 33
621 // Memory (32-bit): 48
622 //---------------------------------------------------------------------------
623 
624 static const basic::ZoneRule kZoneRulesArmenia[] ACE_TIME_PROGMEM = {
625  // Anchor: Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
626  {
627  -127 /*fromYearTiny*/,
628  -127 /*toYearTiny*/,
629  1 /*inMonth*/,
630  0 /*onDayOfWeek*/,
631  1 /*onDayOfMonth*/,
632  0 /*atTimeCode*/,
633  0 /*atTimeModifier (kSuffixW + minute=0)*/,
634  0 /*deltaCode ((deltaMinutes=0)/15)*/,
635  '-' /*letter*/,
636  },
637  // Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
638  {
639  11 /*fromYearTiny*/,
640  11 /*toYearTiny*/,
641  3 /*inMonth*/,
642  7 /*onDayOfWeek*/,
643  0 /*onDayOfMonth*/,
644  8 /*atTimeCode*/,
645  16 /*atTimeModifier (kSuffixS + minute=0)*/,
646  4 /*deltaCode ((deltaMinutes=60)/15)*/,
647  '-' /*letter*/,
648  },
649  // Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
650  {
651  11 /*fromYearTiny*/,
652  11 /*toYearTiny*/,
653  10 /*inMonth*/,
654  7 /*onDayOfWeek*/,
655  0 /*onDayOfMonth*/,
656  8 /*atTimeCode*/,
657  16 /*atTimeModifier (kSuffixS + minute=0)*/,
658  0 /*deltaCode ((deltaMinutes=0)/15)*/,
659  '-' /*letter*/,
660  },
661 
662 };
663 
664 
665 
666 const basic::ZonePolicy kPolicyArmenia ACE_TIME_PROGMEM = {
667  kZoneRulesArmenia /*rules*/,
668  nullptr /*letters*/,
669  3 /*numRules*/,
670  0 /*numLetters*/,
671 };
672 
673 //---------------------------------------------------------------------------
674 // Policy name: Aus
675 // Rules: 1
676 // Memory (8-bit): 15
677 // Memory (32-bit): 24
678 //---------------------------------------------------------------------------
679 
680 static const basic::ZoneRule kZoneRulesAus[] ACE_TIME_PROGMEM = {
681  // Rule Aus 1943 1944 - Mar lastSun 2:00s 0 S
682  {
683  -57 /*fromYearTiny*/,
684  -56 /*toYearTiny*/,
685  3 /*inMonth*/,
686  7 /*onDayOfWeek*/,
687  0 /*onDayOfMonth*/,
688  8 /*atTimeCode*/,
689  16 /*atTimeModifier (kSuffixS + minute=0)*/,
690  0 /*deltaCode ((deltaMinutes=0)/15)*/,
691  'S' /*letter*/,
692  },
693 
694 };
695 
696 
697 
698 const basic::ZonePolicy kPolicyAus ACE_TIME_PROGMEM = {
699  kZoneRulesAus /*rules*/,
700  nullptr /*letters*/,
701  1 /*numRules*/,
702  0 /*numLetters*/,
703 };
704 
705 //---------------------------------------------------------------------------
706 // Policy name: Azer
707 // Rules: 2
708 // Memory (8-bit): 24
709 // Memory (32-bit): 36
710 //---------------------------------------------------------------------------
711 
712 static const basic::ZoneRule kZoneRulesAzer[] ACE_TIME_PROGMEM = {
713  // Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
714  {
715  -3 /*fromYearTiny*/,
716  15 /*toYearTiny*/,
717  3 /*inMonth*/,
718  7 /*onDayOfWeek*/,
719  0 /*onDayOfMonth*/,
720  16 /*atTimeCode*/,
721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
722  4 /*deltaCode ((deltaMinutes=60)/15)*/,
723  '-' /*letter*/,
724  },
725  // Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
726  {
727  -3 /*fromYearTiny*/,
728  15 /*toYearTiny*/,
729  10 /*inMonth*/,
730  7 /*onDayOfWeek*/,
731  0 /*onDayOfMonth*/,
732  20 /*atTimeCode*/,
733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
734  0 /*deltaCode ((deltaMinutes=0)/15)*/,
735  '-' /*letter*/,
736  },
737 
738 };
739 
740 
741 
742 const basic::ZonePolicy kPolicyAzer ACE_TIME_PROGMEM = {
743  kZoneRulesAzer /*rules*/,
744  nullptr /*letters*/,
745  2 /*numRules*/,
746  0 /*numLetters*/,
747 };
748 
749 //---------------------------------------------------------------------------
750 // Policy name: Barb
751 // Rules: 1
752 // Memory (8-bit): 15
753 // Memory (32-bit): 24
754 //---------------------------------------------------------------------------
755 
756 static const basic::ZoneRule kZoneRulesBarb[] ACE_TIME_PROGMEM = {
757  // Rule Barb 1980 only - Sep 25 2:00 0 S
758  {
759  -20 /*fromYearTiny*/,
760  -20 /*toYearTiny*/,
761  9 /*inMonth*/,
762  0 /*onDayOfWeek*/,
763  25 /*onDayOfMonth*/,
764  8 /*atTimeCode*/,
765  0 /*atTimeModifier (kSuffixW + minute=0)*/,
766  0 /*deltaCode ((deltaMinutes=0)/15)*/,
767  'S' /*letter*/,
768  },
769 
770 };
771 
772 
773 
774 const basic::ZonePolicy kPolicyBarb ACE_TIME_PROGMEM = {
775  kZoneRulesBarb /*rules*/,
776  nullptr /*letters*/,
777  1 /*numRules*/,
778  0 /*numLetters*/,
779 };
780 
781 //---------------------------------------------------------------------------
782 // Policy name: Brazil
783 // Rules: 20
784 // Memory (8-bit): 186
785 // Memory (32-bit): 252
786 //---------------------------------------------------------------------------
787 
788 static const basic::ZoneRule kZoneRulesBrazil[] ACE_TIME_PROGMEM = {
789  // Rule Brazil 1998 only - Oct 11 0:00 1:00 -
790  {
791  -2 /*fromYearTiny*/,
792  -2 /*toYearTiny*/,
793  10 /*inMonth*/,
794  0 /*onDayOfWeek*/,
795  11 /*onDayOfMonth*/,
796  0 /*atTimeCode*/,
797  0 /*atTimeModifier (kSuffixW + minute=0)*/,
798  4 /*deltaCode ((deltaMinutes=60)/15)*/,
799  '-' /*letter*/,
800  },
801  // Rule Brazil 1999 only - Feb 21 0:00 0 -
802  {
803  -1 /*fromYearTiny*/,
804  -1 /*toYearTiny*/,
805  2 /*inMonth*/,
806  0 /*onDayOfWeek*/,
807  21 /*onDayOfMonth*/,
808  0 /*atTimeCode*/,
809  0 /*atTimeModifier (kSuffixW + minute=0)*/,
810  0 /*deltaCode ((deltaMinutes=0)/15)*/,
811  '-' /*letter*/,
812  },
813  // Rule Brazil 1999 only - Oct 3 0:00 1:00 -
814  {
815  -1 /*fromYearTiny*/,
816  -1 /*toYearTiny*/,
817  10 /*inMonth*/,
818  0 /*onDayOfWeek*/,
819  3 /*onDayOfMonth*/,
820  0 /*atTimeCode*/,
821  0 /*atTimeModifier (kSuffixW + minute=0)*/,
822  4 /*deltaCode ((deltaMinutes=60)/15)*/,
823  '-' /*letter*/,
824  },
825  // Rule Brazil 2000 only - Feb 27 0:00 0 -
826  {
827  0 /*fromYearTiny*/,
828  0 /*toYearTiny*/,
829  2 /*inMonth*/,
830  0 /*onDayOfWeek*/,
831  27 /*onDayOfMonth*/,
832  0 /*atTimeCode*/,
833  0 /*atTimeModifier (kSuffixW + minute=0)*/,
834  0 /*deltaCode ((deltaMinutes=0)/15)*/,
835  '-' /*letter*/,
836  },
837  // Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
838  {
839  0 /*fromYearTiny*/,
840  1 /*toYearTiny*/,
841  10 /*inMonth*/,
842  7 /*onDayOfWeek*/,
843  8 /*onDayOfMonth*/,
844  0 /*atTimeCode*/,
845  0 /*atTimeModifier (kSuffixW + minute=0)*/,
846  4 /*deltaCode ((deltaMinutes=60)/15)*/,
847  '-' /*letter*/,
848  },
849  // Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
850  {
851  1 /*fromYearTiny*/,
852  6 /*toYearTiny*/,
853  2 /*inMonth*/,
854  7 /*onDayOfWeek*/,
855  15 /*onDayOfMonth*/,
856  0 /*atTimeCode*/,
857  0 /*atTimeModifier (kSuffixW + minute=0)*/,
858  0 /*deltaCode ((deltaMinutes=0)/15)*/,
859  '-' /*letter*/,
860  },
861  // Rule Brazil 2002 only - Nov 3 0:00 1:00 -
862  {
863  2 /*fromYearTiny*/,
864  2 /*toYearTiny*/,
865  11 /*inMonth*/,
866  0 /*onDayOfWeek*/,
867  3 /*onDayOfMonth*/,
868  0 /*atTimeCode*/,
869  0 /*atTimeModifier (kSuffixW + minute=0)*/,
870  4 /*deltaCode ((deltaMinutes=60)/15)*/,
871  '-' /*letter*/,
872  },
873  // Rule Brazil 2003 only - Oct 19 0:00 1:00 -
874  {
875  3 /*fromYearTiny*/,
876  3 /*toYearTiny*/,
877  10 /*inMonth*/,
878  0 /*onDayOfWeek*/,
879  19 /*onDayOfMonth*/,
880  0 /*atTimeCode*/,
881  0 /*atTimeModifier (kSuffixW + minute=0)*/,
882  4 /*deltaCode ((deltaMinutes=60)/15)*/,
883  '-' /*letter*/,
884  },
885  // Rule Brazil 2004 only - Nov 2 0:00 1:00 -
886  {
887  4 /*fromYearTiny*/,
888  4 /*toYearTiny*/,
889  11 /*inMonth*/,
890  0 /*onDayOfWeek*/,
891  2 /*onDayOfMonth*/,
892  0 /*atTimeCode*/,
893  0 /*atTimeModifier (kSuffixW + minute=0)*/,
894  4 /*deltaCode ((deltaMinutes=60)/15)*/,
895  '-' /*letter*/,
896  },
897  // Rule Brazil 2005 only - Oct 16 0:00 1:00 -
898  {
899  5 /*fromYearTiny*/,
900  5 /*toYearTiny*/,
901  10 /*inMonth*/,
902  0 /*onDayOfWeek*/,
903  16 /*onDayOfMonth*/,
904  0 /*atTimeCode*/,
905  0 /*atTimeModifier (kSuffixW + minute=0)*/,
906  4 /*deltaCode ((deltaMinutes=60)/15)*/,
907  '-' /*letter*/,
908  },
909  // Rule Brazil 2006 only - Nov 5 0:00 1:00 -
910  {
911  6 /*fromYearTiny*/,
912  6 /*toYearTiny*/,
913  11 /*inMonth*/,
914  0 /*onDayOfWeek*/,
915  5 /*onDayOfMonth*/,
916  0 /*atTimeCode*/,
917  0 /*atTimeModifier (kSuffixW + minute=0)*/,
918  4 /*deltaCode ((deltaMinutes=60)/15)*/,
919  '-' /*letter*/,
920  },
921  // Rule Brazil 2007 only - Feb 25 0:00 0 -
922  {
923  7 /*fromYearTiny*/,
924  7 /*toYearTiny*/,
925  2 /*inMonth*/,
926  0 /*onDayOfWeek*/,
927  25 /*onDayOfMonth*/,
928  0 /*atTimeCode*/,
929  0 /*atTimeModifier (kSuffixW + minute=0)*/,
930  0 /*deltaCode ((deltaMinutes=0)/15)*/,
931  '-' /*letter*/,
932  },
933  // Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
934  {
935  7 /*fromYearTiny*/,
936  7 /*toYearTiny*/,
937  10 /*inMonth*/,
938  7 /*onDayOfWeek*/,
939  8 /*onDayOfMonth*/,
940  0 /*atTimeCode*/,
941  0 /*atTimeModifier (kSuffixW + minute=0)*/,
942  4 /*deltaCode ((deltaMinutes=60)/15)*/,
943  '-' /*letter*/,
944  },
945  // Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
946  {
947  8 /*fromYearTiny*/,
948  17 /*toYearTiny*/,
949  10 /*inMonth*/,
950  7 /*onDayOfWeek*/,
951  15 /*onDayOfMonth*/,
952  0 /*atTimeCode*/,
953  0 /*atTimeModifier (kSuffixW + minute=0)*/,
954  4 /*deltaCode ((deltaMinutes=60)/15)*/,
955  '-' /*letter*/,
956  },
957  // Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
958  {
959  8 /*fromYearTiny*/,
960  11 /*toYearTiny*/,
961  2 /*inMonth*/,
962  7 /*onDayOfWeek*/,
963  15 /*onDayOfMonth*/,
964  0 /*atTimeCode*/,
965  0 /*atTimeModifier (kSuffixW + minute=0)*/,
966  0 /*deltaCode ((deltaMinutes=0)/15)*/,
967  '-' /*letter*/,
968  },
969  // Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
970  {
971  12 /*fromYearTiny*/,
972  12 /*toYearTiny*/,
973  2 /*inMonth*/,
974  7 /*onDayOfWeek*/,
975  22 /*onDayOfMonth*/,
976  0 /*atTimeCode*/,
977  0 /*atTimeModifier (kSuffixW + minute=0)*/,
978  0 /*deltaCode ((deltaMinutes=0)/15)*/,
979  '-' /*letter*/,
980  },
981  // Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
982  {
983  13 /*fromYearTiny*/,
984  14 /*toYearTiny*/,
985  2 /*inMonth*/,
986  7 /*onDayOfWeek*/,
987  15 /*onDayOfMonth*/,
988  0 /*atTimeCode*/,
989  0 /*atTimeModifier (kSuffixW + minute=0)*/,
990  0 /*deltaCode ((deltaMinutes=0)/15)*/,
991  '-' /*letter*/,
992  },
993  // Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
994  {
995  15 /*fromYearTiny*/,
996  15 /*toYearTiny*/,
997  2 /*inMonth*/,
998  7 /*onDayOfWeek*/,
999  22 /*onDayOfMonth*/,
1000  0 /*atTimeCode*/,
1001  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1002  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1003  '-' /*letter*/,
1004  },
1005  // Rule Brazil 2016 2019 - Feb Sun>=15 0:00 0 -
1006  {
1007  16 /*fromYearTiny*/,
1008  19 /*toYearTiny*/,
1009  2 /*inMonth*/,
1010  7 /*onDayOfWeek*/,
1011  15 /*onDayOfMonth*/,
1012  0 /*atTimeCode*/,
1013  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1014  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1015  '-' /*letter*/,
1016  },
1017  // Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
1018  {
1019  18 /*fromYearTiny*/,
1020  18 /*toYearTiny*/,
1021  11 /*inMonth*/,
1022  7 /*onDayOfWeek*/,
1023  1 /*onDayOfMonth*/,
1024  0 /*atTimeCode*/,
1025  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1026  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1027  '-' /*letter*/,
1028  },
1029 
1030 };
1031 
1032 
1033 
1034 const basic::ZonePolicy kPolicyBrazil ACE_TIME_PROGMEM = {
1035  kZoneRulesBrazil /*rules*/,
1036  nullptr /*letters*/,
1037  20 /*numRules*/,
1038  0 /*numLetters*/,
1039 };
1040 
1041 //---------------------------------------------------------------------------
1042 // Policy name: C_Eur
1043 // Rules: 3
1044 // Memory (8-bit): 33
1045 // Memory (32-bit): 48
1046 //---------------------------------------------------------------------------
1047 
1048 static const basic::ZoneRule kZoneRulesC_Eur[] ACE_TIME_PROGMEM = {
1049  // Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
1050  {
1051  -21 /*fromYearTiny*/,
1052  -5 /*toYearTiny*/,
1053  9 /*inMonth*/,
1054  7 /*onDayOfWeek*/,
1055  0 /*onDayOfMonth*/,
1056  8 /*atTimeCode*/,
1057  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1058  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1059  '-' /*letter*/,
1060  },
1061  // Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
1062  {
1063  -19 /*fromYearTiny*/,
1064  126 /*toYearTiny*/,
1065  3 /*inMonth*/,
1066  7 /*onDayOfWeek*/,
1067  0 /*onDayOfMonth*/,
1068  8 /*atTimeCode*/,
1069  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1070  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1071  'S' /*letter*/,
1072  },
1073  // Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
1074  {
1075  -4 /*fromYearTiny*/,
1076  126 /*toYearTiny*/,
1077  10 /*inMonth*/,
1078  7 /*onDayOfWeek*/,
1079  0 /*onDayOfMonth*/,
1080  8 /*atTimeCode*/,
1081  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1082  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1083  '-' /*letter*/,
1084  },
1085 
1086 };
1087 
1088 
1089 
1090 const basic::ZonePolicy kPolicyC_Eur ACE_TIME_PROGMEM = {
1091  kZoneRulesC_Eur /*rules*/,
1092  nullptr /*letters*/,
1093  3 /*numRules*/,
1094  0 /*numLetters*/,
1095 };
1096 
1097 //---------------------------------------------------------------------------
1098 // Policy name: CO
1099 // Rules: 1
1100 // Memory (8-bit): 15
1101 // Memory (32-bit): 24
1102 //---------------------------------------------------------------------------
1103 
1104 static const basic::ZoneRule kZoneRulesCO[] ACE_TIME_PROGMEM = {
1105  // Rule CO 1993 only - Apr 4 0:00 0 -
1106  {
1107  -7 /*fromYearTiny*/,
1108  -7 /*toYearTiny*/,
1109  4 /*inMonth*/,
1110  0 /*onDayOfWeek*/,
1111  4 /*onDayOfMonth*/,
1112  0 /*atTimeCode*/,
1113  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1114  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1115  '-' /*letter*/,
1116  },
1117 
1118 };
1119 
1120 
1121 
1122 const basic::ZonePolicy kPolicyCO ACE_TIME_PROGMEM = {
1123  kZoneRulesCO /*rules*/,
1124  nullptr /*letters*/,
1125  1 /*numRules*/,
1126  0 /*numLetters*/,
1127 };
1128 
1129 //---------------------------------------------------------------------------
1130 // Policy name: CR
1131 // Rules: 1
1132 // Memory (8-bit): 15
1133 // Memory (32-bit): 24
1134 //---------------------------------------------------------------------------
1135 
1136 static const basic::ZoneRule kZoneRulesCR[] ACE_TIME_PROGMEM = {
1137  // Rule CR 1992 only - Mar 15 0:00 0 S
1138  {
1139  -8 /*fromYearTiny*/,
1140  -8 /*toYearTiny*/,
1141  3 /*inMonth*/,
1142  0 /*onDayOfWeek*/,
1143  15 /*onDayOfMonth*/,
1144  0 /*atTimeCode*/,
1145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1146  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1147  'S' /*letter*/,
1148  },
1149 
1150 };
1151 
1152 
1153 
1154 const basic::ZonePolicy kPolicyCR ACE_TIME_PROGMEM = {
1155  kZoneRulesCR /*rules*/,
1156  nullptr /*letters*/,
1157  1 /*numRules*/,
1158  0 /*numLetters*/,
1159 };
1160 
1161 //---------------------------------------------------------------------------
1162 // Policy name: Canada
1163 // Rules: 5
1164 // Memory (8-bit): 51
1165 // Memory (32-bit): 72
1166 //---------------------------------------------------------------------------
1167 
1168 static const basic::ZoneRule kZoneRulesCanada[] ACE_TIME_PROGMEM = {
1169  // Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
1170  {
1171  -26 /*fromYearTiny*/,
1172  -14 /*toYearTiny*/,
1173  4 /*inMonth*/,
1174  7 /*onDayOfWeek*/,
1175  0 /*onDayOfMonth*/,
1176  8 /*atTimeCode*/,
1177  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1178  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1179  'D' /*letter*/,
1180  },
1181  // Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
1182  {
1183  -26 /*fromYearTiny*/,
1184  6 /*toYearTiny*/,
1185  10 /*inMonth*/,
1186  7 /*onDayOfWeek*/,
1187  0 /*onDayOfMonth*/,
1188  8 /*atTimeCode*/,
1189  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1190  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1191  'S' /*letter*/,
1192  },
1193  // Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
1194  {
1195  -13 /*fromYearTiny*/,
1196  6 /*toYearTiny*/,
1197  4 /*inMonth*/,
1198  7 /*onDayOfWeek*/,
1199  1 /*onDayOfMonth*/,
1200  8 /*atTimeCode*/,
1201  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1202  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1203  'D' /*letter*/,
1204  },
1205  // Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
1206  {
1207  7 /*fromYearTiny*/,
1208  126 /*toYearTiny*/,
1209  3 /*inMonth*/,
1210  7 /*onDayOfWeek*/,
1211  8 /*onDayOfMonth*/,
1212  8 /*atTimeCode*/,
1213  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1214  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1215  'D' /*letter*/,
1216  },
1217  // Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
1218  {
1219  7 /*fromYearTiny*/,
1220  126 /*toYearTiny*/,
1221  11 /*inMonth*/,
1222  7 /*onDayOfWeek*/,
1223  1 /*onDayOfMonth*/,
1224  8 /*atTimeCode*/,
1225  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1226  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1227  'S' /*letter*/,
1228  },
1229 
1230 };
1231 
1232 
1233 
1234 const basic::ZonePolicy kPolicyCanada ACE_TIME_PROGMEM = {
1235  kZoneRulesCanada /*rules*/,
1236  nullptr /*letters*/,
1237  5 /*numRules*/,
1238  0 /*numLetters*/,
1239 };
1240 
1241 //---------------------------------------------------------------------------
1242 // Policy name: Chatham
1243 // Rules: 5
1244 // Memory (8-bit): 51
1245 // Memory (32-bit): 72
1246 //---------------------------------------------------------------------------
1247 
1248 static const basic::ZoneRule kZoneRulesChatham[] ACE_TIME_PROGMEM = {
1249  // Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
1250  {
1251  -11 /*fromYearTiny*/,
1252  -11 /*toYearTiny*/,
1253  10 /*inMonth*/,
1254  7 /*onDayOfWeek*/,
1255  8 /*onDayOfMonth*/,
1256  11 /*atTimeCode*/,
1257  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1258  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1259  '-' /*letter*/,
1260  },
1261  // Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
1262  {
1263  -10 /*fromYearTiny*/,
1264  6 /*toYearTiny*/,
1265  10 /*inMonth*/,
1266  7 /*onDayOfWeek*/,
1267  1 /*onDayOfMonth*/,
1268  11 /*atTimeCode*/,
1269  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1270  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1271  '-' /*letter*/,
1272  },
1273  // Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
1274  {
1275  -10 /*fromYearTiny*/,
1276  7 /*toYearTiny*/,
1277  3 /*inMonth*/,
1278  7 /*onDayOfWeek*/,
1279  15 /*onDayOfMonth*/,
1280  11 /*atTimeCode*/,
1281  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1282  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1283  '-' /*letter*/,
1284  },
1285  // Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
1286  {
1287  7 /*fromYearTiny*/,
1288  126 /*toYearTiny*/,
1289  9 /*inMonth*/,
1290  7 /*onDayOfWeek*/,
1291  0 /*onDayOfMonth*/,
1292  11 /*atTimeCode*/,
1293  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1294  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1295  '-' /*letter*/,
1296  },
1297  // Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
1298  {
1299  8 /*fromYearTiny*/,
1300  126 /*toYearTiny*/,
1301  4 /*inMonth*/,
1302  7 /*onDayOfWeek*/,
1303  1 /*onDayOfMonth*/,
1304  11 /*atTimeCode*/,
1305  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1306  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1307  '-' /*letter*/,
1308  },
1309 
1310 };
1311 
1312 
1313 
1314 const basic::ZonePolicy kPolicyChatham ACE_TIME_PROGMEM = {
1315  kZoneRulesChatham /*rules*/,
1316  nullptr /*letters*/,
1317  5 /*numRules*/,
1318  0 /*numLetters*/,
1319 };
1320 
1321 //---------------------------------------------------------------------------
1322 // Policy name: Chile
1323 // Rules: 15
1324 // Memory (8-bit): 141
1325 // Memory (32-bit): 192
1326 //---------------------------------------------------------------------------
1327 
1328 static const basic::ZoneRule kZoneRulesChile[] ACE_TIME_PROGMEM = {
1329  // Rule Chile 1998 only - Sep 27 4:00u 1:00 -
1330  {
1331  -2 /*fromYearTiny*/,
1332  -2 /*toYearTiny*/,
1333  9 /*inMonth*/,
1334  0 /*onDayOfWeek*/,
1335  27 /*onDayOfMonth*/,
1336  16 /*atTimeCode*/,
1337  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1338  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1339  '-' /*letter*/,
1340  },
1341  // Rule Chile 1999 only - Apr 4 3:00u 0 -
1342  {
1343  -1 /*fromYearTiny*/,
1344  -1 /*toYearTiny*/,
1345  4 /*inMonth*/,
1346  0 /*onDayOfWeek*/,
1347  4 /*onDayOfMonth*/,
1348  12 /*atTimeCode*/,
1349  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1350  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1351  '-' /*letter*/,
1352  },
1353  // Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
1354  {
1355  -1 /*fromYearTiny*/,
1356  10 /*toYearTiny*/,
1357  10 /*inMonth*/,
1358  7 /*onDayOfWeek*/,
1359  9 /*onDayOfMonth*/,
1360  16 /*atTimeCode*/,
1361  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1362  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1363  '-' /*letter*/,
1364  },
1365  // Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
1366  {
1367  0 /*fromYearTiny*/,
1368  7 /*toYearTiny*/,
1369  3 /*inMonth*/,
1370  7 /*onDayOfWeek*/,
1371  9 /*onDayOfMonth*/,
1372  12 /*atTimeCode*/,
1373  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1374  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1375  '-' /*letter*/,
1376  },
1377  // Rule Chile 2008 only - Mar 30 3:00u 0 -
1378  {
1379  8 /*fromYearTiny*/,
1380  8 /*toYearTiny*/,
1381  3 /*inMonth*/,
1382  0 /*onDayOfWeek*/,
1383  30 /*onDayOfMonth*/,
1384  12 /*atTimeCode*/,
1385  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1386  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1387  '-' /*letter*/,
1388  },
1389  // Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
1390  {
1391  9 /*fromYearTiny*/,
1392  9 /*toYearTiny*/,
1393  3 /*inMonth*/,
1394  7 /*onDayOfWeek*/,
1395  9 /*onDayOfMonth*/,
1396  12 /*atTimeCode*/,
1397  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1398  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1399  '-' /*letter*/,
1400  },
1401  // Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
1402  {
1403  10 /*fromYearTiny*/,
1404  10 /*toYearTiny*/,
1405  4 /*inMonth*/,
1406  7 /*onDayOfWeek*/,
1407  1 /*onDayOfMonth*/,
1408  12 /*atTimeCode*/,
1409  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1410  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1411  '-' /*letter*/,
1412  },
1413  // Rule Chile 2011 only - May Sun>=2 3:00u 0 -
1414  {
1415  11 /*fromYearTiny*/,
1416  11 /*toYearTiny*/,
1417  5 /*inMonth*/,
1418  7 /*onDayOfWeek*/,
1419  2 /*onDayOfMonth*/,
1420  12 /*atTimeCode*/,
1421  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1422  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1423  '-' /*letter*/,
1424  },
1425  // Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
1426  {
1427  11 /*fromYearTiny*/,
1428  11 /*toYearTiny*/,
1429  8 /*inMonth*/,
1430  7 /*onDayOfWeek*/,
1431  16 /*onDayOfMonth*/,
1432  16 /*atTimeCode*/,
1433  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1434  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1435  '-' /*letter*/,
1436  },
1437  // Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
1438  {
1439  12 /*fromYearTiny*/,
1440  14 /*toYearTiny*/,
1441  4 /*inMonth*/,
1442  7 /*onDayOfWeek*/,
1443  23 /*onDayOfMonth*/,
1444  12 /*atTimeCode*/,
1445  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1446  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1447  '-' /*letter*/,
1448  },
1449  // Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
1450  {
1451  12 /*fromYearTiny*/,
1452  14 /*toYearTiny*/,
1453  9 /*inMonth*/,
1454  7 /*onDayOfWeek*/,
1455  2 /*onDayOfMonth*/,
1456  16 /*atTimeCode*/,
1457  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1458  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1459  '-' /*letter*/,
1460  },
1461  // Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
1462  {
1463  16 /*fromYearTiny*/,
1464  18 /*toYearTiny*/,
1465  5 /*inMonth*/,
1466  7 /*onDayOfWeek*/,
1467  9 /*onDayOfMonth*/,
1468  12 /*atTimeCode*/,
1469  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1470  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1471  '-' /*letter*/,
1472  },
1473  // Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
1474  {
1475  16 /*fromYearTiny*/,
1476  18 /*toYearTiny*/,
1477  8 /*inMonth*/,
1478  7 /*onDayOfWeek*/,
1479  9 /*onDayOfMonth*/,
1480  16 /*atTimeCode*/,
1481  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1482  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1483  '-' /*letter*/,
1484  },
1485  // Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
1486  {
1487  19 /*fromYearTiny*/,
1488  126 /*toYearTiny*/,
1489  4 /*inMonth*/,
1490  7 /*onDayOfWeek*/,
1491  2 /*onDayOfMonth*/,
1492  12 /*atTimeCode*/,
1493  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1494  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1495  '-' /*letter*/,
1496  },
1497  // Rule Chile 2019 max - Sep Sun>=2 4:00u 1:00 -
1498  {
1499  19 /*fromYearTiny*/,
1500  126 /*toYearTiny*/,
1501  9 /*inMonth*/,
1502  7 /*onDayOfWeek*/,
1503  2 /*onDayOfMonth*/,
1504  16 /*atTimeCode*/,
1505  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1506  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1507  '-' /*letter*/,
1508  },
1509 
1510 };
1511 
1512 
1513 
1514 const basic::ZonePolicy kPolicyChile ACE_TIME_PROGMEM = {
1515  kZoneRulesChile /*rules*/,
1516  nullptr /*letters*/,
1517  15 /*numRules*/,
1518  0 /*numLetters*/,
1519 };
1520 
1521 //---------------------------------------------------------------------------
1522 // Policy name: Cook
1523 // Rules: 1
1524 // Memory (8-bit): 15
1525 // Memory (32-bit): 24
1526 //---------------------------------------------------------------------------
1527 
1528 static const basic::ZoneRule kZoneRulesCook[] ACE_TIME_PROGMEM = {
1529  // Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
1530  {
1531  -21 /*fromYearTiny*/,
1532  -9 /*toYearTiny*/,
1533  3 /*inMonth*/,
1534  7 /*onDayOfWeek*/,
1535  1 /*onDayOfMonth*/,
1536  0 /*atTimeCode*/,
1537  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1538  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1539  '-' /*letter*/,
1540  },
1541 
1542 };
1543 
1544 
1545 
1546 const basic::ZonePolicy kPolicyCook ACE_TIME_PROGMEM = {
1547  kZoneRulesCook /*rules*/,
1548  nullptr /*letters*/,
1549  1 /*numRules*/,
1550  0 /*numLetters*/,
1551 };
1552 
1553 //---------------------------------------------------------------------------
1554 // Policy name: Cuba
1555 // Rules: 14
1556 // Memory (8-bit): 132
1557 // Memory (32-bit): 180
1558 //---------------------------------------------------------------------------
1559 
1560 static const basic::ZoneRule kZoneRulesCuba[] ACE_TIME_PROGMEM = {
1561  // Rule Cuba 1997 only - Oct 12 0:00s 0 S
1562  {
1563  -3 /*fromYearTiny*/,
1564  -3 /*toYearTiny*/,
1565  10 /*inMonth*/,
1566  0 /*onDayOfWeek*/,
1567  12 /*onDayOfMonth*/,
1568  0 /*atTimeCode*/,
1569  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1570  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1571  'S' /*letter*/,
1572  },
1573  // Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
1574  {
1575  -2 /*fromYearTiny*/,
1576  -1 /*toYearTiny*/,
1577  3 /*inMonth*/,
1578  7 /*onDayOfWeek*/,
1579  0 /*onDayOfMonth*/,
1580  0 /*atTimeCode*/,
1581  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1582  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1583  'D' /*letter*/,
1584  },
1585  // Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
1586  {
1587  -2 /*fromYearTiny*/,
1588  3 /*toYearTiny*/,
1589  10 /*inMonth*/,
1590  7 /*onDayOfWeek*/,
1591  0 /*onDayOfMonth*/,
1592  0 /*atTimeCode*/,
1593  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1594  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1595  'S' /*letter*/,
1596  },
1597  // Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
1598  {
1599  0 /*fromYearTiny*/,
1600  3 /*toYearTiny*/,
1601  4 /*inMonth*/,
1602  7 /*onDayOfWeek*/,
1603  1 /*onDayOfMonth*/,
1604  0 /*atTimeCode*/,
1605  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1606  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1607  'D' /*letter*/,
1608  },
1609  // Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
1610  {
1611  4 /*fromYearTiny*/,
1612  4 /*toYearTiny*/,
1613  3 /*inMonth*/,
1614  7 /*onDayOfWeek*/,
1615  0 /*onDayOfMonth*/,
1616  0 /*atTimeCode*/,
1617  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1618  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1619  'D' /*letter*/,
1620  },
1621  // Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
1622  {
1623  6 /*fromYearTiny*/,
1624  10 /*toYearTiny*/,
1625  10 /*inMonth*/,
1626  7 /*onDayOfWeek*/,
1627  0 /*onDayOfMonth*/,
1628  0 /*atTimeCode*/,
1629  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1630  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1631  'S' /*letter*/,
1632  },
1633  // Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
1634  {
1635  7 /*fromYearTiny*/,
1636  7 /*toYearTiny*/,
1637  3 /*inMonth*/,
1638  7 /*onDayOfWeek*/,
1639  8 /*onDayOfMonth*/,
1640  0 /*atTimeCode*/,
1641  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1642  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1643  'D' /*letter*/,
1644  },
1645  // Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
1646  {
1647  8 /*fromYearTiny*/,
1648  8 /*toYearTiny*/,
1649  3 /*inMonth*/,
1650  7 /*onDayOfWeek*/,
1651  15 /*onDayOfMonth*/,
1652  0 /*atTimeCode*/,
1653  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1654  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1655  'D' /*letter*/,
1656  },
1657  // Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
1658  {
1659  9 /*fromYearTiny*/,
1660  10 /*toYearTiny*/,
1661  3 /*inMonth*/,
1662  7 /*onDayOfWeek*/,
1663  8 /*onDayOfMonth*/,
1664  0 /*atTimeCode*/,
1665  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1666  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1667  'D' /*letter*/,
1668  },
1669  // Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
1670  {
1671  11 /*fromYearTiny*/,
1672  11 /*toYearTiny*/,
1673  3 /*inMonth*/,
1674  7 /*onDayOfWeek*/,
1675  15 /*onDayOfMonth*/,
1676  0 /*atTimeCode*/,
1677  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1678  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1679  'D' /*letter*/,
1680  },
1681  // Rule Cuba 2011 only - Nov 13 0:00s 0 S
1682  {
1683  11 /*fromYearTiny*/,
1684  11 /*toYearTiny*/,
1685  11 /*inMonth*/,
1686  0 /*onDayOfWeek*/,
1687  13 /*onDayOfMonth*/,
1688  0 /*atTimeCode*/,
1689  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1690  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1691  'S' /*letter*/,
1692  },
1693  // Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
1694  {
1695  12 /*fromYearTiny*/,
1696  12 /*toYearTiny*/,
1697  4 /*inMonth*/,
1698  0 /*onDayOfWeek*/,
1699  1 /*onDayOfMonth*/,
1700  0 /*atTimeCode*/,
1701  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1702  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1703  'D' /*letter*/,
1704  },
1705  // Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
1706  {
1707  12 /*fromYearTiny*/,
1708  126 /*toYearTiny*/,
1709  11 /*inMonth*/,
1710  7 /*onDayOfWeek*/,
1711  1 /*onDayOfMonth*/,
1712  0 /*atTimeCode*/,
1713  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1714  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1715  'S' /*letter*/,
1716  },
1717  // Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
1718  {
1719  13 /*fromYearTiny*/,
1720  126 /*toYearTiny*/,
1721  3 /*inMonth*/,
1722  7 /*onDayOfWeek*/,
1723  8 /*onDayOfMonth*/,
1724  0 /*atTimeCode*/,
1725  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1726  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1727  'D' /*letter*/,
1728  },
1729 
1730 };
1731 
1732 
1733 
1734 const basic::ZonePolicy kPolicyCuba ACE_TIME_PROGMEM = {
1735  kZoneRulesCuba /*rules*/,
1736  nullptr /*letters*/,
1737  14 /*numRules*/,
1738  0 /*numLetters*/,
1739 };
1740 
1741 //---------------------------------------------------------------------------
1742 // Policy name: Dhaka
1743 // Rules: 3
1744 // Memory (8-bit): 33
1745 // Memory (32-bit): 48
1746 //---------------------------------------------------------------------------
1747 
1748 static const basic::ZoneRule kZoneRulesDhaka[] ACE_TIME_PROGMEM = {
1749  // Anchor: Rule Dhaka 2009 only - Dec 31 24:00 0 -
1750  {
1751  -127 /*fromYearTiny*/,
1752  -127 /*toYearTiny*/,
1753  1 /*inMonth*/,
1754  0 /*onDayOfWeek*/,
1755  1 /*onDayOfMonth*/,
1756  0 /*atTimeCode*/,
1757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1758  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1759  '-' /*letter*/,
1760  },
1761  // Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
1762  {
1763  9 /*fromYearTiny*/,
1764  9 /*toYearTiny*/,
1765  6 /*inMonth*/,
1766  0 /*onDayOfWeek*/,
1767  19 /*onDayOfMonth*/,
1768  92 /*atTimeCode*/,
1769  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1770  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1771  '-' /*letter*/,
1772  },
1773  // Rule Dhaka 2009 only - Dec 31 24:00 0 -
1774  {
1775  9 /*fromYearTiny*/,
1776  9 /*toYearTiny*/,
1777  12 /*inMonth*/,
1778  0 /*onDayOfWeek*/,
1779  31 /*onDayOfMonth*/,
1780  96 /*atTimeCode*/,
1781  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1782  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1783  '-' /*letter*/,
1784  },
1785 
1786 };
1787 
1788 
1789 
1790 const basic::ZonePolicy kPolicyDhaka ACE_TIME_PROGMEM = {
1791  kZoneRulesDhaka /*rules*/,
1792  nullptr /*letters*/,
1793  3 /*numRules*/,
1794  0 /*numLetters*/,
1795 };
1796 
1797 //---------------------------------------------------------------------------
1798 // Policy name: EU
1799 // Rules: 3
1800 // Memory (8-bit): 33
1801 // Memory (32-bit): 48
1802 //---------------------------------------------------------------------------
1803 
1804 static const basic::ZoneRule kZoneRulesEU[] ACE_TIME_PROGMEM = {
1805  // Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
1806  {
1807  -21 /*fromYearTiny*/,
1808  -5 /*toYearTiny*/,
1809  9 /*inMonth*/,
1810  7 /*onDayOfWeek*/,
1811  0 /*onDayOfMonth*/,
1812  4 /*atTimeCode*/,
1813  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1814  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1815  '-' /*letter*/,
1816  },
1817  // Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
1818  {
1819  -19 /*fromYearTiny*/,
1820  126 /*toYearTiny*/,
1821  3 /*inMonth*/,
1822  7 /*onDayOfWeek*/,
1823  0 /*onDayOfMonth*/,
1824  4 /*atTimeCode*/,
1825  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1826  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1827  'S' /*letter*/,
1828  },
1829  // Rule EU 1996 max - Oct lastSun 1:00u 0 -
1830  {
1831  -4 /*fromYearTiny*/,
1832  126 /*toYearTiny*/,
1833  10 /*inMonth*/,
1834  7 /*onDayOfWeek*/,
1835  0 /*onDayOfMonth*/,
1836  4 /*atTimeCode*/,
1837  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1838  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1839  '-' /*letter*/,
1840  },
1841 
1842 };
1843 
1844 
1845 
1846 const basic::ZonePolicy kPolicyEU ACE_TIME_PROGMEM = {
1847  kZoneRulesEU /*rules*/,
1848  nullptr /*letters*/,
1849  3 /*numRules*/,
1850  0 /*numLetters*/,
1851 };
1852 
1853 //---------------------------------------------------------------------------
1854 // Policy name: EUAsia
1855 // Rules: 3
1856 // Memory (8-bit): 33
1857 // Memory (32-bit): 48
1858 //---------------------------------------------------------------------------
1859 
1860 static const basic::ZoneRule kZoneRulesEUAsia[] ACE_TIME_PROGMEM = {
1861  // Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
1862  {
1863  -19 /*fromYearTiny*/,
1864  126 /*toYearTiny*/,
1865  3 /*inMonth*/,
1866  7 /*onDayOfWeek*/,
1867  0 /*onDayOfMonth*/,
1868  4 /*atTimeCode*/,
1869  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1870  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1871  'S' /*letter*/,
1872  },
1873  // Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
1874  {
1875  -21 /*fromYearTiny*/,
1876  -5 /*toYearTiny*/,
1877  9 /*inMonth*/,
1878  7 /*onDayOfWeek*/,
1879  0 /*onDayOfMonth*/,
1880  4 /*atTimeCode*/,
1881  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1882  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1883  '-' /*letter*/,
1884  },
1885  // Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
1886  {
1887  -4 /*fromYearTiny*/,
1888  126 /*toYearTiny*/,
1889  10 /*inMonth*/,
1890  7 /*onDayOfWeek*/,
1891  0 /*onDayOfMonth*/,
1892  4 /*atTimeCode*/,
1893  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1894  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1895  '-' /*letter*/,
1896  },
1897 
1898 };
1899 
1900 
1901 
1902 const basic::ZonePolicy kPolicyEUAsia ACE_TIME_PROGMEM = {
1903  kZoneRulesEUAsia /*rules*/,
1904  nullptr /*letters*/,
1905  3 /*numRules*/,
1906  0 /*numLetters*/,
1907 };
1908 
1909 //---------------------------------------------------------------------------
1910 // Policy name: Ecuador
1911 // Rules: 1
1912 // Memory (8-bit): 15
1913 // Memory (32-bit): 24
1914 //---------------------------------------------------------------------------
1915 
1916 static const basic::ZoneRule kZoneRulesEcuador[] ACE_TIME_PROGMEM = {
1917  // Rule Ecuador 1993 only - Feb 5 0:00 0 -
1918  {
1919  -7 /*fromYearTiny*/,
1920  -7 /*toYearTiny*/,
1921  2 /*inMonth*/,
1922  0 /*onDayOfWeek*/,
1923  5 /*onDayOfMonth*/,
1924  0 /*atTimeCode*/,
1925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1926  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1927  '-' /*letter*/,
1928  },
1929 
1930 };
1931 
1932 
1933 
1934 const basic::ZonePolicy kPolicyEcuador ACE_TIME_PROGMEM = {
1935  kZoneRulesEcuador /*rules*/,
1936  nullptr /*letters*/,
1937  1 /*numRules*/,
1938  0 /*numLetters*/,
1939 };
1940 
1941 //---------------------------------------------------------------------------
1942 // Policy name: Eire
1943 // Rules: 3
1944 // Memory (8-bit): 33
1945 // Memory (32-bit): 48
1946 //---------------------------------------------------------------------------
1947 
1948 static const basic::ZoneRule kZoneRulesEire[] ACE_TIME_PROGMEM = {
1949  // Rule Eire 1981 max - Mar lastSun 1:00u 0 -
1950  {
1951  -19 /*fromYearTiny*/,
1952  126 /*toYearTiny*/,
1953  3 /*inMonth*/,
1954  7 /*onDayOfWeek*/,
1955  0 /*onDayOfMonth*/,
1956  4 /*atTimeCode*/,
1957  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1958  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1959  '-' /*letter*/,
1960  },
1961  // Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
1962  {
1963  -10 /*fromYearTiny*/,
1964  -5 /*toYearTiny*/,
1965  10 /*inMonth*/,
1966  7 /*onDayOfWeek*/,
1967  22 /*onDayOfMonth*/,
1968  4 /*atTimeCode*/,
1969  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1970  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
1971  '-' /*letter*/,
1972  },
1973  // Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
1974  {
1975  -4 /*fromYearTiny*/,
1976  126 /*toYearTiny*/,
1977  10 /*inMonth*/,
1978  7 /*onDayOfWeek*/,
1979  0 /*onDayOfMonth*/,
1980  4 /*atTimeCode*/,
1981  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1982  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
1983  '-' /*letter*/,
1984  },
1985 
1986 };
1987 
1988 
1989 
1990 const basic::ZonePolicy kPolicyEire ACE_TIME_PROGMEM = {
1991  kZoneRulesEire /*rules*/,
1992  nullptr /*letters*/,
1993  3 /*numRules*/,
1994  0 /*numLetters*/,
1995 };
1996 
1997 //---------------------------------------------------------------------------
1998 // Policy name: Fiji
1999 // Rules: 14
2000 // Memory (8-bit): 132
2001 // Memory (32-bit): 180
2002 //---------------------------------------------------------------------------
2003 
2004 static const basic::ZoneRule kZoneRulesFiji[] ACE_TIME_PROGMEM = {
2005  // Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
2006  {
2007  -2 /*fromYearTiny*/,
2008  -1 /*toYearTiny*/,
2009  11 /*inMonth*/,
2010  7 /*onDayOfWeek*/,
2011  1 /*onDayOfMonth*/,
2012  8 /*atTimeCode*/,
2013  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2014  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2015  '-' /*letter*/,
2016  },
2017  // Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
2018  {
2019  -1 /*fromYearTiny*/,
2020  0 /*toYearTiny*/,
2021  2 /*inMonth*/,
2022  7 /*onDayOfWeek*/,
2023  0 /*onDayOfMonth*/,
2024  12 /*atTimeCode*/,
2025  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2026  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2027  '-' /*letter*/,
2028  },
2029  // Rule Fiji 2009 only - Nov 29 2:00 1:00 -
2030  {
2031  9 /*fromYearTiny*/,
2032  9 /*toYearTiny*/,
2033  11 /*inMonth*/,
2034  0 /*onDayOfWeek*/,
2035  29 /*onDayOfMonth*/,
2036  8 /*atTimeCode*/,
2037  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2038  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2039  '-' /*letter*/,
2040  },
2041  // Rule Fiji 2010 only - Mar lastSun 3:00 0 -
2042  {
2043  10 /*fromYearTiny*/,
2044  10 /*toYearTiny*/,
2045  3 /*inMonth*/,
2046  7 /*onDayOfWeek*/,
2047  0 /*onDayOfMonth*/,
2048  12 /*atTimeCode*/,
2049  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2050  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2051  '-' /*letter*/,
2052  },
2053  // Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
2054  {
2055  10 /*fromYearTiny*/,
2056  13 /*toYearTiny*/,
2057  10 /*inMonth*/,
2058  7 /*onDayOfWeek*/,
2059  21 /*onDayOfMonth*/,
2060  8 /*atTimeCode*/,
2061  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2062  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2063  '-' /*letter*/,
2064  },
2065  // Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
2066  {
2067  11 /*fromYearTiny*/,
2068  11 /*toYearTiny*/,
2069  3 /*inMonth*/,
2070  7 /*onDayOfWeek*/,
2071  1 /*onDayOfMonth*/,
2072  12 /*atTimeCode*/,
2073  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2074  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2075  '-' /*letter*/,
2076  },
2077  // Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
2078  {
2079  12 /*fromYearTiny*/,
2080  13 /*toYearTiny*/,
2081  1 /*inMonth*/,
2082  7 /*onDayOfWeek*/,
2083  18 /*onDayOfMonth*/,
2084  12 /*atTimeCode*/,
2085  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2086  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2087  '-' /*letter*/,
2088  },
2089  // Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
2090  {
2091  14 /*fromYearTiny*/,
2092  14 /*toYearTiny*/,
2093  1 /*inMonth*/,
2094  7 /*onDayOfWeek*/,
2095  18 /*onDayOfMonth*/,
2096  8 /*atTimeCode*/,
2097  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2098  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2099  '-' /*letter*/,
2100  },
2101  // Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
2102  {
2103  14 /*fromYearTiny*/,
2104  18 /*toYearTiny*/,
2105  11 /*inMonth*/,
2106  7 /*onDayOfWeek*/,
2107  1 /*onDayOfMonth*/,
2108  8 /*atTimeCode*/,
2109  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2110  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2111  '-' /*letter*/,
2112  },
2113  // Rule Fiji 2015 2021 - Jan Sun>=12 3:00 0 -
2114  {
2115  15 /*fromYearTiny*/,
2116  21 /*toYearTiny*/,
2117  1 /*inMonth*/,
2118  7 /*onDayOfWeek*/,
2119  12 /*onDayOfMonth*/,
2120  12 /*atTimeCode*/,
2121  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2122  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2123  '-' /*letter*/,
2124  },
2125  // Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
2126  {
2127  19 /*fromYearTiny*/,
2128  19 /*toYearTiny*/,
2129  11 /*inMonth*/,
2130  7 /*onDayOfWeek*/,
2131  8 /*onDayOfMonth*/,
2132  8 /*atTimeCode*/,
2133  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2134  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2135  '-' /*letter*/,
2136  },
2137  // Rule Fiji 2020 only - Dec 20 2:00 1:00 -
2138  {
2139  20 /*fromYearTiny*/,
2140  20 /*toYearTiny*/,
2141  12 /*inMonth*/,
2142  0 /*onDayOfWeek*/,
2143  20 /*onDayOfMonth*/,
2144  8 /*atTimeCode*/,
2145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2146  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2147  '-' /*letter*/,
2148  },
2149  // Rule Fiji 2022 max - Nov Sun>=8 2:00 1:00 -
2150  {
2151  22 /*fromYearTiny*/,
2152  126 /*toYearTiny*/,
2153  11 /*inMonth*/,
2154  7 /*onDayOfWeek*/,
2155  8 /*onDayOfMonth*/,
2156  8 /*atTimeCode*/,
2157  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2158  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2159  '-' /*letter*/,
2160  },
2161  // Rule Fiji 2023 max - Jan Sun>=12 3:00 0 -
2162  {
2163  23 /*fromYearTiny*/,
2164  126 /*toYearTiny*/,
2165  1 /*inMonth*/,
2166  7 /*onDayOfWeek*/,
2167  12 /*onDayOfMonth*/,
2168  12 /*atTimeCode*/,
2169  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2170  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2171  '-' /*letter*/,
2172  },
2173 
2174 };
2175 
2176 
2177 
2178 const basic::ZonePolicy kPolicyFiji ACE_TIME_PROGMEM = {
2179  kZoneRulesFiji /*rules*/,
2180  nullptr /*letters*/,
2181  14 /*numRules*/,
2182  0 /*numLetters*/,
2183 };
2184 
2185 //---------------------------------------------------------------------------
2186 // Policy name: Guat
2187 // Rules: 3
2188 // Memory (8-bit): 33
2189 // Memory (32-bit): 48
2190 //---------------------------------------------------------------------------
2191 
2192 static const basic::ZoneRule kZoneRulesGuat[] ACE_TIME_PROGMEM = {
2193  // Rule Guat 1991 only - Sep 7 0:00 0 S
2194  {
2195  -9 /*fromYearTiny*/,
2196  -9 /*toYearTiny*/,
2197  9 /*inMonth*/,
2198  0 /*onDayOfWeek*/,
2199  7 /*onDayOfMonth*/,
2200  0 /*atTimeCode*/,
2201  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2202  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2203  'S' /*letter*/,
2204  },
2205  // Rule Guat 2006 only - Apr 30 0:00 1:00 D
2206  {
2207  6 /*fromYearTiny*/,
2208  6 /*toYearTiny*/,
2209  4 /*inMonth*/,
2210  0 /*onDayOfWeek*/,
2211  30 /*onDayOfMonth*/,
2212  0 /*atTimeCode*/,
2213  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2214  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2215  'D' /*letter*/,
2216  },
2217  // Rule Guat 2006 only - Oct 1 0:00 0 S
2218  {
2219  6 /*fromYearTiny*/,
2220  6 /*toYearTiny*/,
2221  10 /*inMonth*/,
2222  0 /*onDayOfWeek*/,
2223  1 /*onDayOfMonth*/,
2224  0 /*atTimeCode*/,
2225  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2226  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2227  'S' /*letter*/,
2228  },
2229 
2230 };
2231 
2232 
2233 
2234 const basic::ZonePolicy kPolicyGuat ACE_TIME_PROGMEM = {
2235  kZoneRulesGuat /*rules*/,
2236  nullptr /*letters*/,
2237  3 /*numRules*/,
2238  0 /*numLetters*/,
2239 };
2240 
2241 //---------------------------------------------------------------------------
2242 // Policy name: HK
2243 // Rules: 1
2244 // Memory (8-bit): 15
2245 // Memory (32-bit): 24
2246 //---------------------------------------------------------------------------
2247 
2248 static const basic::ZoneRule kZoneRulesHK[] ACE_TIME_PROGMEM = {
2249  // Rule HK 1979 only - Oct 21 3:30 0 -
2250  {
2251  -21 /*fromYearTiny*/,
2252  -21 /*toYearTiny*/,
2253  10 /*inMonth*/,
2254  0 /*onDayOfWeek*/,
2255  21 /*onDayOfMonth*/,
2256  14 /*atTimeCode*/,
2257  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2258  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2259  '-' /*letter*/,
2260  },
2261 
2262 };
2263 
2264 
2265 
2266 const basic::ZonePolicy kPolicyHK ACE_TIME_PROGMEM = {
2267  kZoneRulesHK /*rules*/,
2268  nullptr /*letters*/,
2269  1 /*numRules*/,
2270  0 /*numLetters*/,
2271 };
2272 
2273 //---------------------------------------------------------------------------
2274 // Policy name: Haiti
2275 // Rules: 7
2276 // Memory (8-bit): 69
2277 // Memory (32-bit): 96
2278 //---------------------------------------------------------------------------
2279 
2280 static const basic::ZoneRule kZoneRulesHaiti[] ACE_TIME_PROGMEM = {
2281  // Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
2282  {
2283  -12 /*fromYearTiny*/,
2284  -3 /*toYearTiny*/,
2285  10 /*inMonth*/,
2286  7 /*onDayOfWeek*/,
2287  0 /*onDayOfMonth*/,
2288  4 /*atTimeCode*/,
2289  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2290  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2291  'S' /*letter*/,
2292  },
2293  // Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
2294  {
2295  5 /*fromYearTiny*/,
2296  6 /*toYearTiny*/,
2297  4 /*inMonth*/,
2298  7 /*onDayOfWeek*/,
2299  1 /*onDayOfMonth*/,
2300  0 /*atTimeCode*/,
2301  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2302  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2303  'D' /*letter*/,
2304  },
2305  // Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
2306  {
2307  5 /*fromYearTiny*/,
2308  6 /*toYearTiny*/,
2309  10 /*inMonth*/,
2310  7 /*onDayOfWeek*/,
2311  0 /*onDayOfMonth*/,
2312  0 /*atTimeCode*/,
2313  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2314  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2315  'S' /*letter*/,
2316  },
2317  // Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
2318  {
2319  12 /*fromYearTiny*/,
2320  15 /*toYearTiny*/,
2321  3 /*inMonth*/,
2322  7 /*onDayOfWeek*/,
2323  8 /*onDayOfMonth*/,
2324  8 /*atTimeCode*/,
2325  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2326  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2327  'D' /*letter*/,
2328  },
2329  // Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
2330  {
2331  12 /*fromYearTiny*/,
2332  15 /*toYearTiny*/,
2333  11 /*inMonth*/,
2334  7 /*onDayOfWeek*/,
2335  1 /*onDayOfMonth*/,
2336  8 /*atTimeCode*/,
2337  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2338  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2339  'S' /*letter*/,
2340  },
2341  // Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
2342  {
2343  17 /*fromYearTiny*/,
2344  126 /*toYearTiny*/,
2345  3 /*inMonth*/,
2346  7 /*onDayOfWeek*/,
2347  8 /*onDayOfMonth*/,
2348  8 /*atTimeCode*/,
2349  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2350  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2351  'D' /*letter*/,
2352  },
2353  // Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
2354  {
2355  17 /*fromYearTiny*/,
2356  126 /*toYearTiny*/,
2357  11 /*inMonth*/,
2358  7 /*onDayOfWeek*/,
2359  1 /*onDayOfMonth*/,
2360  8 /*atTimeCode*/,
2361  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2362  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2363  'S' /*letter*/,
2364  },
2365 
2366 };
2367 
2368 
2369 
2370 const basic::ZonePolicy kPolicyHaiti ACE_TIME_PROGMEM = {
2371  kZoneRulesHaiti /*rules*/,
2372  nullptr /*letters*/,
2373  7 /*numRules*/,
2374  0 /*numLetters*/,
2375 };
2376 
2377 //---------------------------------------------------------------------------
2378 // Policy name: Holiday
2379 // Rules: 1
2380 // Memory (8-bit): 15
2381 // Memory (32-bit): 24
2382 //---------------------------------------------------------------------------
2383 
2384 static const basic::ZoneRule kZoneRulesHoliday[] ACE_TIME_PROGMEM = {
2385  // Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
2386  {
2387  -7 /*fromYearTiny*/,
2388  -6 /*toYearTiny*/,
2389  3 /*inMonth*/,
2390  7 /*onDayOfWeek*/,
2391  1 /*onDayOfMonth*/,
2392  8 /*atTimeCode*/,
2393  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2394  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2395  'S' /*letter*/,
2396  },
2397 
2398 };
2399 
2400 
2401 
2402 const basic::ZonePolicy kPolicyHoliday ACE_TIME_PROGMEM = {
2403  kZoneRulesHoliday /*rules*/,
2404  nullptr /*letters*/,
2405  1 /*numRules*/,
2406  0 /*numLetters*/,
2407 };
2408 
2409 //---------------------------------------------------------------------------
2410 // Policy name: Hond
2411 // Rules: 3
2412 // Memory (8-bit): 33
2413 // Memory (32-bit): 48
2414 //---------------------------------------------------------------------------
2415 
2416 static const basic::ZoneRule kZoneRulesHond[] ACE_TIME_PROGMEM = {
2417  // Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
2418  {
2419  -13 /*fromYearTiny*/,
2420  -12 /*toYearTiny*/,
2421  9 /*inMonth*/,
2422  7 /*onDayOfWeek*/,
2423  0 /*onDayOfMonth*/,
2424  0 /*atTimeCode*/,
2425  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2426  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2427  'S' /*letter*/,
2428  },
2429  // Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
2430  {
2431  6 /*fromYearTiny*/,
2432  6 /*toYearTiny*/,
2433  5 /*inMonth*/,
2434  7 /*onDayOfWeek*/,
2435  1 /*onDayOfMonth*/,
2436  0 /*atTimeCode*/,
2437  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2438  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2439  'D' /*letter*/,
2440  },
2441  // Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
2442  {
2443  6 /*fromYearTiny*/,
2444  6 /*toYearTiny*/,
2445  8 /*inMonth*/,
2446  1 /*onDayOfWeek*/,
2447  1 /*onDayOfMonth*/,
2448  0 /*atTimeCode*/,
2449  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2451  'S' /*letter*/,
2452  },
2453 
2454 };
2455 
2456 
2457 
2458 const basic::ZonePolicy kPolicyHond ACE_TIME_PROGMEM = {
2459  kZoneRulesHond /*rules*/,
2460  nullptr /*letters*/,
2461  3 /*numRules*/,
2462  0 /*numLetters*/,
2463 };
2464 
2465 //---------------------------------------------------------------------------
2466 // Policy name: Iran
2467 // Rules: 55
2468 // Memory (8-bit): 501
2469 // Memory (32-bit): 672
2470 //---------------------------------------------------------------------------
2471 
2472 static const basic::ZoneRule kZoneRulesIran[] ACE_TIME_PROGMEM = {
2473  // Rule Iran 1996 only - Sep 20 24:00 0 -
2474  {
2475  -4 /*fromYearTiny*/,
2476  -4 /*toYearTiny*/,
2477  9 /*inMonth*/,
2478  0 /*onDayOfWeek*/,
2479  20 /*onDayOfMonth*/,
2480  96 /*atTimeCode*/,
2481  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2482  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2483  '-' /*letter*/,
2484  },
2485  // Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
2486  {
2487  -3 /*fromYearTiny*/,
2488  -1 /*toYearTiny*/,
2489  3 /*inMonth*/,
2490  0 /*onDayOfWeek*/,
2491  21 /*onDayOfMonth*/,
2492  96 /*atTimeCode*/,
2493  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2494  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2495  '-' /*letter*/,
2496  },
2497  // Rule Iran 1997 1999 - Sep 21 24:00 0 -
2498  {
2499  -3 /*fromYearTiny*/,
2500  -1 /*toYearTiny*/,
2501  9 /*inMonth*/,
2502  0 /*onDayOfWeek*/,
2503  21 /*onDayOfMonth*/,
2504  96 /*atTimeCode*/,
2505  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2506  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2507  '-' /*letter*/,
2508  },
2509  // Rule Iran 2000 only - Mar 20 24:00 1:00 -
2510  {
2511  0 /*fromYearTiny*/,
2512  0 /*toYearTiny*/,
2513  3 /*inMonth*/,
2514  0 /*onDayOfWeek*/,
2515  20 /*onDayOfMonth*/,
2516  96 /*atTimeCode*/,
2517  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2518  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2519  '-' /*letter*/,
2520  },
2521  // Rule Iran 2000 only - Sep 20 24:00 0 -
2522  {
2523  0 /*fromYearTiny*/,
2524  0 /*toYearTiny*/,
2525  9 /*inMonth*/,
2526  0 /*onDayOfWeek*/,
2527  20 /*onDayOfMonth*/,
2528  96 /*atTimeCode*/,
2529  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2530  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2531  '-' /*letter*/,
2532  },
2533  // Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
2534  {
2535  1 /*fromYearTiny*/,
2536  3 /*toYearTiny*/,
2537  3 /*inMonth*/,
2538  0 /*onDayOfWeek*/,
2539  21 /*onDayOfMonth*/,
2540  96 /*atTimeCode*/,
2541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2542  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2543  '-' /*letter*/,
2544  },
2545  // Rule Iran 2001 2003 - Sep 21 24:00 0 -
2546  {
2547  1 /*fromYearTiny*/,
2548  3 /*toYearTiny*/,
2549  9 /*inMonth*/,
2550  0 /*onDayOfWeek*/,
2551  21 /*onDayOfMonth*/,
2552  96 /*atTimeCode*/,
2553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2554  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2555  '-' /*letter*/,
2556  },
2557  // Rule Iran 2004 only - Mar 20 24:00 1:00 -
2558  {
2559  4 /*fromYearTiny*/,
2560  4 /*toYearTiny*/,
2561  3 /*inMonth*/,
2562  0 /*onDayOfWeek*/,
2563  20 /*onDayOfMonth*/,
2564  96 /*atTimeCode*/,
2565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2566  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2567  '-' /*letter*/,
2568  },
2569  // Rule Iran 2004 only - Sep 20 24:00 0 -
2570  {
2571  4 /*fromYearTiny*/,
2572  4 /*toYearTiny*/,
2573  9 /*inMonth*/,
2574  0 /*onDayOfWeek*/,
2575  20 /*onDayOfMonth*/,
2576  96 /*atTimeCode*/,
2577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2578  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2579  '-' /*letter*/,
2580  },
2581  // Rule Iran 2005 only - Mar 21 24:00 1:00 -
2582  {
2583  5 /*fromYearTiny*/,
2584  5 /*toYearTiny*/,
2585  3 /*inMonth*/,
2586  0 /*onDayOfWeek*/,
2587  21 /*onDayOfMonth*/,
2588  96 /*atTimeCode*/,
2589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2590  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2591  '-' /*letter*/,
2592  },
2593  // Rule Iran 2005 only - Sep 21 24:00 0 -
2594  {
2595  5 /*fromYearTiny*/,
2596  5 /*toYearTiny*/,
2597  9 /*inMonth*/,
2598  0 /*onDayOfWeek*/,
2599  21 /*onDayOfMonth*/,
2600  96 /*atTimeCode*/,
2601  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2602  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2603  '-' /*letter*/,
2604  },
2605  // Rule Iran 2008 only - Mar 20 24:00 1:00 -
2606  {
2607  8 /*fromYearTiny*/,
2608  8 /*toYearTiny*/,
2609  3 /*inMonth*/,
2610  0 /*onDayOfWeek*/,
2611  20 /*onDayOfMonth*/,
2612  96 /*atTimeCode*/,
2613  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2614  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2615  '-' /*letter*/,
2616  },
2617  // Rule Iran 2008 only - Sep 20 24:00 0 -
2618  {
2619  8 /*fromYearTiny*/,
2620  8 /*toYearTiny*/,
2621  9 /*inMonth*/,
2622  0 /*onDayOfWeek*/,
2623  20 /*onDayOfMonth*/,
2624  96 /*atTimeCode*/,
2625  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2626  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2627  '-' /*letter*/,
2628  },
2629  // Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
2630  {
2631  9 /*fromYearTiny*/,
2632  11 /*toYearTiny*/,
2633  3 /*inMonth*/,
2634  0 /*onDayOfWeek*/,
2635  21 /*onDayOfMonth*/,
2636  96 /*atTimeCode*/,
2637  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2638  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2639  '-' /*letter*/,
2640  },
2641  // Rule Iran 2009 2011 - Sep 21 24:00 0 -
2642  {
2643  9 /*fromYearTiny*/,
2644  11 /*toYearTiny*/,
2645  9 /*inMonth*/,
2646  0 /*onDayOfWeek*/,
2647  21 /*onDayOfMonth*/,
2648  96 /*atTimeCode*/,
2649  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2650  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2651  '-' /*letter*/,
2652  },
2653  // Rule Iran 2012 only - Mar 20 24:00 1:00 -
2654  {
2655  12 /*fromYearTiny*/,
2656  12 /*toYearTiny*/,
2657  3 /*inMonth*/,
2658  0 /*onDayOfWeek*/,
2659  20 /*onDayOfMonth*/,
2660  96 /*atTimeCode*/,
2661  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2662  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2663  '-' /*letter*/,
2664  },
2665  // Rule Iran 2012 only - Sep 20 24:00 0 -
2666  {
2667  12 /*fromYearTiny*/,
2668  12 /*toYearTiny*/,
2669  9 /*inMonth*/,
2670  0 /*onDayOfWeek*/,
2671  20 /*onDayOfMonth*/,
2672  96 /*atTimeCode*/,
2673  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2674  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2675  '-' /*letter*/,
2676  },
2677  // Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
2678  {
2679  13 /*fromYearTiny*/,
2680  15 /*toYearTiny*/,
2681  3 /*inMonth*/,
2682  0 /*onDayOfWeek*/,
2683  21 /*onDayOfMonth*/,
2684  96 /*atTimeCode*/,
2685  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2686  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2687  '-' /*letter*/,
2688  },
2689  // Rule Iran 2013 2015 - Sep 21 24:00 0 -
2690  {
2691  13 /*fromYearTiny*/,
2692  15 /*toYearTiny*/,
2693  9 /*inMonth*/,
2694  0 /*onDayOfWeek*/,
2695  21 /*onDayOfMonth*/,
2696  96 /*atTimeCode*/,
2697  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2698  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2699  '-' /*letter*/,
2700  },
2701  // Rule Iran 2016 only - Mar 20 24:00 1:00 -
2702  {
2703  16 /*fromYearTiny*/,
2704  16 /*toYearTiny*/,
2705  3 /*inMonth*/,
2706  0 /*onDayOfWeek*/,
2707  20 /*onDayOfMonth*/,
2708  96 /*atTimeCode*/,
2709  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2710  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2711  '-' /*letter*/,
2712  },
2713  // Rule Iran 2016 only - Sep 20 24:00 0 -
2714  {
2715  16 /*fromYearTiny*/,
2716  16 /*toYearTiny*/,
2717  9 /*inMonth*/,
2718  0 /*onDayOfWeek*/,
2719  20 /*onDayOfMonth*/,
2720  96 /*atTimeCode*/,
2721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2722  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2723  '-' /*letter*/,
2724  },
2725  // Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
2726  {
2727  17 /*fromYearTiny*/,
2728  19 /*toYearTiny*/,
2729  3 /*inMonth*/,
2730  0 /*onDayOfWeek*/,
2731  21 /*onDayOfMonth*/,
2732  96 /*atTimeCode*/,
2733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2734  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2735  '-' /*letter*/,
2736  },
2737  // Rule Iran 2017 2019 - Sep 21 24:00 0 -
2738  {
2739  17 /*fromYearTiny*/,
2740  19 /*toYearTiny*/,
2741  9 /*inMonth*/,
2742  0 /*onDayOfWeek*/,
2743  21 /*onDayOfMonth*/,
2744  96 /*atTimeCode*/,
2745  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2746  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2747  '-' /*letter*/,
2748  },
2749  // Rule Iran 2020 only - Mar 20 24:00 1:00 -
2750  {
2751  20 /*fromYearTiny*/,
2752  20 /*toYearTiny*/,
2753  3 /*inMonth*/,
2754  0 /*onDayOfWeek*/,
2755  20 /*onDayOfMonth*/,
2756  96 /*atTimeCode*/,
2757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2758  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2759  '-' /*letter*/,
2760  },
2761  // Rule Iran 2020 only - Sep 20 24:00 0 -
2762  {
2763  20 /*fromYearTiny*/,
2764  20 /*toYearTiny*/,
2765  9 /*inMonth*/,
2766  0 /*onDayOfWeek*/,
2767  20 /*onDayOfMonth*/,
2768  96 /*atTimeCode*/,
2769  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2770  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2771  '-' /*letter*/,
2772  },
2773  // Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
2774  {
2775  21 /*fromYearTiny*/,
2776  23 /*toYearTiny*/,
2777  3 /*inMonth*/,
2778  0 /*onDayOfWeek*/,
2779  21 /*onDayOfMonth*/,
2780  96 /*atTimeCode*/,
2781  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2782  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2783  '-' /*letter*/,
2784  },
2785  // Rule Iran 2021 2023 - Sep 21 24:00 0 -
2786  {
2787  21 /*fromYearTiny*/,
2788  23 /*toYearTiny*/,
2789  9 /*inMonth*/,
2790  0 /*onDayOfWeek*/,
2791  21 /*onDayOfMonth*/,
2792  96 /*atTimeCode*/,
2793  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2794  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2795  '-' /*letter*/,
2796  },
2797  // Rule Iran 2024 only - Mar 20 24:00 1:00 -
2798  {
2799  24 /*fromYearTiny*/,
2800  24 /*toYearTiny*/,
2801  3 /*inMonth*/,
2802  0 /*onDayOfWeek*/,
2803  20 /*onDayOfMonth*/,
2804  96 /*atTimeCode*/,
2805  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2806  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2807  '-' /*letter*/,
2808  },
2809  // Rule Iran 2024 only - Sep 20 24:00 0 -
2810  {
2811  24 /*fromYearTiny*/,
2812  24 /*toYearTiny*/,
2813  9 /*inMonth*/,
2814  0 /*onDayOfWeek*/,
2815  20 /*onDayOfMonth*/,
2816  96 /*atTimeCode*/,
2817  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2818  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2819  '-' /*letter*/,
2820  },
2821  // Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
2822  {
2823  25 /*fromYearTiny*/,
2824  27 /*toYearTiny*/,
2825  3 /*inMonth*/,
2826  0 /*onDayOfWeek*/,
2827  21 /*onDayOfMonth*/,
2828  96 /*atTimeCode*/,
2829  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2830  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2831  '-' /*letter*/,
2832  },
2833  // Rule Iran 2025 2027 - Sep 21 24:00 0 -
2834  {
2835  25 /*fromYearTiny*/,
2836  27 /*toYearTiny*/,
2837  9 /*inMonth*/,
2838  0 /*onDayOfWeek*/,
2839  21 /*onDayOfMonth*/,
2840  96 /*atTimeCode*/,
2841  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2842  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2843  '-' /*letter*/,
2844  },
2845  // Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
2846  {
2847  28 /*fromYearTiny*/,
2848  29 /*toYearTiny*/,
2849  3 /*inMonth*/,
2850  0 /*onDayOfWeek*/,
2851  20 /*onDayOfMonth*/,
2852  96 /*atTimeCode*/,
2853  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2854  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2855  '-' /*letter*/,
2856  },
2857  // Rule Iran 2028 2029 - Sep 20 24:00 0 -
2858  {
2859  28 /*fromYearTiny*/,
2860  29 /*toYearTiny*/,
2861  9 /*inMonth*/,
2862  0 /*onDayOfWeek*/,
2863  20 /*onDayOfMonth*/,
2864  96 /*atTimeCode*/,
2865  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2866  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2867  '-' /*letter*/,
2868  },
2869  // Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
2870  {
2871  30 /*fromYearTiny*/,
2872  31 /*toYearTiny*/,
2873  3 /*inMonth*/,
2874  0 /*onDayOfWeek*/,
2875  21 /*onDayOfMonth*/,
2876  96 /*atTimeCode*/,
2877  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2878  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2879  '-' /*letter*/,
2880  },
2881  // Rule Iran 2030 2031 - Sep 21 24:00 0 -
2882  {
2883  30 /*fromYearTiny*/,
2884  31 /*toYearTiny*/,
2885  9 /*inMonth*/,
2886  0 /*onDayOfWeek*/,
2887  21 /*onDayOfMonth*/,
2888  96 /*atTimeCode*/,
2889  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2890  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2891  '-' /*letter*/,
2892  },
2893  // Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
2894  {
2895  32 /*fromYearTiny*/,
2896  33 /*toYearTiny*/,
2897  3 /*inMonth*/,
2898  0 /*onDayOfWeek*/,
2899  20 /*onDayOfMonth*/,
2900  96 /*atTimeCode*/,
2901  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2902  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2903  '-' /*letter*/,
2904  },
2905  // Rule Iran 2032 2033 - Sep 20 24:00 0 -
2906  {
2907  32 /*fromYearTiny*/,
2908  33 /*toYearTiny*/,
2909  9 /*inMonth*/,
2910  0 /*onDayOfWeek*/,
2911  20 /*onDayOfMonth*/,
2912  96 /*atTimeCode*/,
2913  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2914  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2915  '-' /*letter*/,
2916  },
2917  // Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
2918  {
2919  34 /*fromYearTiny*/,
2920  35 /*toYearTiny*/,
2921  3 /*inMonth*/,
2922  0 /*onDayOfWeek*/,
2923  21 /*onDayOfMonth*/,
2924  96 /*atTimeCode*/,
2925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2926  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2927  '-' /*letter*/,
2928  },
2929  // Rule Iran 2034 2035 - Sep 21 24:00 0 -
2930  {
2931  34 /*fromYearTiny*/,
2932  35 /*toYearTiny*/,
2933  9 /*inMonth*/,
2934  0 /*onDayOfWeek*/,
2935  21 /*onDayOfMonth*/,
2936  96 /*atTimeCode*/,
2937  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2938  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2939  '-' /*letter*/,
2940  },
2941  // Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
2942  {
2943  36 /*fromYearTiny*/,
2944  37 /*toYearTiny*/,
2945  3 /*inMonth*/,
2946  0 /*onDayOfWeek*/,
2947  20 /*onDayOfMonth*/,
2948  96 /*atTimeCode*/,
2949  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2950  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2951  '-' /*letter*/,
2952  },
2953  // Rule Iran 2036 2037 - Sep 20 24:00 0 -
2954  {
2955  36 /*fromYearTiny*/,
2956  37 /*toYearTiny*/,
2957  9 /*inMonth*/,
2958  0 /*onDayOfWeek*/,
2959  20 /*onDayOfMonth*/,
2960  96 /*atTimeCode*/,
2961  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2962  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2963  '-' /*letter*/,
2964  },
2965  // Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
2966  {
2967  38 /*fromYearTiny*/,
2968  39 /*toYearTiny*/,
2969  3 /*inMonth*/,
2970  0 /*onDayOfWeek*/,
2971  21 /*onDayOfMonth*/,
2972  96 /*atTimeCode*/,
2973  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2974  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2975  '-' /*letter*/,
2976  },
2977  // Rule Iran 2038 2039 - Sep 21 24:00 0 -
2978  {
2979  38 /*fromYearTiny*/,
2980  39 /*toYearTiny*/,
2981  9 /*inMonth*/,
2982  0 /*onDayOfWeek*/,
2983  21 /*onDayOfMonth*/,
2984  96 /*atTimeCode*/,
2985  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2986  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2987  '-' /*letter*/,
2988  },
2989  // Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
2990  {
2991  40 /*fromYearTiny*/,
2992  41 /*toYearTiny*/,
2993  3 /*inMonth*/,
2994  0 /*onDayOfWeek*/,
2995  20 /*onDayOfMonth*/,
2996  96 /*atTimeCode*/,
2997  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2998  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2999  '-' /*letter*/,
3000  },
3001  // Rule Iran 2040 2041 - Sep 20 24:00 0 -
3002  {
3003  40 /*fromYearTiny*/,
3004  41 /*toYearTiny*/,
3005  9 /*inMonth*/,
3006  0 /*onDayOfWeek*/,
3007  20 /*onDayOfMonth*/,
3008  96 /*atTimeCode*/,
3009  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3010  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3011  '-' /*letter*/,
3012  },
3013  // Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
3014  {
3015  42 /*fromYearTiny*/,
3016  43 /*toYearTiny*/,
3017  3 /*inMonth*/,
3018  0 /*onDayOfWeek*/,
3019  21 /*onDayOfMonth*/,
3020  96 /*atTimeCode*/,
3021  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3022  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3023  '-' /*letter*/,
3024  },
3025  // Rule Iran 2042 2043 - Sep 21 24:00 0 -
3026  {
3027  42 /*fromYearTiny*/,
3028  43 /*toYearTiny*/,
3029  9 /*inMonth*/,
3030  0 /*onDayOfWeek*/,
3031  21 /*onDayOfMonth*/,
3032  96 /*atTimeCode*/,
3033  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3034  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3035  '-' /*letter*/,
3036  },
3037  // Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
3038  {
3039  44 /*fromYearTiny*/,
3040  45 /*toYearTiny*/,
3041  3 /*inMonth*/,
3042  0 /*onDayOfWeek*/,
3043  20 /*onDayOfMonth*/,
3044  96 /*atTimeCode*/,
3045  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3046  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3047  '-' /*letter*/,
3048  },
3049  // Rule Iran 2044 2045 - Sep 20 24:00 0 -
3050  {
3051  44 /*fromYearTiny*/,
3052  45 /*toYearTiny*/,
3053  9 /*inMonth*/,
3054  0 /*onDayOfWeek*/,
3055  20 /*onDayOfMonth*/,
3056  96 /*atTimeCode*/,
3057  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3058  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3059  '-' /*letter*/,
3060  },
3061  // Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
3062  {
3063  46 /*fromYearTiny*/,
3064  47 /*toYearTiny*/,
3065  3 /*inMonth*/,
3066  0 /*onDayOfWeek*/,
3067  21 /*onDayOfMonth*/,
3068  96 /*atTimeCode*/,
3069  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3070  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3071  '-' /*letter*/,
3072  },
3073  // Rule Iran 2046 2047 - Sep 21 24:00 0 -
3074  {
3075  46 /*fromYearTiny*/,
3076  47 /*toYearTiny*/,
3077  9 /*inMonth*/,
3078  0 /*onDayOfWeek*/,
3079  21 /*onDayOfMonth*/,
3080  96 /*atTimeCode*/,
3081  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3082  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3083  '-' /*letter*/,
3084  },
3085  // Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
3086  {
3087  48 /*fromYearTiny*/,
3088  49 /*toYearTiny*/,
3089  3 /*inMonth*/,
3090  0 /*onDayOfWeek*/,
3091  20 /*onDayOfMonth*/,
3092  96 /*atTimeCode*/,
3093  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3094  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3095  '-' /*letter*/,
3096  },
3097  // Rule Iran 2048 2049 - Sep 20 24:00 0 -
3098  {
3099  48 /*fromYearTiny*/,
3100  49 /*toYearTiny*/,
3101  9 /*inMonth*/,
3102  0 /*onDayOfWeek*/,
3103  20 /*onDayOfMonth*/,
3104  96 /*atTimeCode*/,
3105  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3106  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3107  '-' /*letter*/,
3108  },
3109  // Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
3110  {
3111  50 /*fromYearTiny*/,
3112  51 /*toYearTiny*/,
3113  3 /*inMonth*/,
3114  0 /*onDayOfWeek*/,
3115  21 /*onDayOfMonth*/,
3116  96 /*atTimeCode*/,
3117  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3118  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3119  '-' /*letter*/,
3120  },
3121  // Rule Iran 2050 2051 - Sep 21 24:00 0 -
3122  {
3123  50 /*fromYearTiny*/,
3124  51 /*toYearTiny*/,
3125  9 /*inMonth*/,
3126  0 /*onDayOfWeek*/,
3127  21 /*onDayOfMonth*/,
3128  96 /*atTimeCode*/,
3129  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3130  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3131  '-' /*letter*/,
3132  },
3133 
3134 };
3135 
3136 
3137 
3138 const basic::ZonePolicy kPolicyIran ACE_TIME_PROGMEM = {
3139  kZoneRulesIran /*rules*/,
3140  nullptr /*letters*/,
3141  55 /*numRules*/,
3142  0 /*numLetters*/,
3143 };
3144 
3145 //---------------------------------------------------------------------------
3146 // Policy name: Iraq
3147 // Rules: 3
3148 // Memory (8-bit): 33
3149 // Memory (32-bit): 48
3150 //---------------------------------------------------------------------------
3151 
3152 static const basic::ZoneRule kZoneRulesIraq[] ACE_TIME_PROGMEM = {
3153  // Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
3154  {
3155  -15 /*fromYearTiny*/,
3156  -10 /*toYearTiny*/,
3157  9 /*inMonth*/,
3158  7 /*onDayOfWeek*/,
3159  0 /*onDayOfMonth*/,
3160  4 /*atTimeCode*/,
3161  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3162  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3163  '-' /*letter*/,
3164  },
3165  // Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
3166  {
3167  -9 /*fromYearTiny*/,
3168  7 /*toYearTiny*/,
3169  4 /*inMonth*/,
3170  0 /*onDayOfWeek*/,
3171  1 /*onDayOfMonth*/,
3172  12 /*atTimeCode*/,
3173  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3174  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3175  '-' /*letter*/,
3176  },
3177  // Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
3178  {
3179  -9 /*fromYearTiny*/,
3180  7 /*toYearTiny*/,
3181  10 /*inMonth*/,
3182  0 /*onDayOfWeek*/,
3183  1 /*onDayOfMonth*/,
3184  12 /*atTimeCode*/,
3185  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3186  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3187  '-' /*letter*/,
3188  },
3189 
3190 };
3191 
3192 
3193 
3194 const basic::ZonePolicy kPolicyIraq ACE_TIME_PROGMEM = {
3195  kZoneRulesIraq /*rules*/,
3196  nullptr /*letters*/,
3197  3 /*numRules*/,
3198  0 /*numLetters*/,
3199 };
3200 
3201 //---------------------------------------------------------------------------
3202 // Policy name: Japan
3203 // Rules: 1
3204 // Memory (8-bit): 15
3205 // Memory (32-bit): 24
3206 //---------------------------------------------------------------------------
3207 
3208 static const basic::ZoneRule kZoneRulesJapan[] ACE_TIME_PROGMEM = {
3209  // Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
3210  {
3211  -52 /*fromYearTiny*/,
3212  -49 /*toYearTiny*/,
3213  9 /*inMonth*/,
3214  6 /*onDayOfWeek*/,
3215  8 /*onDayOfMonth*/,
3216  100 /*atTimeCode*/,
3217  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3218  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3219  'S' /*letter*/,
3220  },
3221 
3222 };
3223 
3224 
3225 
3226 const basic::ZonePolicy kPolicyJapan ACE_TIME_PROGMEM = {
3227  kZoneRulesJapan /*rules*/,
3228  nullptr /*letters*/,
3229  1 /*numRules*/,
3230  0 /*numLetters*/,
3231 };
3232 
3233 //---------------------------------------------------------------------------
3234 // Policy name: Jordan
3235 // Rules: 13
3236 // Memory (8-bit): 123
3237 // Memory (32-bit): 168
3238 //---------------------------------------------------------------------------
3239 
3240 static const basic::ZoneRule kZoneRulesJordan[] ACE_TIME_PROGMEM = {
3241  // Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
3242  {
3243  -5 /*fromYearTiny*/,
3244  -2 /*toYearTiny*/,
3245  9 /*inMonth*/,
3246  5 /*onDayOfWeek*/,
3247  15 /*onDayOfMonth*/,
3248  0 /*atTimeCode*/,
3249  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3250  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3251  '-' /*letter*/,
3252  },
3253  // Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
3254  {
3255  -1 /*fromYearTiny*/,
3256  -1 /*toYearTiny*/,
3257  7 /*inMonth*/,
3258  0 /*onDayOfWeek*/,
3259  1 /*onDayOfMonth*/,
3260  0 /*atTimeCode*/,
3261  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3262  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3263  'S' /*letter*/,
3264  },
3265  // Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
3266  {
3267  -1 /*fromYearTiny*/,
3268  2 /*toYearTiny*/,
3269  9 /*inMonth*/,
3270  5 /*onDayOfWeek*/,
3271  0 /*onDayOfMonth*/,
3272  0 /*atTimeCode*/,
3273  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3274  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3275  '-' /*letter*/,
3276  },
3277  // Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
3278  {
3279  0 /*fromYearTiny*/,
3280  1 /*toYearTiny*/,
3281  3 /*inMonth*/,
3282  4 /*onDayOfWeek*/,
3283  0 /*onDayOfMonth*/,
3284  0 /*atTimeCode*/,
3285  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3286  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3287  'S' /*letter*/,
3288  },
3289  // Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S
3290  {
3291  2 /*fromYearTiny*/,
3292  12 /*toYearTiny*/,
3293  3 /*inMonth*/,
3294  4 /*onDayOfWeek*/,
3295  0 /*onDayOfMonth*/,
3296  96 /*atTimeCode*/,
3297  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3298  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3299  'S' /*letter*/,
3300  },
3301  // Rule Jordan 2003 only - Oct 24 0:00s 0 -
3302  {
3303  3 /*fromYearTiny*/,
3304  3 /*toYearTiny*/,
3305  10 /*inMonth*/,
3306  0 /*onDayOfWeek*/,
3307  24 /*onDayOfMonth*/,
3308  0 /*atTimeCode*/,
3309  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3310  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3311  '-' /*letter*/,
3312  },
3313  // Rule Jordan 2004 only - Oct 15 0:00s 0 -
3314  {
3315  4 /*fromYearTiny*/,
3316  4 /*toYearTiny*/,
3317  10 /*inMonth*/,
3318  0 /*onDayOfWeek*/,
3319  15 /*onDayOfMonth*/,
3320  0 /*atTimeCode*/,
3321  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3322  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3323  '-' /*letter*/,
3324  },
3325  // Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
3326  {
3327  5 /*fromYearTiny*/,
3328  5 /*toYearTiny*/,
3329  9 /*inMonth*/,
3330  5 /*onDayOfWeek*/,
3331  0 /*onDayOfMonth*/,
3332  0 /*atTimeCode*/,
3333  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3334  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3335  '-' /*letter*/,
3336  },
3337  // Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
3338  {
3339  6 /*fromYearTiny*/,
3340  11 /*toYearTiny*/,
3341  10 /*inMonth*/,
3342  5 /*onDayOfWeek*/,
3343  0 /*onDayOfMonth*/,
3344  0 /*atTimeCode*/,
3345  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3346  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3347  '-' /*letter*/,
3348  },
3349  // Rule Jordan 2013 only - Dec 20 0:00 0 -
3350  {
3351  13 /*fromYearTiny*/,
3352  13 /*toYearTiny*/,
3353  12 /*inMonth*/,
3354  0 /*onDayOfWeek*/,
3355  20 /*onDayOfMonth*/,
3356  0 /*atTimeCode*/,
3357  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3358  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3359  '-' /*letter*/,
3360  },
3361  // Rule Jordan 2014 2021 - Mar lastThu 24:00 1:00 S
3362  {
3363  14 /*fromYearTiny*/,
3364  21 /*toYearTiny*/,
3365  3 /*inMonth*/,
3366  4 /*onDayOfWeek*/,
3367  0 /*onDayOfMonth*/,
3368  96 /*atTimeCode*/,
3369  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3370  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3371  'S' /*letter*/,
3372  },
3373  // Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
3374  {
3375  14 /*fromYearTiny*/,
3376  126 /*toYearTiny*/,
3377  10 /*inMonth*/,
3378  5 /*onDayOfWeek*/,
3379  0 /*onDayOfMonth*/,
3380  0 /*atTimeCode*/,
3381  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3383  '-' /*letter*/,
3384  },
3385  // Rule Jordan 2022 max - Feb lastThu 24:00 1:00 S
3386  {
3387  22 /*fromYearTiny*/,
3388  126 /*toYearTiny*/,
3389  2 /*inMonth*/,
3390  4 /*onDayOfWeek*/,
3391  0 /*onDayOfMonth*/,
3392  96 /*atTimeCode*/,
3393  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3394  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3395  'S' /*letter*/,
3396  },
3397 
3398 };
3399 
3400 
3401 
3402 const basic::ZonePolicy kPolicyJordan ACE_TIME_PROGMEM = {
3403  kZoneRulesJordan /*rules*/,
3404  nullptr /*letters*/,
3405  13 /*numRules*/,
3406  0 /*numLetters*/,
3407 };
3408 
3409 //---------------------------------------------------------------------------
3410 // Policy name: LH
3411 // Rules: 9
3412 // Memory (8-bit): 87
3413 // Memory (32-bit): 120
3414 //---------------------------------------------------------------------------
3415 
3416 static const basic::ZoneRule kZoneRulesLH[] ACE_TIME_PROGMEM = {
3417  // Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
3418  {
3419  -13 /*fromYearTiny*/,
3420  -1 /*toYearTiny*/,
3421  10 /*inMonth*/,
3422  7 /*onDayOfWeek*/,
3423  0 /*onDayOfMonth*/,
3424  8 /*atTimeCode*/,
3425  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3426  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3427  '-' /*letter*/,
3428  },
3429  // Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
3430  {
3431  -10 /*fromYearTiny*/,
3432  -5 /*toYearTiny*/,
3433  3 /*inMonth*/,
3434  7 /*onDayOfWeek*/,
3435  1 /*onDayOfMonth*/,
3436  8 /*atTimeCode*/,
3437  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3438  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3439  '-' /*letter*/,
3440  },
3441  // Rule LH 1996 2005 - Mar lastSun 2:00 0 -
3442  {
3443  -4 /*fromYearTiny*/,
3444  5 /*toYearTiny*/,
3445  3 /*inMonth*/,
3446  7 /*onDayOfWeek*/,
3447  0 /*onDayOfMonth*/,
3448  8 /*atTimeCode*/,
3449  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3451  '-' /*letter*/,
3452  },
3453  // Rule LH 2000 only - Aug lastSun 2:00 0:30 -
3454  {
3455  0 /*fromYearTiny*/,
3456  0 /*toYearTiny*/,
3457  8 /*inMonth*/,
3458  7 /*onDayOfWeek*/,
3459  0 /*onDayOfMonth*/,
3460  8 /*atTimeCode*/,
3461  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3462  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3463  '-' /*letter*/,
3464  },
3465  // Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
3466  {
3467  1 /*fromYearTiny*/,
3468  7 /*toYearTiny*/,
3469  10 /*inMonth*/,
3470  7 /*onDayOfWeek*/,
3471  0 /*onDayOfMonth*/,
3472  8 /*atTimeCode*/,
3473  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3474  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3475  '-' /*letter*/,
3476  },
3477  // Rule LH 2006 only - Apr Sun>=1 2:00 0 -
3478  {
3479  6 /*fromYearTiny*/,
3480  6 /*toYearTiny*/,
3481  4 /*inMonth*/,
3482  7 /*onDayOfWeek*/,
3483  1 /*onDayOfMonth*/,
3484  8 /*atTimeCode*/,
3485  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3486  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3487  '-' /*letter*/,
3488  },
3489  // Rule LH 2007 only - Mar lastSun 2:00 0 -
3490  {
3491  7 /*fromYearTiny*/,
3492  7 /*toYearTiny*/,
3493  3 /*inMonth*/,
3494  7 /*onDayOfWeek*/,
3495  0 /*onDayOfMonth*/,
3496  8 /*atTimeCode*/,
3497  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3498  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3499  '-' /*letter*/,
3500  },
3501  // Rule LH 2008 max - Apr Sun>=1 2:00 0 -
3502  {
3503  8 /*fromYearTiny*/,
3504  126 /*toYearTiny*/,
3505  4 /*inMonth*/,
3506  7 /*onDayOfWeek*/,
3507  1 /*onDayOfMonth*/,
3508  8 /*atTimeCode*/,
3509  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3510  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3511  '-' /*letter*/,
3512  },
3513  // Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
3514  {
3515  8 /*fromYearTiny*/,
3516  126 /*toYearTiny*/,
3517  10 /*inMonth*/,
3518  7 /*onDayOfWeek*/,
3519  1 /*onDayOfMonth*/,
3520  8 /*atTimeCode*/,
3521  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3522  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3523  '-' /*letter*/,
3524  },
3525 
3526 };
3527 
3528 
3529 
3530 const basic::ZonePolicy kPolicyLH ACE_TIME_PROGMEM = {
3531  kZoneRulesLH /*rules*/,
3532  nullptr /*letters*/,
3533  9 /*numRules*/,
3534  0 /*numLetters*/,
3535 };
3536 
3537 //---------------------------------------------------------------------------
3538 // Policy name: Lebanon
3539 // Rules: 3
3540 // Memory (8-bit): 33
3541 // Memory (32-bit): 48
3542 //---------------------------------------------------------------------------
3543 
3544 static const basic::ZoneRule kZoneRulesLebanon[] ACE_TIME_PROGMEM = {
3545  // Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
3546  {
3547  -7 /*fromYearTiny*/,
3548  126 /*toYearTiny*/,
3549  3 /*inMonth*/,
3550  7 /*onDayOfWeek*/,
3551  0 /*onDayOfMonth*/,
3552  0 /*atTimeCode*/,
3553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3554  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3555  'S' /*letter*/,
3556  },
3557  // Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
3558  {
3559  -7 /*fromYearTiny*/,
3560  -2 /*toYearTiny*/,
3561  9 /*inMonth*/,
3562  7 /*onDayOfWeek*/,
3563  0 /*onDayOfMonth*/,
3564  0 /*atTimeCode*/,
3565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3567  '-' /*letter*/,
3568  },
3569  // Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
3570  {
3571  -1 /*fromYearTiny*/,
3572  126 /*toYearTiny*/,
3573  10 /*inMonth*/,
3574  7 /*onDayOfWeek*/,
3575  0 /*onDayOfMonth*/,
3576  0 /*atTimeCode*/,
3577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3578  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3579  '-' /*letter*/,
3580  },
3581 
3582 };
3583 
3584 
3585 
3586 const basic::ZonePolicy kPolicyLebanon ACE_TIME_PROGMEM = {
3587  kZoneRulesLebanon /*rules*/,
3588  nullptr /*letters*/,
3589  3 /*numRules*/,
3590  0 /*numLetters*/,
3591 };
3592 
3593 //---------------------------------------------------------------------------
3594 // Policy name: Macau
3595 // Rules: 1
3596 // Memory (8-bit): 15
3597 // Memory (32-bit): 24
3598 //---------------------------------------------------------------------------
3599 
3600 static const basic::ZoneRule kZoneRulesMacau[] ACE_TIME_PROGMEM = {
3601  // Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
3602  {
3603  -21 /*fromYearTiny*/,
3604  -21 /*toYearTiny*/,
3605  10 /*inMonth*/,
3606  7 /*onDayOfWeek*/,
3607  16 /*onDayOfMonth*/,
3608  14 /*atTimeCode*/,
3609  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3610  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3611  'S' /*letter*/,
3612  },
3613 
3614 };
3615 
3616 
3617 
3618 const basic::ZonePolicy kPolicyMacau ACE_TIME_PROGMEM = {
3619  kZoneRulesMacau /*rules*/,
3620  nullptr /*letters*/,
3621  1 /*numRules*/,
3622  0 /*numLetters*/,
3623 };
3624 
3625 //---------------------------------------------------------------------------
3626 // Policy name: Mauritius
3627 // Rules: 3
3628 // Memory (8-bit): 33
3629 // Memory (32-bit): 48
3630 //---------------------------------------------------------------------------
3631 
3632 static const basic::ZoneRule kZoneRulesMauritius[] ACE_TIME_PROGMEM = {
3633  // Rule Mauritius 1983 only - Mar 21 0:00 0 -
3634  {
3635  -17 /*fromYearTiny*/,
3636  -17 /*toYearTiny*/,
3637  3 /*inMonth*/,
3638  0 /*onDayOfWeek*/,
3639  21 /*onDayOfMonth*/,
3640  0 /*atTimeCode*/,
3641  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3642  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3643  '-' /*letter*/,
3644  },
3645  // Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
3646  {
3647  8 /*fromYearTiny*/,
3648  8 /*toYearTiny*/,
3649  10 /*inMonth*/,
3650  7 /*onDayOfWeek*/,
3651  0 /*onDayOfMonth*/,
3652  8 /*atTimeCode*/,
3653  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3654  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3655  '-' /*letter*/,
3656  },
3657  // Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
3658  {
3659  9 /*fromYearTiny*/,
3660  9 /*toYearTiny*/,
3661  3 /*inMonth*/,
3662  7 /*onDayOfWeek*/,
3663  0 /*onDayOfMonth*/,
3664  8 /*atTimeCode*/,
3665  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3666  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3667  '-' /*letter*/,
3668  },
3669 
3670 };
3671 
3672 
3673 
3674 const basic::ZonePolicy kPolicyMauritius ACE_TIME_PROGMEM = {
3675  kZoneRulesMauritius /*rules*/,
3676  nullptr /*letters*/,
3677  3 /*numRules*/,
3678  0 /*numLetters*/,
3679 };
3680 
3681 //---------------------------------------------------------------------------
3682 // Policy name: Mexico
3683 // Rules: 7
3684 // Memory (8-bit): 69
3685 // Memory (32-bit): 96
3686 //---------------------------------------------------------------------------
3687 
3688 static const basic::ZoneRule kZoneRulesMexico[] ACE_TIME_PROGMEM = {
3689  // Rule Mexico 1950 only - Jul 30 0:00 0 S
3690  {
3691  -50 /*fromYearTiny*/,
3692  -50 /*toYearTiny*/,
3693  7 /*inMonth*/,
3694  0 /*onDayOfWeek*/,
3695  30 /*onDayOfMonth*/,
3696  0 /*atTimeCode*/,
3697  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3698  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3699  'S' /*letter*/,
3700  },
3701  // Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
3702  {
3703  -4 /*fromYearTiny*/,
3704  0 /*toYearTiny*/,
3705  4 /*inMonth*/,
3706  7 /*onDayOfWeek*/,
3707  1 /*onDayOfMonth*/,
3708  8 /*atTimeCode*/,
3709  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3710  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3711  'D' /*letter*/,
3712  },
3713  // Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
3714  {
3715  -4 /*fromYearTiny*/,
3716  0 /*toYearTiny*/,
3717  10 /*inMonth*/,
3718  7 /*onDayOfWeek*/,
3719  0 /*onDayOfMonth*/,
3720  8 /*atTimeCode*/,
3721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3722  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3723  'S' /*letter*/,
3724  },
3725  // Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
3726  {
3727  1 /*fromYearTiny*/,
3728  1 /*toYearTiny*/,
3729  5 /*inMonth*/,
3730  7 /*onDayOfWeek*/,
3731  1 /*onDayOfMonth*/,
3732  8 /*atTimeCode*/,
3733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3734  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3735  'D' /*letter*/,
3736  },
3737  // Rule Mexico 2001 only - Sep lastSun 2:00 0 S
3738  {
3739  1 /*fromYearTiny*/,
3740  1 /*toYearTiny*/,
3741  9 /*inMonth*/,
3742  7 /*onDayOfWeek*/,
3743  0 /*onDayOfMonth*/,
3744  8 /*atTimeCode*/,
3745  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3746  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3747  'S' /*letter*/,
3748  },
3749  // Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
3750  {
3751  2 /*fromYearTiny*/,
3752  126 /*toYearTiny*/,
3753  4 /*inMonth*/,
3754  7 /*onDayOfWeek*/,
3755  1 /*onDayOfMonth*/,
3756  8 /*atTimeCode*/,
3757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3758  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3759  'D' /*letter*/,
3760  },
3761  // Rule Mexico 2002 max - Oct lastSun 2:00 0 S
3762  {
3763  2 /*fromYearTiny*/,
3764  126 /*toYearTiny*/,
3765  10 /*inMonth*/,
3766  7 /*onDayOfWeek*/,
3767  0 /*onDayOfMonth*/,
3768  8 /*atTimeCode*/,
3769  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3770  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3771  'S' /*letter*/,
3772  },
3773 
3774 };
3775 
3776 
3777 
3778 const basic::ZonePolicy kPolicyMexico ACE_TIME_PROGMEM = {
3779  kZoneRulesMexico /*rules*/,
3780  nullptr /*letters*/,
3781  7 /*numRules*/,
3782  0 /*numLetters*/,
3783 };
3784 
3785 //---------------------------------------------------------------------------
3786 // Policy name: Moldova
3787 // Rules: 2
3788 // Memory (8-bit): 24
3789 // Memory (32-bit): 36
3790 //---------------------------------------------------------------------------
3791 
3792 static const basic::ZoneRule kZoneRulesMoldova[] ACE_TIME_PROGMEM = {
3793  // Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
3794  {
3795  -3 /*fromYearTiny*/,
3796  126 /*toYearTiny*/,
3797  3 /*inMonth*/,
3798  7 /*onDayOfWeek*/,
3799  0 /*onDayOfMonth*/,
3800  8 /*atTimeCode*/,
3801  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3802  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3803  'S' /*letter*/,
3804  },
3805  // Rule Moldova 1997 max - Oct lastSun 3:00 0 -
3806  {
3807  -3 /*fromYearTiny*/,
3808  126 /*toYearTiny*/,
3809  10 /*inMonth*/,
3810  7 /*onDayOfWeek*/,
3811  0 /*onDayOfMonth*/,
3812  12 /*atTimeCode*/,
3813  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3814  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3815  '-' /*letter*/,
3816  },
3817 
3818 };
3819 
3820 
3821 
3822 const basic::ZonePolicy kPolicyMoldova ACE_TIME_PROGMEM = {
3823  kZoneRulesMoldova /*rules*/,
3824  nullptr /*letters*/,
3825  2 /*numRules*/,
3826  0 /*numLetters*/,
3827 };
3828 
3829 //---------------------------------------------------------------------------
3830 // Policy name: Moncton
3831 // Rules: 3
3832 // Memory (8-bit): 33
3833 // Memory (32-bit): 48
3834 //---------------------------------------------------------------------------
3835 
3836 static const basic::ZoneRule kZoneRulesMoncton[] ACE_TIME_PROGMEM = {
3837  // Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
3838  {
3839  -43 /*fromYearTiny*/,
3840  -28 /*toYearTiny*/,
3841  10 /*inMonth*/,
3842  7 /*onDayOfWeek*/,
3843  0 /*onDayOfMonth*/,
3844  8 /*atTimeCode*/,
3845  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3846  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3847  'S' /*letter*/,
3848  },
3849  // Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
3850  {
3851  -7 /*fromYearTiny*/,
3852  6 /*toYearTiny*/,
3853  4 /*inMonth*/,
3854  7 /*onDayOfWeek*/,
3855  1 /*onDayOfMonth*/,
3856  0 /*atTimeCode*/,
3857  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3858  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3859  'D' /*letter*/,
3860  },
3861  // Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
3862  {
3863  -7 /*fromYearTiny*/,
3864  6 /*toYearTiny*/,
3865  10 /*inMonth*/,
3866  7 /*onDayOfWeek*/,
3867  0 /*onDayOfMonth*/,
3868  0 /*atTimeCode*/,
3869  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3870  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3871  'S' /*letter*/,
3872  },
3873 
3874 };
3875 
3876 
3877 
3878 const basic::ZonePolicy kPolicyMoncton ACE_TIME_PROGMEM = {
3879  kZoneRulesMoncton /*rules*/,
3880  nullptr /*letters*/,
3881  3 /*numRules*/,
3882  0 /*numLetters*/,
3883 };
3884 
3885 //---------------------------------------------------------------------------
3886 // Policy name: Mongol
3887 // Rules: 6
3888 // Memory (8-bit): 60
3889 // Memory (32-bit): 84
3890 //---------------------------------------------------------------------------
3891 
3892 static const basic::ZoneRule kZoneRulesMongol[] ACE_TIME_PROGMEM = {
3893  // Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
3894  {
3895  -16 /*fromYearTiny*/,
3896  -2 /*toYearTiny*/,
3897  9 /*inMonth*/,
3898  7 /*onDayOfWeek*/,
3899  0 /*onDayOfMonth*/,
3900  0 /*atTimeCode*/,
3901  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3902  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3903  '-' /*letter*/,
3904  },
3905  // Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
3906  {
3907  1 /*fromYearTiny*/,
3908  1 /*toYearTiny*/,
3909  4 /*inMonth*/,
3910  6 /*onDayOfWeek*/,
3911  0 /*onDayOfMonth*/,
3912  8 /*atTimeCode*/,
3913  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3914  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3915  '-' /*letter*/,
3916  },
3917  // Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
3918  {
3919  1 /*fromYearTiny*/,
3920  6 /*toYearTiny*/,
3921  9 /*inMonth*/,
3922  6 /*onDayOfWeek*/,
3923  0 /*onDayOfMonth*/,
3924  8 /*atTimeCode*/,
3925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3926  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3927  '-' /*letter*/,
3928  },
3929  // Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
3930  {
3931  2 /*fromYearTiny*/,
3932  6 /*toYearTiny*/,
3933  3 /*inMonth*/,
3934  6 /*onDayOfWeek*/,
3935  0 /*onDayOfMonth*/,
3936  8 /*atTimeCode*/,
3937  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3938  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3939  '-' /*letter*/,
3940  },
3941  // Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
3942  {
3943  15 /*fromYearTiny*/,
3944  16 /*toYearTiny*/,
3945  3 /*inMonth*/,
3946  6 /*onDayOfWeek*/,
3947  0 /*onDayOfMonth*/,
3948  8 /*atTimeCode*/,
3949  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3950  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3951  '-' /*letter*/,
3952  },
3953  // Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
3954  {
3955  15 /*fromYearTiny*/,
3956  16 /*toYearTiny*/,
3957  9 /*inMonth*/,
3958  6 /*onDayOfWeek*/,
3959  0 /*onDayOfMonth*/,
3960  0 /*atTimeCode*/,
3961  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3962  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3963  '-' /*letter*/,
3964  },
3965 
3966 };
3967 
3968 
3969 
3970 const basic::ZonePolicy kPolicyMongol ACE_TIME_PROGMEM = {
3971  kZoneRulesMongol /*rules*/,
3972  nullptr /*letters*/,
3973  6 /*numRules*/,
3974  0 /*numLetters*/,
3975 };
3976 
3977 //---------------------------------------------------------------------------
3978 // Policy name: NC
3979 // Rules: 1
3980 // Memory (8-bit): 15
3981 // Memory (32-bit): 24
3982 //---------------------------------------------------------------------------
3983 
3984 static const basic::ZoneRule kZoneRulesNC[] ACE_TIME_PROGMEM = {
3985  // Rule NC 1997 only - Mar 2 2:00s 0 -
3986  {
3987  -3 /*fromYearTiny*/,
3988  -3 /*toYearTiny*/,
3989  3 /*inMonth*/,
3990  0 /*onDayOfWeek*/,
3991  2 /*onDayOfMonth*/,
3992  8 /*atTimeCode*/,
3993  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3994  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3995  '-' /*letter*/,
3996  },
3997 
3998 };
3999 
4000 
4001 
4002 const basic::ZonePolicy kPolicyNC ACE_TIME_PROGMEM = {
4003  kZoneRulesNC /*rules*/,
4004  nullptr /*letters*/,
4005  1 /*numRules*/,
4006  0 /*numLetters*/,
4007 };
4008 
4009 //---------------------------------------------------------------------------
4010 // Policy name: NZ
4011 // Rules: 5
4012 // Memory (8-bit): 51
4013 // Memory (32-bit): 72
4014 //---------------------------------------------------------------------------
4015 
4016 static const basic::ZoneRule kZoneRulesNZ[] ACE_TIME_PROGMEM = {
4017  // Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
4018  {
4019  -11 /*fromYearTiny*/,
4020  -11 /*toYearTiny*/,
4021  10 /*inMonth*/,
4022  7 /*onDayOfWeek*/,
4023  8 /*onDayOfMonth*/,
4024  8 /*atTimeCode*/,
4025  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4026  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4027  'D' /*letter*/,
4028  },
4029  // Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
4030  {
4031  -10 /*fromYearTiny*/,
4032  6 /*toYearTiny*/,
4033  10 /*inMonth*/,
4034  7 /*onDayOfWeek*/,
4035  1 /*onDayOfMonth*/,
4036  8 /*atTimeCode*/,
4037  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4038  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4039  'D' /*letter*/,
4040  },
4041  // Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
4042  {
4043  -10 /*fromYearTiny*/,
4044  7 /*toYearTiny*/,
4045  3 /*inMonth*/,
4046  7 /*onDayOfWeek*/,
4047  15 /*onDayOfMonth*/,
4048  8 /*atTimeCode*/,
4049  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4050  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4051  'S' /*letter*/,
4052  },
4053  // Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
4054  {
4055  7 /*fromYearTiny*/,
4056  126 /*toYearTiny*/,
4057  9 /*inMonth*/,
4058  7 /*onDayOfWeek*/,
4059  0 /*onDayOfMonth*/,
4060  8 /*atTimeCode*/,
4061  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4062  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4063  'D' /*letter*/,
4064  },
4065  // Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
4066  {
4067  8 /*fromYearTiny*/,
4068  126 /*toYearTiny*/,
4069  4 /*inMonth*/,
4070  7 /*onDayOfWeek*/,
4071  1 /*onDayOfMonth*/,
4072  8 /*atTimeCode*/,
4073  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4074  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4075  'S' /*letter*/,
4076  },
4077 
4078 };
4079 
4080 
4081 
4082 const basic::ZonePolicy kPolicyNZ ACE_TIME_PROGMEM = {
4083  kZoneRulesNZ /*rules*/,
4084  nullptr /*letters*/,
4085  5 /*numRules*/,
4086  0 /*numLetters*/,
4087 };
4088 
4089 //---------------------------------------------------------------------------
4090 // Policy name: Nic
4091 // Rules: 5
4092 // Memory (8-bit): 51
4093 // Memory (32-bit): 72
4094 //---------------------------------------------------------------------------
4095 
4096 static const basic::ZoneRule kZoneRulesNic[] ACE_TIME_PROGMEM = {
4097  // Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
4098  {
4099  -21 /*fromYearTiny*/,
4100  -20 /*toYearTiny*/,
4101  6 /*inMonth*/,
4102  1 /*onDayOfWeek*/,
4103  23 /*onDayOfMonth*/,
4104  0 /*atTimeCode*/,
4105  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4106  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4107  'S' /*letter*/,
4108  },
4109  // Rule Nic 2005 only - Apr 10 0:00 1:00 D
4110  {
4111  5 /*fromYearTiny*/,
4112  5 /*toYearTiny*/,
4113  4 /*inMonth*/,
4114  0 /*onDayOfWeek*/,
4115  10 /*onDayOfMonth*/,
4116  0 /*atTimeCode*/,
4117  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4118  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4119  'D' /*letter*/,
4120  },
4121  // Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
4122  {
4123  5 /*fromYearTiny*/,
4124  5 /*toYearTiny*/,
4125  10 /*inMonth*/,
4126  7 /*onDayOfWeek*/,
4127  1 /*onDayOfMonth*/,
4128  0 /*atTimeCode*/,
4129  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4130  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4131  'S' /*letter*/,
4132  },
4133  // Rule Nic 2006 only - Apr 30 2:00 1:00 D
4134  {
4135  6 /*fromYearTiny*/,
4136  6 /*toYearTiny*/,
4137  4 /*inMonth*/,
4138  0 /*onDayOfWeek*/,
4139  30 /*onDayOfMonth*/,
4140  8 /*atTimeCode*/,
4141  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4142  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4143  'D' /*letter*/,
4144  },
4145  // Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
4146  {
4147  6 /*fromYearTiny*/,
4148  6 /*toYearTiny*/,
4149  10 /*inMonth*/,
4150  7 /*onDayOfWeek*/,
4151  1 /*onDayOfMonth*/,
4152  4 /*atTimeCode*/,
4153  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4154  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4155  'S' /*letter*/,
4156  },
4157 
4158 };
4159 
4160 
4161 
4162 const basic::ZonePolicy kPolicyNic ACE_TIME_PROGMEM = {
4163  kZoneRulesNic /*rules*/,
4164  nullptr /*letters*/,
4165  5 /*numRules*/,
4166  0 /*numLetters*/,
4167 };
4168 
4169 //---------------------------------------------------------------------------
4170 // Policy name: PRC
4171 // Rules: 1
4172 // Memory (8-bit): 15
4173 // Memory (32-bit): 24
4174 //---------------------------------------------------------------------------
4175 
4176 static const basic::ZoneRule kZoneRulesPRC[] ACE_TIME_PROGMEM = {
4177  // Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S
4178  {
4179  -14 /*fromYearTiny*/,
4180  -9 /*toYearTiny*/,
4181  9 /*inMonth*/,
4182  7 /*onDayOfWeek*/,
4183  11 /*onDayOfMonth*/,
4184  8 /*atTimeCode*/,
4185  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4186  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4187  'S' /*letter*/,
4188  },
4189 
4190 };
4191 
4192 
4193 
4194 const basic::ZonePolicy kPolicyPRC ACE_TIME_PROGMEM = {
4195  kZoneRulesPRC /*rules*/,
4196  nullptr /*letters*/,
4197  1 /*numRules*/,
4198  0 /*numLetters*/,
4199 };
4200 
4201 //---------------------------------------------------------------------------
4202 // Policy name: Pakistan
4203 // Rules: 6
4204 // Memory (8-bit): 60
4205 // Memory (32-bit): 84
4206 //---------------------------------------------------------------------------
4207 
4208 static const basic::ZoneRule kZoneRulesPakistan[] ACE_TIME_PROGMEM = {
4209  // Anchor: Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
4210  {
4211  -127 /*fromYearTiny*/,
4212  -127 /*toYearTiny*/,
4213  1 /*inMonth*/,
4214  0 /*onDayOfWeek*/,
4215  1 /*onDayOfMonth*/,
4216  0 /*atTimeCode*/,
4217  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4218  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4219  '-' /*letter*/,
4220  },
4221  // Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S
4222  {
4223  2 /*fromYearTiny*/,
4224  2 /*toYearTiny*/,
4225  4 /*inMonth*/,
4226  7 /*onDayOfWeek*/,
4227  2 /*onDayOfMonth*/,
4228  0 /*atTimeCode*/,
4229  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4230  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4231  'S' /*letter*/,
4232  },
4233  // Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
4234  {
4235  2 /*fromYearTiny*/,
4236  2 /*toYearTiny*/,
4237  10 /*inMonth*/,
4238  7 /*onDayOfWeek*/,
4239  2 /*onDayOfMonth*/,
4240  0 /*atTimeCode*/,
4241  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4242  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4243  '-' /*letter*/,
4244  },
4245  // Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
4246  {
4247  8 /*fromYearTiny*/,
4248  8 /*toYearTiny*/,
4249  6 /*inMonth*/,
4250  0 /*onDayOfWeek*/,
4251  1 /*onDayOfMonth*/,
4252  0 /*atTimeCode*/,
4253  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4254  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4255  'S' /*letter*/,
4256  },
4257  // Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
4258  {
4259  8 /*fromYearTiny*/,
4260  9 /*toYearTiny*/,
4261  11 /*inMonth*/,
4262  0 /*onDayOfWeek*/,
4263  1 /*onDayOfMonth*/,
4264  0 /*atTimeCode*/,
4265  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4266  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4267  '-' /*letter*/,
4268  },
4269  // Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
4270  {
4271  9 /*fromYearTiny*/,
4272  9 /*toYearTiny*/,
4273  4 /*inMonth*/,
4274  0 /*onDayOfWeek*/,
4275  15 /*onDayOfMonth*/,
4276  0 /*atTimeCode*/,
4277  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4278  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4279  'S' /*letter*/,
4280  },
4281 
4282 };
4283 
4284 
4285 
4286 const basic::ZonePolicy kPolicyPakistan ACE_TIME_PROGMEM = {
4287  kZoneRulesPakistan /*rules*/,
4288  nullptr /*letters*/,
4289  6 /*numRules*/,
4290  0 /*numLetters*/,
4291 };
4292 
4293 //---------------------------------------------------------------------------
4294 // Policy name: Para
4295 // Rules: 10
4296 // Memory (8-bit): 96
4297 // Memory (32-bit): 132
4298 //---------------------------------------------------------------------------
4299 
4300 static const basic::ZoneRule kZoneRulesPara[] ACE_TIME_PROGMEM = {
4301  // Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
4302  {
4303  -4 /*fromYearTiny*/,
4304  1 /*toYearTiny*/,
4305  10 /*inMonth*/,
4306  7 /*onDayOfWeek*/,
4307  1 /*onDayOfMonth*/,
4308  0 /*atTimeCode*/,
4309  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4310  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4311  '-' /*letter*/,
4312  },
4313  // Rule Para 1997 only - Feb lastSun 0:00 0 -
4314  {
4315  -3 /*fromYearTiny*/,
4316  -3 /*toYearTiny*/,
4317  2 /*inMonth*/,
4318  7 /*onDayOfWeek*/,
4319  0 /*onDayOfMonth*/,
4320  0 /*atTimeCode*/,
4321  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4322  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4323  '-' /*letter*/,
4324  },
4325  // Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
4326  {
4327  -2 /*fromYearTiny*/,
4328  1 /*toYearTiny*/,
4329  3 /*inMonth*/,
4330  7 /*onDayOfWeek*/,
4331  1 /*onDayOfMonth*/,
4332  0 /*atTimeCode*/,
4333  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4334  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4335  '-' /*letter*/,
4336  },
4337  // Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
4338  {
4339  2 /*fromYearTiny*/,
4340  4 /*toYearTiny*/,
4341  4 /*inMonth*/,
4342  7 /*onDayOfWeek*/,
4343  1 /*onDayOfMonth*/,
4344  0 /*atTimeCode*/,
4345  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4346  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4347  '-' /*letter*/,
4348  },
4349  // Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
4350  {
4351  2 /*fromYearTiny*/,
4352  3 /*toYearTiny*/,
4353  9 /*inMonth*/,
4354  7 /*onDayOfWeek*/,
4355  1 /*onDayOfMonth*/,
4356  0 /*atTimeCode*/,
4357  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4358  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4359  '-' /*letter*/,
4360  },
4361  // Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
4362  {
4363  4 /*fromYearTiny*/,
4364  9 /*toYearTiny*/,
4365  10 /*inMonth*/,
4366  7 /*onDayOfWeek*/,
4367  15 /*onDayOfMonth*/,
4368  0 /*atTimeCode*/,
4369  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4370  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4371  '-' /*letter*/,
4372  },
4373  // Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
4374  {
4375  5 /*fromYearTiny*/,
4376  9 /*toYearTiny*/,
4377  3 /*inMonth*/,
4378  7 /*onDayOfWeek*/,
4379  8 /*onDayOfMonth*/,
4380  0 /*atTimeCode*/,
4381  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4383  '-' /*letter*/,
4384  },
4385  // Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
4386  {
4387  10 /*fromYearTiny*/,
4388  126 /*toYearTiny*/,
4389  10 /*inMonth*/,
4390  7 /*onDayOfWeek*/,
4391  1 /*onDayOfMonth*/,
4392  0 /*atTimeCode*/,
4393  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4394  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4395  '-' /*letter*/,
4396  },
4397  // Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
4398  {
4399  10 /*fromYearTiny*/,
4400  12 /*toYearTiny*/,
4401  4 /*inMonth*/,
4402  7 /*onDayOfWeek*/,
4403  8 /*onDayOfMonth*/,
4404  0 /*atTimeCode*/,
4405  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4406  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4407  '-' /*letter*/,
4408  },
4409  // Rule Para 2013 max - Mar Sun>=22 0:00 0 -
4410  {
4411  13 /*fromYearTiny*/,
4412  126 /*toYearTiny*/,
4413  3 /*inMonth*/,
4414  7 /*onDayOfWeek*/,
4415  22 /*onDayOfMonth*/,
4416  0 /*atTimeCode*/,
4417  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4418  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4419  '-' /*letter*/,
4420  },
4421 
4422 };
4423 
4424 
4425 
4426 const basic::ZonePolicy kPolicyPara ACE_TIME_PROGMEM = {
4427  kZoneRulesPara /*rules*/,
4428  nullptr /*letters*/,
4429  10 /*numRules*/,
4430  0 /*numLetters*/,
4431 };
4432 
4433 //---------------------------------------------------------------------------
4434 // Policy name: Peru
4435 // Rules: 1
4436 // Memory (8-bit): 15
4437 // Memory (32-bit): 24
4438 //---------------------------------------------------------------------------
4439 
4440 static const basic::ZoneRule kZoneRulesPeru[] ACE_TIME_PROGMEM = {
4441  // Rule Peru 1994 only - Apr 1 0:00 0 -
4442  {
4443  -6 /*fromYearTiny*/,
4444  -6 /*toYearTiny*/,
4445  4 /*inMonth*/,
4446  0 /*onDayOfWeek*/,
4447  1 /*onDayOfMonth*/,
4448  0 /*atTimeCode*/,
4449  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4451  '-' /*letter*/,
4452  },
4453 
4454 };
4455 
4456 
4457 
4458 const basic::ZonePolicy kPolicyPeru ACE_TIME_PROGMEM = {
4459  kZoneRulesPeru /*rules*/,
4460  nullptr /*letters*/,
4461  1 /*numRules*/,
4462  0 /*numLetters*/,
4463 };
4464 
4465 //---------------------------------------------------------------------------
4466 // Policy name: Phil
4467 // Rules: 1
4468 // Memory (8-bit): 15
4469 // Memory (32-bit): 24
4470 //---------------------------------------------------------------------------
4471 
4472 static const basic::ZoneRule kZoneRulesPhil[] ACE_TIME_PROGMEM = {
4473  // Rule Phil 1978 only - Sep 21 0:00 0 S
4474  {
4475  -22 /*fromYearTiny*/,
4476  -22 /*toYearTiny*/,
4477  9 /*inMonth*/,
4478  0 /*onDayOfWeek*/,
4479  21 /*onDayOfMonth*/,
4480  0 /*atTimeCode*/,
4481  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4482  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4483  'S' /*letter*/,
4484  },
4485 
4486 };
4487 
4488 
4489 
4490 const basic::ZonePolicy kPolicyPhil ACE_TIME_PROGMEM = {
4491  kZoneRulesPhil /*rules*/,
4492  nullptr /*letters*/,
4493  1 /*numRules*/,
4494  0 /*numLetters*/,
4495 };
4496 
4497 //---------------------------------------------------------------------------
4498 // Policy name: ROK
4499 // Rules: 1
4500 // Memory (8-bit): 15
4501 // Memory (32-bit): 24
4502 //---------------------------------------------------------------------------
4503 
4504 static const basic::ZoneRule kZoneRulesROK[] ACE_TIME_PROGMEM = {
4505  // Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
4506  {
4507  -13 /*fromYearTiny*/,
4508  -12 /*toYearTiny*/,
4509  10 /*inMonth*/,
4510  7 /*onDayOfWeek*/,
4511  8 /*onDayOfMonth*/,
4512  12 /*atTimeCode*/,
4513  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4514  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4515  'S' /*letter*/,
4516  },
4517 
4518 };
4519 
4520 
4521 
4522 const basic::ZonePolicy kPolicyROK ACE_TIME_PROGMEM = {
4523  kZoneRulesROK /*rules*/,
4524  nullptr /*letters*/,
4525  1 /*numRules*/,
4526  0 /*numLetters*/,
4527 };
4528 
4529 //---------------------------------------------------------------------------
4530 // Policy name: RussiaAsia
4531 // Rules: 3
4532 // Memory (8-bit): 33
4533 // Memory (32-bit): 48
4534 //---------------------------------------------------------------------------
4535 
4536 static const basic::ZoneRule kZoneRulesRussiaAsia[] ACE_TIME_PROGMEM = {
4537  // Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
4538  {
4539  -16 /*fromYearTiny*/,
4540  -5 /*toYearTiny*/,
4541  9 /*inMonth*/,
4542  7 /*onDayOfWeek*/,
4543  0 /*onDayOfMonth*/,
4544  8 /*atTimeCode*/,
4545  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4546  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4547  '-' /*letter*/,
4548  },
4549  // Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
4550  {
4551  -15 /*fromYearTiny*/,
4552  10 /*toYearTiny*/,
4553  3 /*inMonth*/,
4554  7 /*onDayOfWeek*/,
4555  0 /*onDayOfMonth*/,
4556  8 /*atTimeCode*/,
4557  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4558  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4559  '-' /*letter*/,
4560  },
4561  // Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
4562  {
4563  -4 /*fromYearTiny*/,
4564  10 /*toYearTiny*/,
4565  10 /*inMonth*/,
4566  7 /*onDayOfWeek*/,
4567  0 /*onDayOfMonth*/,
4568  8 /*atTimeCode*/,
4569  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4570  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4571  '-' /*letter*/,
4572  },
4573 
4574 };
4575 
4576 
4577 
4578 const basic::ZonePolicy kPolicyRussiaAsia ACE_TIME_PROGMEM = {
4579  kZoneRulesRussiaAsia /*rules*/,
4580  nullptr /*letters*/,
4581  3 /*numRules*/,
4582  0 /*numLetters*/,
4583 };
4584 
4585 //---------------------------------------------------------------------------
4586 // Policy name: SA
4587 // Rules: 1
4588 // Memory (8-bit): 15
4589 // Memory (32-bit): 24
4590 //---------------------------------------------------------------------------
4591 
4592 static const basic::ZoneRule kZoneRulesSA[] ACE_TIME_PROGMEM = {
4593  // Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
4594  {
4595  -57 /*fromYearTiny*/,
4596  -56 /*toYearTiny*/,
4597  3 /*inMonth*/,
4598  7 /*onDayOfWeek*/,
4599  15 /*onDayOfMonth*/,
4600  8 /*atTimeCode*/,
4601  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4602  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4603  '-' /*letter*/,
4604  },
4605 
4606 };
4607 
4608 
4609 
4610 const basic::ZonePolicy kPolicySA ACE_TIME_PROGMEM = {
4611  kZoneRulesSA /*rules*/,
4612  nullptr /*letters*/,
4613  1 /*numRules*/,
4614  0 /*numLetters*/,
4615 };
4616 
4617 //---------------------------------------------------------------------------
4618 // Policy name: Salv
4619 // Rules: 1
4620 // Memory (8-bit): 15
4621 // Memory (32-bit): 24
4622 //---------------------------------------------------------------------------
4623 
4624 static const basic::ZoneRule kZoneRulesSalv[] ACE_TIME_PROGMEM = {
4625  // Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
4626  {
4627  -13 /*fromYearTiny*/,
4628  -12 /*toYearTiny*/,
4629  9 /*inMonth*/,
4630  7 /*onDayOfWeek*/,
4631  0 /*onDayOfMonth*/,
4632  0 /*atTimeCode*/,
4633  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4634  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4635  'S' /*letter*/,
4636  },
4637 
4638 };
4639 
4640 
4641 
4642 const basic::ZonePolicy kPolicySalv ACE_TIME_PROGMEM = {
4643  kZoneRulesSalv /*rules*/,
4644  nullptr /*letters*/,
4645  1 /*numRules*/,
4646  0 /*numLetters*/,
4647 };
4648 
4649 //---------------------------------------------------------------------------
4650 // Policy name: Syria
4651 // Rules: 12
4652 // Memory (8-bit): 114
4653 // Memory (32-bit): 156
4654 //---------------------------------------------------------------------------
4655 
4656 static const basic::ZoneRule kZoneRulesSyria[] ACE_TIME_PROGMEM = {
4657  // Rule Syria 1994 2005 - Oct 1 0:00 0 -
4658  {
4659  -6 /*fromYearTiny*/,
4660  5 /*toYearTiny*/,
4661  10 /*inMonth*/,
4662  0 /*onDayOfWeek*/,
4663  1 /*onDayOfMonth*/,
4664  0 /*atTimeCode*/,
4665  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4666  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4667  '-' /*letter*/,
4668  },
4669  // Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
4670  {
4671  -3 /*fromYearTiny*/,
4672  -2 /*toYearTiny*/,
4673  3 /*inMonth*/,
4674  1 /*onDayOfWeek*/,
4675  0 /*onDayOfMonth*/,
4676  0 /*atTimeCode*/,
4677  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4678  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4679  'S' /*letter*/,
4680  },
4681  // Rule Syria 1999 2006 - Apr 1 0:00 1:00 S
4682  {
4683  -1 /*fromYearTiny*/,
4684  6 /*toYearTiny*/,
4685  4 /*inMonth*/,
4686  0 /*onDayOfWeek*/,
4687  1 /*onDayOfMonth*/,
4688  0 /*atTimeCode*/,
4689  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4690  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4691  'S' /*letter*/,
4692  },
4693  // Rule Syria 2006 only - Sep 22 0:00 0 -
4694  {
4695  6 /*fromYearTiny*/,
4696  6 /*toYearTiny*/,
4697  9 /*inMonth*/,
4698  0 /*onDayOfWeek*/,
4699  22 /*onDayOfMonth*/,
4700  0 /*atTimeCode*/,
4701  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4702  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4703  '-' /*letter*/,
4704  },
4705  // Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
4706  {
4707  7 /*fromYearTiny*/,
4708  7 /*toYearTiny*/,
4709  3 /*inMonth*/,
4710  5 /*onDayOfWeek*/,
4711  0 /*onDayOfMonth*/,
4712  0 /*atTimeCode*/,
4713  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4714  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4715  'S' /*letter*/,
4716  },
4717  // Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
4718  {
4719  7 /*fromYearTiny*/,
4720  7 /*toYearTiny*/,
4721  11 /*inMonth*/,
4722  5 /*onDayOfWeek*/,
4723  1 /*onDayOfMonth*/,
4724  0 /*atTimeCode*/,
4725  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4726  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4727  '-' /*letter*/,
4728  },
4729  // Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
4730  {
4731  8 /*fromYearTiny*/,
4732  8 /*toYearTiny*/,
4733  4 /*inMonth*/,
4734  5 /*onDayOfWeek*/,
4735  1 /*onDayOfMonth*/,
4736  0 /*atTimeCode*/,
4737  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4738  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4739  'S' /*letter*/,
4740  },
4741  // Rule Syria 2008 only - Nov 1 0:00 0 -
4742  {
4743  8 /*fromYearTiny*/,
4744  8 /*toYearTiny*/,
4745  11 /*inMonth*/,
4746  0 /*onDayOfWeek*/,
4747  1 /*onDayOfMonth*/,
4748  0 /*atTimeCode*/,
4749  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4750  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4751  '-' /*letter*/,
4752  },
4753  // Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
4754  {
4755  9 /*fromYearTiny*/,
4756  9 /*toYearTiny*/,
4757  3 /*inMonth*/,
4758  5 /*onDayOfWeek*/,
4759  0 /*onDayOfMonth*/,
4760  0 /*atTimeCode*/,
4761  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4762  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4763  'S' /*letter*/,
4764  },
4765  // Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
4766  {
4767  10 /*fromYearTiny*/,
4768  11 /*toYearTiny*/,
4769  4 /*inMonth*/,
4770  5 /*onDayOfWeek*/,
4771  1 /*onDayOfMonth*/,
4772  0 /*atTimeCode*/,
4773  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4774  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4775  'S' /*letter*/,
4776  },
4777  // Rule Syria 2012 max - Mar lastFri 0:00 1:00 S
4778  {
4779  12 /*fromYearTiny*/,
4780  126 /*toYearTiny*/,
4781  3 /*inMonth*/,
4782  5 /*onDayOfWeek*/,
4783  0 /*onDayOfMonth*/,
4784  0 /*atTimeCode*/,
4785  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4786  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4787  'S' /*letter*/,
4788  },
4789  // Rule Syria 2009 max - Oct lastFri 0:00 0 -
4790  {
4791  9 /*fromYearTiny*/,
4792  126 /*toYearTiny*/,
4793  10 /*inMonth*/,
4794  5 /*onDayOfWeek*/,
4795  0 /*onDayOfMonth*/,
4796  0 /*atTimeCode*/,
4797  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4798  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4799  '-' /*letter*/,
4800  },
4801 
4802 };
4803 
4804 
4805 
4806 const basic::ZonePolicy kPolicySyria ACE_TIME_PROGMEM = {
4807  kZoneRulesSyria /*rules*/,
4808  nullptr /*letters*/,
4809  12 /*numRules*/,
4810  0 /*numLetters*/,
4811 };
4812 
4813 //---------------------------------------------------------------------------
4814 // Policy name: Taiwan
4815 // Rules: 1
4816 // Memory (8-bit): 15
4817 // Memory (32-bit): 24
4818 //---------------------------------------------------------------------------
4819 
4820 static const basic::ZoneRule kZoneRulesTaiwan[] ACE_TIME_PROGMEM = {
4821  // Rule Taiwan 1979 only - Oct 1 0:00 0 S
4822  {
4823  -21 /*fromYearTiny*/,
4824  -21 /*toYearTiny*/,
4825  10 /*inMonth*/,
4826  0 /*onDayOfWeek*/,
4827  1 /*onDayOfMonth*/,
4828  0 /*atTimeCode*/,
4829  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4830  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4831  'S' /*letter*/,
4832  },
4833 
4834 };
4835 
4836 
4837 
4838 const basic::ZonePolicy kPolicyTaiwan ACE_TIME_PROGMEM = {
4839  kZoneRulesTaiwan /*rules*/,
4840  nullptr /*letters*/,
4841  1 /*numRules*/,
4842  0 /*numLetters*/,
4843 };
4844 
4845 //---------------------------------------------------------------------------
4846 // Policy name: Thule
4847 // Rules: 5
4848 // Memory (8-bit): 51
4849 // Memory (32-bit): 72
4850 //---------------------------------------------------------------------------
4851 
4852 static const basic::ZoneRule kZoneRulesThule[] ACE_TIME_PROGMEM = {
4853  // Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
4854  {
4855  -9 /*fromYearTiny*/,
4856  -8 /*toYearTiny*/,
4857  9 /*inMonth*/,
4858  7 /*onDayOfWeek*/,
4859  0 /*onDayOfMonth*/,
4860  8 /*atTimeCode*/,
4861  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4862  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4863  'S' /*letter*/,
4864  },
4865  // Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
4866  {
4867  -7 /*fromYearTiny*/,
4868  6 /*toYearTiny*/,
4869  4 /*inMonth*/,
4870  7 /*onDayOfWeek*/,
4871  1 /*onDayOfMonth*/,
4872  8 /*atTimeCode*/,
4873  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4874  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4875  'D' /*letter*/,
4876  },
4877  // Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
4878  {
4879  -7 /*fromYearTiny*/,
4880  6 /*toYearTiny*/,
4881  10 /*inMonth*/,
4882  7 /*onDayOfWeek*/,
4883  0 /*onDayOfMonth*/,
4884  8 /*atTimeCode*/,
4885  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4886  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4887  'S' /*letter*/,
4888  },
4889  // Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
4890  {
4891  7 /*fromYearTiny*/,
4892  126 /*toYearTiny*/,
4893  3 /*inMonth*/,
4894  7 /*onDayOfWeek*/,
4895  8 /*onDayOfMonth*/,
4896  8 /*atTimeCode*/,
4897  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4898  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4899  'D' /*letter*/,
4900  },
4901  // Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
4902  {
4903  7 /*fromYearTiny*/,
4904  126 /*toYearTiny*/,
4905  11 /*inMonth*/,
4906  7 /*onDayOfWeek*/,
4907  1 /*onDayOfMonth*/,
4908  8 /*atTimeCode*/,
4909  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4910  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4911  'S' /*letter*/,
4912  },
4913 
4914 };
4915 
4916 
4917 
4918 const basic::ZonePolicy kPolicyThule ACE_TIME_PROGMEM = {
4919  kZoneRulesThule /*rules*/,
4920  nullptr /*letters*/,
4921  5 /*numRules*/,
4922  0 /*numLetters*/,
4923 };
4924 
4925 //---------------------------------------------------------------------------
4926 // Policy name: Tonga
4927 // Rules: 7
4928 // Memory (8-bit): 69
4929 // Memory (32-bit): 96
4930 //---------------------------------------------------------------------------
4931 
4932 static const basic::ZoneRule kZoneRulesTonga[] ACE_TIME_PROGMEM = {
4933  // Anchor: Rule Tonga 2000 only - Mar 19 2:00s 0 -
4934  {
4935  -127 /*fromYearTiny*/,
4936  -127 /*toYearTiny*/,
4937  1 /*inMonth*/,
4938  0 /*onDayOfWeek*/,
4939  1 /*onDayOfMonth*/,
4940  0 /*atTimeCode*/,
4941  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4942  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4943  '-' /*letter*/,
4944  },
4945  // Rule Tonga 1999 only - Oct 7 2:00s 1:00 -
4946  {
4947  -1 /*fromYearTiny*/,
4948  -1 /*toYearTiny*/,
4949  10 /*inMonth*/,
4950  0 /*onDayOfWeek*/,
4951  7 /*onDayOfMonth*/,
4952  8 /*atTimeCode*/,
4953  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4954  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4955  '-' /*letter*/,
4956  },
4957  // Rule Tonga 2000 only - Mar 19 2:00s 0 -
4958  {
4959  0 /*fromYearTiny*/,
4960  0 /*toYearTiny*/,
4961  3 /*inMonth*/,
4962  0 /*onDayOfWeek*/,
4963  19 /*onDayOfMonth*/,
4964  8 /*atTimeCode*/,
4965  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4966  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4967  '-' /*letter*/,
4968  },
4969  // Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
4970  {
4971  0 /*fromYearTiny*/,
4972  1 /*toYearTiny*/,
4973  11 /*inMonth*/,
4974  7 /*onDayOfWeek*/,
4975  1 /*onDayOfMonth*/,
4976  8 /*atTimeCode*/,
4977  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4978  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4979  '-' /*letter*/,
4980  },
4981  // Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
4982  {
4983  1 /*fromYearTiny*/,
4984  2 /*toYearTiny*/,
4985  1 /*inMonth*/,
4986  7 /*onDayOfWeek*/,
4987  0 /*onDayOfMonth*/,
4988  8 /*atTimeCode*/,
4989  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4990  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4991  '-' /*letter*/,
4992  },
4993  // Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
4994  {
4995  16 /*fromYearTiny*/,
4996  16 /*toYearTiny*/,
4997  11 /*inMonth*/,
4998  7 /*onDayOfWeek*/,
4999  1 /*onDayOfMonth*/,
5000  8 /*atTimeCode*/,
5001  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5002  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5003  '-' /*letter*/,
5004  },
5005  // Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
5006  {
5007  17 /*fromYearTiny*/,
5008  17 /*toYearTiny*/,
5009  1 /*inMonth*/,
5010  7 /*onDayOfWeek*/,
5011  15 /*onDayOfMonth*/,
5012  12 /*atTimeCode*/,
5013  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5014  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5015  '-' /*letter*/,
5016  },
5017 
5018 };
5019 
5020 
5021 
5022 const basic::ZonePolicy kPolicyTonga ACE_TIME_PROGMEM = {
5023  kZoneRulesTonga /*rules*/,
5024  nullptr /*letters*/,
5025  7 /*numRules*/,
5026  0 /*numLetters*/,
5027 };
5028 
5029 //---------------------------------------------------------------------------
5030 // Policy name: Tunisia
5031 // Rules: 5
5032 // Memory (8-bit): 51
5033 // Memory (32-bit): 72
5034 //---------------------------------------------------------------------------
5035 
5036 static const basic::ZoneRule kZoneRulesTunisia[] ACE_TIME_PROGMEM = {
5037  // Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
5038  {
5039  -12 /*fromYearTiny*/,
5040  -10 /*toYearTiny*/,
5041  9 /*inMonth*/,
5042  7 /*onDayOfWeek*/,
5043  0 /*onDayOfMonth*/,
5044  0 /*atTimeCode*/,
5045  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5046  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5047  '-' /*letter*/,
5048  },
5049  // Rule Tunisia 2005 only - May 1 0:00s 1:00 S
5050  {
5051  5 /*fromYearTiny*/,
5052  5 /*toYearTiny*/,
5053  5 /*inMonth*/,
5054  0 /*onDayOfWeek*/,
5055  1 /*onDayOfMonth*/,
5056  0 /*atTimeCode*/,
5057  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5058  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5059  'S' /*letter*/,
5060  },
5061  // Rule Tunisia 2005 only - Sep 30 1:00s 0 -
5062  {
5063  5 /*fromYearTiny*/,
5064  5 /*toYearTiny*/,
5065  9 /*inMonth*/,
5066  0 /*onDayOfWeek*/,
5067  30 /*onDayOfMonth*/,
5068  4 /*atTimeCode*/,
5069  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5070  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5071  '-' /*letter*/,
5072  },
5073  // Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
5074  {
5075  6 /*fromYearTiny*/,
5076  8 /*toYearTiny*/,
5077  3 /*inMonth*/,
5078  7 /*onDayOfWeek*/,
5079  0 /*onDayOfMonth*/,
5080  8 /*atTimeCode*/,
5081  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5082  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5083  'S' /*letter*/,
5084  },
5085  // Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
5086  {
5087  6 /*fromYearTiny*/,
5088  8 /*toYearTiny*/,
5089  10 /*inMonth*/,
5090  7 /*onDayOfWeek*/,
5091  0 /*onDayOfMonth*/,
5092  8 /*atTimeCode*/,
5093  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5094  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5095  '-' /*letter*/,
5096  },
5097 
5098 };
5099 
5100 
5101 
5102 const basic::ZonePolicy kPolicyTunisia ACE_TIME_PROGMEM = {
5103  kZoneRulesTunisia /*rules*/,
5104  nullptr /*letters*/,
5105  5 /*numRules*/,
5106  0 /*numLetters*/,
5107 };
5108 
5109 //---------------------------------------------------------------------------
5110 // Policy name: US
5111 // Rules: 5
5112 // Memory (8-bit): 51
5113 // Memory (32-bit): 72
5114 //---------------------------------------------------------------------------
5115 
5116 static const basic::ZoneRule kZoneRulesUS[] ACE_TIME_PROGMEM = {
5117  // Rule US 1967 2006 - Oct lastSun 2:00 0 S
5118  {
5119  -33 /*fromYearTiny*/,
5120  6 /*toYearTiny*/,
5121  10 /*inMonth*/,
5122  7 /*onDayOfWeek*/,
5123  0 /*onDayOfMonth*/,
5124  8 /*atTimeCode*/,
5125  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5126  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5127  'S' /*letter*/,
5128  },
5129  // Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
5130  {
5131  -24 /*fromYearTiny*/,
5132  -14 /*toYearTiny*/,
5133  4 /*inMonth*/,
5134  7 /*onDayOfWeek*/,
5135  0 /*onDayOfMonth*/,
5136  8 /*atTimeCode*/,
5137  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5138  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5139  'D' /*letter*/,
5140  },
5141  // Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
5142  {
5143  -13 /*fromYearTiny*/,
5144  6 /*toYearTiny*/,
5145  4 /*inMonth*/,
5146  7 /*onDayOfWeek*/,
5147  1 /*onDayOfMonth*/,
5148  8 /*atTimeCode*/,
5149  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5150  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5151  'D' /*letter*/,
5152  },
5153  // Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
5154  {
5155  7 /*fromYearTiny*/,
5156  126 /*toYearTiny*/,
5157  3 /*inMonth*/,
5158  7 /*onDayOfWeek*/,
5159  8 /*onDayOfMonth*/,
5160  8 /*atTimeCode*/,
5161  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5162  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5163  'D' /*letter*/,
5164  },
5165  // Rule US 2007 max - Nov Sun>=1 2:00 0 S
5166  {
5167  7 /*fromYearTiny*/,
5168  126 /*toYearTiny*/,
5169  11 /*inMonth*/,
5170  7 /*onDayOfWeek*/,
5171  1 /*onDayOfMonth*/,
5172  8 /*atTimeCode*/,
5173  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5174  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5175  'S' /*letter*/,
5176  },
5177 
5178 };
5179 
5180 
5181 
5182 const basic::ZonePolicy kPolicyUS ACE_TIME_PROGMEM = {
5183  kZoneRulesUS /*rules*/,
5184  nullptr /*letters*/,
5185  5 /*numRules*/,
5186  0 /*numLetters*/,
5187 };
5188 
5189 //---------------------------------------------------------------------------
5190 // Policy name: Uruguay
5191 // Rules: 6
5192 // Memory (8-bit): 60
5193 // Memory (32-bit): 84
5194 //---------------------------------------------------------------------------
5195 
5196 static const basic::ZoneRule kZoneRulesUruguay[] ACE_TIME_PROGMEM = {
5197  // Rule Uruguay 1993 only - Feb 28 0:00 0 -
5198  {
5199  -7 /*fromYearTiny*/,
5200  -7 /*toYearTiny*/,
5201  2 /*inMonth*/,
5202  0 /*onDayOfWeek*/,
5203  28 /*onDayOfMonth*/,
5204  0 /*atTimeCode*/,
5205  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5206  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5207  '-' /*letter*/,
5208  },
5209  // Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
5210  {
5211  4 /*fromYearTiny*/,
5212  4 /*toYearTiny*/,
5213  9 /*inMonth*/,
5214  0 /*onDayOfWeek*/,
5215  19 /*onDayOfMonth*/,
5216  0 /*atTimeCode*/,
5217  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5218  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5219  '-' /*letter*/,
5220  },
5221  // Rule Uruguay 2005 only - Mar 27 2:00 0 -
5222  {
5223  5 /*fromYearTiny*/,
5224  5 /*toYearTiny*/,
5225  3 /*inMonth*/,
5226  0 /*onDayOfWeek*/,
5227  27 /*onDayOfMonth*/,
5228  8 /*atTimeCode*/,
5229  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5230  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5231  '-' /*letter*/,
5232  },
5233  // Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
5234  {
5235  5 /*fromYearTiny*/,
5236  5 /*toYearTiny*/,
5237  10 /*inMonth*/,
5238  0 /*onDayOfWeek*/,
5239  9 /*onDayOfMonth*/,
5240  8 /*atTimeCode*/,
5241  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5242  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5243  '-' /*letter*/,
5244  },
5245  // Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
5246  {
5247  6 /*fromYearTiny*/,
5248  15 /*toYearTiny*/,
5249  3 /*inMonth*/,
5250  7 /*onDayOfWeek*/,
5251  8 /*onDayOfMonth*/,
5252  8 /*atTimeCode*/,
5253  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5254  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5255  '-' /*letter*/,
5256  },
5257  // Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
5258  {
5259  6 /*fromYearTiny*/,
5260  14 /*toYearTiny*/,
5261  10 /*inMonth*/,
5262  7 /*onDayOfWeek*/,
5263  1 /*onDayOfMonth*/,
5264  8 /*atTimeCode*/,
5265  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5266  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5267  '-' /*letter*/,
5268  },
5269 
5270 };
5271 
5272 
5273 
5274 const basic::ZonePolicy kPolicyUruguay ACE_TIME_PROGMEM = {
5275  kZoneRulesUruguay /*rules*/,
5276  nullptr /*letters*/,
5277  6 /*numRules*/,
5278  0 /*numLetters*/,
5279 };
5280 
5281 //---------------------------------------------------------------------------
5282 // Policy name: Vanuatu
5283 // Rules: 1
5284 // Memory (8-bit): 15
5285 // Memory (32-bit): 24
5286 //---------------------------------------------------------------------------
5287 
5288 static const basic::ZoneRule kZoneRulesVanuatu[] ACE_TIME_PROGMEM = {
5289  // Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
5290  {
5291  -8 /*fromYearTiny*/,
5292  -7 /*toYearTiny*/,
5293  1 /*inMonth*/,
5294  6 /*onDayOfWeek*/,
5295  22 /*onDayOfMonth*/,
5296  96 /*atTimeCode*/,
5297  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5298  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5299  '-' /*letter*/,
5300  },
5301 
5302 };
5303 
5304 
5305 
5306 const basic::ZonePolicy kPolicyVanuatu ACE_TIME_PROGMEM = {
5307  kZoneRulesVanuatu /*rules*/,
5308  nullptr /*letters*/,
5309  1 /*numRules*/,
5310  0 /*numLetters*/,
5311 };
5312 
5313 //---------------------------------------------------------------------------
5314 // Policy name: Winn
5315 // Rules: 3
5316 // Memory (8-bit): 33
5317 // Memory (32-bit): 48
5318 //---------------------------------------------------------------------------
5319 
5320 static const basic::ZoneRule kZoneRulesWinn[] ACE_TIME_PROGMEM = {
5321  // Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
5322  {
5323  -34 /*fromYearTiny*/,
5324  -14 /*toYearTiny*/,
5325  4 /*inMonth*/,
5326  7 /*onDayOfWeek*/,
5327  0 /*onDayOfMonth*/,
5328  8 /*atTimeCode*/,
5329  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5330  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5331  'D' /*letter*/,
5332  },
5333  // Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
5334  {
5335  -34 /*fromYearTiny*/,
5336  5 /*toYearTiny*/,
5337  10 /*inMonth*/,
5338  7 /*onDayOfWeek*/,
5339  0 /*onDayOfMonth*/,
5340  8 /*atTimeCode*/,
5341  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5342  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5343  'S' /*letter*/,
5344  },
5345  // Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
5346  {
5347  -13 /*fromYearTiny*/,
5348  5 /*toYearTiny*/,
5349  4 /*inMonth*/,
5350  7 /*onDayOfWeek*/,
5351  1 /*onDayOfMonth*/,
5352  8 /*atTimeCode*/,
5353  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5354  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5355  'D' /*letter*/,
5356  },
5357 
5358 };
5359 
5360 
5361 
5362 const basic::ZonePolicy kPolicyWinn ACE_TIME_PROGMEM = {
5363  kZoneRulesWinn /*rules*/,
5364  nullptr /*letters*/,
5365  3 /*numRules*/,
5366  0 /*numLetters*/,
5367 };
5368 
5369 //---------------------------------------------------------------------------
5370 // Policy name: Zion
5371 // Rules: 24
5372 // Memory (8-bit): 222
5373 // Memory (32-bit): 300
5374 //---------------------------------------------------------------------------
5375 
5376 static const basic::ZoneRule kZoneRulesZion[] ACE_TIME_PROGMEM = {
5377  // Rule Zion 1998 only - Sep 6 0:00 0 S
5378  {
5379  -2 /*fromYearTiny*/,
5380  -2 /*toYearTiny*/,
5381  9 /*inMonth*/,
5382  0 /*onDayOfWeek*/,
5383  6 /*onDayOfMonth*/,
5384  0 /*atTimeCode*/,
5385  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5386  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5387  'S' /*letter*/,
5388  },
5389  // Rule Zion 1999 only - Apr 2 2:00 1:00 D
5390  {
5391  -1 /*fromYearTiny*/,
5392  -1 /*toYearTiny*/,
5393  4 /*inMonth*/,
5394  0 /*onDayOfWeek*/,
5395  2 /*onDayOfMonth*/,
5396  8 /*atTimeCode*/,
5397  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5398  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5399  'D' /*letter*/,
5400  },
5401  // Rule Zion 1999 only - Sep 3 2:00 0 S
5402  {
5403  -1 /*fromYearTiny*/,
5404  -1 /*toYearTiny*/,
5405  9 /*inMonth*/,
5406  0 /*onDayOfWeek*/,
5407  3 /*onDayOfMonth*/,
5408  8 /*atTimeCode*/,
5409  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5410  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5411  'S' /*letter*/,
5412  },
5413  // Rule Zion 2000 only - Apr 14 2:00 1:00 D
5414  {
5415  0 /*fromYearTiny*/,
5416  0 /*toYearTiny*/,
5417  4 /*inMonth*/,
5418  0 /*onDayOfWeek*/,
5419  14 /*onDayOfMonth*/,
5420  8 /*atTimeCode*/,
5421  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5422  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5423  'D' /*letter*/,
5424  },
5425  // Rule Zion 2000 only - Oct 6 1:00 0 S
5426  {
5427  0 /*fromYearTiny*/,
5428  0 /*toYearTiny*/,
5429  10 /*inMonth*/,
5430  0 /*onDayOfWeek*/,
5431  6 /*onDayOfMonth*/,
5432  4 /*atTimeCode*/,
5433  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5434  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5435  'S' /*letter*/,
5436  },
5437  // Rule Zion 2001 only - Apr 9 1:00 1:00 D
5438  {
5439  1 /*fromYearTiny*/,
5440  1 /*toYearTiny*/,
5441  4 /*inMonth*/,
5442  0 /*onDayOfWeek*/,
5443  9 /*onDayOfMonth*/,
5444  4 /*atTimeCode*/,
5445  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5446  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5447  'D' /*letter*/,
5448  },
5449  // Rule Zion 2001 only - Sep 24 1:00 0 S
5450  {
5451  1 /*fromYearTiny*/,
5452  1 /*toYearTiny*/,
5453  9 /*inMonth*/,
5454  0 /*onDayOfWeek*/,
5455  24 /*onDayOfMonth*/,
5456  4 /*atTimeCode*/,
5457  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5458  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5459  'S' /*letter*/,
5460  },
5461  // Rule Zion 2002 only - Mar 29 1:00 1:00 D
5462  {
5463  2 /*fromYearTiny*/,
5464  2 /*toYearTiny*/,
5465  3 /*inMonth*/,
5466  0 /*onDayOfWeek*/,
5467  29 /*onDayOfMonth*/,
5468  4 /*atTimeCode*/,
5469  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5470  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5471  'D' /*letter*/,
5472  },
5473  // Rule Zion 2002 only - Oct 7 1:00 0 S
5474  {
5475  2 /*fromYearTiny*/,
5476  2 /*toYearTiny*/,
5477  10 /*inMonth*/,
5478  0 /*onDayOfWeek*/,
5479  7 /*onDayOfMonth*/,
5480  4 /*atTimeCode*/,
5481  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5482  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5483  'S' /*letter*/,
5484  },
5485  // Rule Zion 2003 only - Mar 28 1:00 1:00 D
5486  {
5487  3 /*fromYearTiny*/,
5488  3 /*toYearTiny*/,
5489  3 /*inMonth*/,
5490  0 /*onDayOfWeek*/,
5491  28 /*onDayOfMonth*/,
5492  4 /*atTimeCode*/,
5493  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5494  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5495  'D' /*letter*/,
5496  },
5497  // Rule Zion 2003 only - Oct 3 1:00 0 S
5498  {
5499  3 /*fromYearTiny*/,
5500  3 /*toYearTiny*/,
5501  10 /*inMonth*/,
5502  0 /*onDayOfWeek*/,
5503  3 /*onDayOfMonth*/,
5504  4 /*atTimeCode*/,
5505  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5506  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5507  'S' /*letter*/,
5508  },
5509  // Rule Zion 2004 only - Apr 7 1:00 1:00 D
5510  {
5511  4 /*fromYearTiny*/,
5512  4 /*toYearTiny*/,
5513  4 /*inMonth*/,
5514  0 /*onDayOfWeek*/,
5515  7 /*onDayOfMonth*/,
5516  4 /*atTimeCode*/,
5517  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5518  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5519  'D' /*letter*/,
5520  },
5521  // Rule Zion 2004 only - Sep 22 1:00 0 S
5522  {
5523  4 /*fromYearTiny*/,
5524  4 /*toYearTiny*/,
5525  9 /*inMonth*/,
5526  0 /*onDayOfWeek*/,
5527  22 /*onDayOfMonth*/,
5528  4 /*atTimeCode*/,
5529  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5530  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5531  'S' /*letter*/,
5532  },
5533  // Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D
5534  {
5535  5 /*fromYearTiny*/,
5536  12 /*toYearTiny*/,
5537  4 /*inMonth*/,
5538  5 /*onDayOfWeek*/,
5539  -1 /*onDayOfMonth*/,
5540  8 /*atTimeCode*/,
5541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5542  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5543  'D' /*letter*/,
5544  },
5545  // Rule Zion 2005 only - Oct 9 2:00 0 S
5546  {
5547  5 /*fromYearTiny*/,
5548  5 /*toYearTiny*/,
5549  10 /*inMonth*/,
5550  0 /*onDayOfWeek*/,
5551  9 /*onDayOfMonth*/,
5552  8 /*atTimeCode*/,
5553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5554  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5555  'S' /*letter*/,
5556  },
5557  // Rule Zion 2006 only - Oct 1 2:00 0 S
5558  {
5559  6 /*fromYearTiny*/,
5560  6 /*toYearTiny*/,
5561  10 /*inMonth*/,
5562  0 /*onDayOfWeek*/,
5563  1 /*onDayOfMonth*/,
5564  8 /*atTimeCode*/,
5565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5567  'S' /*letter*/,
5568  },
5569  // Rule Zion 2007 only - Sep 16 2:00 0 S
5570  {
5571  7 /*fromYearTiny*/,
5572  7 /*toYearTiny*/,
5573  9 /*inMonth*/,
5574  0 /*onDayOfWeek*/,
5575  16 /*onDayOfMonth*/,
5576  8 /*atTimeCode*/,
5577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5578  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5579  'S' /*letter*/,
5580  },
5581  // Rule Zion 2008 only - Oct 5 2:00 0 S
5582  {
5583  8 /*fromYearTiny*/,
5584  8 /*toYearTiny*/,
5585  10 /*inMonth*/,
5586  0 /*onDayOfWeek*/,
5587  5 /*onDayOfMonth*/,
5588  8 /*atTimeCode*/,
5589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5591  'S' /*letter*/,
5592  },
5593  // Rule Zion 2009 only - Sep 27 2:00 0 S
5594  {
5595  9 /*fromYearTiny*/,
5596  9 /*toYearTiny*/,
5597  9 /*inMonth*/,
5598  0 /*onDayOfWeek*/,
5599  27 /*onDayOfMonth*/,
5600  8 /*atTimeCode*/,
5601  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5602  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5603  'S' /*letter*/,
5604  },
5605  // Rule Zion 2010 only - Sep 12 2:00 0 S
5606  {
5607  10 /*fromYearTiny*/,
5608  10 /*toYearTiny*/,
5609  9 /*inMonth*/,
5610  0 /*onDayOfWeek*/,
5611  12 /*onDayOfMonth*/,
5612  8 /*atTimeCode*/,
5613  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5614  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5615  'S' /*letter*/,
5616  },
5617  // Rule Zion 2011 only - Oct 2 2:00 0 S
5618  {
5619  11 /*fromYearTiny*/,
5620  11 /*toYearTiny*/,
5621  10 /*inMonth*/,
5622  0 /*onDayOfWeek*/,
5623  2 /*onDayOfMonth*/,
5624  8 /*atTimeCode*/,
5625  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5626  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5627  'S' /*letter*/,
5628  },
5629  // Rule Zion 2012 only - Sep 23 2:00 0 S
5630  {
5631  12 /*fromYearTiny*/,
5632  12 /*toYearTiny*/,
5633  9 /*inMonth*/,
5634  0 /*onDayOfWeek*/,
5635  23 /*onDayOfMonth*/,
5636  8 /*atTimeCode*/,
5637  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5638  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5639  'S' /*letter*/,
5640  },
5641  // Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
5642  {
5643  13 /*fromYearTiny*/,
5644  126 /*toYearTiny*/,
5645  3 /*inMonth*/,
5646  5 /*onDayOfWeek*/,
5647  23 /*onDayOfMonth*/,
5648  8 /*atTimeCode*/,
5649  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5650  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5651  'D' /*letter*/,
5652  },
5653  // Rule Zion 2013 max - Oct lastSun 2:00 0 S
5654  {
5655  13 /*fromYearTiny*/,
5656  126 /*toYearTiny*/,
5657  10 /*inMonth*/,
5658  7 /*onDayOfWeek*/,
5659  0 /*onDayOfMonth*/,
5660  8 /*atTimeCode*/,
5661  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5662  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5663  'S' /*letter*/,
5664  },
5665 
5666 };
5667 
5668 
5669 
5670 const basic::ZonePolicy kPolicyZion ACE_TIME_PROGMEM = {
5671  kZoneRulesZion /*rules*/,
5672  nullptr /*letters*/,
5673  24 /*numRules*/,
5674  0 /*numLetters*/,
5675 };
5676 
5677 
5678 
5679 }
5680 }
compat.h