Skip to main content

endf_mat/
mat.rs

1//! ENDF MAT (material) number lookup.
2//!
3//! MAT numbers are the ENDF material identifiers used to retrieve evaluated
4//! nuclear data files. This table covers 535 ground-state isotopes from the
5//! ENDF/B-VIII.0 neutrons sublibrary.
6//!
7//! Data source: PLEIADES `neutrons.list` (ENDF/B-VIII.0), metastable states excluded.
8
9/// Look up the ENDF MAT number for a ground-state isotope (Z, A).
10///
11/// Returns `None` if the isotope is not in the ENDF/B-VIII.0 neutrons sublibrary.
12///
13/// # Examples
14/// ```
15/// assert_eq!(endf_mat::mat_number(92, 235), Some(9228));
16/// assert_eq!(endf_mat::mat_number(92, 238), Some(9237));
17/// assert_eq!(endf_mat::mat_number(26, 56), Some(2631));
18/// ```
19pub fn mat_number(z: u32, a: u32) -> Option<u32> {
20    // Binary search on (Z, A) key. Table is sorted by Z then A.
21    ENDF_MAT_TABLE
22        .binary_search_by(|&(tz, ta, _)| (tz, ta).cmp(&(z, a)))
23        .ok()
24        .map(|idx| ENDF_MAT_TABLE[idx].2)
25}
26
27/// Reverse lookup: MAT number → (Z, A).
28///
29/// Returns `None` if the MAT number is not in the table.
30///
31/// # Examples
32/// ```
33/// assert_eq!(endf_mat::isotope_from_mat(9228), Some((92, 235)));
34/// assert_eq!(endf_mat::isotope_from_mat(9999), None);
35/// ```
36pub fn isotope_from_mat(mat: u32) -> Option<(u32, u32)> {
37    // Linear scan — reverse lookups are rare.
38    ENDF_MAT_TABLE
39        .iter()
40        .find(|&&(_, _, m)| m == mat)
41        .map(|&(z, a, _)| (z, a))
42}
43
44/// All mass numbers with ENDF/B-VIII.0 evaluations for element Z.
45///
46/// Returns every A value in the MAT table for the given atomic number Z,
47/// including synthetic and transuranic isotopes. Returns an empty `Vec`
48/// for elements with no evaluations.
49///
50/// # Examples
51/// ```
52/// let pu = endf_mat::known_isotopes(94);
53/// assert!(pu.contains(&239));
54///
55/// let tc = endf_mat::known_isotopes(43);
56/// assert_eq!(tc, vec![98, 99]);
57/// ```
58pub fn known_isotopes(z: u32) -> Vec<u32> {
59    let start = ENDF_MAT_TABLE.partition_point(|&(tz, _, _)| tz < z);
60    ENDF_MAT_TABLE[start..]
61        .iter()
62        .take_while(|&&(tz, _, _)| tz == z)
63        .map(|&(_, a, _)| a)
64        .collect()
65}
66
67/// Whether the ENDF/B-VIII.0 neutrons sublibrary has an evaluation for (Z, A).
68///
69/// # Examples
70/// ```
71/// assert!(endf_mat::has_endf_evaluation(94, 239));  // Pu-239
72/// assert!(!endf_mat::has_endf_evaluation(94, 999)); // no such isotope
73/// ```
74pub fn has_endf_evaluation(z: u32, a: u32) -> bool {
75    mat_number(z, a).is_some()
76}
77
78/// All mass numbers with TENDL-2023 evaluations for element Z.
79///
80/// Counterpart to [`known_isotopes`] for the TENDL-2023 table (~2,300
81/// ground-state isotopes; substantially more coverage than ENDF/B-VIII.0).
82///
83/// # Examples
84/// ```
85/// let fm = endf_mat::known_isotopes_tendl(100);
86/// assert!(fm.contains(&247));        // Fm-247: TENDL-only
87/// assert!(!endf_mat::known_isotopes(100).contains(&247));
88/// ```
89pub fn known_isotopes_tendl(z: u32) -> Vec<u32> {
90    let start = TENDL_2023_MAT_TABLE.partition_point(|&(tz, _, _)| tz < z);
91    TENDL_2023_MAT_TABLE[start..]
92        .iter()
93        .take_while(|&&(tz, _, _)| tz == z)
94        .map(|&(_, a, _)| a)
95        .collect()
96}
97
98/// Whether the TENDL-2023 neutrons sublibrary has an evaluation for (Z, A).
99///
100/// # Examples
101/// ```
102/// assert!(endf_mat::has_endf_evaluation_tendl(100, 247)); // Fm-247: TENDL-only
103/// assert!(!endf_mat::has_endf_evaluation(100, 247));      // not in ENDF/B-VIII.0
104/// ```
105pub fn has_endf_evaluation_tendl(z: u32, a: u32) -> bool {
106    mat_number_tendl(z, a).is_some()
107}
108
109/// All mass numbers with CENDL-3.2 evaluations for element Z.
110///
111/// Counterpart to [`known_isotopes`] for the CENDL-3.2 table (258
112/// ground-state isotopes plus free neutron; smaller scope than ENDF/B-VIII.0). CENDL-3.2
113/// has no Br evaluations — `known_isotopes_cendl(35)` returns an empty
114/// `Vec`. Must be used wherever the GUI surfaces selectable isotopes
115/// for the *currently selected* library.
116///
117/// # Examples
118/// ```
119/// let ba = endf_mat::known_isotopes_cendl(56);
120/// assert_eq!(ba, vec![130, 132, 134, 135, 136, 137, 138]);
121///
122/// let br = endf_mat::known_isotopes_cendl(35);
123/// assert!(br.is_empty()); // CENDL-3.2 has no Br evaluations
124/// ```
125pub fn known_isotopes_cendl(z: u32) -> Vec<u32> {
126    let start = CENDL_3_2_MAT_TABLE.partition_point(|&(tz, _, _)| tz < z);
127    CENDL_3_2_MAT_TABLE[start..]
128        .iter()
129        .take_while(|&&(tz, _, _)| tz == z)
130        .map(|&(_, a, _)| a)
131        .collect()
132}
133
134/// Whether the CENDL-3.2 neutrons sublibrary has an evaluation for (Z, A).
135///
136/// # Examples
137/// ```
138/// assert!(endf_mat::has_endf_evaluation_cendl(56, 138));  // Ba-138
139/// assert!(!endf_mat::has_endf_evaluation_cendl(35, 79));  // Br-79: not in CENDL-3.2
140/// ```
141pub fn has_endf_evaluation_cendl(z: u32, a: u32) -> bool {
142    mat_number_cendl(z, a).is_some()
143}
144
145// Auto-generated from ENDF/B-VIII.0 neutrons.list
146// 535 ground-state isotopes (metastable states excluded)
147// Format: (Z, A, MAT) — sorted by (Z, A)
148#[rustfmt::skip]
149static ENDF_MAT_TABLE: &[(u32, u32, u32)] = &[
150    (0, 1, 25),
151    (1, 1, 125),
152    (1, 2, 128),
153    (1, 3, 131),
154    (2, 3, 225),
155    (2, 4, 228),
156    (3, 6, 325),
157    (3, 7, 328),
158    (4, 7, 419),
159    (4, 9, 425),
160    (5, 10, 525),
161    (5, 11, 528),
162    (6, 12, 625),
163    (6, 13, 628),
164    (7, 14, 725),
165    (7, 15, 728),
166    (8, 16, 825),
167    (8, 17, 828),
168    (8, 18, 831),
169    (9, 19, 925),
170    (10, 20, 1025),
171    (10, 21, 1028),
172    (10, 22, 1031),
173    (11, 22, 1122),
174    (11, 23, 1125),
175    (12, 24, 1225),
176    (12, 25, 1228),
177    (12, 26, 1231),
178    (13, 27, 1325),
179    (14, 28, 1425),
180    (14, 29, 1428),
181    (14, 30, 1431),
182    (14, 31, 1434),
183    (14, 32, 1437),
184    (15, 31, 1525),
185    (16, 32, 1625),
186    (16, 33, 1628),
187    (16, 34, 1631),
188    (16, 35, 1634),
189    (16, 36, 1637),
190    (17, 35, 1725),
191    (17, 36, 1728),
192    (17, 37, 1731),
193    (18, 36, 1825),
194    (18, 37, 1828),
195    (18, 38, 1831),
196    (18, 39, 1834),
197    (18, 40, 1837),
198    (18, 41, 1840),
199    (19, 39, 1925),
200    (19, 40, 1928),
201    (19, 41, 1931),
202    (20, 40, 2025),
203    (20, 41, 2028),
204    (20, 42, 2031),
205    (20, 43, 2034),
206    (20, 44, 2037),
207    (20, 45, 2040),
208    (20, 46, 2043),
209    (20, 47, 2046),
210    (20, 48, 2049),
211    (21, 45, 2125),
212    (22, 46, 2225),
213    (22, 47, 2228),
214    (22, 48, 2231),
215    (22, 49, 2234),
216    (22, 50, 2237),
217    (23, 49, 2322),
218    (23, 50, 2325),
219    (23, 51, 2328),
220    (24, 50, 2425),
221    (24, 51, 2428),
222    (24, 52, 2431),
223    (24, 53, 2434),
224    (24, 54, 2437),
225    (25, 54, 2522),
226    (25, 55, 2525),
227    (26, 54, 2625),
228    (26, 55, 2628),
229    (26, 56, 2631),
230    (26, 57, 2634),
231    (26, 58, 2637),
232    (27, 58, 2722),
233    (27, 59, 2725),
234    (28, 58, 2825),
235    (28, 59, 2828),
236    (28, 60, 2831),
237    (28, 61, 2834),
238    (28, 62, 2837),
239    (28, 63, 2840),
240    (28, 64, 2843),
241    (29, 63, 2925),
242    (29, 64, 2928),
243    (29, 65, 2931),
244    (30, 64, 3025),
245    (30, 65, 3028),
246    (30, 66, 3031),
247    (30, 67, 3034),
248    (30, 68, 3037),
249    (30, 69, 3040),
250    (30, 70, 3043),
251    (31, 69, 3125),
252    (31, 70, 3128),
253    (31, 71, 3131),
254    (32, 70, 3225),
255    (32, 71, 3228),
256    (32, 72, 3231),
257    (32, 73, 3234),
258    (32, 74, 3237),
259    (32, 75, 3240),
260    (32, 76, 3243),
261    (33, 73, 3319),
262    (33, 74, 3322),
263    (33, 75, 3325),
264    (34, 74, 3425),
265    (34, 75, 3428),
266    (34, 76, 3431),
267    (34, 77, 3434),
268    (34, 78, 3437),
269    (34, 79, 3440),
270    (34, 80, 3443),
271    (34, 81, 3446),
272    (34, 82, 3449),
273    (35, 79, 3525),
274    (35, 80, 3528),
275    (35, 81, 3531),
276    (36, 78, 3625),
277    (36, 79, 3628),
278    (36, 80, 3631),
279    (36, 81, 3634),
280    (36, 82, 3637),
281    (36, 83, 3640),
282    (36, 84, 3643),
283    (36, 85, 3646),
284    (36, 86, 3649),
285    (37, 85, 3725),
286    (37, 86, 3728),
287    (37, 87, 3731),
288    (38, 84, 3825),
289    (38, 85, 3828),
290    (38, 86, 3831),
291    (38, 87, 3834),
292    (38, 88, 3837),
293    (38, 89, 3840),
294    (38, 90, 3843),
295    (39, 89, 3925),
296    (39, 90, 3928),
297    (39, 91, 3931),
298    (40, 90, 4025),
299    (40, 91, 4028),
300    (40, 92, 4031),
301    (40, 93, 4034),
302    (40, 94, 4037),
303    (40, 95, 4040),
304    (40, 96, 4043),
305    (41, 93, 4125),
306    (41, 94, 4128),
307    (41, 95, 4131),
308    (42, 92, 4225),
309    (42, 93, 4228),
310    (42, 94, 4231),
311    (42, 95, 4234),
312    (42, 96, 4237),
313    (42, 97, 4240),
314    (42, 98, 4243),
315    (42, 99, 4246),
316    (42, 100, 4249),
317    (43, 98, 4322),
318    (43, 99, 4325),
319    (44, 96, 4425),
320    (44, 97, 4428),
321    (44, 98, 4431),
322    (44, 99, 4434),
323    (44, 100, 4437),
324    (44, 101, 4440),
325    (44, 102, 4443),
326    (44, 103, 4446),
327    (44, 104, 4449),
328    (44, 105, 4452),
329    (44, 106, 4455),
330    (45, 103, 4525),
331    (45, 104, 4528),
332    (45, 105, 4531),
333    (46, 102, 4625),
334    (46, 103, 4628),
335    (46, 104, 4631),
336    (46, 105, 4634),
337    (46, 106, 4637),
338    (46, 107, 4640),
339    (46, 108, 4643),
340    (46, 109, 4646),
341    (46, 110, 4649),
342    (47, 107, 4725),
343    (47, 108, 4728),
344    (47, 109, 4731),
345    (47, 111, 4737),
346    (47, 112, 4740),
347    (47, 113, 4743),
348    (47, 114, 4746),
349    (47, 115, 4749),
350    (47, 116, 4752),
351    (47, 117, 4755),
352    (48, 106, 4825),
353    (48, 107, 4828),
354    (48, 108, 4831),
355    (48, 109, 4834),
356    (48, 110, 4837),
357    (48, 111, 4840),
358    (48, 112, 4843),
359    (48, 113, 4846),
360    (48, 114, 4849),
361    (48, 116, 4855),
362    (49, 113, 4925),
363    (49, 114, 4928),
364    (49, 115, 4931),
365    (50, 112, 5025),
366    (50, 113, 5028),
367    (50, 114, 5031),
368    (50, 115, 5034),
369    (50, 116, 5037),
370    (50, 117, 5040),
371    (50, 118, 5043),
372    (50, 119, 5046),
373    (50, 120, 5049),
374    (50, 122, 5055),
375    (50, 123, 5058),
376    (50, 124, 5061),
377    (50, 125, 5064),
378    (50, 126, 5067),
379    (51, 121, 5125),
380    (51, 122, 5128),
381    (51, 123, 5131),
382    (51, 124, 5134),
383    (51, 125, 5137),
384    (51, 126, 5140),
385    (52, 120, 5225),
386    (52, 121, 5228),
387    (52, 122, 5231),
388    (52, 123, 5234),
389    (52, 124, 5237),
390    (52, 125, 5240),
391    (52, 126, 5243),
392    (52, 128, 5249),
393    (52, 130, 5255),
394    (52, 131, 5258),
395    (52, 132, 5261),
396    (53, 127, 5325),
397    (53, 128, 5328),
398    (53, 129, 5331),
399    (53, 130, 5334),
400    (53, 131, 5337),
401    (53, 132, 5340),
402    (53, 133, 5343),
403    (53, 134, 5346),
404    (53, 135, 5349),
405    (54, 123, 5422),
406    (54, 124, 5425),
407    (54, 125, 5428),
408    (54, 126, 5431),
409    (54, 127, 5434),
410    (54, 128, 5437),
411    (54, 129, 5440),
412    (54, 130, 5443),
413    (54, 131, 5446),
414    (54, 132, 5449),
415    (54, 133, 5452),
416    (54, 134, 5455),
417    (54, 135, 5458),
418    (54, 136, 5461),
419    (55, 133, 5525),
420    (55, 134, 5528),
421    (55, 135, 5531),
422    (55, 136, 5534),
423    (55, 137, 5537),
424    (56, 130, 5625),
425    (56, 131, 5628),
426    (56, 132, 5631),
427    (56, 133, 5634),
428    (56, 134, 5637),
429    (56, 135, 5640),
430    (56, 136, 5643),
431    (56, 137, 5646),
432    (56, 138, 5649),
433    (56, 139, 5652),
434    (56, 140, 5655),
435    (57, 138, 5725),
436    (57, 139, 5728),
437    (57, 140, 5731),
438    (58, 136, 5825),
439    (58, 137, 5828),
440    (58, 138, 5831),
441    (58, 139, 5834),
442    (58, 140, 5837),
443    (58, 141, 5840),
444    (58, 142, 5843),
445    (58, 143, 5846),
446    (58, 144, 5849),
447    (59, 141, 5925),
448    (59, 142, 5928),
449    (59, 143, 5931),
450    (60, 142, 6025),
451    (60, 143, 6028),
452    (60, 144, 6031),
453    (60, 145, 6034),
454    (60, 146, 6037),
455    (60, 147, 6040),
456    (60, 148, 6043),
457    (60, 149, 6046),
458    (60, 150, 6049),
459    (61, 143, 6137),
460    (61, 144, 6140),
461    (61, 145, 6143),
462    (61, 146, 6146),
463    (61, 147, 6149),
464    (61, 148, 6152),
465    (61, 149, 6155),
466    (61, 150, 6158),
467    (61, 151, 6161),
468    (62, 144, 6225),
469    (62, 145, 6228),
470    (62, 146, 6231),
471    (62, 147, 6234),
472    (62, 148, 6237),
473    (62, 149, 6240),
474    (62, 150, 6243),
475    (62, 151, 6246),
476    (62, 152, 6249),
477    (62, 153, 6252),
478    (62, 154, 6255),
479    (63, 151, 6325),
480    (63, 152, 6328),
481    (63, 153, 6331),
482    (63, 154, 6334),
483    (63, 155, 6337),
484    (63, 156, 6340),
485    (63, 157, 6343),
486    (64, 152, 6425),
487    (64, 153, 6428),
488    (64, 154, 6431),
489    (64, 155, 6434),
490    (64, 156, 6437),
491    (64, 157, 6440),
492    (64, 158, 6443),
493    (64, 159, 6446),
494    (64, 160, 6449),
495    (65, 158, 6522),
496    (65, 159, 6525),
497    (65, 160, 6528),
498    (65, 161, 6531),
499    (66, 154, 6619),
500    (66, 155, 6622),
501    (66, 156, 6625),
502    (66, 157, 6628),
503    (66, 158, 6631),
504    (66, 159, 6634),
505    (66, 160, 6637),
506    (66, 161, 6640),
507    (66, 162, 6643),
508    (66, 163, 6646),
509    (66, 164, 6649),
510    (67, 165, 6725),
511    (68, 162, 6825),
512    (68, 163, 6828),
513    (68, 164, 6831),
514    (68, 165, 6834),
515    (68, 166, 6837),
516    (68, 167, 6840),
517    (68, 168, 6843),
518    (68, 169, 6846),
519    (68, 170, 6849),
520    (69, 168, 6922),
521    (69, 169, 6925),
522    (69, 170, 6928),
523    (69, 171, 6931),
524    (70, 168, 7025),
525    (70, 169, 7028),
526    (70, 170, 7031),
527    (70, 171, 7034),
528    (70, 172, 7037),
529    (70, 173, 7040),
530    (70, 174, 7043),
531    (70, 175, 7046),
532    (70, 176, 7049),
533    (71, 175, 7125),
534    (71, 176, 7128),
535    (72, 174, 7225),
536    (72, 175, 7228),
537    (72, 176, 7231),
538    (72, 177, 7234),
539    (72, 178, 7237),
540    (72, 179, 7240),
541    (72, 180, 7243),
542    (72, 181, 7246),
543    (72, 182, 7249),
544    (73, 180, 7325),
545    (73, 181, 7328),
546    (73, 182, 7331),
547    (74, 180, 7425),
548    (74, 181, 7428),
549    (74, 182, 7431),
550    (74, 183, 7434),
551    (74, 184, 7437),
552    (74, 185, 7440),
553    (74, 186, 7443),
554    (75, 185, 7525),
555    (75, 187, 7531),
556    (76, 184, 7625),
557    (76, 185, 7628),
558    (76, 186, 7631),
559    (76, 187, 7634),
560    (76, 188, 7637),
561    (76, 189, 7640),
562    (76, 190, 7643),
563    (76, 191, 7646),
564    (76, 192, 7649),
565    (77, 191, 7725),
566    (77, 192, 7728),
567    (77, 193, 7731),
568    (78, 190, 7825),
569    (78, 191, 7828),
570    (78, 192, 7831),
571    (78, 193, 7834),
572    (78, 194, 7837),
573    (78, 195, 7840),
574    (78, 196, 7843),
575    (78, 197, 7846),
576    (78, 198, 7849),
577    (79, 197, 7925),
578    (80, 196, 8025),
579    (80, 197, 8028),
580    (80, 198, 8031),
581    (80, 199, 8034),
582    (80, 200, 8037),
583    (80, 201, 8040),
584    (80, 202, 8043),
585    (80, 203, 8046),
586    (80, 204, 8049),
587    (81, 203, 8125),
588    (81, 204, 8128),
589    (81, 205, 8131),
590    (82, 204, 8225),
591    (82, 205, 8228),
592    (82, 206, 8231),
593    (82, 207, 8234),
594    (82, 208, 8237),
595    (83, 209, 8325),
596    (84, 208, 8431),
597    (84, 209, 8434),
598    (84, 210, 8437),
599    (88, 223, 8825),
600    (88, 224, 8828),
601    (88, 225, 8831),
602    (88, 226, 8834),
603    (89, 225, 8925),
604    (89, 226, 8928),
605    (89, 227, 8931),
606    (90, 227, 9025),
607    (90, 228, 9028),
608    (90, 229, 9031),
609    (90, 230, 9034),
610    (90, 231, 9037),
611    (90, 232, 9040),
612    (90, 233, 9043),
613    (90, 234, 9046),
614    (91, 229, 9125),
615    (91, 230, 9128),
616    (91, 231, 9131),
617    (91, 232, 9134),
618    (91, 233, 9137),
619    (92, 230, 9213),
620    (92, 231, 9216),
621    (92, 232, 9219),
622    (92, 233, 9222),
623    (92, 234, 9225),
624    (92, 235, 9228),
625    (92, 236, 9231),
626    (92, 237, 9234),
627    (92, 238, 9237),
628    (92, 239, 9240),
629    (92, 240, 9243),
630    (92, 241, 9246),
631    (93, 234, 9337),
632    (93, 235, 9340),
633    (93, 236, 9343),
634    (93, 237, 9346),
635    (93, 238, 9349),
636    (93, 239, 9352),
637    (94, 236, 9428),
638    (94, 237, 9431),
639    (94, 238, 9434),
640    (94, 239, 9437),
641    (94, 240, 9440),
642    (94, 241, 9443),
643    (94, 242, 9446),
644    (94, 243, 9449),
645    (94, 244, 9452),
646    (94, 245, 9455),
647    (94, 246, 9458),
648    (95, 240, 9540),
649    (95, 241, 9543),
650    (95, 242, 9546),
651    (95, 243, 9549),
652    (95, 244, 9552),
653    (96, 240, 9625),
654    (96, 241, 9628),
655    (96, 242, 9631),
656    (96, 243, 9634),
657    (96, 244, 9637),
658    (96, 245, 9640),
659    (96, 246, 9643),
660    (96, 247, 9646),
661    (96, 248, 9649),
662    (96, 249, 9652),
663    (96, 250, 9655),
664    (97, 245, 9740),
665    (97, 246, 9743),
666    (97, 247, 9746),
667    (97, 248, 9749),
668    (97, 249, 9752),
669    (97, 250, 9755),
670    (98, 246, 9843),
671    (98, 247, 9846),
672    (98, 248, 9849),
673    (98, 249, 9852),
674    (98, 250, 9855),
675    (98, 251, 9858),
676    (98, 252, 9861),
677    (98, 253, 9864),
678    (98, 254, 9867),
679    (99, 251, 9911),
680    (99, 252, 9912),
681    (99, 253, 9913),
682    (99, 254, 9914),
683    (99, 255, 9916),
684    (100, 255, 9936),
685];
686
687/// Look up the TENDL-2023 MAT number for a ground-state isotope (Z, A).
688///
689/// TENDL-2023 covers ~2,300 ground-state isotopes (Z=1 H to Z=115 Mc),
690/// substantially more than the ENDF/B-VIII.0 535 covered by [`mat_number`].
691/// Returns `None` for isotopes outside the TENDL-2023 neutrons sublibrary.
692///
693/// MAT numbers are *almost* identical to ENDF/B-VIII.0 for shared isotopes,
694/// with one known exception: Es-255 is MAT 9915 in TENDL-2023 vs. MAT 9916
695/// in ENDF/B-VIII.0. Use this function (not [`mat_number`]) when constructing
696/// TENDL-2023 retrieval URLs.
697///
698/// # Examples
699/// ```
700/// assert_eq!(endf_mat::mat_number_tendl(92, 235), Some(9228));
701/// assert_eq!(endf_mat::mat_number_tendl(99, 255), Some(9915));  // TENDL-specific
702/// assert_eq!(endf_mat::mat_number_tendl(100, 247), Some(9928)); // Fm-247: not in ENDF/B-VIII.0
703/// ```
704pub fn mat_number_tendl(z: u32, a: u32) -> Option<u32> {
705    TENDL_2023_MAT_TABLE
706        .binary_search_by(|&(tz, ta, _)| (tz, ta).cmp(&(z, a)))
707        .ok()
708        .map(|idx| TENDL_2023_MAT_TABLE[idx].2)
709}
710
711/// Look up the CENDL-3.2 MAT number for a ground-state isotope (Z, A).
712///
713/// CENDL-3.2 covers 258 ground-state isotopes (Z=1 H to Z=98 Cf, with
714/// Br absent) plus the free neutron, narrower coverage than both ENDF/B-VIII.0 and TENDL-2023.
715/// Returns `None` for isotopes outside the CENDL-3.2 neutrons sublibrary.
716///
717/// MAT numbers are identical to ENDF/B-VIII.0 for shared isotopes —
718/// no documented divergences (unlike TENDL-2023's Es-255 case). Use
719/// this function when constructing CENDL-3.2 retrieval URLs.
720///
721/// # Examples
722/// ```
723/// assert_eq!(endf_mat::mat_number_cendl(56, 138), Some(5649)); // Ba-138
724/// assert_eq!(endf_mat::mat_number_cendl(72, 177), Some(7234)); // Hf-177
725/// assert_eq!(endf_mat::mat_number_cendl(35, 79), None);        // Br-79: not in CENDL-3.2
726/// ```
727pub fn mat_number_cendl(z: u32, a: u32) -> Option<u32> {
728    CENDL_3_2_MAT_TABLE
729        .binary_search_by(|&(tz, ta, _)| (tz, ta).cmp(&(z, a)))
730        .ok()
731        .map(|idx| CENDL_3_2_MAT_TABLE[idx].2)
732}
733
734// Auto-generated by crates/endf-mat/scripts/regenerate_tendl_table.sh
735// Source: https://www-nds.iaea.org/public/download-endf/TENDL-2023/n/
736// 2300 ground-state isotopes from the TENDL-2023 neutrons sublibrary.
737// Format: (Z, A, MAT) — sorted by (Z, A). Re-run the regenerator if the
738// upstream listing changes; do NOT edit by hand.
739#[rustfmt::skip]
740static TENDL_2023_MAT_TABLE: &[(u32, u32, u32)] = &[
741    (1, 1, 125),
742    (1, 2, 128),
743    (1, 3, 131),
744    (2, 3, 225),
745    (2, 4, 228),
746    (3, 6, 325),
747    (3, 7, 328),
748    (4, 7, 419),
749    (4, 9, 425),
750    (4, 10, 428),
751    (4, 11, 431),
752    (5, 10, 525),
753    (5, 11, 528),
754    (6, 10, 619),
755    (6, 11, 622),
756    (6, 12, 625),
757    (6, 13, 628),
758    (6, 14, 631),
759    (6, 15, 634),
760    (7, 13, 722),
761    (7, 14, 725),
762    (7, 15, 728),
763    (7, 16, 731),
764    (7, 17, 734),
765    (8, 14, 819),
766    (8, 15, 822),
767    (8, 16, 825),
768    (8, 17, 828),
769    (8, 18, 831),
770    (8, 19, 834),
771    (8, 20, 837),
772    (8, 21, 840),
773    (8, 22, 843),
774    (9, 17, 919),
775    (9, 18, 922),
776    (9, 19, 925),
777    (9, 20, 928),
778    (9, 21, 931),
779    (9, 22, 934),
780    (9, 23, 937),
781    (10, 18, 1019),
782    (10, 19, 1022),
783    (10, 20, 1025),
784    (10, 21, 1028),
785    (10, 22, 1031),
786    (10, 23, 1034),
787    (10, 24, 1037),
788    (11, 21, 1119),
789    (11, 22, 1122),
790    (11, 23, 1125),
791    (11, 24, 1128),
792    (11, 25, 1131),
793    (11, 26, 1134),
794    (12, 22, 1219),
795    (12, 23, 1222),
796    (12, 24, 1225),
797    (12, 25, 1228),
798    (12, 26, 1231),
799    (12, 27, 1234),
800    (12, 28, 1237),
801    (12, 29, 1240),
802    (13, 24, 1316),
803    (13, 25, 1319),
804    (13, 26, 1322),
805    (13, 27, 1325),
806    (13, 28, 1328),
807    (13, 29, 1331),
808    (13, 30, 1334),
809    (14, 26, 1419),
810    (14, 27, 1422),
811    (14, 28, 1425),
812    (14, 29, 1428),
813    (14, 30, 1431),
814    (14, 31, 1434),
815    (14, 32, 1437),
816    (14, 33, 1440),
817    (14, 34, 1443),
818    (15, 29, 1519),
819    (15, 30, 1522),
820    (15, 31, 1525),
821    (15, 32, 1528),
822    (15, 33, 1531),
823    (15, 34, 1534),
824    (15, 35, 1537),
825    (15, 36, 1540),
826    (15, 37, 1543),
827    (16, 30, 1619),
828    (16, 31, 1622),
829    (16, 32, 1625),
830    (16, 33, 1628),
831    (16, 34, 1631),
832    (16, 35, 1634),
833    (16, 36, 1637),
834    (16, 37, 1640),
835    (16, 38, 1643),
836    (16, 39, 1646),
837    (16, 40, 1649),
838    (16, 41, 1652),
839    (16, 42, 1655),
840    (17, 33, 1719),
841    (17, 34, 1722),
842    (17, 35, 1725),
843    (17, 36, 1728),
844    (17, 37, 1731),
845    (17, 38, 1734),
846    (17, 39, 1737),
847    (17, 40, 1740),
848    (17, 41, 1743),
849    (17, 42, 1746),
850    (17, 43, 1749),
851    (18, 35, 1822),
852    (18, 36, 1825),
853    (18, 37, 1828),
854    (18, 38, 1831),
855    (18, 39, 1834),
856    (18, 40, 1837),
857    (18, 41, 1840),
858    (18, 42, 1843),
859    (18, 43, 1846),
860    (18, 44, 1849),
861    (18, 45, 1852),
862    (18, 46, 1855),
863    (18, 47, 1858),
864    (19, 37, 1919),
865    (19, 38, 1922),
866    (19, 39, 1925),
867    (19, 40, 1928),
868    (19, 41, 1931),
869    (19, 42, 1934),
870    (19, 43, 1937),
871    (19, 44, 1940),
872    (19, 45, 1943),
873    (19, 46, 1946),
874    (19, 47, 1949),
875    (19, 48, 1952),
876    (19, 49, 1955),
877    (20, 40, 2025),
878    (20, 41, 2028),
879    (20, 42, 2031),
880    (20, 43, 2034),
881    (20, 44, 2037),
882    (20, 45, 2040),
883    (20, 46, 2043),
884    (20, 47, 2046),
885    (20, 48, 2049),
886    (20, 49, 2052),
887    (20, 50, 2055),
888    (20, 51, 2058),
889    (20, 52, 2061),
890    (21, 43, 2119),
891    (21, 44, 2122),
892    (21, 45, 2125),
893    (21, 46, 2128),
894    (21, 47, 2131),
895    (21, 48, 2134),
896    (21, 49, 2137),
897    (21, 50, 2140),
898    (21, 51, 2143),
899    (21, 52, 2146),
900    (21, 53, 2149),
901    (22, 44, 2219),
902    (22, 45, 2222),
903    (22, 46, 2225),
904    (22, 47, 2228),
905    (22, 48, 2231),
906    (22, 49, 2234),
907    (22, 50, 2237),
908    (22, 51, 2240),
909    (22, 52, 2243),
910    (22, 53, 2246),
911    (22, 54, 2249),
912    (22, 55, 2252),
913    (23, 47, 2316),
914    (23, 48, 2319),
915    (23, 49, 2322),
916    (23, 50, 2325),
917    (23, 51, 2328),
918    (23, 52, 2331),
919    (23, 53, 2334),
920    (23, 54, 2337),
921    (23, 55, 2340),
922    (24, 48, 2419),
923    (24, 49, 2422),
924    (24, 50, 2425),
925    (24, 51, 2428),
926    (24, 52, 2431),
927    (24, 53, 2434),
928    (24, 54, 2437),
929    (24, 55, 2440),
930    (24, 56, 2443),
931    (24, 57, 2446),
932    (24, 58, 2449),
933    (24, 59, 2452),
934    (25, 51, 2513),
935    (25, 52, 2516),
936    (25, 53, 2519),
937    (25, 54, 2522),
938    (25, 55, 2525),
939    (25, 56, 2528),
940    (25, 57, 2531),
941    (25, 58, 2534),
942    (25, 59, 2537),
943    (26, 52, 2619),
944    (26, 53, 2622),
945    (26, 54, 2625),
946    (26, 55, 2628),
947    (26, 56, 2631),
948    (26, 57, 2634),
949    (26, 58, 2637),
950    (26, 59, 2640),
951    (26, 60, 2643),
952    (26, 61, 2646),
953    (26, 62, 2649),
954    (26, 63, 2652),
955    (26, 64, 2655),
956    (27, 55, 2713),
957    (27, 56, 2716),
958    (27, 57, 2719),
959    (27, 58, 2722),
960    (27, 59, 2725),
961    (27, 60, 2728),
962    (27, 61, 2731),
963    (27, 62, 2734),
964    (27, 63, 2737),
965    (27, 65, 2743),
966    (28, 56, 2819),
967    (28, 57, 2822),
968    (28, 58, 2825),
969    (28, 59, 2828),
970    (28, 60, 2831),
971    (28, 61, 2834),
972    (28, 62, 2837),
973    (28, 63, 2840),
974    (28, 64, 2843),
975    (28, 65, 2846),
976    (28, 66, 2849),
977    (28, 67, 2852),
978    (28, 68, 2855),
979    (28, 69, 2858),
980    (28, 70, 2861),
981    (28, 71, 2864),
982    (28, 72, 2867),
983    (29, 58, 2910),
984    (29, 59, 2913),
985    (29, 60, 2916),
986    (29, 61, 2919),
987    (29, 62, 2922),
988    (29, 63, 2925),
989    (29, 64, 2928),
990    (29, 65, 2931),
991    (29, 66, 2934),
992    (29, 67, 2937),
993    (29, 68, 2940),
994    (29, 69, 2943),
995    (29, 70, 2946),
996    (29, 71, 2949),
997    (29, 72, 2952),
998    (29, 73, 2955),
999    (29, 74, 2958),
1000    (29, 75, 2961),
1001    (30, 60, 3013),
1002    (30, 61, 3016),
1003    (30, 62, 3019),
1004    (30, 63, 3022),
1005    (30, 64, 3025),
1006    (30, 65, 3028),
1007    (30, 66, 3031),
1008    (30, 67, 3034),
1009    (30, 68, 3037),
1010    (30, 69, 3040),
1011    (30, 70, 3043),
1012    (30, 71, 3046),
1013    (30, 72, 3049),
1014    (30, 73, 3052),
1015    (30, 74, 3055),
1016    (30, 75, 3058),
1017    (30, 76, 3061),
1018    (30, 77, 3064),
1019    (30, 78, 3067),
1020    (31, 63, 3107),
1021    (31, 64, 3110),
1022    (31, 65, 3113),
1023    (31, 66, 3116),
1024    (31, 67, 3119),
1025    (31, 68, 3122),
1026    (31, 69, 3125),
1027    (31, 70, 3128),
1028    (31, 71, 3131),
1029    (31, 72, 3134),
1030    (31, 73, 3137),
1031    (31, 74, 3140),
1032    (31, 75, 3143),
1033    (31, 76, 3146),
1034    (31, 77, 3149),
1035    (31, 78, 3152),
1036    (31, 79, 3155),
1037    (31, 80, 3158),
1038    (31, 81, 3161),
1039    (32, 64, 3207),
1040    (32, 65, 3210),
1041    (32, 66, 3213),
1042    (32, 67, 3216),
1043    (32, 68, 3219),
1044    (32, 69, 3222),
1045    (32, 70, 3225),
1046    (32, 71, 3228),
1047    (32, 72, 3231),
1048    (32, 73, 3234),
1049    (32, 74, 3237),
1050    (32, 75, 3240),
1051    (32, 76, 3243),
1052    (32, 77, 3246),
1053    (32, 78, 3249),
1054    (32, 79, 3252),
1055    (32, 80, 3255),
1056    (32, 81, 3258),
1057    (32, 82, 3261),
1058    (32, 83, 3264),
1059    (33, 67, 3301),
1060    (33, 68, 3304),
1061    (33, 69, 3307),
1062    (33, 70, 3310),
1063    (33, 71, 3313),
1064    (33, 72, 3316),
1065    (33, 73, 3319),
1066    (33, 74, 3322),
1067    (33, 75, 3325),
1068    (33, 76, 3328),
1069    (33, 77, 3331),
1070    (33, 78, 3334),
1071    (33, 79, 3337),
1072    (33, 80, 3340),
1073    (33, 81, 3343),
1074    (33, 82, 3346),
1075    (33, 83, 3349),
1076    (33, 84, 3352),
1077    (33, 85, 3355),
1078    (34, 68, 3407),
1079    (34, 69, 3410),
1080    (34, 70, 3413),
1081    (34, 71, 3416),
1082    (34, 72, 3419),
1083    (34, 73, 3422),
1084    (34, 74, 3425),
1085    (34, 75, 3428),
1086    (34, 76, 3431),
1087    (34, 77, 3434),
1088    (34, 78, 3437),
1089    (34, 79, 3440),
1090    (34, 80, 3443),
1091    (34, 81, 3446),
1092    (34, 82, 3449),
1093    (34, 83, 3452),
1094    (34, 84, 3455),
1095    (34, 85, 3458),
1096    (34, 86, 3461),
1097    (34, 87, 3464),
1098    (34, 88, 3467),
1099    (35, 71, 3501),
1100    (35, 72, 3504),
1101    (35, 73, 3507),
1102    (35, 74, 3510),
1103    (35, 75, 3513),
1104    (35, 76, 3516),
1105    (35, 77, 3519),
1106    (35, 78, 3522),
1107    (35, 79, 3525),
1108    (35, 80, 3528),
1109    (35, 81, 3531),
1110    (35, 82, 3534),
1111    (35, 83, 3537),
1112    (35, 84, 3540),
1113    (35, 85, 3543),
1114    (35, 86, 3546),
1115    (35, 87, 3549),
1116    (35, 88, 3552),
1117    (35, 89, 3555),
1118    (35, 90, 3558),
1119    (36, 72, 3607),
1120    (36, 73, 3610),
1121    (36, 74, 3613),
1122    (36, 75, 3616),
1123    (36, 76, 3619),
1124    (36, 77, 3622),
1125    (36, 78, 3625),
1126    (36, 79, 3628),
1127    (36, 80, 3631),
1128    (36, 81, 3634),
1129    (36, 82, 3637),
1130    (36, 83, 3640),
1131    (36, 84, 3643),
1132    (36, 85, 3646),
1133    (36, 86, 3649),
1134    (36, 87, 3652),
1135    (36, 88, 3655),
1136    (36, 89, 3658),
1137    (36, 90, 3661),
1138    (36, 91, 3664),
1139    (36, 92, 3667),
1140    (36, 93, 3670),
1141    (37, 75, 3695),
1142    (37, 76, 3698),
1143    (37, 77, 3701),
1144    (37, 78, 3704),
1145    (37, 79, 3707),
1146    (37, 80, 3710),
1147    (37, 81, 3713),
1148    (37, 82, 3716),
1149    (37, 83, 3719),
1150    (37, 84, 3722),
1151    (37, 85, 3725),
1152    (37, 86, 3728),
1153    (37, 87, 3731),
1154    (37, 88, 3734),
1155    (37, 89, 3737),
1156    (37, 90, 3740),
1157    (37, 91, 3743),
1158    (37, 92, 3746),
1159    (37, 93, 3749),
1160    (37, 94, 3752),
1161    (38, 76, 3801),
1162    (38, 77, 3804),
1163    (38, 78, 3807),
1164    (38, 79, 3810),
1165    (38, 80, 3813),
1166    (38, 81, 3816),
1167    (38, 82, 3819),
1168    (38, 83, 3822),
1169    (38, 84, 3825),
1170    (38, 85, 3828),
1171    (38, 86, 3831),
1172    (38, 87, 3834),
1173    (38, 88, 3837),
1174    (38, 89, 3840),
1175    (38, 90, 3843),
1176    (38, 91, 3846),
1177    (38, 92, 3849),
1178    (38, 93, 3852),
1179    (38, 94, 3855),
1180    (38, 95, 3858),
1181    (38, 96, 3861),
1182    (39, 79, 3895),
1183    (39, 80, 3898),
1184    (39, 81, 3901),
1185    (39, 82, 3904),
1186    (39, 83, 3907),
1187    (39, 84, 3910),
1188    (39, 85, 3913),
1189    (39, 86, 3916),
1190    (39, 87, 3919),
1191    (39, 88, 3922),
1192    (39, 89, 3925),
1193    (39, 90, 3928),
1194    (39, 91, 3931),
1195    (39, 92, 3934),
1196    (39, 93, 3937),
1197    (39, 94, 3940),
1198    (39, 95, 3943),
1199    (39, 96, 3946),
1200    (39, 97, 3949),
1201    (39, 99, 3955),
1202    (40, 80, 3995),
1203    (40, 81, 3998),
1204    (40, 82, 4001),
1205    (40, 83, 4004),
1206    (40, 84, 4007),
1207    (40, 85, 4010),
1208    (40, 86, 4013),
1209    (40, 87, 4016),
1210    (40, 88, 4019),
1211    (40, 89, 4022),
1212    (40, 90, 4025),
1213    (40, 91, 4028),
1214    (40, 92, 4031),
1215    (40, 93, 4034),
1216    (40, 94, 4037),
1217    (40, 95, 4040),
1218    (40, 96, 4043),
1219    (40, 97, 4046),
1220    (40, 98, 4049),
1221    (40, 99, 4052),
1222    (40, 100, 4055),
1223    (40, 101, 4058),
1224    (40, 102, 4061),
1225    (40, 103, 4064),
1226    (41, 83, 4095),
1227    (41, 84, 4098),
1228    (41, 85, 4101),
1229    (41, 86, 4104),
1230    (41, 87, 4107),
1231    (41, 88, 4110),
1232    (41, 89, 4113),
1233    (41, 90, 4116),
1234    (41, 91, 4119),
1235    (41, 92, 4122),
1236    (41, 93, 4125),
1237    (41, 94, 4128),
1238    (41, 95, 4131),
1239    (41, 96, 4134),
1240    (41, 97, 4137),
1241    (41, 98, 4140),
1242    (41, 99, 4143),
1243    (41, 100, 4146),
1244    (41, 101, 4149),
1245    (41, 102, 4152),
1246    (41, 103, 4155),
1247    (41, 105, 4161),
1248    (42, 84, 4201),
1249    (42, 85, 4204),
1250    (42, 86, 4207),
1251    (42, 87, 4210),
1252    (42, 88, 4213),
1253    (42, 89, 4216),
1254    (42, 90, 4219),
1255    (42, 91, 4222),
1256    (42, 92, 4225),
1257    (42, 93, 4228),
1258    (42, 94, 4231),
1259    (42, 95, 4234),
1260    (42, 96, 4237),
1261    (42, 97, 4240),
1262    (42, 98, 4243),
1263    (42, 99, 4246),
1264    (42, 100, 4249),
1265    (42, 101, 4252),
1266    (42, 102, 4255),
1267    (42, 103, 4258),
1268    (42, 104, 4261),
1269    (42, 105, 4264),
1270    (42, 106, 4267),
1271    (42, 107, 4270),
1272    (42, 108, 4273),
1273    (43, 87, 4289),
1274    (43, 88, 4292),
1275    (43, 89, 4295),
1276    (43, 90, 4298),
1277    (43, 91, 4301),
1278    (43, 92, 4304),
1279    (43, 93, 4307),
1280    (43, 94, 4310),
1281    (43, 95, 4313),
1282    (43, 96, 4316),
1283    (43, 97, 4319),
1284    (43, 98, 4322),
1285    (43, 99, 4325),
1286    (43, 100, 4328),
1287    (43, 101, 4331),
1288    (43, 102, 4334),
1289    (43, 103, 4337),
1290    (43, 104, 4340),
1291    (43, 105, 4343),
1292    (43, 106, 4346),
1293    (43, 107, 4349),
1294    (43, 108, 4352),
1295    (44, 88, 4401),
1296    (44, 89, 4404),
1297    (44, 90, 4407),
1298    (44, 91, 4410),
1299    (44, 92, 4413),
1300    (44, 93, 4416),
1301    (44, 94, 4419),
1302    (44, 95, 4422),
1303    (44, 96, 4425),
1304    (44, 97, 4428),
1305    (44, 98, 4431),
1306    (44, 99, 4434),
1307    (44, 100, 4437),
1308    (44, 101, 4440),
1309    (44, 102, 4443),
1310    (44, 103, 4446),
1311    (44, 104, 4449),
1312    (44, 105, 4452),
1313    (44, 106, 4455),
1314    (44, 107, 4458),
1315    (44, 108, 4461),
1316    (44, 109, 4464),
1317    (44, 110, 4467),
1318    (44, 111, 4470),
1319    (44, 112, 4473),
1320    (45, 91, 4489),
1321    (45, 92, 4492),
1322    (45, 93, 4495),
1323    (45, 94, 4498),
1324    (45, 95, 4501),
1325    (45, 96, 4504),
1326    (45, 97, 4507),
1327    (45, 98, 4510),
1328    (45, 99, 4513),
1329    (45, 100, 4516),
1330    (45, 101, 4519),
1331    (45, 102, 4522),
1332    (45, 103, 4525),
1333    (45, 104, 4528),
1334    (45, 105, 4531),
1335    (45, 106, 4534),
1336    (45, 107, 4537),
1337    (45, 108, 4540),
1338    (45, 109, 4543),
1339    (45, 110, 4546),
1340    (45, 111, 4549),
1341    (45, 112, 4552),
1342    (45, 113, 4555),
1343    (45, 114, 4558),
1344    (45, 115, 4561),
1345    (46, 92, 4595),
1346    (46, 93, 4598),
1347    (46, 94, 4601),
1348    (46, 95, 4604),
1349    (46, 96, 4607),
1350    (46, 97, 4610),
1351    (46, 98, 4613),
1352    (46, 99, 4616),
1353    (46, 100, 4619),
1354    (46, 101, 4622),
1355    (46, 102, 4625),
1356    (46, 103, 4628),
1357    (46, 104, 4631),
1358    (46, 105, 4634),
1359    (46, 106, 4637),
1360    (46, 107, 4640),
1361    (46, 108, 4643),
1362    (46, 109, 4646),
1363    (46, 110, 4649),
1364    (46, 111, 4652),
1365    (46, 112, 4655),
1366    (46, 113, 4658),
1367    (46, 114, 4661),
1368    (46, 115, 4664),
1369    (46, 116, 4667),
1370    (46, 117, 4670),
1371    (46, 118, 4673),
1372    (47, 95, 4689),
1373    (47, 96, 4692),
1374    (47, 97, 4695),
1375    (47, 98, 4698),
1376    (47, 99, 4701),
1377    (47, 100, 4704),
1378    (47, 101, 4707),
1379    (47, 102, 4710),
1380    (47, 103, 4713),
1381    (47, 104, 4716),
1382    (47, 105, 4719),
1383    (47, 106, 4722),
1384    (47, 107, 4725),
1385    (47, 108, 4728),
1386    (47, 109, 4731),
1387    (47, 110, 4734),
1388    (47, 111, 4737),
1389    (47, 112, 4740),
1390    (47, 113, 4743),
1391    (47, 114, 4746),
1392    (47, 115, 4749),
1393    (47, 116, 4752),
1394    (47, 117, 4755),
1395    (47, 118, 4758),
1396    (47, 119, 4761),
1397    (47, 120, 4764),
1398    (48, 96, 4795),
1399    (48, 97, 4798),
1400    (48, 98, 4801),
1401    (48, 99, 4804),
1402    (48, 100, 4807),
1403    (48, 101, 4810),
1404    (48, 102, 4813),
1405    (48, 103, 4816),
1406    (48, 104, 4819),
1407    (48, 105, 4822),
1408    (48, 106, 4825),
1409    (48, 107, 4828),
1410    (48, 108, 4831),
1411    (48, 109, 4834),
1412    (48, 110, 4837),
1413    (48, 111, 4840),
1414    (48, 112, 4843),
1415    (48, 113, 4846),
1416    (48, 114, 4849),
1417    (48, 115, 4852),
1418    (48, 116, 4855),
1419    (48, 117, 4858),
1420    (48, 118, 4861),
1421    (48, 119, 4864),
1422    (48, 120, 4867),
1423    (48, 121, 4870),
1424    (48, 122, 4873),
1425    (48, 123, 4876),
1426    (48, 124, 4879),
1427    (49, 99, 4883),
1428    (49, 100, 4886),
1429    (49, 101, 4889),
1430    (49, 102, 4892),
1431    (49, 103, 4895),
1432    (49, 104, 4898),
1433    (49, 105, 4901),
1434    (49, 106, 4904),
1435    (49, 107, 4907),
1436    (49, 108, 4910),
1437    (49, 109, 4913),
1438    (49, 110, 4916),
1439    (49, 111, 4919),
1440    (49, 112, 4922),
1441    (49, 113, 4925),
1442    (49, 114, 4928),
1443    (49, 115, 4931),
1444    (49, 116, 4934),
1445    (49, 117, 4937),
1446    (49, 118, 4940),
1447    (49, 119, 4943),
1448    (49, 120, 4946),
1449    (49, 121, 4949),
1450    (49, 122, 4952),
1451    (49, 123, 4955),
1452    (49, 124, 4958),
1453    (49, 125, 4961),
1454    (49, 126, 4964),
1455    (49, 127, 4967),
1456    (50, 100, 4989),
1457    (50, 101, 4992),
1458    (50, 102, 4995),
1459    (50, 103, 4998),
1460    (50, 104, 5001),
1461    (50, 105, 5004),
1462    (50, 106, 5007),
1463    (50, 107, 5010),
1464    (50, 108, 5013),
1465    (50, 109, 5016),
1466    (50, 110, 5019),
1467    (50, 111, 5022),
1468    (50, 112, 5025),
1469    (50, 113, 5028),
1470    (50, 114, 5031),
1471    (50, 115, 5034),
1472    (50, 116, 5037),
1473    (50, 117, 5040),
1474    (50, 118, 5043),
1475    (50, 119, 5046),
1476    (50, 120, 5049),
1477    (50, 121, 5052),
1478    (50, 122, 5055),
1479    (50, 123, 5058),
1480    (50, 124, 5061),
1481    (50, 125, 5064),
1482    (50, 126, 5067),
1483    (50, 127, 5070),
1484    (50, 128, 5073),
1485    (50, 129, 5076),
1486    (50, 130, 5079),
1487    (50, 131, 5082),
1488    (50, 132, 5085),
1489    (50, 133, 5088),
1490    (51, 105, 315),
1491    (51, 107, 316),
1492    (51, 108, 5086),
1493    (51, 109, 5089),
1494    (51, 110, 5092),
1495    (51, 111, 5095),
1496    (51, 112, 5098),
1497    (51, 113, 5101),
1498    (51, 114, 5104),
1499    (51, 115, 5107),
1500    (51, 116, 5110),
1501    (51, 117, 5113),
1502    (51, 118, 5116),
1503    (51, 119, 5119),
1504    (51, 120, 5122),
1505    (51, 121, 5125),
1506    (51, 122, 5128),
1507    (51, 123, 5131),
1508    (51, 124, 5134),
1509    (51, 125, 5137),
1510    (51, 126, 5140),
1511    (51, 127, 5143),
1512    (51, 128, 5146),
1513    (51, 129, 5149),
1514    (51, 130, 5152),
1515    (51, 131, 5155),
1516    (51, 132, 5158),
1517    (51, 133, 5161),
1518    (51, 135, 5167),
1519    (52, 108, 5189),
1520    (52, 109, 5192),
1521    (52, 110, 5195),
1522    (52, 111, 5198),
1523    (52, 112, 5201),
1524    (52, 113, 5204),
1525    (52, 114, 5207),
1526    (52, 115, 5210),
1527    (52, 116, 5213),
1528    (52, 117, 5216),
1529    (52, 118, 5219),
1530    (52, 119, 5222),
1531    (52, 120, 5225),
1532    (52, 121, 5228),
1533    (52, 122, 5231),
1534    (52, 123, 5234),
1535    (52, 124, 5237),
1536    (52, 125, 5240),
1537    (52, 126, 5243),
1538    (52, 127, 5246),
1539    (52, 128, 5249),
1540    (52, 129, 5252),
1541    (52, 130, 5255),
1542    (52, 131, 5258),
1543    (52, 132, 5261),
1544    (52, 133, 5264),
1545    (52, 134, 5267),
1546    (52, 135, 5270),
1547    (52, 136, 5273),
1548    (52, 137, 5276),
1549    (52, 138, 5279),
1550    (53, 111, 5277),
1551    (53, 112, 5280),
1552    (53, 113, 5283),
1553    (53, 114, 5286),
1554    (53, 115, 5289),
1555    (53, 116, 5292),
1556    (53, 117, 5295),
1557    (53, 118, 5298),
1558    (53, 119, 5301),
1559    (53, 120, 5304),
1560    (53, 121, 5307),
1561    (53, 122, 5310),
1562    (53, 123, 5313),
1563    (53, 124, 5316),
1564    (53, 125, 5319),
1565    (53, 126, 5322),
1566    (53, 127, 5325),
1567    (53, 128, 5328),
1568    (53, 129, 5331),
1569    (53, 130, 5334),
1570    (53, 131, 5337),
1571    (53, 132, 5340),
1572    (53, 133, 5343),
1573    (53, 134, 5346),
1574    (53, 135, 5349),
1575    (53, 136, 5352),
1576    (53, 137, 5355),
1577    (53, 138, 5358),
1578    (53, 139, 5361),
1579    (54, 112, 5389),
1580    (54, 113, 5392),
1581    (54, 114, 5395),
1582    (54, 115, 5398),
1583    (54, 116, 5401),
1584    (54, 117, 5404),
1585    (54, 118, 5407),
1586    (54, 119, 5410),
1587    (54, 120, 5413),
1588    (54, 121, 5416),
1589    (54, 122, 5419),
1590    (54, 123, 5422),
1591    (54, 124, 5425),
1592    (54, 125, 5428),
1593    (54, 126, 5431),
1594    (54, 127, 5434),
1595    (54, 128, 5437),
1596    (54, 129, 5440),
1597    (54, 130, 5443),
1598    (54, 131, 5446),
1599    (54, 132, 5449),
1600    (54, 133, 5452),
1601    (54, 134, 5455),
1602    (54, 135, 5458),
1603    (54, 136, 5461),
1604    (54, 137, 5464),
1605    (54, 138, 5467),
1606    (54, 139, 5470),
1607    (54, 140, 5473),
1608    (54, 141, 5476),
1609    (54, 142, 5479),
1610    (55, 115, 5471),
1611    (55, 117, 5477),
1612    (55, 118, 5480),
1613    (55, 119, 5483),
1614    (55, 120, 5486),
1615    (55, 121, 5489),
1616    (55, 122, 5492),
1617    (55, 123, 5495),
1618    (55, 124, 5498),
1619    (55, 125, 5501),
1620    (55, 126, 5504),
1621    (55, 127, 5507),
1622    (55, 128, 5510),
1623    (55, 129, 5513),
1624    (55, 130, 5516),
1625    (55, 131, 5519),
1626    (55, 132, 5522),
1627    (55, 133, 5525),
1628    (55, 134, 5528),
1629    (55, 135, 5531),
1630    (55, 136, 5534),
1631    (55, 137, 5537),
1632    (55, 138, 5540),
1633    (55, 139, 5543),
1634    (55, 140, 5546),
1635    (55, 141, 5549),
1636    (55, 142, 5552),
1637    (55, 143, 5555),
1638    (56, 116, 5583),
1639    (56, 117, 5586),
1640    (56, 118, 5589),
1641    (56, 119, 5592),
1642    (56, 120, 5595),
1643    (56, 121, 5598),
1644    (56, 122, 5601),
1645    (56, 123, 5604),
1646    (56, 124, 5607),
1647    (56, 125, 5610),
1648    (56, 126, 5613),
1649    (56, 127, 5616),
1650    (56, 128, 5619),
1651    (56, 129, 5622),
1652    (56, 130, 5625),
1653    (56, 131, 5628),
1654    (56, 132, 5631),
1655    (56, 133, 5634),
1656    (56, 134, 5637),
1657    (56, 135, 5640),
1658    (56, 136, 5643),
1659    (56, 137, 5646),
1660    (56, 138, 5649),
1661    (56, 139, 5652),
1662    (56, 140, 5655),
1663    (56, 141, 5658),
1664    (56, 142, 5661),
1665    (56, 143, 5664),
1666    (56, 144, 5667),
1667    (56, 145, 5670),
1668    (56, 146, 5673),
1669    (57, 119, 5668),
1670    (57, 120, 5671),
1671    (57, 121, 5674),
1672    (57, 122, 5677),
1673    (57, 123, 5680),
1674    (57, 124, 5683),
1675    (57, 125, 5686),
1676    (57, 126, 5689),
1677    (57, 127, 5692),
1678    (57, 128, 5695),
1679    (57, 129, 5698),
1680    (57, 130, 5701),
1681    (57, 131, 5704),
1682    (57, 132, 5707),
1683    (57, 133, 5710),
1684    (57, 134, 5713),
1685    (57, 135, 5716),
1686    (57, 136, 5719),
1687    (57, 137, 5722),
1688    (57, 138, 5725),
1689    (57, 139, 5728),
1690    (57, 140, 5731),
1691    (57, 141, 5734),
1692    (57, 142, 5737),
1693    (57, 143, 5740),
1694    (57, 144, 5743),
1695    (57, 145, 5746),
1696    (57, 146, 5749),
1697    (57, 147, 5752),
1698    (57, 148, 5755),
1699    (57, 149, 5758),
1700    (58, 121, 5780),
1701    (58, 122, 5783),
1702    (58, 123, 5786),
1703    (58, 124, 5789),
1704    (58, 125, 5792),
1705    (58, 126, 5795),
1706    (58, 127, 5798),
1707    (58, 128, 5801),
1708    (58, 129, 5804),
1709    (58, 130, 5807),
1710    (58, 131, 5810),
1711    (58, 132, 5813),
1712    (58, 133, 5816),
1713    (58, 134, 5819),
1714    (58, 135, 5822),
1715    (58, 136, 5825),
1716    (58, 137, 5828),
1717    (58, 138, 5831),
1718    (58, 139, 5834),
1719    (58, 140, 5837),
1720    (58, 141, 5840),
1721    (58, 142, 5843),
1722    (58, 143, 5846),
1723    (58, 144, 5849),
1724    (58, 145, 5852),
1725    (58, 146, 5855),
1726    (58, 147, 5858),
1727    (58, 148, 5861),
1728    (58, 149, 5864),
1729    (58, 150, 5867),
1730    (58, 151, 5870),
1731    (58, 152, 5873),
1732    (59, 124, 5874),
1733    (59, 125, 5877),
1734    (59, 126, 5880),
1735    (59, 127, 5883),
1736    (59, 128, 5886),
1737    (59, 129, 5889),
1738    (59, 130, 5892),
1739    (59, 131, 5895),
1740    (59, 132, 5898),
1741    (59, 133, 5901),
1742    (59, 134, 5904),
1743    (59, 135, 5907),
1744    (59, 136, 5910),
1745    (59, 137, 5913),
1746    (59, 138, 5916),
1747    (59, 139, 5919),
1748    (59, 140, 5922),
1749    (59, 141, 5925),
1750    (59, 142, 5928),
1751    (59, 143, 5931),
1752    (59, 144, 5934),
1753    (59, 145, 5937),
1754    (59, 146, 5940),
1755    (59, 147, 5943),
1756    (59, 148, 5946),
1757    (59, 149, 5949),
1758    (59, 150, 5952),
1759    (59, 151, 5955),
1760    (59, 152, 5958),
1761    (59, 153, 5961),
1762    (59, 154, 5964),
1763    (59, 155, 5967),
1764    (60, 126, 5977),
1765    (60, 127, 5980),
1766    (60, 128, 5983),
1767    (60, 129, 5986),
1768    (60, 130, 5989),
1769    (60, 131, 5992),
1770    (60, 132, 5995),
1771    (60, 133, 5998),
1772    (60, 134, 6001),
1773    (60, 135, 6004),
1774    (60, 136, 6007),
1775    (60, 137, 6010),
1776    (60, 138, 6013),
1777    (60, 139, 6016),
1778    (60, 140, 6019),
1779    (60, 141, 6022),
1780    (60, 142, 6025),
1781    (60, 143, 6028),
1782    (60, 144, 6031),
1783    (60, 145, 6034),
1784    (60, 146, 6037),
1785    (60, 147, 6040),
1786    (60, 148, 6043),
1787    (60, 149, 6046),
1788    (60, 150, 6049),
1789    (60, 151, 6052),
1790    (60, 152, 6055),
1791    (60, 153, 6058),
1792    (60, 154, 6061),
1793    (60, 155, 6064),
1794    (60, 156, 6067),
1795    (60, 157, 6070),
1796    (61, 127, 6089),
1797    (61, 128, 6092),
1798    (61, 129, 6095),
1799    (61, 130, 6098),
1800    (61, 131, 6101),
1801    (61, 132, 6104),
1802    (61, 133, 6107),
1803    (61, 134, 6110),
1804    (61, 135, 6113),
1805    (61, 136, 6116),
1806    (61, 137, 6119),
1807    (61, 138, 6122),
1808    (61, 139, 6125),
1809    (61, 140, 6128),
1810    (61, 141, 6131),
1811    (61, 142, 6134),
1812    (61, 143, 6137),
1813    (61, 144, 6140),
1814    (61, 145, 6143),
1815    (61, 146, 6146),
1816    (61, 147, 6149),
1817    (61, 148, 6152),
1818    (61, 149, 6155),
1819    (61, 150, 6158),
1820    (61, 151, 6161),
1821    (61, 152, 6164),
1822    (61, 153, 6167),
1823    (61, 154, 6170),
1824    (61, 155, 6173),
1825    (61, 156, 6176),
1826    (61, 157, 6179),
1827    (61, 158, 6182),
1828    (61, 159, 6185),
1829    (61, 161, 6191),
1830    (62, 130, 6183),
1831    (62, 131, 6186),
1832    (62, 132, 6189),
1833    (62, 133, 6192),
1834    (62, 134, 6195),
1835    (62, 135, 6198),
1836    (62, 136, 6201),
1837    (62, 137, 6204),
1838    (62, 138, 6207),
1839    (62, 139, 6210),
1840    (62, 140, 6213),
1841    (62, 141, 6216),
1842    (62, 142, 6219),
1843    (62, 143, 6222),
1844    (62, 144, 6225),
1845    (62, 145, 6228),
1846    (62, 146, 6231),
1847    (62, 147, 6234),
1848    (62, 148, 6237),
1849    (62, 149, 6240),
1850    (62, 150, 6243),
1851    (62, 151, 6246),
1852    (62, 152, 6249),
1853    (62, 153, 6252),
1854    (62, 154, 6255),
1855    (62, 155, 6258),
1856    (62, 156, 6261),
1857    (62, 157, 6264),
1858    (62, 158, 6267),
1859    (62, 159, 6270),
1860    (62, 160, 6273),
1861    (62, 161, 6276),
1862    (62, 162, 6279),
1863    (62, 163, 6282),
1864    (62, 164, 6285),
1865    (63, 135, 6277),
1866    (63, 136, 6280),
1867    (63, 137, 6283),
1868    (63, 138, 6286),
1869    (63, 139, 6289),
1870    (63, 140, 6292),
1871    (63, 141, 6295),
1872    (63, 142, 6298),
1873    (63, 143, 6301),
1874    (63, 144, 6304),
1875    (63, 145, 6307),
1876    (63, 146, 6310),
1877    (63, 147, 6313),
1878    (63, 148, 6316),
1879    (63, 149, 6319),
1880    (63, 150, 6322),
1881    (63, 151, 6325),
1882    (63, 152, 6328),
1883    (63, 153, 6331),
1884    (63, 154, 6334),
1885    (63, 155, 6337),
1886    (63, 156, 6340),
1887    (63, 157, 6343),
1888    (63, 158, 6346),
1889    (63, 159, 6349),
1890    (63, 160, 6352),
1891    (63, 161, 6355),
1892    (63, 162, 6358),
1893    (63, 163, 6361),
1894    (63, 164, 6364),
1895    (63, 165, 6367),
1896    (63, 166, 6370),
1897    (63, 167, 6373),
1898    (64, 135, 6374),
1899    (64, 136, 6377),
1900    (64, 137, 6380),
1901    (64, 138, 6383),
1902    (64, 139, 6386),
1903    (64, 140, 6389),
1904    (64, 141, 6392),
1905    (64, 142, 6395),
1906    (64, 143, 6398),
1907    (64, 144, 6401),
1908    (64, 145, 6404),
1909    (64, 146, 6407),
1910    (64, 147, 6410),
1911    (64, 148, 6413),
1912    (64, 149, 6416),
1913    (64, 150, 6419),
1914    (64, 151, 6422),
1915    (64, 152, 6425),
1916    (64, 153, 6428),
1917    (64, 154, 6431),
1918    (64, 155, 6434),
1919    (64, 156, 6437),
1920    (64, 157, 6440),
1921    (64, 158, 6443),
1922    (64, 159, 6446),
1923    (64, 160, 6449),
1924    (64, 161, 6452),
1925    (64, 162, 6455),
1926    (64, 163, 6458),
1927    (64, 164, 6461),
1928    (64, 165, 6464),
1929    (64, 166, 6467),
1930    (64, 167, 6470),
1931    (64, 168, 6473),
1932    (65, 139, 6465),
1933    (65, 140, 6468),
1934    (65, 141, 6471),
1935    (65, 143, 6477),
1936    (65, 144, 6480),
1937    (65, 145, 6483),
1938    (65, 146, 6486),
1939    (65, 147, 6489),
1940    (65, 148, 6492),
1941    (65, 149, 6495),
1942    (65, 150, 6498),
1943    (65, 151, 6501),
1944    (65, 152, 6504),
1945    (65, 153, 6507),
1946    (65, 154, 6510),
1947    (65, 155, 6513),
1948    (65, 156, 6516),
1949    (65, 157, 6519),
1950    (65, 158, 6522),
1951    (65, 159, 6525),
1952    (65, 160, 6528),
1953    (65, 161, 6531),
1954    (65, 162, 6534),
1955    (65, 163, 6537),
1956    (65, 164, 6540),
1957    (65, 165, 6543),
1958    (65, 166, 6546),
1959    (65, 167, 6549),
1960    (65, 168, 6552),
1961    (65, 169, 6555),
1962    (65, 171, 6561),
1963    (66, 142, 6583),
1964    (66, 143, 6586),
1965    (66, 144, 6589),
1966    (66, 145, 6592),
1967    (66, 146, 6595),
1968    (66, 147, 6598),
1969    (66, 148, 6601),
1970    (66, 149, 6604),
1971    (66, 150, 6607),
1972    (66, 151, 6610),
1973    (66, 152, 6613),
1974    (66, 153, 6616),
1975    (66, 154, 6619),
1976    (66, 155, 6622),
1977    (66, 156, 6625),
1978    (66, 157, 6628),
1979    (66, 158, 6631),
1980    (66, 159, 6634),
1981    (66, 160, 6637),
1982    (66, 161, 6640),
1983    (66, 162, 6643),
1984    (66, 163, 6646),
1985    (66, 164, 6649),
1986    (66, 165, 6652),
1987    (66, 166, 6655),
1988    (66, 167, 6658),
1989    (66, 168, 6661),
1990    (66, 169, 6664),
1991    (66, 170, 6667),
1992    (66, 171, 6670),
1993    (66, 172, 6673),
1994    (66, 173, 6676),
1995    (66, 174, 6679),
1996    (67, 145, 6665),
1997    (67, 146, 6668),
1998    (67, 147, 6671),
1999    (67, 148, 6674),
2000    (67, 149, 6677),
2001    (67, 150, 6680),
2002    (67, 151, 6683),
2003    (67, 152, 6686),
2004    (67, 153, 6689),
2005    (67, 154, 6692),
2006    (67, 155, 6695),
2007    (67, 156, 6698),
2008    (67, 157, 6701),
2009    (67, 158, 6704),
2010    (67, 159, 6707),
2011    (67, 160, 6710),
2012    (67, 161, 6713),
2013    (67, 162, 6716),
2014    (67, 163, 6719),
2015    (67, 164, 6722),
2016    (67, 165, 6725),
2017    (67, 166, 6728),
2018    (67, 167, 6731),
2019    (67, 168, 6734),
2020    (67, 169, 6737),
2021    (67, 170, 6740),
2022    (67, 171, 6743),
2023    (67, 172, 6746),
2024    (67, 173, 6749),
2025    (67, 174, 6752),
2026    (67, 175, 6755),
2027    (67, 176, 6758),
2028    (67, 177, 6761),
2029    (68, 146, 6777),
2030    (68, 147, 6780),
2031    (68, 148, 6783),
2032    (68, 149, 6786),
2033    (68, 150, 6789),
2034    (68, 151, 6792),
2035    (68, 152, 6795),
2036    (68, 153, 6798),
2037    (68, 154, 6801),
2038    (68, 155, 6804),
2039    (68, 156, 6807),
2040    (68, 157, 6810),
2041    (68, 158, 6813),
2042    (68, 159, 6816),
2043    (68, 160, 6819),
2044    (68, 161, 6822),
2045    (68, 162, 6825),
2046    (68, 163, 6828),
2047    (68, 164, 6831),
2048    (68, 165, 6834),
2049    (68, 166, 6837),
2050    (68, 167, 6840),
2051    (68, 168, 6843),
2052    (68, 169, 6846),
2053    (68, 170, 6849),
2054    (68, 171, 6852),
2055    (68, 172, 6855),
2056    (68, 173, 6858),
2057    (68, 174, 6861),
2058    (68, 175, 6864),
2059    (68, 176, 6867),
2060    (68, 177, 6870),
2061    (68, 178, 6873),
2062    (68, 179, 6876),
2063    (68, 180, 6879),
2064    (69, 150, 6868),
2065    (69, 151, 6871),
2066    (69, 152, 6874),
2067    (69, 153, 6877),
2068    (69, 154, 6880),
2069    (69, 155, 6883),
2070    (69, 156, 6886),
2071    (69, 157, 6889),
2072    (69, 158, 6892),
2073    (69, 159, 6895),
2074    (69, 160, 6898),
2075    (69, 161, 6901),
2076    (69, 162, 6904),
2077    (69, 163, 6907),
2078    (69, 164, 6910),
2079    (69, 165, 6913),
2080    (69, 166, 6916),
2081    (69, 167, 6919),
2082    (69, 168, 6922),
2083    (69, 169, 6925),
2084    (69, 170, 6928),
2085    (69, 171, 6931),
2086    (69, 172, 6934),
2087    (69, 173, 6937),
2088    (69, 174, 6940),
2089    (69, 175, 6943),
2090    (69, 176, 6946),
2091    (69, 177, 6949),
2092    (69, 178, 6952),
2093    (69, 179, 6955),
2094    (69, 180, 6958),
2095    (69, 181, 6961),
2096    (70, 151, 6974),
2097    (70, 152, 6977),
2098    (70, 153, 6980),
2099    (70, 155, 6986),
2100    (70, 156, 6989),
2101    (70, 157, 6992),
2102    (70, 158, 6995),
2103    (70, 159, 6998),
2104    (70, 160, 7001),
2105    (70, 161, 7004),
2106    (70, 162, 7007),
2107    (70, 163, 7010),
2108    (70, 164, 7013),
2109    (70, 165, 7016),
2110    (70, 166, 7019),
2111    (70, 167, 7022),
2112    (70, 168, 7025),
2113    (70, 169, 7028),
2114    (70, 170, 7031),
2115    (70, 171, 7034),
2116    (70, 172, 7037),
2117    (70, 173, 7040),
2118    (70, 174, 7043),
2119    (70, 175, 7046),
2120    (70, 176, 7049),
2121    (70, 177, 7052),
2122    (70, 178, 7055),
2123    (70, 179, 7058),
2124    (70, 180, 7061),
2125    (70, 181, 7064),
2126    (70, 182, 7067),
2127    (70, 183, 7070),
2128    (70, 184, 7073),
2129    (70, 185, 7076),
2130    (71, 154, 7062),
2131    (71, 157, 7071),
2132    (71, 158, 7074),
2133    (71, 159, 7077),
2134    (71, 160, 7080),
2135    (71, 161, 7083),
2136    (71, 162, 7086),
2137    (71, 163, 7089),
2138    (71, 164, 7092),
2139    (71, 165, 7095),
2140    (71, 166, 7098),
2141    (71, 167, 7101),
2142    (71, 168, 7104),
2143    (71, 169, 7107),
2144    (71, 170, 7110),
2145    (71, 171, 7113),
2146    (71, 172, 7116),
2147    (71, 173, 7119),
2148    (71, 174, 7122),
2149    (71, 175, 7125),
2150    (71, 176, 7128),
2151    (71, 177, 7131),
2152    (71, 178, 7134),
2153    (71, 179, 7137),
2154    (71, 180, 7140),
2155    (71, 181, 7143),
2156    (71, 182, 7146),
2157    (71, 183, 7149),
2158    (71, 184, 7152),
2159    (71, 185, 7155),
2160    (71, 186, 7158),
2161    (71, 187, 7161),
2162    (71, 188, 7164),
2163    (72, 154, 7165),
2164    (72, 158, 7177),
2165    (72, 159, 7180),
2166    (72, 160, 7183),
2167    (72, 161, 7186),
2168    (72, 162, 7189),
2169    (72, 163, 7192),
2170    (72, 164, 7195),
2171    (72, 165, 7198),
2172    (72, 166, 7201),
2173    (72, 167, 7204),
2174    (72, 168, 7207),
2175    (72, 169, 7210),
2176    (72, 170, 7213),
2177    (72, 171, 7216),
2178    (72, 172, 7219),
2179    (72, 173, 7222),
2180    (72, 174, 7225),
2181    (72, 175, 7228),
2182    (72, 176, 7231),
2183    (72, 177, 7234),
2184    (72, 178, 7237),
2185    (72, 179, 7240),
2186    (72, 180, 7243),
2187    (72, 181, 7246),
2188    (72, 182, 7249),
2189    (72, 183, 7252),
2190    (72, 184, 7255),
2191    (72, 185, 7258),
2192    (72, 186, 7261),
2193    (72, 187, 7264),
2194    (72, 188, 7267),
2195    (73, 159, 7262),
2196    (73, 160, 7265),
2197    (73, 161, 7268),
2198    (73, 162, 7271),
2199    (73, 163, 7274),
2200    (73, 164, 7277),
2201    (73, 165, 7280),
2202    (73, 166, 7283),
2203    (73, 167, 7286),
2204    (73, 168, 7289),
2205    (73, 169, 7292),
2206    (73, 170, 7295),
2207    (73, 171, 7298),
2208    (73, 172, 7301),
2209    (73, 173, 7304),
2210    (73, 174, 7307),
2211    (73, 175, 7310),
2212    (73, 176, 7313),
2213    (73, 177, 7316),
2214    (73, 178, 7319),
2215    (73, 179, 7322),
2216    (73, 180, 7325),
2217    (73, 181, 7328),
2218    (73, 182, 7331),
2219    (73, 183, 7334),
2220    (73, 184, 7337),
2221    (73, 185, 7340),
2222    (73, 186, 7343),
2223    (73, 187, 7346),
2224    (73, 188, 7349),
2225    (73, 189, 7352),
2226    (73, 190, 7355),
2227    (73, 192, 7361),
2228    (73, 194, 7367),
2229    (74, 162, 7371),
2230    (74, 163, 7374),
2231    (74, 164, 7377),
2232    (74, 165, 7380),
2233    (74, 166, 7383),
2234    (74, 167, 7386),
2235    (74, 168, 7389),
2236    (74, 169, 7392),
2237    (74, 170, 7395),
2238    (74, 171, 7398),
2239    (74, 172, 7401),
2240    (74, 173, 7404),
2241    (74, 174, 7407),
2242    (74, 175, 7410),
2243    (74, 176, 7413),
2244    (74, 177, 7416),
2245    (74, 178, 7419),
2246    (74, 179, 7422),
2247    (74, 180, 7425),
2248    (74, 181, 7428),
2249    (74, 182, 7431),
2250    (74, 183, 7434),
2251    (74, 184, 7437),
2252    (74, 185, 7440),
2253    (74, 186, 7443),
2254    (74, 187, 7446),
2255    (74, 188, 7449),
2256    (74, 189, 7452),
2257    (74, 190, 7455),
2258    (74, 191, 7458),
2259    (74, 192, 7461),
2260    (74, 193, 7464),
2261    (74, 194, 7467),
2262    (74, 195, 7470),
2263    (74, 196, 7473),
2264    (74, 197, 7476),
2265    (75, 165, 7465),
2266    (75, 166, 7468),
2267    (75, 167, 7471),
2268    (75, 168, 7474),
2269    (75, 169, 7477),
2270    (75, 170, 7480),
2271    (75, 171, 7483),
2272    (75, 172, 7486),
2273    (75, 173, 7489),
2274    (75, 174, 7492),
2275    (75, 175, 7495),
2276    (75, 176, 7498),
2277    (75, 177, 7501),
2278    (75, 178, 7504),
2279    (75, 179, 7507),
2280    (75, 180, 7510),
2281    (75, 181, 7513),
2282    (75, 182, 7516),
2283    (75, 183, 7519),
2284    (75, 184, 7522),
2285    (75, 185, 7525),
2286    (75, 186, 7528),
2287    (75, 187, 7531),
2288    (75, 188, 7534),
2289    (75, 189, 7537),
2290    (75, 190, 7540),
2291    (75, 191, 7543),
2292    (75, 192, 7546),
2293    (75, 193, 7549),
2294    (75, 194, 7552),
2295    (75, 195, 7555),
2296    (75, 196, 7558),
2297    (75, 198, 7564),
2298    (76, 168, 7577),
2299    (76, 169, 7580),
2300    (76, 170, 7583),
2301    (76, 171, 7586),
2302    (76, 172, 7589),
2303    (76, 173, 7592),
2304    (76, 174, 7595),
2305    (76, 175, 7598),
2306    (76, 176, 7601),
2307    (76, 177, 7604),
2308    (76, 178, 7607),
2309    (76, 179, 7610),
2310    (76, 180, 7613),
2311    (76, 181, 7616),
2312    (76, 182, 7619),
2313    (76, 183, 7622),
2314    (76, 184, 7625),
2315    (76, 185, 7628),
2316    (76, 186, 7631),
2317    (76, 187, 7634),
2318    (76, 188, 7637),
2319    (76, 189, 7640),
2320    (76, 190, 7643),
2321    (76, 191, 7646),
2322    (76, 192, 7649),
2323    (76, 193, 7652),
2324    (76, 194, 7655),
2325    (76, 195, 7658),
2326    (76, 196, 7661),
2327    (76, 197, 7664),
2328    (76, 198, 7667),
2329    (76, 199, 7670),
2330    (76, 200, 7673),
2331    (76, 201, 7676),
2332    (76, 202, 7679),
2333    (77, 171, 7665),
2334    (77, 172, 7668),
2335    (77, 173, 7671),
2336    (77, 174, 7674),
2337    (77, 175, 7677),
2338    (77, 176, 7680),
2339    (77, 177, 7683),
2340    (77, 178, 7686),
2341    (77, 179, 7689),
2342    (77, 180, 7692),
2343    (77, 181, 7695),
2344    (77, 182, 7698),
2345    (77, 183, 7701),
2346    (77, 184, 7704),
2347    (77, 185, 7707),
2348    (77, 186, 7710),
2349    (77, 187, 7713),
2350    (77, 188, 7716),
2351    (77, 189, 7719),
2352    (77, 190, 7722),
2353    (77, 191, 7725),
2354    (77, 192, 7728),
2355    (77, 193, 7731),
2356    (77, 194, 7734),
2357    (77, 195, 7737),
2358    (77, 196, 7740),
2359    (77, 197, 7743),
2360    (77, 198, 7746),
2361    (77, 199, 7749),
2362    (77, 200, 7752),
2363    (77, 201, 7755),
2364    (77, 202, 7758),
2365    (77, 203, 7761),
2366    (77, 204, 7764),
2367    (77, 205, 7767),
2368    (78, 175, 7780),
2369    (78, 176, 7783),
2370    (78, 177, 7786),
2371    (78, 178, 7789),
2372    (78, 179, 7792),
2373    (78, 180, 7795),
2374    (78, 181, 7798),
2375    (78, 182, 7801),
2376    (78, 183, 7804),
2377    (78, 184, 7807),
2378    (78, 185, 7810),
2379    (78, 186, 7813),
2380    (78, 187, 7816),
2381    (78, 188, 7819),
2382    (78, 189, 7822),
2383    (78, 190, 7825),
2384    (78, 191, 7828),
2385    (78, 192, 7831),
2386    (78, 193, 7834),
2387    (78, 194, 7837),
2388    (78, 195, 7840),
2389    (78, 196, 7843),
2390    (78, 197, 7846),
2391    (78, 198, 7849),
2392    (78, 199, 7852),
2393    (78, 200, 7855),
2394    (78, 201, 7858),
2395    (78, 202, 7861),
2396    (78, 203, 7864),
2397    (78, 204, 7867),
2398    (78, 205, 7870),
2399    (79, 176, 7862),
2400    (79, 177, 311),
2401    (79, 178, 7868),
2402    (79, 179, 7871),
2403    (79, 180, 7874),
2404    (79, 181, 7877),
2405    (79, 182, 7880),
2406    (79, 183, 7883),
2407    (79, 184, 7886),
2408    (79, 185, 7889),
2409    (79, 186, 7892),
2410    (79, 187, 7895),
2411    (79, 188, 7898),
2412    (79, 189, 7901),
2413    (79, 190, 7904),
2414    (79, 191, 7907),
2415    (79, 192, 7910),
2416    (79, 193, 7913),
2417    (79, 194, 7916),
2418    (79, 195, 7919),
2419    (79, 196, 7922),
2420    (79, 197, 7925),
2421    (79, 198, 7928),
2422    (79, 199, 7931),
2423    (79, 200, 7934),
2424    (79, 201, 7937),
2425    (79, 202, 7940),
2426    (79, 203, 7943),
2427    (79, 204, 7946),
2428    (79, 205, 7949),
2429    (79, 206, 7952),
2430    (79, 207, 7955),
2431    (79, 208, 7958),
2432    (79, 209, 7961),
2433    (79, 210, 7964),
2434    (80, 179, 7974),
2435    (80, 180, 7977),
2436    (80, 181, 7980),
2437    (80, 182, 7983),
2438    (80, 183, 7986),
2439    (80, 184, 7989),
2440    (80, 185, 7992),
2441    (80, 186, 7995),
2442    (80, 187, 7998),
2443    (80, 188, 8001),
2444    (80, 189, 8004),
2445    (80, 190, 8007),
2446    (80, 191, 8010),
2447    (80, 192, 8013),
2448    (80, 193, 8016),
2449    (80, 194, 8019),
2450    (80, 195, 8022),
2451    (80, 196, 8025),
2452    (80, 197, 8028),
2453    (80, 198, 8031),
2454    (80, 199, 8034),
2455    (80, 200, 8037),
2456    (80, 201, 8040),
2457    (80, 202, 8043),
2458    (80, 203, 8046),
2459    (80, 204, 8049),
2460    (80, 205, 8052),
2461    (80, 206, 8055),
2462    (80, 207, 8058),
2463    (80, 208, 8061),
2464    (80, 209, 8064),
2465    (80, 210, 8067),
2466    (80, 211, 8070),
2467    (80, 212, 8073),
2468    (80, 213, 317),
2469    (80, 214, 8079),
2470    (80, 216, 8085),
2471    (81, 180, 8056),
2472    (81, 181, 8059),
2473    (81, 182, 8062),
2474    (81, 183, 8065),
2475    (81, 184, 8068),
2476    (81, 185, 8071),
2477    (81, 186, 8074),
2478    (81, 187, 8077),
2479    (81, 188, 8080),
2480    (81, 189, 8083),
2481    (81, 190, 8086),
2482    (81, 191, 8089),
2483    (81, 192, 8092),
2484    (81, 193, 8095),
2485    (81, 194, 8098),
2486    (81, 195, 8101),
2487    (81, 196, 8104),
2488    (81, 197, 8107),
2489    (81, 198, 8110),
2490    (81, 199, 8113),
2491    (81, 200, 8116),
2492    (81, 201, 8119),
2493    (81, 202, 8122),
2494    (81, 203, 8125),
2495    (81, 204, 8128),
2496    (81, 205, 8131),
2497    (81, 206, 8134),
2498    (81, 207, 8137),
2499    (81, 208, 8140),
2500    (81, 209, 8143),
2501    (81, 210, 8146),
2502    (81, 211, 8149),
2503    (81, 212, 8152),
2504    (81, 213, 8155),
2505    (81, 214, 8158),
2506    (81, 215, 8161),
2507    (81, 216, 8164),
2508    (81, 217, 8167),
2509    (81, 218, 8170),
2510    (82, 185, 8168),
2511    (82, 186, 8171),
2512    (82, 187, 8174),
2513    (82, 188, 8177),
2514    (82, 189, 8180),
2515    (82, 190, 8183),
2516    (82, 191, 8186),
2517    (82, 192, 8189),
2518    (82, 193, 8192),
2519    (82, 194, 8195),
2520    (82, 195, 8198),
2521    (82, 196, 8201),
2522    (82, 197, 8204),
2523    (82, 198, 8207),
2524    (82, 199, 8210),
2525    (82, 200, 8213),
2526    (82, 201, 8216),
2527    (82, 202, 8219),
2528    (82, 203, 8222),
2529    (82, 204, 8225),
2530    (82, 205, 8228),
2531    (82, 206, 8231),
2532    (82, 207, 8234),
2533    (82, 208, 8237),
2534    (82, 209, 8240),
2535    (82, 210, 8243),
2536    (82, 211, 8246),
2537    (82, 212, 8249),
2538    (82, 213, 8252),
2539    (82, 214, 8255),
2540    (82, 215, 8258),
2541    (82, 216, 8261),
2542    (82, 217, 8264),
2543    (82, 218, 8267),
2544    (82, 219, 8270),
2545    (82, 220, 8273),
2546    (83, 190, 8268),
2547    (83, 191, 8271),
2548    (83, 192, 8274),
2549    (83, 193, 8277),
2550    (83, 194, 8280),
2551    (83, 195, 8283),
2552    (83, 196, 8286),
2553    (83, 197, 8289),
2554    (83, 198, 8292),
2555    (83, 199, 8295),
2556    (83, 200, 8298),
2557    (83, 201, 8301),
2558    (83, 202, 8304),
2559    (83, 203, 8307),
2560    (83, 204, 8310),
2561    (83, 205, 8313),
2562    (83, 206, 8316),
2563    (83, 207, 8319),
2564    (83, 208, 8322),
2565    (83, 209, 8325),
2566    (83, 210, 8328),
2567    (83, 211, 8331),
2568    (83, 212, 8334),
2569    (83, 213, 8337),
2570    (83, 214, 8340),
2571    (83, 215, 8343),
2572    (83, 216, 8346),
2573    (83, 217, 8349),
2574    (83, 218, 8352),
2575    (83, 219, 8355),
2576    (83, 220, 8358),
2577    (83, 221, 8361),
2578    (83, 222, 8364),
2579    (83, 223, 8367),
2580    (83, 224, 8370),
2581    (84, 195, 8392),
2582    (84, 196, 8395),
2583    (84, 197, 8398),
2584    (84, 198, 8401),
2585    (84, 199, 8404),
2586    (84, 200, 8407),
2587    (84, 201, 8410),
2588    (84, 202, 8413),
2589    (84, 203, 8416),
2590    (84, 204, 8419),
2591    (84, 205, 8422),
2592    (84, 206, 8425),
2593    (84, 207, 8428),
2594    (84, 208, 8431),
2595    (84, 209, 8434),
2596    (84, 210, 8437),
2597    (84, 217, 8458),
2598    (84, 218, 8461),
2599    (84, 219, 8464),
2600    (84, 220, 8467),
2601    (84, 221, 8470),
2602    (84, 222, 8473),
2603    (84, 223, 8476),
2604    (84, 224, 8479),
2605    (84, 225, 8482),
2606    (84, 226, 8485),
2607    (84, 227, 8488),
2608    (85, 198, 8510),
2609    (85, 199, 8513),
2610    (85, 200, 8516),
2611    (85, 201, 8519),
2612    (85, 202, 8522),
2613    (85, 203, 8525),
2614    (85, 204, 8528),
2615    (85, 205, 8531),
2616    (85, 206, 8534),
2617    (85, 207, 8537),
2618    (85, 208, 8540),
2619    (85, 209, 8543),
2620    (85, 210, 8546),
2621    (85, 211, 8549),
2622    (85, 218, 8570),
2623    (85, 219, 8573),
2624    (85, 220, 8576),
2625    (85, 221, 8579),
2626    (85, 222, 8582),
2627    (85, 223, 8585),
2628    (85, 224, 8588),
2629    (85, 225, 8591),
2630    (85, 226, 8594),
2631    (85, 227, 8597),
2632    (85, 228, 8600),
2633    (85, 229, 8603),
2634    (86, 200, 8592),
2635    (86, 201, 8595),
2636    (86, 202, 8598),
2637    (86, 203, 8601),
2638    (86, 204, 8604),
2639    (86, 205, 8607),
2640    (86, 206, 8610),
2641    (86, 207, 8613),
2642    (86, 208, 8616),
2643    (86, 209, 8619),
2644    (86, 210, 8622),
2645    (86, 211, 8625),
2646    (86, 212, 8628),
2647    (86, 219, 8649),
2648    (86, 220, 8652),
2649    (86, 221, 8655),
2650    (86, 222, 8658),
2651    (86, 223, 8661),
2652    (86, 224, 8664),
2653    (86, 225, 8667),
2654    (86, 226, 8670),
2655    (86, 227, 8673),
2656    (86, 228, 8676),
2657    (86, 229, 8679),
2658    (86, 230, 8682),
2659    (86, 231, 8685),
2660    (87, 204, 8701),
2661    (87, 205, 8704),
2662    (87, 206, 8707),
2663    (87, 207, 8710),
2664    (87, 208, 8713),
2665    (87, 209, 8716),
2666    (87, 210, 8719),
2667    (87, 211, 8722),
2668    (87, 212, 8725),
2669    (87, 213, 8728),
2670    (87, 220, 8749),
2671    (87, 221, 8752),
2672    (87, 222, 8755),
2673    (87, 223, 8758),
2674    (87, 224, 8761),
2675    (87, 225, 8764),
2676    (87, 226, 8767),
2677    (87, 227, 8770),
2678    (87, 228, 8773),
2679    (87, 229, 8776),
2680    (87, 230, 8779),
2681    (87, 231, 8782),
2682    (87, 232, 8785),
2683    (88, 207, 8777),
2684    (88, 208, 8780),
2685    (88, 209, 8783),
2686    (88, 210, 8786),
2687    (88, 211, 8789),
2688    (88, 212, 8792),
2689    (88, 213, 8795),
2690    (88, 214, 8798),
2691    (88, 221, 8819),
2692    (88, 222, 8822),
2693    (88, 223, 8825),
2694    (88, 224, 8828),
2695    (88, 225, 8831),
2696    (88, 226, 8834),
2697    (88, 227, 8837),
2698    (88, 228, 8840),
2699    (88, 229, 8843),
2700    (88, 230, 8846),
2701    (88, 231, 8849),
2702    (88, 232, 8852),
2703    (88, 233, 8855),
2704    (88, 234, 8858),
2705    (88, 235, 8861),
2706    (89, 214, 8892),
2707    (89, 222, 8916),
2708    (89, 223, 8919),
2709    (89, 224, 8922),
2710    (89, 225, 8925),
2711    (89, 226, 8928),
2712    (89, 227, 8931),
2713    (89, 228, 8934),
2714    (89, 229, 8937),
2715    (89, 230, 8940),
2716    (89, 231, 8943),
2717    (89, 232, 8946),
2718    (89, 233, 8949),
2719    (89, 234, 8952),
2720    (89, 235, 8955),
2721    (89, 236, 8958),
2722    (89, 237, 8961),
2723    (90, 215, 8989),
2724    (90, 224, 9016),
2725    (90, 225, 9019),
2726    (90, 226, 9022),
2727    (90, 227, 9025),
2728    (90, 228, 9028),
2729    (90, 229, 9031),
2730    (90, 230, 9034),
2731    (90, 231, 9037),
2732    (90, 232, 9040),
2733    (90, 233, 9043),
2734    (90, 234, 9046),
2735    (90, 235, 9049),
2736    (90, 236, 9052),
2737    (90, 237, 9055),
2738    (90, 238, 9058),
2739    (90, 239, 9061),
2740    (91, 225, 9113),
2741    (91, 226, 9116),
2742    (91, 227, 9119),
2743    (91, 228, 9122),
2744    (91, 229, 9125),
2745    (91, 230, 9128),
2746    (91, 231, 9131),
2747    (91, 232, 9134),
2748    (91, 233, 9137),
2749    (91, 234, 9140),
2750    (91, 235, 9143),
2751    (91, 236, 9146),
2752    (91, 237, 9149),
2753    (91, 238, 9152),
2754    (91, 239, 9155),
2755    (91, 240, 9158),
2756    (91, 241, 9161),
2757    (92, 227, 9204),
2758    (92, 228, 9207),
2759    (92, 229, 9210),
2760    (92, 230, 9213),
2761    (92, 231, 9216),
2762    (92, 232, 9219),
2763    (92, 233, 9222),
2764    (92, 234, 9225),
2765    (92, 235, 9228),
2766    (92, 236, 9231),
2767    (92, 237, 9234),
2768    (92, 238, 9237),
2769    (92, 239, 9240),
2770    (92, 240, 9243),
2771    (92, 241, 9246),
2772    (92, 242, 9249),
2773    (92, 243, 9252),
2774    (93, 228, 9319),
2775    (93, 229, 9322),
2776    (93, 230, 9325),
2777    (93, 231, 9328),
2778    (93, 232, 9331),
2779    (93, 233, 9334),
2780    (93, 234, 9337),
2781    (93, 235, 9340),
2782    (93, 236, 9343),
2783    (93, 237, 9346),
2784    (93, 238, 9349),
2785    (93, 239, 9352),
2786    (93, 240, 9355),
2787    (93, 241, 9358),
2788    (93, 242, 9361),
2789    (93, 243, 9364),
2790    (93, 244, 9367),
2791    (93, 245, 9370),
2792    (94, 227, 9401),
2793    (94, 228, 9404),
2794    (94, 229, 9407),
2795    (94, 230, 9410),
2796    (94, 231, 9413),
2797    (94, 232, 9416),
2798    (94, 233, 9419),
2799    (94, 234, 9422),
2800    (94, 235, 9425),
2801    (94, 236, 9428),
2802    (94, 237, 9431),
2803    (94, 238, 9434),
2804    (94, 239, 9437),
2805    (94, 240, 9440),
2806    (94, 241, 9443),
2807    (94, 242, 9446),
2808    (94, 243, 9449),
2809    (94, 244, 9452),
2810    (94, 245, 9455),
2811    (94, 246, 9458),
2812    (94, 247, 9461),
2813    (95, 229, 9507),
2814    (95, 230, 9510),
2815    (95, 231, 9513),
2816    (95, 232, 9516),
2817    (95, 233, 9519),
2818    (95, 234, 9522),
2819    (95, 235, 9525),
2820    (95, 236, 9528),
2821    (95, 237, 9531),
2822    (95, 238, 9534),
2823    (95, 239, 9537),
2824    (95, 240, 9540),
2825    (95, 241, 9543),
2826    (95, 242, 9546),
2827    (95, 243, 9549),
2828    (95, 244, 9552),
2829    (95, 245, 9555),
2830    (95, 246, 9558),
2831    (95, 247, 9561),
2832    (95, 248, 9564),
2833    (95, 249, 9567),
2834    (96, 231, 9598),
2835    (96, 232, 9601),
2836    (96, 233, 9604),
2837    (96, 234, 9607),
2838    (96, 235, 9610),
2839    (96, 236, 9613),
2840    (96, 237, 9616),
2841    (96, 238, 9619),
2842    (96, 239, 9622),
2843    (96, 240, 9625),
2844    (96, 241, 9628),
2845    (96, 242, 9631),
2846    (96, 243, 9634),
2847    (96, 244, 9637),
2848    (96, 245, 9640),
2849    (96, 246, 9643),
2850    (96, 247, 9646),
2851    (96, 248, 9649),
2852    (96, 249, 9652),
2853    (96, 250, 9655),
2854    (96, 251, 9658),
2855    (96, 252, 9661),
2856    (97, 233, 9704),
2857    (97, 234, 9707),
2858    (97, 235, 9710),
2859    (97, 236, 9713),
2860    (97, 237, 9716),
2861    (97, 238, 9719),
2862    (97, 239, 9722),
2863    (97, 240, 9725),
2864    (97, 241, 9728),
2865    (97, 242, 9731),
2866    (97, 243, 9734),
2867    (97, 244, 9737),
2868    (97, 245, 9740),
2869    (97, 246, 9743),
2870    (97, 247, 9746),
2871    (97, 248, 9749),
2872    (97, 249, 9752),
2873    (97, 250, 9755),
2874    (97, 251, 9758),
2875    (97, 252, 9761),
2876    (97, 253, 9764),
2877    (97, 254, 9767),
2878    (98, 239, 9822),
2879    (98, 240, 9825),
2880    (98, 241, 9828),
2881    (98, 242, 9831),
2882    (98, 243, 9834),
2883    (98, 244, 9837),
2884    (98, 245, 9840),
2885    (98, 246, 9843),
2886    (98, 247, 9846),
2887    (98, 248, 9849),
2888    (98, 249, 9852),
2889    (98, 250, 9855),
2890    (98, 251, 9858),
2891    (98, 252, 9861),
2892    (98, 253, 9864),
2893    (98, 254, 9867),
2894    (98, 255, 9870),
2895    (98, 256, 9873),
2896    (99, 239, 9899),
2897    (99, 240, 9900),
2898    (99, 241, 9901),
2899    (99, 242, 9902),
2900    (99, 243, 9903),
2901    (99, 244, 9904),
2902    (99, 245, 9905),
2903    (99, 246, 9906),
2904    (99, 247, 9907),
2905    (99, 248, 9908),
2906    (99, 249, 9909),
2907    (99, 250, 9910),
2908    (99, 251, 9911),
2909    (99, 252, 9912),
2910    (99, 253, 9913),
2911    (99, 254, 9914),
2912    (99, 255, 9915),
2913    (99, 256, 9916),
2914    (99, 257, 9917),
2915    (99, 258, 9918),
2916    (100, 245, 9926),
2917    (100, 246, 9927),
2918    (100, 247, 9928),
2919    (100, 248, 9929),
2920    (100, 249, 9930),
2921    (100, 250, 9931),
2922    (100, 251, 9932),
2923    (100, 252, 9933),
2924    (100, 253, 9934),
2925    (100, 254, 9935),
2926    (100, 255, 9936),
2927    (100, 256, 9937),
2928    (100, 257, 9938),
2929    (100, 259, 9940),
2930    (100, 260, 9941),
2931    (101, 247, 9948),
2932    (101, 248, 9949),
2933    (101, 249, 9950),
2934    (101, 250, 9951),
2935    (101, 251, 9952),
2936    (101, 252, 9953),
2937    (101, 253, 9954),
2938    (101, 254, 9955),
2939    (101, 255, 9956),
2940    (101, 256, 9957),
2941    (101, 257, 9958),
2942    (101, 258, 9959),
2943    (101, 259, 9960),
2944    (101, 260, 9961),
2945    (101, 261, 9962),
2946    (101, 262, 9963),
2947    (102, 252, 9970),
2948    (102, 253, 9971),
2949    (102, 254, 9972),
2950    (102, 255, 9973),
2951    (102, 256, 9974),
2952    (102, 257, 9975),
2953    (102, 259, 9977),
2954    (102, 261, 9979),
2955    (102, 263, 9981),
2956    (102, 264, 9982),
2957    (103, 254, 9983),
2958    (103, 255, 9984),
2959    (103, 256, 9985),
2960    (103, 257, 9986),
2961    (103, 258, 9987),
2962    (103, 259, 9988),
2963    (103, 260, 9989),
2964    (103, 261, 9990),
2965    (103, 262, 9991),
2966    (103, 263, 9992),
2967    (103, 264, 9993),
2968    (103, 265, 9994),
2969    (103, 266, 9995),
2970    (104, 255, 455),
2971    (104, 257, 457),
2972    (104, 259, 459),
2973    (104, 261, 461),
2974    (104, 263, 463),
2975    (104, 264, 464),
2976    (104, 265, 465),
2977    (104, 266, 466),
2978    (104, 267, 467),
2979    (104, 268, 468),
2980    (105, 256, 556),
2981    (105, 257, 557),
2982    (105, 258, 558),
2983    (105, 260, 560),
2984    (105, 261, 561),
2985    (105, 262, 562),
2986    (105, 263, 563),
2987    (105, 264, 564),
2988    (105, 265, 565),
2989    (105, 266, 566),
2990    (105, 267, 567),
2991    (105, 268, 568),
2992    (105, 269, 569),
2993    (105, 270, 570),
2994    (106, 265, 665),
2995    (106, 267, 667),
2996    (106, 268, 668),
2997    (106, 269, 669),
2998    (106, 270, 670),
2999    (106, 271, 671),
3000    (106, 272, 672),
3001    (106, 273, 673),
3002    (107, 264, 764),
3003    (107, 265, 765),
3004    (107, 266, 766),
3005    (107, 267, 767),
3006    (107, 268, 768),
3007    (107, 269, 769),
3008    (107, 270, 770),
3009    (107, 271, 771),
3010    (107, 272, 772),
3011    (107, 273, 773),
3012    (107, 274, 774),
3013    (107, 275, 775),
3014    (107, 276, 776),
3015    (108, 268, 868),
3016    (108, 269, 869),
3017    (108, 270, 870),
3018    (108, 271, 871),
3019    (108, 272, 872),
3020    (108, 273, 873),
3021    (108, 279, 879),
3022    (109, 277, 977),
3023    (109, 278, 978),
3024    (110, 281, 1081),
3025    (110, 282, 1082),
3026    (110, 283, 1083),
3027    (110, 284, 1084),
3028    (111, 280, 1180),
3029    (111, 281, 1181),
3030    (111, 283, 1183),
3031    (112, 283, 1283),
3032    (112, 285, 1285),
3033    (113, 285, 1385),
3034    (113, 286, 1386),
3035    (113, 287, 1387),
3036    (113, 288, 1388),
3037    (113, 289, 1389),
3038    (113, 290, 1390),
3039    (114, 289, 1489),
3040    (115, 291, 1591),
3041];
3042
3043// Auto-generated by crates/endf-mat/scripts/regenerate_cendl_table.sh
3044// Source: https://www-nds.iaea.org/public/download-endf/CENDL-3.2/n/
3045// 259 entries from the CENDL-3.2 neutrons sublibrary, including free neutron.
3046// Format: (Z, A, MAT) — sorted by (Z, A). Re-run the regenerator if the
3047// upstream listing changes; do NOT edit by hand.
3048#[rustfmt::skip]
3049static CENDL_3_2_MAT_TABLE: &[(u32, u32, u32)] = &[
3050    (0, 1, 25),
3051    (1, 1, 125),
3052    (1, 2, 128),
3053    (1, 3, 131),
3054    (2, 3, 225),
3055    (2, 4, 228),
3056    (3, 6, 325),
3057    (3, 7, 328),
3058    (4, 9, 425),
3059    (5, 10, 525),
3060    (5, 11, 528),
3061    (6, 12, 625),
3062    (7, 14, 725),
3063    (8, 16, 825),
3064    (9, 19, 925),
3065    (11, 23, 1125),
3066    (12, 24, 1225),
3067    (12, 25, 1228),
3068    (12, 26, 1231),
3069    (13, 27, 1325),
3070    (14, 28, 1425),
3071    (14, 29, 1428),
3072    (14, 30, 1431),
3073    (15, 31, 1525),
3074    (16, 32, 1625),
3075    (16, 33, 1628),
3076    (16, 34, 1631),
3077    (16, 36, 1637),
3078    (20, 40, 2025),
3079    (22, 46, 2225),
3080    (22, 47, 2228),
3081    (22, 48, 2231),
3082    (22, 49, 2234),
3083    (22, 50, 2237),
3084    (24, 50, 2425),
3085    (24, 52, 2431),
3086    (24, 53, 2434),
3087    (24, 54, 2437),
3088    (25, 55, 2525),
3089    (26, 54, 2625),
3090    (26, 56, 2631),
3091    (26, 57, 2634),
3092    (26, 58, 2637),
3093    (27, 59, 2725),
3094    (28, 58, 2825),
3095    (28, 60, 2831),
3096    (28, 61, 2834),
3097    (28, 62, 2837),
3098    (28, 64, 2843),
3099    (29, 63, 2925),
3100    (29, 65, 2931),
3101    (30, 64, 3025),
3102    (30, 66, 3031),
3103    (30, 67, 3034),
3104    (30, 68, 3037),
3105    (30, 70, 3043),
3106    (31, 69, 3125),
3107    (31, 71, 3131),
3108    (32, 70, 3225),
3109    (32, 71, 3228),
3110    (32, 72, 3231),
3111    (32, 73, 3234),
3112    (32, 74, 3237),
3113    (32, 75, 3240),
3114    (32, 76, 3243),
3115    (32, 77, 3246),
3116    (32, 78, 3249),
3117    (33, 75, 3325),
3118    (33, 77, 3331),
3119    (33, 79, 3337),
3120    (34, 74, 3425),
3121    (34, 76, 3431),
3122    (34, 77, 3434),
3123    (34, 78, 3437),
3124    (34, 79, 3440),
3125    (34, 80, 3443),
3126    (34, 82, 3449),
3127    (36, 83, 3640),
3128    (36, 84, 3643),
3129    (36, 85, 3646),
3130    (36, 86, 3649),
3131    (36, 87, 3687),
3132    (36, 88, 3688),
3133    (37, 85, 3725),
3134    (37, 87, 3731),
3135    (38, 88, 3837),
3136    (38, 89, 3840),
3137    (38, 90, 3843),
3138    (39, 89, 3925),
3139    (39, 91, 3931),
3140    (40, 90, 4025),
3141    (40, 91, 4028),
3142    (40, 92, 4031),
3143    (40, 93, 4034),
3144    (40, 94, 4037),
3145    (40, 95, 4040),
3146    (40, 96, 4043),
3147    (41, 93, 4125),
3148    (41, 95, 4131),
3149    (42, 92, 4225),
3150    (42, 93, 4228),
3151    (42, 94, 4231),
3152    (42, 95, 4234),
3153    (42, 96, 4237),
3154    (42, 97, 4240),
3155    (42, 98, 4243),
3156    (42, 99, 4246),
3157    (42, 100, 4249),
3158    (43, 99, 4325),
3159    (44, 99, 4434),
3160    (44, 100, 4437),
3161    (44, 101, 4440),
3162    (44, 102, 4443),
3163    (44, 103, 4446),
3164    (44, 104, 4449),
3165    (44, 105, 4452),
3166    (45, 103, 4525),
3167    (45, 105, 4531),
3168    (46, 105, 4634),
3169    (46, 108, 4643),
3170    (47, 107, 4725),
3171    (47, 109, 4731),
3172    (48, 113, 4846),
3173    (49, 113, 4925),
3174    (49, 115, 4931),
3175    (50, 112, 5025),
3176    (50, 114, 5031),
3177    (50, 115, 5034),
3178    (50, 116, 5037),
3179    (50, 117, 5040),
3180    (50, 118, 5043),
3181    (50, 119, 5046),
3182    (50, 120, 5049),
3183    (50, 122, 5055),
3184    (50, 124, 5061),
3185    (50, 126, 5067),
3186    (50, 128, 5073),
3187    (51, 121, 5125),
3188    (51, 123, 5131),
3189    (51, 124, 5134),
3190    (51, 125, 5137),
3191    (51, 127, 5143),
3192    (52, 130, 5255),
3193    (53, 127, 5325),
3194    (53, 129, 5331),
3195    (53, 130, 5334),
3196    (53, 131, 5337),
3197    (53, 135, 5349),
3198    (54, 123, 5422),
3199    (54, 124, 5425),
3200    (54, 129, 5440),
3201    (54, 131, 5446),
3202    (54, 132, 5449),
3203    (54, 133, 5452),
3204    (54, 134, 5455),
3205    (54, 135, 5458),
3206    (54, 136, 5461),
3207    (55, 133, 5525),
3208    (55, 134, 5528),
3209    (55, 135, 5531),
3210    (55, 137, 5537),
3211    (56, 130, 5625),
3212    (56, 132, 5631),
3213    (56, 134, 5637),
3214    (56, 135, 5640),
3215    (56, 136, 5643),
3216    (56, 137, 5646),
3217    (56, 138, 5649),
3218    (57, 139, 5728),
3219    (58, 136, 5825),
3220    (58, 138, 5831),
3221    (58, 140, 5837),
3222    (58, 141, 5840),
3223    (58, 142, 5843),
3224    (58, 144, 5849),
3225    (59, 141, 5925),
3226    (60, 142, 6025),
3227    (60, 143, 6028),
3228    (60, 144, 6031),
3229    (60, 145, 6034),
3230    (60, 146, 6037),
3231    (60, 147, 6040),
3232    (60, 148, 6043),
3233    (60, 150, 6049),
3234    (61, 147, 6149),
3235    (61, 148, 6152),
3236    (61, 149, 6155),
3237    (62, 144, 6225),
3238    (62, 147, 6234),
3239    (62, 148, 6237),
3240    (62, 149, 6240),
3241    (62, 150, 6243),
3242    (62, 151, 6246),
3243    (62, 152, 6249),
3244    (62, 154, 6255),
3245    (63, 151, 6325),
3246    (63, 153, 6331),
3247    (63, 154, 6334),
3248    (63, 155, 6337),
3249    (64, 152, 6425),
3250    (64, 154, 6431),
3251    (64, 155, 6434),
3252    (64, 156, 6437),
3253    (64, 157, 6440),
3254    (64, 158, 6443),
3255    (64, 160, 6449),
3256    (66, 164, 6649),
3257    (67, 165, 6725),
3258    (72, 174, 7225),
3259    (72, 176, 7231),
3260    (72, 177, 7234),
3261    (72, 178, 7237),
3262    (72, 179, 7240),
3263    (72, 180, 7243),
3264    (73, 181, 7328),
3265    (74, 180, 7425),
3266    (74, 182, 7431),
3267    (74, 183, 7434),
3268    (74, 184, 7437),
3269    (74, 186, 7443),
3270    (79, 197, 7925),
3271    (82, 204, 8225),
3272    (82, 206, 8231),
3273    (82, 207, 8234),
3274    (82, 208, 8237),
3275    (83, 209, 8325),
3276    (90, 232, 9040),
3277    (92, 232, 9219),
3278    (92, 233, 9222),
3279    (92, 234, 9225),
3280    (92, 235, 9228),
3281    (92, 236, 9231),
3282    (92, 237, 9234),
3283    (92, 238, 9237),
3284    (92, 239, 9240),
3285    (92, 240, 9243),
3286    (92, 241, 9246),
3287    (93, 236, 9343),
3288    (93, 237, 9346),
3289    (93, 238, 9349),
3290    (93, 239, 9352),
3291    (94, 236, 9428),
3292    (94, 237, 9431),
3293    (94, 238, 9434),
3294    (94, 239, 9437),
3295    (94, 240, 9440),
3296    (94, 241, 9443),
3297    (94, 242, 9446),
3298    (94, 243, 9449),
3299    (94, 244, 9452),
3300    (94, 245, 9455),
3301    (94, 246, 9458),
3302    (95, 240, 9540),
3303    (95, 241, 9543),
3304    (95, 242, 9546),
3305    (95, 243, 9549),
3306    (95, 244, 9552),
3307    (97, 249, 9752),
3308    (98, 249, 9852),
3309];
3310
3311#[cfg(test)]
3312mod tests {
3313    use super::*;
3314
3315    #[test]
3316    fn test_mat_number_known_values() {
3317        assert_eq!(mat_number(92, 235), Some(9228));
3318        assert_eq!(mat_number(92, 238), Some(9237));
3319        assert_eq!(mat_number(26, 56), Some(2631));
3320        assert_eq!(mat_number(1, 1), Some(125));
3321        assert_eq!(mat_number(0, 1), Some(25)); // neutron
3322        assert_eq!(mat_number(94, 239), Some(9437));
3323    }
3324
3325    #[test]
3326    fn test_mat_number_tungsten() {
3327        assert_eq!(mat_number(74, 182), Some(7431));
3328        assert_eq!(mat_number(74, 183), Some(7434));
3329        assert_eq!(mat_number(74, 184), Some(7437));
3330        assert_eq!(mat_number(74, 186), Some(7443));
3331    }
3332
3333    #[test]
3334    fn test_mat_number_tin_expansion() {
3335        // Tin isotopes — NOT in the old 47-entry table, proves expansion works
3336        assert_eq!(mat_number(50, 120), Some(5049));
3337        assert_eq!(mat_number(50, 116), Some(5037));
3338        assert_eq!(mat_number(50, 118), Some(5043));
3339    }
3340
3341    #[test]
3342    fn test_mat_number_corrected_regressions() {
3343        // Regression tests for isotopes whose MAT values were incorrect in the
3344        // old hand-coded 47-entry table (off by one isotope offset each).
3345        // Correct values sourced from PLEIADES neutrons.list (ENDF/B-VIII.0).
3346
3347        // Cd-113: old table had 4849 (actually Cd-114), correct is 4846
3348        assert_eq!(mat_number(48, 113), Some(4846));
3349        assert_eq!(isotope_from_mat(4846), Some((48, 113)));
3350
3351        // Hf-177: old table had 7231 (actually Hf-176), correct is 7234
3352        assert_eq!(mat_number(72, 177), Some(7234));
3353        assert_eq!(isotope_from_mat(7234), Some((72, 177)));
3354
3355        // Hf-178: old table had 7234 (actually Hf-177), correct is 7237
3356        assert_eq!(mat_number(72, 178), Some(7237));
3357        assert_eq!(isotope_from_mat(7237), Some((72, 178)));
3358
3359        // W-182/183/184/186: old table was shifted by one isotope
3360        assert_eq!(mat_number(74, 182), Some(7431));
3361        assert_eq!(mat_number(74, 183), Some(7434));
3362        assert_eq!(mat_number(74, 184), Some(7437));
3363        assert_eq!(mat_number(74, 186), Some(7443));
3364    }
3365
3366    #[test]
3367    fn test_mat_number_unknown() {
3368        assert_eq!(mat_number(200, 400), None);
3369        assert_eq!(mat_number(0, 0), None);
3370    }
3371
3372    #[test]
3373    fn test_isotope_from_mat() {
3374        assert_eq!(isotope_from_mat(9228), Some((92, 235)));
3375        assert_eq!(isotope_from_mat(9237), Some((92, 238)));
3376        assert_eq!(isotope_from_mat(2631), Some((26, 56)));
3377        assert_eq!(isotope_from_mat(25), Some((0, 1))); // neutron
3378    }
3379
3380    #[test]
3381    fn test_isotope_from_mat_unknown() {
3382        assert_eq!(isotope_from_mat(9999), None);
3383        assert_eq!(isotope_from_mat(0), None);
3384    }
3385
3386    #[test]
3387    fn test_mat_roundtrip() {
3388        for &(z, a, mat) in ENDF_MAT_TABLE.iter() {
3389            assert_eq!(
3390                mat_number(z, a),
3391                Some(mat),
3392                "mat_number({}, {}) failed",
3393                z,
3394                a
3395            );
3396            assert_eq!(
3397                isotope_from_mat(mat),
3398                Some((z, a)),
3399                "isotope_from_mat({}) failed",
3400                mat
3401            );
3402        }
3403    }
3404
3405    #[test]
3406    fn test_table_size() {
3407        assert_eq!(ENDF_MAT_TABLE.len(), 535);
3408    }
3409
3410    #[test]
3411    fn test_known_isotopes_plutonium() {
3412        let pu = known_isotopes(94);
3413        assert_eq!(
3414            pu,
3415            vec![236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246]
3416        );
3417    }
3418
3419    #[test]
3420    fn test_known_isotopes_technetium() {
3421        // Tc (Z=43) is synthetic — no natural isotopes but has ENDF evaluations
3422        let tc = known_isotopes(43);
3423        assert_eq!(tc, vec![98, 99]);
3424    }
3425
3426    #[test]
3427    fn test_known_isotopes_iron() {
3428        let fe = known_isotopes(26);
3429        assert_eq!(fe, vec![54, 55, 56, 57, 58]);
3430    }
3431
3432    #[test]
3433    fn test_known_isotopes_unknown() {
3434        assert!(known_isotopes(200).is_empty());
3435        assert!(known_isotopes(119).is_empty());
3436    }
3437
3438    #[test]
3439    fn test_known_isotopes_superset_of_natural() {
3440        use crate::abundances::natural_isotopes;
3441        for z in 1..=92 {
3442            let natural_a: Vec<u32> = natural_isotopes(z).into_iter().map(|(a, _)| a).collect();
3443            let known_a = known_isotopes(z);
3444            for a in &natural_a {
3445                assert!(
3446                    known_a.contains(a),
3447                    "Z={z}, A={a} is natural but not in known_isotopes"
3448                );
3449            }
3450        }
3451    }
3452
3453    #[test]
3454    fn test_has_endf_evaluation() {
3455        assert!(has_endf_evaluation(94, 239)); // Pu-239
3456        assert!(has_endf_evaluation(92, 235)); // U-235
3457        assert!(!has_endf_evaluation(94, 999)); // no such isotope
3458        assert!(!has_endf_evaluation(200, 400));
3459    }
3460
3461    #[test]
3462    fn test_table_sorted() {
3463        for i in 1..ENDF_MAT_TABLE.len() {
3464            let (z1, a1, _) = ENDF_MAT_TABLE[i - 1];
3465            let (z2, a2, _) = ENDF_MAT_TABLE[i];
3466            assert!(
3467                (z1, a1) < (z2, a2),
3468                "Table not sorted at index {}: ({}, {}) >= ({}, {})",
3469                i,
3470                z1,
3471                a1,
3472                z2,
3473                a2
3474            );
3475        }
3476    }
3477
3478    #[test]
3479    fn test_mat_number_tendl_known_values() {
3480        // Shared isotopes — match ENDF/B-VIII.0
3481        assert_eq!(mat_number_tendl(92, 235), Some(9228));
3482        assert_eq!(mat_number_tendl(92, 238), Some(9237));
3483        assert_eq!(mat_number_tendl(72, 180), Some(7243));
3484        assert_eq!(mat_number_tendl(1, 1), Some(125));
3485        // TENDL-only — not present in ENDF/B-VIII.0
3486        assert_eq!(mat_number_tendl(100, 247), Some(9928)); // Fm-247
3487        assert_eq!(mat_number(100, 247), None);
3488    }
3489
3490    #[test]
3491    fn test_mat_number_tendl_es255_mismatch() {
3492        // Es-255 is the one documented MAT mismatch between ENDF/B-VIII.0 and TENDL-2023.
3493        // Both libraries have Es-255 evaluations but use different MAT numbers.
3494        assert_eq!(mat_number(99, 255), Some(9916));
3495        assert_eq!(mat_number_tendl(99, 255), Some(9915));
3496    }
3497
3498    #[test]
3499    fn test_tendl_table_size() {
3500        assert_eq!(TENDL_2023_MAT_TABLE.len(), 2300);
3501    }
3502
3503    #[test]
3504    fn test_tendl_table_sorted() {
3505        for i in 1..TENDL_2023_MAT_TABLE.len() {
3506            let (z1, a1, _) = TENDL_2023_MAT_TABLE[i - 1];
3507            let (z2, a2, _) = TENDL_2023_MAT_TABLE[i];
3508            assert!(
3509                (z1, a1) < (z2, a2),
3510                "TENDL table not sorted at index {}: ({}, {}) >= ({}, {})",
3511                i,
3512                z1,
3513                a1,
3514                z2,
3515                a2
3516            );
3517        }
3518    }
3519
3520    #[test]
3521    fn test_tendl_shared_isotopes_agree_except_es255() {
3522        // For every (Z, A) in both tables, MATs should agree — except the documented
3523        // Es-255 mismatch. Regression guard: if the TENDL table is regenerated and a
3524        // new MAT diverges from ENDF/B-VIII.0, this test fires so we can decide
3525        // whether the new mismatch is intentional.
3526        for &(z, a, endfb_mat) in ENDF_MAT_TABLE {
3527            if let Some(tendl_mat) = mat_number_tendl(z, a) {
3528                if z == 99 && a == 255 {
3529                    continue; // documented mismatch
3530                }
3531                assert_eq!(
3532                    tendl_mat, endfb_mat,
3533                    "MAT mismatch for (Z={z}, A={a}): ENDF/B-VIII.0={endfb_mat}, TENDL-2023={tendl_mat}"
3534                );
3535            }
3536        }
3537    }
3538
3539    #[test]
3540    fn test_mat_number_cendl_known_values() {
3541        // Ba isotopes — primary research target, full coverage.
3542        assert_eq!(mat_number_cendl(56, 136), Some(5643));
3543        assert_eq!(mat_number_cendl(56, 137), Some(5646));
3544        assert_eq!(mat_number_cendl(56, 138), Some(5649));
3545        // Hf controls — full match with ENDF/B-VIII.0.
3546        assert_eq!(mat_number_cendl(72, 177), Some(7234));
3547        assert_eq!(mat_number_cendl(72, 178), Some(7237));
3548        // U-238 — shared actinide reference.
3549        assert_eq!(mat_number_cendl(92, 238), Some(9237));
3550        // Free neutron — CENDL listing uses n_000-nn-1_0025.zip.
3551        assert_eq!(mat_number_cendl(0, 1), Some(25));
3552    }
3553
3554    #[test]
3555    fn test_mat_number_cendl_br_absent() {
3556        // CENDL-3.2 has no Br entries (Be → Bi → Bk in element list). This is a
3557        // material gap relative to the other four libraries; #515 (ENDF source
3558        // comparison research) keeps Br comparison at 5 libraries.
3559        assert_eq!(mat_number_cendl(35, 79), None);
3560        assert_eq!(mat_number_cendl(35, 81), None);
3561        assert!(known_isotopes_cendl(35).is_empty());
3562        assert!(!has_endf_evaluation_cendl(35, 79));
3563    }
3564
3565    #[test]
3566    fn test_known_isotopes_cendl_ba() {
3567        let ba = known_isotopes_cendl(56);
3568        assert_eq!(ba, vec![130, 132, 134, 135, 136, 137, 138]);
3569    }
3570
3571    #[test]
3572    fn test_known_isotopes_cendl_hf() {
3573        let hf = known_isotopes_cendl(72);
3574        assert_eq!(hf, vec![174, 176, 177, 178, 179, 180]);
3575    }
3576
3577    #[test]
3578    fn test_cendl_table_size() {
3579        assert_eq!(CENDL_3_2_MAT_TABLE.len(), 259);
3580    }
3581
3582    #[test]
3583    fn test_cendl_table_sorted() {
3584        for i in 1..CENDL_3_2_MAT_TABLE.len() {
3585            let (z1, a1, _) = CENDL_3_2_MAT_TABLE[i - 1];
3586            let (z2, a2, _) = CENDL_3_2_MAT_TABLE[i];
3587            assert!(
3588                (z1, a1) < (z2, a2),
3589                "CENDL table not sorted at index {}: ({}, {}) >= ({}, {})",
3590                i,
3591                z1,
3592                a1,
3593                z2,
3594                a2
3595            );
3596        }
3597    }
3598
3599    #[test]
3600    fn test_cendl_shared_isotopes_agree_with_endfb() {
3601        // CENDL-3.2 has no documented MAT divergences from ENDF/B-VIII.0 (unlike
3602        // TENDL-2023's Es-255 case). Regression guard: if the CENDL table is
3603        // regenerated and a new MAT diverges, this test fires so we can decide
3604        // whether the new mismatch is intentional.
3605        for &(z, a, endfb_mat) in ENDF_MAT_TABLE {
3606            if let Some(cendl_mat) = mat_number_cendl(z, a) {
3607                assert_eq!(
3608                    cendl_mat, endfb_mat,
3609                    "MAT mismatch for (Z={z}, A={a}): ENDF/B-VIII.0={endfb_mat}, CENDL-3.2={cendl_mat}"
3610                );
3611            }
3612        }
3613    }
3614}